iosローカライズ

iOSプログラミングのローカライズに関する話題です。
ローカライズにはいくつかあります。

  • xib, storyboardなどのUI
  • コードを使ったUIのローカライズ
  • InfoPlistを使った項目などの設定

上2つはターゲットは同じUIですが, 上がxibやstoryboard上で直接操作するのに対して, 下はコードの中で部品のインスタンスパラメータを変更する
ことで挙動を変えます。

手順

  1. 言語の追加
  2. ローカライズファイルの追加(必要であれば)

というのが基本方針です。

コードを使ったUIのローカライズ

今回ははこれを取り上げましょう。storyboardやxibを直接ローカライズするとその度にUIとIBOutletなどをリンクする必要があるので
コードで動的に変更した方が簡単だなと最初思いました。

Localizable.strings

ローカライズ用のファイルを追加します。
Localizable.stringsです。
場所はどこでもいいです。Supporting Filesの下にでも置いておきましょう。
“右クリック” -> “New File” で, “iOS” -> “Resources” -> “Strings File”で名前はLocalizable.stringsです。

localizable.strings

これでファイルの準備はできました。

言語の追加

言語の追加を行います。
PROJECTのトップよりInfo

localize

“Localizations”のプラスボタンで追加できます。ここではまだ英語しか入ってません。

localized files

追加をすると, この画面が表示されます。いらないファイルは選択しなくてもいいわけです。

Localizable.stringsの編集

ここでは Key=Value; という形式で書きます。Localizable.strings(English), などと言語情報の入ったファイルが追加されていますのでそれを編集します
Localizable.strings(Japanese)などです日本語だと。

localized file list

例を挙げてみましょう。これは英語の場合です

NoItem="No Item";
Back="Back";
Memo="Memo";

日本語です

NoItem="メモがありません";
Back="戻る";
Memo="メモ";

コードでは

NSLocalizedStringを使います。

NSString str = NSLocalizedString(@"NoItem", nil);

NoItemというのはLocalizable.stringsで書いたKeyのことです。上の例だと英語では ”No Item”, 日本語では”メモがありません”
が返ってきます

storyboardとか, アプリ名なんかは別でやりたいと思います。