🗾
Android 端末の言語設定が日本語であるか判定しようとした際にハマりました
ConfigurationCompat の getLocales メソッドを用いると端末の [設定] > [言語] に追加されている Locale の一覧 LocaleListCompat を取得することができます。
日本語であるかの判別を Locale.JAPAN
で行うと正しい結果になりますが、 Locale.JAPANESE
で比較してしまうと誤った値になってしまいますのでお気をつけください。
また Locale.JAPAN.language
と Locale.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
Discussion