Locale -> LanguageRange conversion to be more general in Android platformResolvedLocale (flutter/engine#21350)

This commit is contained in:
Gary Qian 2020-09-23 21:52:02 -07:00 committed by GitHub
parent 6d83eaebe2
commit e714ae10db
2 changed files with 22 additions and 3 deletions

View File

@ -50,9 +50,15 @@ public class LocalizationPlugin {
int localeCount = localeList.size();
for (int index = 0; index < localeCount; ++index) {
Locale locale = localeList.get(index);
String localeString = locale.toString();
// This string replacement converts the locale string into the ranges format.
languageRanges.add(new Locale.LanguageRange(localeString.replace("_", "-")));
// Convert locale string into language range format.
String fullRange = locale.getLanguage();
if (!locale.getScript().isEmpty()) {
fullRange += "-" + locale.getScript();
}
if (!locale.getCountry().isEmpty()) {
fullRange += "-" + locale.getCountry();
}
languageRanges.add(new Locale.LanguageRange(fullRange));
languageRanges.add(new Locale.LanguageRange(locale.getLanguage()));
languageRanges.add(new Locale.LanguageRange(locale.getLanguage() + "-*"));
}

View File

@ -120,6 +120,19 @@ public class LocalizationPluginTest {
assertEquals(result[0], "it");
assertEquals(result[1], "IT");
assertEquals(result[2], "");
supportedLocales =
new String[] {
"zh", "CN", "Hans",
"zh", "HK", "Hant",
};
localeList = new LocaleList(new Locale("zh", "CN"));
when(config.getLocales()).thenReturn(localeList);
result = flutterJNI.computePlatformResolvedLocale(supportedLocales);
assertEquals(result.length, 3);
assertEquals(result[0], "zh");
assertEquals(result[1], "CN");
assertEquals(result[2], "Hans");
}
// This test should be synced with the version for API 26.