From de3db5db92189db8089e5cf809ad25647e0fe71e Mon Sep 17 00:00:00 2001 From: Gary Qian Date: Wed, 23 Sep 2020 21:52:02 -0700 Subject: [PATCH] Locale -> LanguageRange conversion to be more general in Android platformResolvedLocale (#21350) --- .../plugin/localization/LocalizationPlugin.java | 12 +++++++++--- .../plugin/localization/LocalizationPluginTest.java | 13 +++++++++++++ 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/shell/platform/android/io/flutter/plugin/localization/LocalizationPlugin.java b/shell/platform/android/io/flutter/plugin/localization/LocalizationPlugin.java index 929711f35..71aab6fd2 100644 --- a/shell/platform/android/io/flutter/plugin/localization/LocalizationPlugin.java +++ b/shell/platform/android/io/flutter/plugin/localization/LocalizationPlugin.java @@ -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() + "-*")); } diff --git a/shell/platform/android/test/io/flutter/plugin/localization/LocalizationPluginTest.java b/shell/platform/android/test/io/flutter/plugin/localization/LocalizationPluginTest.java index 28ece52e6..08cf4ff91 100644 --- a/shell/platform/android/test/io/flutter/plugin/localization/LocalizationPluginTest.java +++ b/shell/platform/android/test/io/flutter/plugin/localization/LocalizationPluginTest.java @@ -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. -- GitLab