多言語対応
iOSにて多言語する際の方法とメリット・デメリット使い分けなどをまとめた。
swiftでの実現方法3パターンとメリット・デメリット
メリット | デメリット | |
---|---|---|
Localizable.strings 利用 | - NSLocalizedStringで自動で端末ごとの設定を呼び出せる。 - NSLocalizedStringをoverrideすれば、再起動しないでも言語変更可能 |
- 端末の言語設定を読み込むが故に動作が完全にos設定依存する。(言語設定をdefaultのまま変更していないユーザも一部海外だと多い) |
storyboard(Storyboard自体切り出し) | - 言語ごとにレイアウト自体も設定出来る | - レイアウトに関してはダブルメンテナンス必要 - cacheしている言語設定を利用するため、再起動しないと言語切替が出来ない |
storyboard(言語のみ切り出し) | - storyboardは共通で言語のみ設定出来る | - ObjectId.text = 文言 形式で指定するが、レイアウトと文言の紐付けが分かりづらい。 |
個人的使い分け案
再起動なしで言語切替必須
|
再起動なしで言語切替不要
|
|
---|---|---|
言語ごとのUI設定必須
|
標準ですべてやるのは出来ないので独自実装するしかなさそう。 | storyboardを言語ごとに切り出して対応 |
言語ごとのUI設定不要
|
localizable.stringsのみ利用 + NSLocalizedStringをovverideする | 以下のいずれでも対応可能だが、storyboardの言語切り出しにあまりメリットがなさそうなので、localizable.stringsのみで良さそう。 - localizable.strings - storyboardの言語切り出し |
Localizable.stringsを使った多言語対応
呼び出し方
NSLocalizedString("LocalizationStringKey", comment: "")
print(NSLocalizedString("test", comment: ""))
アイコン・画像の出し分け
画像を両方用意した上で、NSLocalizedStringで出し分ける
img.image = UIImage(named: NSLocalizedString("img", comment: ""))
storyboardを使った多言語対応
- 言語ごとにレイアウトも含めて設定することが出来る。
Tips
端末の言語設定
UserDefaults
のKey:AppleLanguages
に格納されている。
上記を上書きすることでアプリで利用する言語の上書きが可能。
正しい、上書きした際にはアプリの再起動が必要。
言語設定を変更後のアプリの再起動
アプリの再起動を行う処理を記載することは出来ない。
参考
http://quesera2.hatenablog.jp/entry/2013/11/11/013341
再起動させたくない場合
参考: アプリの言語設定を、アプリ内から操作したい
https://techlife.cookpad.com/entry/internationalization-and-localization-of-ios-apps
端末の設定が対応していない言語の場合のデフォルト言語
日本語と英語しか対応していない場合に、端末の設定が中国語しかなかった場合にアプリの言語がどうなるのか。
めちゃくちゃ調べたけど、結局設定ありました。
Localization native development region
を変更すると対応してない言語の時のデフォルトになります。