: O. Yuanying

ibtoolによるnibファイルのローカライズ

とりあえずCocoa初心者が、nibファイルのローカライズ方法をまとめてみた。

通常の方法

Cocoaアプリをローカライズする一番簡単な方法は、Xcode上からnibファイルのローカリゼーションを追加する方法だ。

まず、ローカライズしたいnibファイルを選択し、

nib001.png

「ローカリゼーションを追加」を選択する。

nib002.png

そして最後に、できあがったnibファイルを、その言語用に編集する。

nib003.png

ただ、この方法にはとても気持ち悪い問題がある。

例えば、元のnibファイルを編集してユーザインタフェースを変更した場合、同じ修正を別言語のnibファイルに行うか、一旦、別言語のnibファイルを削除して、もう一度ローカライズを行わなければならない。

これはひどい。

Subversionとの相性も最悪で、どうしようかと悩んでいるところにibtoolを知った。

ibtool

ibtoolを使うと以下の流れでローカライズを行うことができる。

  1.  nibファイルから文字列の取り出し
  2.  取り出した文字列をローカライズ
  3.  ローカライズした文字列から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を通常の方法と同様に、ローカリゼーションを追加する。

日本語のリソースを追加。

追加された言語環境(この場合は日本語)に翻訳する。

nib005.png

ローカライズした文字列から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ファイルを生成し直すのは面倒なので、最後のステップを自動化する。

まず、プロジェクトのターゲットを選択し、新規スクリプトを実行を追加する。

nib006.png

追加したビルドフェーズを、ビルドの一番最初に持ってくる。

nib007.png

スクリプトの編集を行い、以下のスクリプトを追加する。

ibtool --write Japanese.lproj/MainMenu.nib -d Japanese.lproj/MainMenu.nib.strings English.lproj/MainMenu.nib

nib008.png

以上でビルドを行うたびにEnglish.lproj/MainMenu.nibからJapanese.lproj/MainMenu.nibが生成されるようになった。

もっと簡単に

iLingualっていうソフトが使いやすそう。シェアウェアなのでまだ使ったこと無いけど。

よくある翻訳を、Appleの純正ソフトウェアから学習できるってのがいいかも。これがあるだけで一般的なメニューの翻訳はだいぶ楽になるなー。3000円か…。同じようなツールを自分で作る?