開発メモ:ソースコード中文字列のローカライズ

 OS Xでは、ソースコード中の文字列をローカライズする仕組みとして「Stringsファイル」というものが用意されている。これは、ソースコード中で使用する文字列データをリソースフォルダ中のStringsファイル(拡張子は.string)からロードする仕組みで、言語環境に会わせて使用するStringsファイルを切り替えることで、それぞれの言語に合わせた文字列を選択できるようにするものだ。

 なお、詳細なドキュメントとしてはADCの Internationalization Programming Topics: Strings Files があるので、こちらも参照すべし。

Stringsファイルの構造

 Stringsファイルの構造は次のようになっている。

/* Insert Element menu item */
"Insert Element" = "Insert Element";
/* Error string used for unknown error types. */
"ErrorString_1" = "An unknown error occurred.";

 「/*」〜「*/」ガコメントで、続いて「”キー” = “文字列”」というデータが並ぶ構造となっている。Stringsファイルはアプリケーションバンドルの「<言語名>.lproj」ディレクトリ以下に収納されている。ちなみにデフォルトのStringsファイル名は「Localizable.strings」だが、任意の名前を付けることが可能。

Stringsファイルから文字列をロードする

 Strginsファイルから文字列を取り出すには、下記の関数を利用できる、

  • Core Foundation macros:

  • CFCopyLocalizedString

  • CFCopyLocalizedStringFromTable

  • CFCopyLocalizedStringFromTableInBundle

  • CFCopyLocalizedStringWithDefaultValue

  • Foundation macros:

  • NSLocalizedString

  • NSLocalizedStringFromTable

  • NSLocalizedStringFromTableInBundle

  • NSLocalizedStringWithDefaultValue

 たとえばデフォルトStringsファイル(Localizable.strings)中に下記のような記述があったとする。

/* A comment */
"Yes" = "はい";

 この場合、下記のようにしてローカライズ文字列を読み出せる。

NSString* theString;
theString = NSLocalizedString (@"Yes", @"A comment");

 なお、NSLocalizedStringの第2引数は省略可能。また、Localizable.strings以外のStringsファイルからテキストをロードしたい場合はNSLocalizedStringFromTableを利用する。

Stringsファイルを作成するツール

 ローカライズする文字列を抜き出すためのツールとして、「genstrings」というものがある。たとえば、下記のように実行すると、カレントディレクトリ以下の*.mファイルからローカライズすべきテキストを抜き出し、Japanese.lprojディレクトリ以下のLocalizable.stringsファイルに書き出すとともに、*.mファイル中のテキスト文字列を「NSLocalizedString(@”文字列”, @”)に置き換えてくれる。

genstrings -o Japanese.lproj *.m