📱

端末の言語設定を反映したLocaleを取得する方法

2021/05/03に公開

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