多言語対応

iOSアプリの多言語対応は、結構簡単に出来る。
それにアプリをたくさんの人に使って欲しいと思ったら多言語化はすげー重要だ。
まあ、頑張っても日本語+英語くらいしか出来ないが。。。

では、その方法。とりあえず日本語と英語に対応する場合で書いておく。
プロジェクトのフォルダに、以下の2つのフォルダを作る。

  • ja.lproj : 日本語リソース用フォルダ
  • en.lproj : 英語リソース用フォルダ

それから、それぞれのフォルダの下に以下のファイルを置く。

  • InfoPlist.strings : アプリ名設定用
  • Localizable.strings : アプリ内で使用する文字列設定用

結果、以下の様な状態になる。

[プロジェクトフォルダ]
  −[ja.lproj]
    −InfoPlist.strings
    −Localizable.strings
  −[en.lproj]
    −InfoPlist.strings
    −Localizable.strings

そしたら、この2つのフォルダをXcodeからリソースに追加する。

で、Xcodeで中身を編集。
まずは、InfoPlist.stringsから。

  • ja.lproj/InfoPlist.strings

CFBundleName = "日本語バージョン";    // 起動時のステータスバーに表示されるアプリ名
CFBundleDisplayName = "日本語";     // アイコンの下に表示されるアプリ名

  • en.lproj/InfoPlist.strings

CFBundleName = "English Version";    // 起動時のステータスバーに表示されるアプリ名
CFBundleDisplayName = "EnVer";     // アイコンの下に表示されるアプリ名

こんな感じで、アプリ名の多国語対応ができちゃう。

次に、アプリ内で使う文字列を書いとくLocalizable.strings。

  • ja.lproj/Localizable.strings

// "Key" = "Value"で書いておく。
"start" = "開始";
"end" = "終了";
"close" = "閉じる";

  • en.lproj/Localizable.strings

// "Key" = "Value"で書いておく。
"start" = "START";
"end" = "END";
"close" = "CLOSE";

そんで、プログラム内の文字列を使いたいところで、例えば

[buttonStart setTitle:NSLocalizedString(@"start", @"") forState:UIControlStateNormal];

とかやればOK。
バイスの言語設定に従って勝手に適切な方を読み込んでくれる。