修正日: 07/09/05
練習問題10
CalcBMIみたいなのを作ってみよう! その6
今回はローカライズについて説明します。ローカライズというのは英語のソフトを日本語にしたり、日本語のソフトを英語にしたりする作業のことです。今までは日本語のみでCalcBmiを作ってきましたが、体重の問題は世界共通(日本よりむしろ海外の方が大きな問題かも)、とりあえず英語にするだけで今までよりずっと多くの人に使ってもらうことができます。
ローカライズの方法はとても簡単です。ウィンドウなどのインターフェイスを作成するnibファイルはデフォルトでは「English.lproj」というフォルダに入っています。このフォルダを丸ごと複製し、複製したフォルダに「Japanese.lproj」という名前を付けます。
次に「Japanese.lproj」フォルダの中のファイルをXcodeのウィンドウにドラッグして登録します。「MainMenu~.nib」というファイル(拡張子の前に「~」がついているファイル)は「MainMenu.nib」のバックアップファイルで、登録したり編集する必要はありません。
→
後はEnglishのnibファイルを英語に、Japaneseのファイルを日本語にしてやればOKです。メニューの名前の付け方などはApple純正のアプリケーションを参考にしてください。
これだけでは物足りないのでもう一つ、「Localizable.strings」というファイルを追加します。これはプログラム中で使うメッセージなどをローカライズするためのソフトです。例えばBMIが18よりも低い時ウィンドウ上に「痩せ過ぎだよ」というメッセージを入れる場合どうすれば良いでしょうか。
[textField setStringValue:@"痩せ過ぎだよ"];
と書いてしまうと、英語版でも日本語のメッセージが表示されてしまいます(それ以前にプログラムに日本語を直接書込んでも、文字化けしてしまって正しく表示されませんが)。そのためにこのようなプログラム中で使うメッセージの類いはすべて「Localizable.strings」という別ファイルに分けておく必要があります。ファイルのサンプルをこちらからダウンロードしてください。
ファイルの中身はUTF-8形式のただのテキストファイルで、「"○○" = "××";」という形式になっています。左側がキーワードで右側がローカライズされたメッセージ、例えば「"River" = "河";」という感じになります。これをプログラム中で使うには「NSLocalizedString()」という関数を使います。
NSString *aRiver=NSLocalizedString(@"River",@"");
関数の最初の引き数は「Localizable.strings」のキー名、二番目の引き数はコメントです。コメントは何を書いても関数の結果には影響ありません。単なるメモです。
これでシステムの言語の優先順位に従って適切な文字を取り出すことができます。
というところで説明はおしまい。で、問題です。
- CalcBmiをローカライズして、英語と日本語のインターフェイスを付け加えてください。
- BMIが18より小さいとき、25よりも大きいとき、警告のメッセージをウィンドウ上に表示してください。
解答はこちら