@@ -29,6 +29,7 @@ private val countriesLocales: SortedMap<String, Locale> =
2929 .toSortedMap()
3030
3131val BULGARIAN : Locale = Locale .forLanguageTag(" bg" )
32+ val CHINESE : Locale = Locale .forLanguageTag(" zh" )
3233val CHINESE_SIMPLIFIED : Locale = Locale .forLanguageTag(" zh-Hans" )
3334val CHINESE_TRADITIONAL : Locale = Locale .forLanguageTag(" zh-Hant" )
3435val DUTCH : Locale = Locale .forLanguageTag(" nl" )
@@ -81,13 +82,26 @@ fun supportedLanguageTags(): List<String> = listOf("") + baseSupportedLocales.ma
8182
8283private fun normalizeLanguageTag (languageTag : String ): String = languageTag.replace(' _' , ' -' ).trim()
8384
85+ private val chineseCountryToLocale: Map <String , Locale > = mapOf (
86+ " CN" to CHINESE_SIMPLIFIED ,
87+ " SG" to CHINESE_SIMPLIFIED ,
88+ " TW" to CHINESE_TRADITIONAL ,
89+ " HK" to CHINESE_TRADITIONAL ,
90+ " MO" to CHINESE_TRADITIONAL ,
91+ )
92+
8493fun findByLanguageTag (languageTag : String ): Locale {
8594 val normalizedLanguageTag = normalizeLanguageTag(languageTag)
8695 if (normalizedLanguageTag.isEmpty()) return currentLocale
8796
8897 val target = Locale .forLanguageTag(normalizedLanguageTag)
8998 if (target.language.isEmpty()) return currentLocale
9099
100+ if (target.language == " zh" && target.script.isEmpty()) {
101+ if (target.country.isEmpty()) return CHINESE
102+ return chineseCountryToLocale[target.country] ? : CHINESE
103+ }
104+
91105 return baseSupportedLocales.find { it == target }
92106 ? : baseSupportedLocales.find { it.language == target.language && it.script == target.script }
93107 ? : baseSupportedLocales.find { it.language == target.language && it.country == target.country }
0 commit comments