【Swift4】Storyboardを使わずコードでの多言語化【Objective-C】

2020年8月27日

プログラムコードでの多言語化をしたので多言語化方法をまとめておきます。
Swiftプロジェクトでサンプルを作りましたが、、Objective-Cのプロジェクトでも同様に設定が可能です。
Swift、Objective-Cどちらのプロジェクトでも以下の方法をお試しください。

もくじ

  1. 多言語化の準備
  2. Localizable.stringsファイルを用意する
  3. プログラムで出し分ける

コードでの多言語化

1. 多言語化の準備

まず多言語化したい言語を追加する設定を行います。
なお今回はベース言語が英語になるように作成してきます。

PROJECT > プロジェクト名 > Info > Localizations > +

から Japanese(Japan)(ja-JP)を選択して追加します。

多言語化させるResourceFileを選択する画面がでてきます。
初期のプロジェクトだと、「Main.storyboard」と「LaunchScreen.storyboard」の2つが選択された状態にっています。
もし、独自にstoryboardを追加している場合や、多言語化用のStrings Fileを既に追加している場合、画像に多言語設定をしているものがあれば、ResourceFileに表示されているのでチェックをつけて、設定を完了しましょう。


多言語化の設定が追加されると、上記のようにLocalizationsのLunguageに新しく言語が追加されているのがわかります。この状態になっていれば大丈夫です。

2. Localizable.stringsファイルを用意する

Localizable.stringsという翻訳ファイルを作成します。

New Files > iOS > Resource > Strings File

を選択して「Localizable」とう名前でstringsファイルを作成します。

Localizable.stringsを作成したらLocalizationの設定を追加します。

Localaize... 

をクリックします。

必要なローカライズ用のファイルを選択する画面がでてくるので
「多言語化の準備」で追加したJapanese(Japan)を選択して決定してください。

この状態でLocalizable.stringsのLocalizationの設定をみると、Japaneseのみチェックされています。日本語の翻訳ファイルのみ追加されている状態です。
このままでは多言語化にならないので、Baseにもチェックを追加します。

このようにLocalizable.stringsのLocalization設定をBaseとJapaneseにチェックを入れると、Localizable.stringsファイルの左に▶︎が追加されプルダウンすると先ほどチェックした「Base」と「Japanese」の2つの翻訳ファイルができていることがわかります。

あとはこの翻訳ファイルに多言語化用の翻訳をそれぞれ記述していきます。

"hellow" = "Hellow";
"hellow" = "おはよう";

このように左側がkey、右側がvalueになるイメージで記述してきます。
あとはプログラムでNSLocalizedString関数を使って出力していくだけです。

プログラムで出し分ける

NSLocalizedString関数を使うことでiOSで設定されている言語設定と先ほど作成したLocalizable.stringsに設定されている翻訳表を元にプログラムが自動で出し分けてくれます。

今回の場合は

日本語設定の場合 → Localizable.string(Japanese(Japan))
それ以外の言語の場合 → Localizable.string(Base)

をプログラムが自動でチェックし、出し分けてくれます。

Swift4

print( NSLocalizedString("hellow", comment: "") )
// 日本語設定なら「おはよう」
// それ以外なら「Hellow」

Objective-C

NSLog("%@", NSLocalizedString(@"hellow",nil) );
// 日本語設定なら「おはよう」
// それ以外なら「Hellow」