ローカリゼーションとは?
自分が作ったアプリが人気になり、英語など他の言語にそのアプリを翻訳してもっと多くの人が使えるようにしたいと思うときが来るかもしれません。iOSのシステムは、ユーザー設定に基づきコンテンツを適切な言語で表示するなど、大方のローカリゼーションを行ってくれます。
アプリをローカライズする方法
Xcode 13では、ローカライゼーションをより簡単に行う方法があります。
Development language
の変更
開発言語とは、アプリの開発時に使用する言語のことを指します。まず、設定の内容を確認する必要があります:
プロジェクトファイルをクリックし、(ターゲットではなく)プロジェクトファイルを選択します。ローカリゼーションのセクションで、Development Language
が日本語なのか英語なのかを確認します。日本語の場合、設定は正しいので、何もする必要はありません。英語の場合、引き続き開発言語の変更のガイドに従ってください。
次に Xcode
を閉じ、.xcodeproj
ファイルを右クリックして選択し、このファイルの内容を表示する:
project.pbxproj
ファイルを見つけ、テキストエディターで開く。
developmentRegion
を検索し、ja
に変更する。
compatibilityVersion = "Xcode 9.3";
developmentRegion = en;
hasScannedForEncodings = 0;
上記のコードを以下に変更する
compatibilityVersion = "Xcode 9.3";
developmentRegion = ja;
hasScannedForEncodings = 0;
knownRegions
を検索する
knownRegions = (
en,
Base,
);
上記のコードを以下に変更する
knownRegions = (
ja,
en,
Base,
);
ファイルを保存して、再度 Xcode
を開く:
Development Language
が日本語に変更されているのをご確認いただけます
新しい言語の追加
- ファイルナビゲーター内のプロジェクトファイルをクリックします
- プロジェクトファイルをクリックします
- 情報タブを開いていることを確認してください
-
Localizations
セクションのプラスボタンをクリックしてください - 追加したい言語を選択してください
また、必ずスイッチ Use Base Internationalization
を有効にしてください
ストーリーボードのローカリゼーション
初期設定
ローカリゼーションを最初にセットアップするとき、Xcodeはあなたのためにすべての文字列を抽出してそれらをファイルに入れる作業を行います。ストーリーボードのローカリゼーションをセットアップするには:
- Storyboard ファイルを選択します。
- 右側のパネルで、
Localizations
セクションを探し、追加したい言語のオプションをオンにします。
これで、左側のファイルナビゲーターで、Storyboard ファイルを展開し、翻訳ファイルを確認できます:
Main.strings (English)
をクリックすると、原文と翻訳文のペアが表示されます:
/* Class = "UILabel"; text = "こんにちは"; ObjectID = "ok2-tj-BN9"; */
"ok2-tj-BN9.text" = "こんにちは";
さて、ok2-tj-BN9
は、Storyboard 上にあるUILabel
の要素IDです。ストーリーボードインターフェースに戻り、そのラベルを選択すると、その要素IDが表示されます:
また、.text
はその UILabel
のテキストプロパティを示しているにすぎません。
さぁ、これで翻訳済みのストリングを Main.strings (English)
に入れられるようになりました:
/* Class = "UILabel"; text = "こんにちは"; ObjectID = "ok2-tj-BN9"; */
"ok2-tj-BN9.text" = "Hello";
トランスレーションの追加
さらにトランスレーションを追加したい場合。 UIStoryboard
でエレメントのオブジェクトIDを見つけ、それを Main.strings (English)
ファイルに追加する。
エレメントが異なる場合、プロパティは同じではない:
//9rM-vm-U1g is an UITextField. Placeholder means placeholder.
"9rM-vm-U1g.placeholder" = "ユーザー名";
//GsY-2N-hIy is an UIButton, normalTitle means the title of the button at normal.
"GsY-2N-hIy.normalTitle" = "ボタン";
//BYZ-38-t0r is an UIViewController
"BYZ-38-t0r.title" = "登録画面";
文字列のローカライズ
文字列ファイルを作成する
command-Nを押し、Strings file
を作成する
ファイル Localizable.strings
に名前を付ける
Xcodeでそのファイルを選択し、右側のローカライズボタンを選択する。ポップアップで英語を選択する。次に、右側のパネルで、すべての言語を選択する。
全ての文字列を NSLocalizedString
に入れて下さい
この例では、元のコードは以下です:
@IBAction func actionPress(){
let alert = UIAlertController(title: "こんにちは", message: nil, preferredStyle: .alert)
let actionClose = UIAlertAction(title: "はい", style: .cancel, handler: nil)
alert.addAction(actionClose)
present(alert, animated: true, completion: nil)
}
@IBAction func actionPress(){
let alert = UIAlertController(title: NSLocalizedString("こんにちは", comment: ""), message: nil, preferredStyle: .alert)
let actionClose = UIAlertAction(title: NSLocalizedString("はい", comment: ""), style: .cancel, handler: nil)
alert.addAction(actionClose)
present(alert, animated: true, completion: nil)
}
コードファイルから文字列を抽出する
- Terminal を開く
-
cd
コマンドで.lproj
ファイルがある場所に移動し、以下のコマンドを実行する
find . -name \*.swift | xargs genstrings -o en.lproj
find . -name \*.swift | xargs genstrings -o ja.lproj
en.lproj
ファイルを開く:
ご覧の通り、すでにプログラムの文字列が含まれています:
/* No comment provided by engineer. */
"こんにちは" = "こんにちは";
/* No comment provided by engineer. */
"はい" = "はい";
これで、英語の訳を追加することができます:
/* No comment provided by engineer. */
"こんにちは" = "Hello";
/* No comment provided by engineer. */
"はい" = "Yes";
ローカリゼーションのデバッグ
シミュレーターの言語を変更する
シミュレーターの言語を変更するには、Edit Schemeをクリックします。
Options
タブを選択すると、Application Language
を編集できるようになります。
プログラムを英語で実行すると次のようになります:
ローカライズされていない文字列の確認方法:
再度、設定 Edit Scheme
のタブ Options
を開き、Show non-localized strings
をオンに切り替える。
この状態でプログラムをテストする。ローカライズされていない文字列があれば、コンソールにエラーが表示される:
Like this message:
localization[3921:116986] [strings] ERROR: pBD-R7-cpO.text not found in table Main of bundle CFBundle 0x7fdab8704210
実際のデバイスでアプリケーションの言語を変更する:
実際のデバイスでアプリケーションをテストしてから、アプリケーションの言語を切り替える必要がある。そのためには:
-
システム設定を開く
-
アプリの名前を見つけ、アプリの設定を開く
-
言語オプションをクリックする
-
言語を切り替える
-
これで、自分のアプリをテストすることが可能となります。