ibtoolによるnibファイルのローカライズ
とりあえずCocoa初心者が、nibファイルのローカライズ方法をまとめてみた。
通常の方法
Cocoaアプリをローカライズする一番簡単な方法は、Xcode上からnibファイルのローカリゼーションを追加する方法だ。
まず、ローカライズしたいnibファイルを選択し、
「ローカリゼーションを追加」を選択する。
そして最後に、できあがったnibファイルを、その言語用に編集する。
ただ、この方法にはとても気持ち悪い問題がある。
例えば、元のnibファイルを編集してユーザインタフェースを変更した場合、同じ修正を別言語のnibファイルに行うか、一旦、別言語のnibファイルを削除して、もう一度ローカライズを行わなければならない。
これはひどい。
Subversionとの相性も最悪で、どうしようかと悩んでいるところにibtoolを知った。
ibtool
ibtoolを使うと以下の流れでローカライズを行うことができる。
- nibファイルから文字列の取り出し
- 取り出した文字列をローカライズ
- ローカライズした文字列からnibファイルを生成
nibファイルから文字列の取り出し
以下のコマンドをプロジェクトのルートディレクトリで行うことでnibファイルから文字列を取り出すことができる。
[yuanying@Magnus test]$ ibtool --generate-stringsfile English.lproj/MainMenu.nib.strings English.lproj/MainMenu.nib
出来上がったMainMenu.nib.stringsファイルはXcodeのResourceグループにドラッグアンドドロップして、プロジェクトに追加しておく。
生成されたMainMenu.nib.stringsのエンコードは Unicode (UTF-16LE)
なので、Xcodeで開いて文字化けする場合は、文字コードを設定する。
取り出した文字列をローカライズ
生成されたMainMenu.nib.stringsを通常の方法と同様に、ローカリゼーションを追加する。
追加された言語環境(この場合は日本語)に翻訳する。
ローカライズした文字列からnibファイルを生成
翻訳した文字列から、その言語用のnibファイルを生成する。
[yuanying@Magnus test]$ ibtool --write Japanese.lproj/MainMenu.nib -d Japanese.lproj/MainMenu.nib.strings English.lproj/MainMenu.nib
この例だと、English.lproj/MainMenu.nibを利用して、Japanese.lproj/MainMenu.nib.stringsからJapanese.lproj/MainMenu.nibを生成してる。
自動化
インタフェース(English.lproj/MainMenu.nib)を変更するたびにibtoolを使って日本語用のnibファイルを生成し直すのは面倒なので、最後のステップを自動化する。
まず、プロジェクトのターゲットを選択し、新規スクリプトを実行を追加する。
追加したビルドフェーズを、ビルドの一番最初に持ってくる。
スクリプトの編集を行い、以下のスクリプトを追加する。
ibtool --write Japanese.lproj/MainMenu.nib -d Japanese.lproj/MainMenu.nib.strings English.lproj/MainMenu.nib
以上でビルドを行うたびにEnglish.lproj/MainMenu.nibからJapanese.lproj/MainMenu.nibが生成されるようになった。
もっと簡単に
iLingualっていうソフトが使いやすそう。シェアウェアなのでまだ使ったこと無いけど。
よくある翻訳を、Appleの純正ソフトウェアから学習できるってのがいいかも。これがあるだけで一般的なメニューの翻訳はだいぶ楽になるなー。3000円か…。同じようなツールを自分で作る?