タイトル今から始めるCocoaプログラミング》文書ファイルを扱うアプリケーションを作る(補足)NSBundle(2)カテゴリーテキスト/フォント, Cocoa, 今から始めるCocoaプログラミング
作成日2002/2/4 15:22:59作成者新居雅行
――――ローカライズ文字列の実際
こうしたテーブルのひな形を作成してくれるコマンドがあり、それを利用するのが手軽である。一方、作成されたアプリケーションのパッケージに、テーブルとなるファイルがなければならないので、事実上はそのファイルはProject Builderに登録しておかなければならない。こうした一連の作業を行なうには、手順的には次のようになるだろう。
たとえば、ある変数に文字列を入力している以下のような部分があるとする。

String s = "Please Input";

まず、この部分を、次のように、ローカライズ文字列対応のメソッドを通すようにして得られるようにする。

String s = NSBundle. localizedString ("Please Input", "Comment1");

このように、NSBundleのクラスメソッドでlocalizedStringメソッドを通すようにしておくのである。2つ目の引数は適当でかまわないが、後で、テーブルのファイルのどこにでてくるかを確認してもらいたい。
続いて、Terminalで以下のようにコマンドを実行する。ここで、カレントディレクトリは、プロジェクトの存在するディレクトリだとする。上記のステートメントがソースファイルは、プロジェクトのフォルダのルートにあるとする。そこで、ソースをもとに、英語を日本語に変換するテーブルをファイルのひな形を生成する。

% genstrings -j -o Japanese.lproj/Localizable.strings PreferencesWindow.java

ここで、genstringsというコマンドを使うのだが、このコマンドにはマニュアルがない。そこで、単にこのコマンド名だけを入力すれば、ヘルプ表示がされ、もちろん参考にはなるが、間違いもあるようで、気をつける必要がある。このコマンドは、本来はObjective-C向けであるが、-jオプションをつけることで、Javaのソースにも適用きる。そして、引数に指定したソースファイルから、localizedString等のメソッドをさがして、その文字列の対応表を、-oオプションで指定したファイルに書き出すのである。いずれにしても、以上の操作で、プログラムのソースファイルからlocalizedStringメソッドを使っている部分を探し出し、文字列変換のテーブルを行うための日本語リソースとしてのLocalizable.stringsファイルが出来上がった。
続いて、こうして作成されたファイルを、Project Builderで、プロジェクトに登録する。「プロジェクト」メニューから「ファイルを追加」(Command+otption+A)を選択する。そして、genstringsコマンドで生成したテーブルファイルを選択する。

◇Localizable.stringsを選択する
 

すると、プロジェクトにLocalizable.stringsファイルが加わるが、この項目は、言語対応となっており、その下位の項目に、Japaneseが含まれている。これをクリックして、右側でそのファイルの内容を修正すればよい。最初は「”Please Input” = “Please Input”;」のようになっているが、そのイコールの右側を日本語に書き換えればよい。

◇Localizable.stringsの日本語対応テーブルを編集した
 

なお、文字列の書き換え作業は、エディタで行ってもいいのであるが、このファイルはいずれにしても、プロジェクトに登録しておく必要があるので、Project Builderで編集作業をするのが手軽だろう。日本語はシフトJISコードでかまわないようである。
ここで、もとのlocalizedStringメソッドの2つ目の引数は、テーブルファイルの中で、コメントとして見えているのがわかる。だから、テーブルを後で編集しやすくするために、適当なコメントを作っておけばいいということである。
こうしておけば、さきほどのソースのStiringクラスの文字列sでは、英語だと「Please Input」、日本語だと「入力して下さい」という文字列になるのである。LocalizedStringメソッドでテーブル名を指定しない場合には、自動的に、Localizable.stringsファイルから参照されるということになっている。なお、英語の場合は、English.lprojフォルダにあるLocalizable.stringsファイルを参照するはずであるが、そのファイルが存在しないので、もともとの「Please Input」という文字列のままになるということである。日本語だと、Localizable.stringsが存在するので、それに従って変換作業が行なわれるということである。

――――Localizable.strings以外のテーブルを使用する
なお、NSBundleのlocalizedStringメソッドでテーブル名を指定するメソッドもある。ただし、このメソッドは、genstringsコマンドではエラーとなるので、このコマンドのサポートは受けられない。ただし、同一言語でさらに状況に応じてメッセージを切り替えたいときには、複数のテーブルファイルを使うことも必要だろう。このとき、

String s = NSBundle. localizedString ("Please Input", "MyTable", "Comment1");

としておくと、たとえば日本語なら、Japanese.lprojフォルダにあるMyTable.stringsというテーブルファイルを参照して置き換えを行うというように動作をする。従って、プロジェクトの中のJapanase.lprojフォルダにMyTable.stringsファイルを作っておき、それをプロジェクトに登録をしておかなければならないということになる。
(この項、以上)
関連リンク