🗾

Android 端末の言語設定が日本語であるか判定しようとした際にハマりました

2021/05/16に公開

ConfigurationCompatgetLocales メソッドを用いると端末の [設定] > [言語] に追加されている Locale の一覧 LocaleListCompat を取得することができます。

日本語であるかの判別を Locale.JAPAN で行うと正しい結果になりますが、 Locale.JAPANESE で比較してしまうと誤った値になってしまいますのでお気をつけください。
また Locale.JAPAN.languageLocale.JAPANESE.language で検証すると期待通りの結果になりました。

val locales = ConfigurationCompat.getLocales(Resources.getSystem().configuration)
val locale = locales.get(0)
val language = locale.language

// 正しい結果になる
val isLocaleJapan = locale == Locale.JAPAN
val isLanguageJapan = language == Locale.JAPAN.language
Log.d("TAG", "isLocaleJapan = $isLocaleJapan")
Log.d("TAG", "isLanguageJapan = $isLanguageJapan")

// 間違った結果になる
val isLocaleJapanese = locale == Locale.JAPANESE
val isLanguageJapanese = language == Locale.JAPANESE.language
Log.d("TAG", "isLocaleJapanese = $isLocaleJapanese")
Log.d("TAG", "isLanguageJapanese = $isLanguageJapanese")

日本語を第一言語にしている場合 🇯🇵

実行結果

D/TAG: isLocaleJapan = true
D/TAG: isLanguageJapan = true
D/TAG: isLocaleJapanese = false
D/TAG: isLanguageJapanese = true

英語を第一言語にしている場合 🇺🇸

実行結果

D/TAG: isLocaleJapan = false
D/TAG: isLanguageJapan = false
D/TAG: isLocaleJapanese = false
D/TAG: isLanguageJapanese = false
GitHubで編集を提案

Discussion