jenkins-bot has submitted this change and it was merged.
Change subject: Use Chinese script when available, not country
......................................................................
Use Chinese script when available, not country
Determine Chinese variant by script on newer APIs.
Change-Id: I2b759fb4cc512a8441c98d4a8f04fee7db12d954
---
M app/src/main/java/org/wikipedia/language/LanguageUtil.java
A app/src/test/java/org/wikipedia/language/LanguageUtilTest.java
2 files changed, 125 insertions(+), 6 deletions(-)
Approvals:
BearND: Looks good to me, approved
jenkins-bot: Verified
diff --git a/app/src/main/java/org/wikipedia/language/LanguageUtil.java
b/app/src/main/java/org/wikipedia/language/LanguageUtil.java
index 10e1fce..2f97db3 100644
--- a/app/src/main/java/org/wikipedia/language/LanguageUtil.java
+++ b/app/src/main/java/org/wikipedia/language/LanguageUtil.java
@@ -1,5 +1,7 @@
package org.wikipedia.language;
+import android.os.Build;
+import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import java.util.Arrays;
@@ -29,17 +31,29 @@
case "ji":
return "yi"; // Yiddish
case "zh":
- // If the user configures Android for Chinese (zh) we have no
way to know the intended
- // dialect. We guess based on country. If the guess is
incorrect, the user must explicitly
- // choose the dialect in the app settings.
- return
isTraditionalChinesePredominantInCountry(Locale.getDefault().getCountry())
- ?
AppLanguageLookUpTable.TRADITIONAL_CHINESE_LANGUAGE_CODE
- :
AppLanguageLookUpTable.SIMPLIFIED_CHINESE_LANGUAGE_CODE;
+ return chineseLanguageCodeToWikiLanguageCode();
default:
return code;
}
}
+ @NonNull private static String chineseLanguageCodeToWikiLanguageCode() {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ String script = Locale.getDefault().getScript();
+ switch (script) {
+ case "Hans": return
AppLanguageLookUpTable.SIMPLIFIED_CHINESE_LANGUAGE_CODE;
+ case "Hant": return
AppLanguageLookUpTable.TRADITIONAL_CHINESE_LANGUAGE_CODE;
+ default: break;
+ }
+ }
+
+ // Guess based on country. If the guess is incorrect, the user must
explicitly choose the
+ // dialect in the app settings.
+ return
isTraditionalChinesePredominantInCountry(Locale.getDefault().getCountry())
+ ? AppLanguageLookUpTable.TRADITIONAL_CHINESE_LANGUAGE_CODE
+ : AppLanguageLookUpTable.SIMPLIFIED_CHINESE_LANGUAGE_CODE;
+ }
+
private static boolean isTraditionalChinesePredominantInCountry(@Nullable
String country) {
return TRADITIONAL_CHINESE_COUNTRY_CODES.contains(country);
}
diff --git a/app/src/test/java/org/wikipedia/language/LanguageUtilTest.java
b/app/src/test/java/org/wikipedia/language/LanguageUtilTest.java
new file mode 100644
index 0000000..270303e
--- /dev/null
+++ b/app/src/test/java/org/wikipedia/language/LanguageUtilTest.java
@@ -0,0 +1,105 @@
+package org.wikipedia.language;
+
+import android.os.Build;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.annotation.RequiresApi;
+
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.ParameterizedRobolectricTestRunner;
+import org.robolectric.ParameterizedRobolectricTestRunner.Parameters;
+
+import java.util.Arrays;
+import java.util.Locale;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+
+public class LanguageUtilTest {
+ private static final String CHINESE_LANG = "zh";
+ private static final String SIMPLIFIED_WIKI_LANG =
AppLanguageLookUpTable.SIMPLIFIED_CHINESE_LANGUAGE_CODE;
+ private static final String TRADITIONAL_WIKI_LANG =
AppLanguageLookUpTable.TRADITIONAL_CHINESE_LANGUAGE_CODE;
+
+ public static class LanguageCodeToWikiLanguageCodeChineseScript extends
LanguageCodeToWikiLanguageCodeChinese<String> {
+ @Parameters(name = "{0}") public static Iterable<Object[]> data() {
+ return Arrays.asList(new Object[][] {
+ {CHINESE_LANG, SIMPLIFIED_WIKI_LANG},
+ {"zh-Hans", SIMPLIFIED_WIKI_LANG},
+ {"zh-Hant", TRADITIONAL_WIKI_LANG},
+ {"zh-cmn-Hans", SIMPLIFIED_WIKI_LANG},
+ {"zh-cmn-Hant", TRADITIONAL_WIKI_LANG},
+ {"zh-Hans-HK", SIMPLIFIED_WIKI_LANG},
+ {"zh-Hant-HK", TRADITIONAL_WIKI_LANG}
+ });
+ }
+
+ public LanguageCodeToWikiLanguageCodeChineseScript(@NonNull String
input,
+ @NonNull String
expected) {
+ super(input, expected);
+ }
+
+ @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) @Test public void
test() {
+ Locale locale = Locale.forLanguageTag(input());
+ test(locale, expected());
+ }
+ }
+
+ public static class LanguageCodeToWikiLanguageCodeChineseCountry extends
LanguageCodeToWikiLanguageCodeChinese<Locale> {
+ @Parameters(name = "{0}") public static Iterable<Object[]> data() {
+ return Arrays.asList(new Object[][] {
+ {Locale.CHINESE, SIMPLIFIED_WIKI_LANG},
+ {Locale.CHINA, SIMPLIFIED_WIKI_LANG},
+ {Locale.TAIWAN, TRADITIONAL_WIKI_LANG}
+ });
+ }
+
+ public LanguageCodeToWikiLanguageCodeChineseCountry(@NonNull Locale
input,
+ @NonNull String
expected) {
+ super(input, expected);
+ }
+
+ @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) @Test public void
test() {
+ test(input(), expected());
+ }
+ }
+
+ // these tests could be much simpler with junit theories but the subject
has a dependency on api
+ // level which requires robolectric to change
+ @RunWith(ParameterizedRobolectricTestRunner.class)
+ public abstract static class LanguageCodeToWikiLanguageCodeChinese<T> {
+ private static Locale PREV_DEFAULT_LOCALE;
+
+ @NonNull private final T input;
+ @NonNull private final String expected;
+
+ @BeforeClass public static void setUpClass() {
+ PREV_DEFAULT_LOCALE = Locale.getDefault();
+ }
+
+ @AfterClass public static void tearDownClass() {
+ Locale.setDefault(PREV_DEFAULT_LOCALE);
+ }
+
+ LanguageCodeToWikiLanguageCodeChinese(@NonNull T input, @NonNull
String expected) {
+ this.input = input;
+ this.expected = expected;
+ }
+
+ @NonNull T input() {
+ return input;
+ }
+
+ @NonNull String expected() {
+ return expected;
+ }
+
+ void test(@NonNull Locale defaultLocale, @Nullable String expected) {
+ Locale.setDefault(defaultLocale);
+ String wikiLang =
LanguageUtil.languageCodeToWikiLanguageCode(CHINESE_LANG);
+ assertThat(wikiLang, is(expected));
+ }
+ }
+}
\ No newline at end of file
--
To view, visit https://gerrit.wikimedia.org/r/316495
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I2b759fb4cc512a8441c98d4a8f04fee7db12d954
Gerrit-PatchSet: 4
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Niedzielski <[email protected]>
Gerrit-Reviewer: BearND <[email protected]>
Gerrit-Reviewer: Brion VIBBER <[email protected]>
Gerrit-Reviewer: Dbrant <[email protected]>
Gerrit-Reviewer: Mholloway <[email protected]>
Gerrit-Reviewer: Niedzielski <[email protected]>
Gerrit-Reviewer: Nikerabbit <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits