Xcode アプリのローカライズ - shirajira/family-account-ios GitHub Wiki

Xcode アプリのローカライズ

iOS では,端末またはアプリの言語設定によってアプリ内の言語を切り替えることができる。

切り替え可能な言語はアプリにバンドルされている言語に限られる。
初期設定では英語しか実装されていないので,必要に応じて他の言語を追加すること。

実装方法

プロジェクト設定 -> PROJECT -> Info -> Localizations まで進むと,デフォルトでは以下のような設定になっていると思われる。

Localization Resources
Base 2 Files Localized
English - Development Language 0 Files Localized

Use Base Internationalization にチェックあり

これは,デフォルトの言語 BaseEnglish になっていることを意味している。

1. 言語を追加する

先ほどの表の下部にある + を押して,追加したい言語を選択する。
追加したい言語を選択するとローカライズファイルの追加方法を選択できる。

Checked Resource File Reference Language File Types
Yes Main.storyboard Base Localizable Strings
Yes LaunchScreen.storyboard Base Localizable Strings

基本的にはこのままでOK。

特殊な理由や事情があり言語によって UI を大きく変更したい場合に限り,File Types を変更する必要がある。
選択可能なオプションは以下の通り。

File Types 説明
Localizable Strings 言語ごとにテキストのみを切り替える
Interface Builder Storyboard 言語ごとに Storyboard を切り替える

前者は簡易的なローカライズ(単なるテキストの置換),後者は本格的なローカライズである。

言語的あるいは文化的な背景への配慮が必要なアプリについては,後者のローカライズが好まれるでしょう。
プロダクトの性質によって適切なものを選択すること。
(本稿では前者の Localizable Strings を選択した場合について説明する)

追加後,PROJECT -> Info -> Localizations が以下のようになっていればOK。
(下表は日本語を追加した場合の例)

Localization Resources
Base 2 Files Localized
English - Development Language 0 Files Localized
Japanese 2 Files Localized

2. ローカライズファイルを追加する

新たに追加した Storyboard をローカライズする場合の手順について示す。

1) デフォルトの言語を設定する

対象 Storyboard を開き,Show the Inspectors -> File Inspector を開く。
(視覚的に説明すると,Xcode の右メニューを開き,その中にある左端のファイルアイコン)

下のほうに Localization グループがあるので,Localize... ボタンをクリックする。

どの言語にローカライズするか聞かれるので,Base を選択する。
この設定により,対象 Storyboard の言語が Base になる。(デフォルトでは英語)

2) 他の言語を追加する

先ほどの手順と同様に File Inspector を開くと,Localization グループが以下のようなフォーマットになっていると思われる。

Checked Language File Types
Yes Base 項目なし
No English Localizable Strings
No Japanse Localizable Strings

これから追加する言語(例えば Japanse)にチェックを入れる。

チェックを入れると,Project Navigator の対象 Storyboard グループに以下のファイルが追加される。
(視覚的に説明すると,Xcode の左メニュー,その中にある左端のファイルアイコン)

Sample.storyboard
    Sample.storyboard (Base)
    Sample.strings (Japanese)

Sample.storyboard が UI 定義(Base 言語用),Sample.strings が置換ルール定義(カッコ内言語用)となっている。

なお,チェックを外すと Sample.strings (Japanese) はプロジェクトから外される。
Sample.storyboard を作り直したときは チェックを外す -> チェックを入れる -> Replace file 操作によって strings ファイルを最新化できる。

3) 置換ルールの定義

まずは Sample.storyboard を完成させよう。

その後 2) の手順に戻り Sample.strings を最新化すると,Sample.storyboard 内で使用しているテキストが Sample.strings に転記される。

フォーマットは以下の通り。
これは ID が k8t-1z-EM1 である UILabel に「Cancel」が設定されている場合の例である。

/* Class = "UILabel"; text = "Cancel"; ObjectID = "k8t-1z-EM1"; */
"k8t-1z-EM1.text" = "Cancel";

これを次のように書き換えると,言語設定が日本語のときは「キャンセル」と表示されるようになる。

/* Class = "UILabel"; text = "Cancel"; ObjectID = "k8t-1z-EM1"; */
"k8t-1z-EM1.text" = "キャンセル";

各ルールはセミコロンで区切る必要がある。つけ忘れに要注意。
(Xcode 12 くらいからビルド時に警告を出してくれるようになったようです。昔は出なくて苦労した覚えが…)


参考:
[iPhone] 多言語対応、Localizationの設定