HandBrake日本語版開発日誌(1/5)

  1/1の記事 で紹介したgenstringsを使ってソースコード中のテキスト文字列をローカライズしていたんだけど、genstringsではすべての文字列を抜き出してStringsファイルを作ってくれるわけではない(当たり前だが)。というか、genstringsはどちらかというとソースコード中でNSLocalizedString()を使っている個所からテキストを抜き出す、というのがメインの目的のようだ。ということで、genstringsで自動的に抜き出してくれた以外のテキストを検索し、NSLocalizedString()に置き換える作業を行う。

 ただし、すべてをNSLocalizedString()に置き換えてしまうとどのテキストがどこで呼ばれているのか分からなくなるので、適宜コメントを入れたり、テーブル(=テキストデータが格納されているStringsファイル)を適宜分けたりして対処する。ちなみにNSLocalizedString()の引数は下記のとおり。

NSLocalizedString( @"キー", @"コメント" )

 この「コメント」の部分に入れたコメントは、genstringsが自動的にStringsファイル中にコメントとして埋め込んでくれる。なお、NSLocalizedString()は<言語>.lprojディレクトリ以下の「Localizable.strings」というファイルからテキストを読み出す。別のStringsファイルからテキストを読み出したい場合はNSLocalizedStringFromTable()を使えばよい。

NSLocalizedStringFromTable( @"キー", @"Stringsファイル名", @"コメント" )

NSLocalizedStringFromTable()は、第2引数で指定したファイルからキーに対応するテキストを読み出す。なお、Stringsファイルの拡張子は「.strings」で、拡張子を除いた部分を第2引数に指定する。

 今回、HandBrakeの日本語化ではソースファイルごとに別のStringsファイルにテキストを格納することにし、さらに全アプリケーションで共通に呼び出されるテキストはLocalizable.stringsに格納することにした。

 なお、これらの作業(どのファイルにどのテキストリソースを保存するのかの決定)は翻訳作業を行う前に行っておくべきである。自分は翻訳作業に手を付けて始めてからテキストリソースの多さに気付き分割を行ったが、genstringsツールにはすでに翻訳していたテキストをマージする機能がないため、別途スクリプトを作って翻訳済みテキストをマージする羽目になった。