📱
端末の言語設定を反映した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