地域化(ローカライゼーション, Localization, l10n)とか国際化(インターナショナライゼーション, Internationalization, i18n)とか多言語化(マルチリンガライゼーション, multilingualization, m17n)とかいろいろ言い方があってそれぞれ意味が微妙に異なるようですが、IT用語集を調べるとそれぞれ違うことが書いてあるので、何と呼ぶかは気にしないことにします。
私は開発中は全て文字列を英語で書いておいて、最後に日本語化をするようにしています。
1. 多言語化が必要な文字列をNSLocalizedString()コールに置き換える
多言語化が必要な文字列を検索(Command+F, Command+Shift+F, 目で追うなど状況により早い方法で)していって、文字列リテラルをNSLocalizedString()に置き換えていきます。必要に応じて、2番目の引数で、後で翻訳する際にどんな文脈で使う文字列かがわかりやすいようにコメントをつけておきます。
NSString *NSLocalizedString(NSString *key, NSString *comment)
例
NSString *message = @"Welcome!";
↓
NSString *message = NSLocalizedString(@"Welcome!", @"Welcome message at the startup");
私はURLやリソースファイルの名前などの文字列も、同じようにNSLocalizedString()を使ってそれぞれの言語毎にURLを変えるようにしてしまっています。(これが正しい方法かどうかはわかりませんが。)
NSString *url = NSLocalizedString(@"http://example.com/about_en.html", @"About page URL"); UIImage *img = [UIImage imageNamed:NSLocalizedString(@"next_en.png", @"Next button image file name")];
2. genstringsコマンドを実行して、Localizable.stringsファイルを生成する
Terminalを開いて、プロジェクトのディレクトリに移動し、genstringsコマンドを実行します。
ソースコードが一つのディレクトリに入っている場合は、そのディレクトリに移動して次のコマンドを実行。
genstrings *.m
ディレクトリに分かれている場合は、プロジェクトのトップディレクトリから次のコマンドを実行してまとめて作成できます。
genstrings `find . -name '*.m'`
※Localizable.stringsファイルが既に存在する場合は、genstringsコマンドで強制的に上書きされてしまうので注意。既存のファイルに追加する場合は、-aオプションをつけるとAppendされるけど、マージされるわけではないので重複したキーがある場合はこれも注意。
3. Localizable.stringsファイルをプロジェクトに追加
Localizable.stringsを生成した場所をFinderで開いて、Resourcesグループにドラッグ&ドロップして追加します。このときに、文字コードをUnicode (UTF-16)にする必要があるみたいです。
4. Localizable.stringsファイルをローカライズ可能にする
XCodeでLocalizable.stringsファイルを右クリックして、Get Infoを選び、Generalタブの下の方にある"Make File Localizable"ボタンを押します。
再度Generalタブを選ぶと、Englishが既に入っています。"Add Localization"ボタンを押し、ローカライズする言語(今回は"Japanese")を選んでAddボタンを押します。
XcodeではこれでLocalizable.stringsの左に▼がついて、その下にEnglishとJapaneseができているので、Japaneseの方を日本語化していきます。
プロジェクトディレクトリをFinderで開いてみると、実態は、English.lprojとJapanese.lprojというディレクトリができていて、その下にそれぞれのLocalizable.stringsファイルが入っていました。
5. 翻訳
Localizable.stringsのJapaneseを開いてみると、下のような形式になっているので、=の右側を日本語に翻訳していきます。
/* Welcome message at the startup */ "Welcome!" = "Welcome!";
↓
/* Welcome message at the startup */ "Welcome!" = "ようこそ";
Englishの方はそのままにしておけばOKです。
6. 実行
実機でもシミュレータでも、iOSの設定で言語を切り替えて実行すると、それに合わせてアプリ内の言語が自動的に切り替わります。
7. アプリアイコンの下のタイトルのローカライズ
アプリの下に表示されるタイトルをローカライズするには、InfoPlist.stringsというファイルをXcodeプロジェクトに追加して、これを翻訳することになります。[アプリ名]-Info.plistをローカライズ可能にして翻訳してみたのですが、それではだめみたいで、うまくいきませんでした。
XcodeのResourcesグループを右クリックして、Add -> New File...を選び、Mac OS XのResourceの中にあるStrings Fileを選んで、InfoPlist.stringsという名前で追加します。(名前も必ずInfoPlist.stringsでないとダメみたい。)
次に、追加されたInfoPlist.stringsを右クリックして、Get Infoを選び、念のためFile EncodingをUnicode (UTF-16)に変えて、Make File Localizableボタンを押して、上と同様に日本語を追加します。
アプリのタイトルを変更するには、CFBundleDisplayNameを各言語でそれぞれ設定します。
CFBundleDisplayName = "アプリ名";
8. Xibファイルのローカライズ
*.xibファイルも、上の4と同様に、Get Info→"Make File Localizable"でローカライズを追加し、InterfaceBuilderで必要な箇所を翻訳します。
xibファイルそのものをローカライズせず、コードの方でNSLocalizedString()でローカライズする方法もあるので、状況によって都合のよい方法を選べます。





