開発メモ:ソースコード中文字列のローカライズ
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