📱
端末の言語設定を反映したLocaleを取得する方法
Swiftで
Locale.current
とすると Locale.identifier: en_JP が取得されてしまうことがある。(本当はja_JPの方が欲しい)
これはプロジェクトの言語設定にLocalizationに日本語入ってないと起こるようである。
一方でLocalには、地域設定ではなくて、言語設定を取得するLocale.preferredLanguagesというのも用意されている。こちらであれば、ja-JP が取得できるので、
Locale(identifier: Locale.preferredLanguages.first!) // optional の扱いは必要に応じてうまくやる
とやってやれば、期待通りの言語が取得できる。
余談
Locale.preferredLanguages で取れるidentifierは、なぜかハイフン(-)区切りである。Locale(identifier:) で要求されているのはアンダースコア(-)の方であるが、ハイフン区切りで
Locale(identifier: "ja-JP")
としてもちゃんとinitializeしてくれる。気の利いたinitializerである
Discussion