【Swift】Xcode6でiOSアプリの多言語・ローカライズ対応のまとめ
アプリ名・Storyboardで定義したUI・コードで定義した文言等を多言語化する方法のまとめ。
ベースを英語で作成し、日本語環境の場合にアプリ名・UI・メッセージ等を日本語で表示させる。
0. 共通処理
- Project -> Info -> LocalizationsでJapanese(ja)を追加 ※追加したい言語を選択
- 追加時に表示されるダイアログのStoryBoardとLaunchScreenのチェックはそのまま
- Main.storyboardにMain.strings(Japanese)が追加される
- LaunchScreen.xibにLaunchScreen.strings(Japanese)が追加される
1. アプリ名の多言語化
Supporting FilesにInfoPlist.stringsファイルを追加
- File -> New -> File...で、Strings Fileを選択する
- ファイル名:InfoPlist.stringsとして、Supporting FilesのGroupに追加
- InfoPlist.stringsを選択して、ユーテリティエリアのShow the File inspectorで、Localize...をクリック
- 表示されたダイアログでJapaneseを選択し、Localizeをクリック
InfoPlist.stringsファイルにアプリ名を追加
- InfoPlist.stringsに以下を追記する
- CFBundleDisplayName = "日本語の場合に表示したいアプリの名前";
- 保存する
2. StoryBoardで定義した UIの多言語化
- Main.storyboard(Japanese)の変更
- 中に書かれている各UIのタイトル等を表示したい文言に変更する
- 保存する
※2015.7.23 追記
多言語化をした後(Main.strings(Japanese)を作成した後)でStoryBoardにUIを追加しても、自動でMain.strings(Japanese)へは反映されない。
標準機能で反映させる際は、ターミナルにて実行する必要がある。
# プロジェクトのBase.lprojまで移動する $ cd AppTest/AnyLanguage/AnyLanguage/Base.lproj/ # ibtoolを使って、UI追加を反映したstringsファイルを作成する $ ibtool Main.storyboard --generate-strings-file 任意の名前.strings
作成された.stringsファイルをXcodeなどで開き、追加したUIのコメントとキー値ペアを元のMain.strings(Japanese)にコピーして使用する。
ちょっと面倒なので、もしかしたらStoryBoar上では文字列は設定せずに、コードですべて設定して次の 3. の方法でやったほうがスッキリするかもしれない...
3. コードで定義した文言の多言語化
Supporting FilesにLocalizable.stringsファイルを追加
- File -> New -> File...で、Strings Fileを選択する
- ファイル名:Localizable.stringsとして、Supporting FilesのGroupに追加
- Localizable.stringsを選択して、ユーティリティエリアのShow the File inspectorで、Localize...をクリック
- 表示されたダイアログでBaseを選択し、Localizeをクリック
- Localizable.stringsを選択して、ユーティリティエリアのLocalizationでJapaneseにチェックをつける
- Localizable.stringsにLocalizable.strings(Base)とLocalizable.strings(Japanese)の2つが追加される
Localizable.strings(Base)とLocalizable.strings(Japanese)にKey項目を定義
- 他言語したい項目(タイトルやメッセージなど)のキー項目を値を定義する
// Localizable.strings(Base) "alertTitle" = "ALERT!!"; "alertMessage" = "MESSAGE!!";
// Localizable.strings(Japanese) "alertTitle" = "アラート!!"; "alertMessage" = "メッセージ!!";
- 多言語化したい部分のコードを変更
// 元のコード // アラートを表示 let alert: UIAlertController = UIAlertController(title: "Hello", message: "Are You OK?", preferredStyle: UIAlertControllerStyle.Alert)
// 対応後のコード // アラートを表示 // NSLocalizedStringは、引数のkey:と#comment:以外はdefault引数なので必要時以外の設定は不要 let alertTitle:String = NSLocalizedString("alertTitle", comment: "アラートのタイトル") let alertMessage:String = NSLocalizedString("alertMessage", comment: "アラートのメッセージ") let alert: UIAlertController = UIAlertController(title: alertTitle, message: alertMessage, preferredStyle: UIAlertControllerStyle.Alert)