From db4c4a0ce9848d1e893540054f38c473767cc88d Mon Sep 17 00:00:00 2001 From: Gonk Date: Sun, 16 Feb 2020 21:33:06 +0100 Subject: [PATCH] Replaced Locale.forLanguageTag which is only availale starting at API level 21 --- AndorsTrail/res/values/arrays.xml | 4 ++- .../AndorsTrail/AndorsTrailApplication.java | 25 +++++++++++++------ 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/AndorsTrail/res/values/arrays.xml b/AndorsTrail/res/values/arrays.xml index 7de0256aa..b4f6f3a4c 100644 --- a/AndorsTrail/res/values/arrays.xml +++ b/AndorsTrail/res/values/arrays.xml @@ -134,9 +134,11 @@ Português Brasil (85%) Русский язык (98%) + + default - en + en-US de es fr diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/AndorsTrailApplication.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/AndorsTrailApplication.java index a2312870f..ba01fb6f1 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/AndorsTrailApplication.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/AndorsTrailApplication.java @@ -70,7 +70,6 @@ public final class AndorsTrailApplication extends Application { private Pair lastLocale = null; - @SuppressLint("NewApi") public boolean setLocale(Activity context) { Resources res = context.getResources(); Configuration conf = res.getConfiguration(); @@ -80,11 +79,7 @@ public final class AndorsTrailApplication extends Application { if (lastLocale != null && lastLocale.first == preferences.language) { targetLocale = lastLocale.second; } else { - if (preferences.language.equalsIgnoreCase("default")) { - targetLocale = defaultLocale; - } else { - targetLocale = Locale.forLanguageTag(preferences.language); - } + targetLocale = localeForLanguageTag(preferences.language); lastLocale = new Pair(preferences.language, targetLocale); } @@ -98,7 +93,23 @@ public final class AndorsTrailApplication extends Application { return true; } - + + // Supports language or language_COUNTRY in short form e.g. "en" or "en_US" + private Locale localeForLanguageTag(String languageTag) { + Locale locale = null; + if (languageTag != null && !languageTag.equalsIgnoreCase("default")) { + final int pos = languageTag.indexOf('-'); + if (pos == -1) { + locale = new Locale(languageTag); + } + else locale = new Locale(languageTag.substring(0, pos), languageTag.substring(pos+1)); + } + if (locale == null) { + locale = defaultLocale; + } + return locale; + } + /** * Logging to text file system as found on https://stackoverflow.com/questions/19565685/saving-logcat-to-a-text-file-in-android-device */