【iOS】String Catalogsを利用した多言語対応【Xcode 15~】
IT技術
はじめに
こんにちは!株式会社ライトコードの福岡本社でモバイルエンジニアやってるこーです!
2021.11.05YOUは何しにライトコードへ?〜こーくん編〜プロジェクト内で安心感を与えられる存在になりたい!今回は、弊社のエンジニアである高さんにフィーチャー!技術力に定評のあ...
今回はiOSアプリのちょっとしたお話です。
WWDC23で発表されたXcode 15以降で利用できる"String Catalogs"を利用した多言語対応をざっくりご紹介したいと思います!
そもそも「多言語対応」って?
Chat-GPTに聞いてみましょう。
なんか長ったらしいので、まとめると、(ひどい)
「サービスやソフトウェアを複数の言語圏に対応させること」ということです。
「語感から何となく想像はできるよ」と思う方も多いと思うのですが、筆者と読者の認識を確実に一致させるために、こういう言葉の定義付けは何気にとても大事です。
iOSアプリにおける「多言語対応」って?
iOSアプリにおけるこの「多言語対応」は、「言語設定に応じた、文字列リソースを返すこと」を指します。
この対応を英語では「ローカライズ(Localize)」と呼ばれます。
こちらの呼び方が一般的なので、以降「多言語対応」は「ローカライズ」と呼称していきます。
文字列リソースは、Baseとなる.strings ファイルを作成して、 key-value 方式で格納し、利用する箇所で key 指定して参照して表示することが一般的です。
参照方法は R.swift や SwiftGen などサードパーティ製ライブラリで .strings のマネージャクラスを自動生成して、それらを介する方法もありますね。
今回新しくなる部分は、文字列リソースの管理方法です。
これまでの管理方法
「この .strings ファイルを、対応する言語分だけ作る」というのが最も一般的です。
- 言語単位で .strings ファイルを作る。
- それぞれの .strings ファイルに、各言語に対応する文字列リソースを同一 key で格納する。
これからの管理方法
String Catalogsを利用して、これらの各言語文字列リソースを管理します。
文字列リソースのローカライズ
それでは、アプリ内で利用する文字列リソースのローカライズ方法を見ていきましょう。
1. 対応言語のLocalizationを追加する
図の「+」ボタンから、対応言語のLocalizationを追加します。
デフォルトのLocalizationはEnglish(英語)になっているので、今回は日本語を追加する想定でJapaneseを追加します。
2. String Catalogsを追加する
アプリモジュールのGroupで、右クリック -> [New File]からString Catalogsを選択し、ファイル名をLocalizableにして追加します。
3. デフォルト言語の文字列リソースを格納する
追加された Localizable を選択 -> デフォルトである English を選択すると、key-value形式の文字列リソース管理画面が表示されますので、それぞれ入力します。
4. ローカライズ対象言語の文字列リソースを格納する
3で表示した文字列リソース管理画面には、1で追加されたローカライズ対象言語の管理画面も表示されています。
今回のローカライズ対象言語は日本語なので、Japaneseが追加されていますね。
このJapaneseを選択すると、3で設定したkeyとデフォルト言語でのvalueがが表示されているはずなので、この横にローカライズ対象言語の文字列を格納します。
これで、文字列リソースのローカライズは完了です!
アプリ表示名のローカライズ
iOS上でアイコン下や設定画面などに表示されるアプリ表示名も、String Catalogsを使ってローカライズできます。
1. アプリ表示名をデフォルト言語で設定する
[TARGET]タブでアプリモジュールを選択後、[General]タブから、表示アプリ名であるDisplay Nameを設定します。
ここはデフォルト言語である英語で設定しましょう。
2. InfoPlist.xcstringsを追加してビルド
アプリモジュールのGroupで、右クリック -> [New File]からString Catalogsを選択し、ファイル名をInfoPlistにして追加します。
その後、一度ビルドします。
3. ローカライズ対象言語のアプリ表示名を格納する
ビルド完了後、先程追加したInfoPlistを選択すると、以下のkeyが追加されていると思います。
- CFBundleDisplayName
- CFBundleName
このうち、CFBundleDisplayNameがアプリ表示名に該当するので、ここにローカライズ対象言語のアプリ表示名を格納します。
CFBundleNameは、「CFBundleDisplayNameを短縮したもの」と定義されていて、「このAppについて」やSpotlight検索などで表示される名称になります。(15文字まで設定可能)
こちらもローカライズしたい場合は設定しておきましょう。
CFBundleDisplayNameが設定されていないと、アプリ表示名にはCFBundleNameが参照されるので注意しましょう。
これでアプリ表示名のローカライズも完了です!
さいごに
今回はXcode 15~利用可能なString Catalogsを利用した多言語対応について見ていきました。
これまでは各言語に対応する.stringsファイルを作って、ファイル間でkeyが一致するように注意しながら文字列リソースを格納していく...という何気に神経がすり減る作業から解放されるのが大きなメリットですね!
アプリバイナリである.ipaファイルには、このString Catalogsから.stringsファイルが生成されバンドルされます。
この仕組みについては今回は割愛しますが、興味のある方は調べてみてくださいね!
皆さんのご参考になれば幸いです!
今回は以上となります、ありがとうございました!
ライトコードでは、エンジニアを積極採用中!
ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。
採用情報へ
「クレヨンしんちゃんは人生のマニュアル」が口癖なモバイルアプリとバックエンドやってる人