2012-03-03

iOSアプリの国際化(ローカリゼーション)

iOSのアプリを多言語対応させるには、NSLocalizedStringを使います。プロジェクトのコードに @"Hello World" という具合に文字列が使われているところを、NSLocalizedString(@"Hello World", @"comment") と書き換えます。
第2引数は単なるコメントなのでnilでも問題ありません。
第1引数の文字列をキーとして、多言語化が行われます。キー@"Hello World"に対応する翻訳がLocalizable.strings というファイルに記述されていない場合は、@"Hello World"というキーがそのまま使われることになります。

Localizable.stringsですが、これを生成するには、genstringsというコマンドを使うのが便利です。
ソースコードを記述してあるプロジェクトのソースコードを含んでいるディレクトリに移動して
find . -name '*.m' | xargs genstrings
を実行すると、.mファイルを検索してNSLocalizedStringと、CFCopyLocalizedStringを探し出して、Localizable.stringsを生成してくれます。
genstrings '*.m'
だけだとサブディレクトリを見てくれません。
あとは、Localizable.stringsをXcodeに加えて、ファイルをローカライズして、それぞれの文字列を翻訳して、ビルドします。
genstringsを複数回実行すると、以前に生成されたファイルが上書きされることになります。ファイルをローカライズしておけば別フォルダに移動するので、編集前にローカライズしておいた方が安全でしょう。

プロジェクトを開始したら、後で多言語対応しようと考えている部分はすべてNSLocalizedStringを使って記述することをおすすめします。翻訳自体は、プロジェクトが完成に近づいてきた頃に行うのが効率がいいと思います。

xibを使っている場合、その中に現れる文字列をどのように国際化するかということが問題となります。xibファイル自体を国際化することもできるのですが、これをやると管理が大変です。viewDidLoadで国際化する文字を再設定した方がいいでしょう。

あと、ホーム画面に表示されるアプリ名の国際化ですが、これはLocalizable.stringsではなく、InfoPlist.stringsでやります。
CFBundleDisplayName = "アプリ名";
といった具合です。

0 件のコメント: