【iOS10】StoryBordを使わない場合のローカライズ(多言語設定)【Objective-C】

2019年8月29日

StoryBordを使わない場合(MainもLuncherも消してしまった場合)のローカライズ(多言語設定)について説明します。
ローカライズはアプリを使用するユーザーが設定しているiPhoneの言語に紐づいてアプリ内のローカライズがされます。
ここでは、Base,English,Japanのローカライズをしてみたいと思います。

StoryBordを使わないローカライズ方法

まずプロジェクト内にStringFileを用意します。
New Files → ios → StringFileを選択し「Localizable」という名前で作成してください。

作成した「Localizable.Strings」にフォーカスをあてXCodeの右側のウィンドウを出すと「Localization」と言う項目があるのがわかります。ボタンを押して「Localizable.Strings」に紐づく初期言語を設定します。

とりあえず「Base」を選択しておきおましょう。

Xcode右側のウィンドウにあった「Localization」という項目が変化し、「Base」にチェックが入っていると思います。ここでさらに「English」もチェックしましょう。

Xcode左側にあった「Localizable.Strings」に折りたたみ用の▶︎がついているのがわかります。
展開するとLocalizable.Stringsが「 Base」と「English」の二つになっているのがわかります。
これでBaseとEnglishのローカライズに対応したことになります。

しかし、基本BaseはEnglishで作成していると思うのでこれでは両方英語で意味がありません。
次に日本語のLocalizable.Stringsを追加してみましょう。

ターゲット → info → Localizations → + → Japanese(ja)を選択します。

Localizable.Stringsにのみチェックを入れます。

Localizable.Stringsを見ると「Japanese」が追加されていることがわかります。

これでBase,English,Japaneseの3言語にローカライズするための設定が整いました。
ローカライズするためにはこの3つのファイルにそれぞれローカライズKeyと翻訳を記述しなけれいけません。

Localizable.Strings(Base)

"test" = "Test";

Localizable.Strings(English)

"test" = "Test";

Localizable.Strings(Japanese)

"test" = "テスト";

3つのファイルにそれぞれ
ローカライズKey = 翻訳
という形で記載していきます。

ローカライズKeyを使い翻訳を呼び出すときは以下になります。

NSLocalizedString(@"test", @"テスト")

NSLocalizedString関数を使い呼び出します。
第一引数にローカライズKeyを設定します。
第二引数はnilでも平気ですが、nilだとあとあとどんな言葉が入っているのかわかりづらいので、プライマリ言語の翻訳を書いておくといいと思います。