アプリケーションのローカライズとは
iPhoneアプリケーションはテンプレートから作成した初期段階では、英語にしか対応しません。 システム側が用意しているボタンであれば、そのままでも表示がユーザーの使用言語により変化するものもあります。 でもラベルなどでユーザーの使用する言語により表示内容を変更する場合には、ローカライズを行わなければなりません。
標準言語の変更
まず第一に、そのアプリケーションを日本語のユーザーのみが使う場合を考えてみましょう。 この場合、ユーザーインターフェースの表示は全部日本語で作っているでしょうから、 info.plistファイルに手を加えるだけで事足ります。 Localization native development regionキーの値をJapanに、Localizationsキーの値をJapaneseに変更しましょう。
複数言語への対応
では標準の言語は英語、さらに日本語にも対応させるとすると、どうすれば良いでしょうか。この場合には2種類の方法があります。
言語ごとにnibファイルを用意する
ユーザーインターフェース部分を全てInterface Builderで構築していて、Xcode側では一切変更していない場合には、 nibファイルを言語ごとに用意して、それをユーザーの使用言語に従って切り替える方法が単純で良いでしょう。 Xcodeの左側のリストからnibファイルを選択し、情報を見るを選びます。一般タブの表示項目の下のほうに、 「ファイルをローカライズ可能にする」というボタンがあります。 これを押し、英語のほかに日本語のローカリゼーションを追加します。 ローカライズ可能なリソースはXcode左のリストで展開できるようになり、そこに各言語のファイルが表示されます。 Japaneseのほうをダブルクリックすれば、日本語用のnibファイルが開きますので、 その中の表示を全て日本語にしてしまいましょう。ただこの場合、インターフェイスを変更する必要がある場合に、 それぞれの言語用のファイルで同じ作業を何回もしなければならないので作業量が多くなります。
Xcode側で表示を切り替える
Xcode側でインターフェースに変更を加えたり、そもそもインターフェースの構築にInterface Builderを使っていない場合は、 上の方法は使えないのでこちらの方法を使います。 まず下準備として、リソースにLocalizable.stringsファイルを追加します。 ファイルを作るにはメニューのファイルから「新規ファイル...」を選び、 表示されたダイアログ左のリストの下から2番目にある「Other」を選び、右上のリストをスクロールさせた下のほうにある、 「Strings File」を選びます。ファイル名は前述の通り、Localizable.stringsです。 (これは現在のiPhone SDK 3.1.2の場合であり、今後のSDKで変更になるかもしれません。) さきほどと同様に、このファイルを各言語用に用意するため情報の一般タブで「ファイルをローカライズ可能にする」を押し、 必要な言語用のファイルを追加します。 次にXcode内でインターフェース部分に手を加えている場所のコードを変更します。 例えばlabelという名前のUILabelに英語で"Label"と表示させていたとして、それを日本語の場合"ラベル"と表示させる場合は、 以下のようにします。コードでラベルのテキストを変更しているタイミングは、 Interface Builder併用の場合はviewDidLoadメソッド内で、併用しない場合はラベルのイニシャライズ時となります。 どちらにせよラベルのテキストを設定する場合
label.text = @"Label";
というようなコードになっていると思われますが、これを以下のように変更します。
label.text = NSLocalizedString(@"Label",@"label");
始めの@"Label"がキーで、2個目の@"label"はコメント用の文字列です。 2個目の文字列は実際のアプリケーションには反映されないので、空白の@""でも問題ありません。 Xcode左のリストでLocalizable.stringsを展開してEnglishをクリックします。 ファイルに以下の行を追加します。
"Label" = "Label";
実際のところこれは無くても動くのですが、作法として追加するくせをつけておいたほうが良いと思います。 次にJapaneseの側をクリックし、ファイルに以下の行を追加します。
"Label" = "ラベル";
こちらはNSLocalizedStringでキーが@"Label"とされているものに、日本語の場合で@"ラベル"を当てはめるのに必要となるので必ず追加します。 これでビルドを行うと、このラベルは設定の言語が英語なら"Label"、日本語なら"ラベル"と表示されます。 なお、他の言語では、前述のinfo.plistで標準に設定している言語、 この場合は標準は英語のままにしているため"Label"が表示されます。
バージョンアップなどでインターフェイスに変更を加える可能性が高い場合や、 あとから対応言語を増やす場合にはこちらの方法を使ったほうが作業量が少なくてすみます。
前へ次へ