LoginSignup
6

More than 3 years have passed since last update.

iOSアプリの多言語対応

Last updated at Posted at 2019-12-11

多言語対応

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を使った多言語対応

image.png
※ファイル名は、これじゃないと動作しない。

ファイルの中身
image.png

呼び出し方

NSLocalizedString("LocalizationStringKey", comment: "")
print(NSLocalizedString("test", comment: ""))

アイコン・画像の出し分け

画像を両方用意した上で、NSLocalizedStringで出し分ける
img.image = UIImage(named: NSLocalizedString("img", comment: ""))

storyboardを使った多言語対応

image.png

image.png
image.png
- 言語ごとにレイアウトも含めて設定することが出来る。

Tips

端末の言語設定

UserDefaultsKey: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を変更すると対応してない言語の時のデフォルトになります。
defaultLanguage.png

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6