動的な文字列作成処理をローカライズ対応する

| コメント(0) | トラックバック(0)
こんにちは。開発担当のICTFです。

あるエラーチェック処理で、各エラーが起きた際にユーザに表示するエラーメッセージを数百種類用意する事になりました。
メッセージ自体は定型的で、「xxxが間違っています。」と言った類いのものなので、xxxの箇所を動的に作成すればすぐ終わりそうな内容です。
例えばこんな感じに書けば終了ですね。

NSString* message = [NSString stringWithFormat:@"%@が間違っています。", sentence];

ただ今回はこのエラーメッセージをさらに他言語対応しなければなりませんでした。
現在の言語環境を取得し、各言語に対して上の例の様に文字列を作成する処理を記述すれば作れはするのですが、折角XCodeにはローカライズ対応の為の機能があるのですし、それを使って格好よく実装できないかと思っていました。
そこで、試しにstringWithFormatのフォーマット部分にNSLocalizedStringで得た文字列を渡してみたところ上手く動作しましたので、その手順を書いておこうと思います。

まず日本語と英語の2カ国語に対応する場合、ローカライズ用の2つのファイルが必要になります。
en.lproj/Localizable.strings  英語用
ja.lproj/Localizable.strings  日本語用
この辺りはマニュアルにも載っていますね。

次に英語用のLocalizable.stringsに次の記述を追加します。
"SYS_ERR001" = "%@ is incorrect.";
日本語用のLocalizeble.stringsには次の記述を追加します。
"SYS_ERR001" = "%@ が間違っています。";
%@は普通にフォーマットを指定して動的文字列を作成するときの%@と同じです。

使用法は以下の通りです。
NSString* message = [NSString stringWithFormat:NSLocalizedString("SYS_ERR001", nil), sentence];

これだけでメッセージを作る前に原語環境を調べたり、対応言語分の分岐を用意する必要は無くなります。

トラックバック(0)

トラックバックURL: http://www.ict-fractal.com/MovableType/mt/mt-tb.cgi/24

コメントする

Twitterボタン
Twitterブログパーツ