ローカライズの設定について

勘違いをしている人がいると思うのだが、iPhone の一番優れているところは、独特のインターフェースでも、操作感でも、レスポンスでも、画面イメージでもなくって、
AppStore を通して、ごく限られた端末をターゲットにしたアプリを、全世界に配信できるという点だ.

しかも、課金だとか配信地域だとかという面倒な問題は全て Apple が請け負ってくれる.

こういったシステムを考え、市場に対してチャレンジした企業ってのは数多くあれども、AppStoreっちうか Apple ほど成功している企業は他にないだろう.

純粋な携帯電話ハードウェア屋さんだとかキャリアだとかが、それこそ喉から手が出るほど欲しがっていたシステムを、つい先日まで携帯電話とは関係ない世界に
身を置いていた Apple が手に入れてしまうってあたりが面白い.

AppStore にアプリが並んで、同じ国に住んでいるお友達に自慢できるってだけで満足しているのは、もったいなさすぎる.

ローカライズを行い、全世界の人たちに利用してもらってこそ、iPhoneアプリの真価が発揮できるのだっ.

...てなわけで、アプリのローカライズのお話.

アプリ中の文字列のローカライズ

アプリ中で表示する文字列のローカライズを行うためには、 Localizable.strings を用意する.

自前でローカライズの処理を行ってしまっても良いが、Localizable.string を用意しておけば、 NSLocalizedString を
用いて端末に設定されている言語を判断して、適切な言語の取得が行えるので楽だろう.

Localizable.stirng の作成は、xcodeから[ファイル]-[新規ファイル]-[Strings Files]と選択して、適切な名前を付ければよい.
Localizable.string は、Resourcesフォルダに入れておくこと.


ファイルを作成したら、ファイルのローカライズ設定を行う.

ローカライズの手順は以下の通り.

1. ローカライズ設定は、xcode の左ペインにある、Localizable.string を右クリックし[情報を見る] を選択
2. ファイルの情報ダイアログが立ち上がる
3. [一般] タブの下部にある[ファイルをローカライズ可能にする] ボタンを押下
4. [一般] タブに、"ローカリゼーション"欄ができる
5. [ローカリゼーションを追加] ボタンを押下
6. 必要なローカリゼーションの追加をおこなっていく

ローカリゼーションの追加を行うと、"新しいローカリゼーションの名前を入力" ダイアログが立ち上がるが、一覧には、英語,日本語,ドイツ語,フランス語しか出てこない.

ローカリゼーションの名前は、ISO-639の省略形をつければ良いので、適当な言語を入力すること.

ローカリゼーションの追加が行えていると、プロジェクトのフォルダに"*.lproj"フォルダが作成され、その中にローカライズ毎の Localizable.string ファイルができている.

※ "*.lproj"の * は、ローカリゼーションの名前に該当.例えば日本語だと"ja"となるはず.
※ Localizable.string のフォーマットは、UTF-16 らしい.これだけ分かっていれば、適当なエディタでファイルを作成/編集してあとからプロジェクトに突っ込んでも良い

あとは、言語毎に Localizable.string を記述すればよい.

書式は、次のようになる.

"hoge" = "ほげほげ(ja)";

左の項目が、アプリから呼びだす時の名称、右が取得できる文字列となる.

アプリから該当文字を呼びだすためには次のようにする.

    NSString* a_strHoge = NSLocalizedString(@"hoge", @"");

第一引数が、Localizable.stringに設定した文字列、第二引数は(文字列に対する)コメントなので空の文字列でも良い.


アプリ名のローカライズ

アプリ中に用いる文字列だけではなく、アプリ名自体もローカライズ可能である.

アプリ名をローカライズする場合には、Localizable.stringを作った時と同じような手順で、"InfoPlist.string"というファイルを作成する.

InfoPlist.string は、アプリの設定ファイルである Info.plist の項目を、ローカライズ毎に上書きするために用いるファイルとなる.

特に、Info.plist の内容をローカライズする必要が無いときには、 InfoPlist.string を作成する必要は無い.

書式は、次のようになる.

CFBundleDisplayName = "言語対応サンプル(ja)";

左の項目が、Info.plist の項目名、右が設定する値となる.

xcode で Info.plist の表示をおこなった時に表示されている項目名とは別な点に注意する必要がある.
(私は、調べ方が分からなかったので、Info.plist をエディタで開いて xml に設定されている項目名を調べた)



同様の方法を用いて、アイコン画像などもローカライズ可能だが、申請するときのアプリアイコンと端末上で表示されるアプリアイコンが一致していないと、rejectされるので
実用性は(現在のところほぼ無い)

AppStore における[言語]欄の表記について

AppStore のアプリの紹介ページには、アプリの対応している言語の表示を行う[言語]の欄がある.

...せっかくアプリをローカライズをしても、購入前に対応言語が表示されていないと、ユーザにはローカライズしてあることが伝わらないので、適切な対応言語を表示されるように
しておきたいものである.


この欄は、アプリ申請時に登録するモノでは*なく*、Localizable.string が存在している言語が表示される.

つまり、Localizable.string を利用せずに、自前で表示言語のローカライズを行った場合には、空のファイルを用意しておく必要がある.

また、単一言語の対応だけを行っていることを明示したい場合([言語]欄に、"日本語"とだけ表示したい場合)には、Localizable.string を用意するのではなく、
Info.plist の"Localization navigate developent region" に該当言語を設定しておけばよい.

まとめ

アプリ内の文字列表示をローカライズする方法、アプリ名をローカライズする方法、AppStoreの[言語]欄に対応言語を表示する方法を解説しました.

私は、ちょっとした理由から、ローカライズの仕組みに Localizable.string を用いず、自前でローカライズを行ってしまったので、AppStoreの[言語]欄に
どのように対応言語を表示して良いのか分からずに困りました.

自前でローカライズした利点としては、端末の設定に関わらずアプリないで表示言語の設定が行えるようになるといったところでしょうか.

基本的には、 Localizable.string を用いた方がユーザにもわかりやすいでしょうし、実装も楽なんで積極的に利用したいものです.