diff --git a/leankeykeyboard/build.gradle b/leankeykeyboard/build.gradle index 0f173b6..0ca76ee 100644 --- a/leankeykeyboard/build.gradle +++ b/leankeykeyboard/build.gradle @@ -8,8 +8,8 @@ android { applicationId "org.liskovsoft.leankeykeyboard.pro" minSdkVersion project.properties.minSdkVersion targetSdkVersion project.properties.targetSdkVersion - versionCode 61 - versionName "4.3.11" + versionCode 62 + versionName "4.3.12" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" @@ -34,6 +34,12 @@ android { output.outputFile = new File(output.outputFile.parent, newApkName) } } + + lintOptions { + abortOnError true + disable 'MissingTranslation' + disable 'NewApi' + } } dependencies { diff --git a/leankeykeyboard/src/main/AndroidManifest.xml b/leankeykeyboard/src/main/AndroidManifest.xml index 21d603d..5c8daf7 100644 --- a/leankeykeyboard/src/main/AndroidManifest.xml +++ b/leankeykeyboard/src/main/AndroidManifest.xml @@ -5,10 +5,9 @@ - + - - + @@ -21,7 +20,7 @@ - + diff --git a/leankeykeyboard/src/main/java/com/google/android/leanback/ime/LeanbackKeyboardContainer.java b/leankeykeyboard/src/main/java/com/google/android/leanback/ime/LeanbackKeyboardContainer.java index f442112..0ac7be7 100644 --- a/leankeykeyboard/src/main/java/com/google/android/leanback/ime/LeanbackKeyboardContainer.java +++ b/leankeykeyboard/src/main/java/com/google/android/leanback/ime/LeanbackKeyboardContainer.java @@ -36,8 +36,8 @@ import android.widget.RelativeLayout.LayoutParams; import com.google.android.leanback.ime.voice.RecognizerView; import com.google.android.leanback.ime.voice.SpeechLevelSource; import com.google.leanback.ime.LeanbackImeService; -import com.liskovsoft.inputchooser.ChooseKeyboardDialog; -import com.liskovsoft.inputchooser.LeanKeyPreferences; +import com.liskovsoft.other.ChooseKeyboardDialog; +import com.liskovsoft.utils.LeanKeyPreferences; import com.liskovsoft.keyboardaddons.KeyboardManager; import com.liskovsoft.leankeykeyboard.R; diff --git a/leankeykeyboard/src/main/java/com/google/leanback/ime/LeanbackImeService.java b/leankeykeyboard/src/main/java/com/google/leanback/ime/LeanbackImeService.java index 1b1976c..c32c545 100644 --- a/leankeykeyboard/src/main/java/com/google/leanback/ime/LeanbackImeService.java +++ b/leankeykeyboard/src/main/java/com/google/leanback/ime/LeanbackImeService.java @@ -18,6 +18,7 @@ import com.google.android.leanback.ime.LeanbackKeyboardController.InputListener; import com.google.android.leanback.ime.LeanbackKeyboardView; import com.google.android.leanback.ime.LeanbackSuggestionsFactory; import com.google.android.leanback.ime.LeanbackUtils; +import com.liskovsoft.utils.LangUpdater; public class LeanbackImeService extends InputMethodService { private static final boolean DEBUG = false; @@ -58,6 +59,14 @@ public class LeanbackImeService extends InputMethodService { } } + @Override + public void onCreate() { + super.onCreate(); + + LangUpdater langUpdater = new LangUpdater(this); + langUpdater.update(); + } + private void clearSuggestionsDelayed() { if (!mSuggestionsFactory.shouldSuggestionsAmend()) { mHandler.removeMessages(MSG_SUGGESTIONS_CLEAR); diff --git a/leankeykeyboard/src/main/java/com/liskovsoft/inputchooser/ChooseKeyboardDialog.java b/leankeykeyboard/src/main/java/com/liskovsoft/other/ChooseKeyboardDialog.java similarity index 96% rename from leankeykeyboard/src/main/java/com/liskovsoft/inputchooser/ChooseKeyboardDialog.java rename to leankeykeyboard/src/main/java/com/liskovsoft/other/ChooseKeyboardDialog.java index 6be05cf..8d2c607 100644 --- a/leankeykeyboard/src/main/java/com/liskovsoft/inputchooser/ChooseKeyboardDialog.java +++ b/leankeykeyboard/src/main/java/com/liskovsoft/other/ChooseKeyboardDialog.java @@ -1,4 +1,4 @@ -package com.liskovsoft.inputchooser; +package com.liskovsoft.other; import android.annotation.SuppressLint; import android.annotation.TargetApi; diff --git a/leankeykeyboard/src/main/java/com/liskovsoft/inputchooser/RestartServiceReceiver.java b/leankeykeyboard/src/main/java/com/liskovsoft/other/RestartServiceReceiver.java similarity index 94% rename from leankeykeyboard/src/main/java/com/liskovsoft/inputchooser/RestartServiceReceiver.java rename to leankeykeyboard/src/main/java/com/liskovsoft/other/RestartServiceReceiver.java index 3b9b29a..92c6ce0 100644 --- a/leankeykeyboard/src/main/java/com/liskovsoft/inputchooser/RestartServiceReceiver.java +++ b/leankeykeyboard/src/main/java/com/liskovsoft/other/RestartServiceReceiver.java @@ -1,10 +1,8 @@ -package com.liskovsoft.inputchooser; +package com.liskovsoft.other; import android.app.*; import android.content.*; import android.content.res.*; -import android.net.*; import android.util.*; -import android.view.inputmethod.*; import java.util.*; diff --git a/leankeykeyboard/src/main/java/com/liskovsoft/inputchooser/SettingsActivity.java b/leankeykeyboard/src/main/java/com/liskovsoft/other/SettingsActivity.java similarity index 68% rename from leankeykeyboard/src/main/java/com/liskovsoft/inputchooser/SettingsActivity.java rename to leankeykeyboard/src/main/java/com/liskovsoft/other/SettingsActivity.java index fe39960..827ee71 100644 --- a/leankeykeyboard/src/main/java/com/liskovsoft/inputchooser/SettingsActivity.java +++ b/leankeykeyboard/src/main/java/com/liskovsoft/other/SettingsActivity.java @@ -2,11 +2,11 @@ // Decompiled by Procyon v0.5.30 // -package com.liskovsoft.inputchooser; +package com.liskovsoft.other; import android.annotation.SuppressLint; import android.content.ActivityNotFoundException; -import android.content.Context; +import android.content.pm.PackageManager; import android.widget.Toast; import android.os.Bundle; import android.content.ComponentName; @@ -19,27 +19,27 @@ public class SettingsActivity extends Activity { @SuppressLint("WrongConstant") private void addIntentFlags(final Intent intent) { - intent.addFlags(67108864); - intent.addFlags(536870912); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); } @SuppressLint("WrongConstant") private ActivityInfo getCurrentActivityInfo() { try { - return this.getPackageManager().getActivityInfo(this.getComponentName(), 129); + return getPackageManager().getActivityInfo(getComponentName(), PackageManager.GET_META_DATA | PackageManager.GET_ACTIVITIES); } catch (NameNotFoundException ex) { ex.printStackTrace(); - this.makeLongToast(ex.getLocalizedMessage(), 10); + makeLongToast(ex.getLocalizedMessage(), 10); return null; } } private void launchApp() { - final Intent intent = this.makeIntent(this.getCurrentActivityInfo()); - this.addIntentFlags(intent); - this.startIntent(intent); - this.finish(); + final Intent intent = makeIntent(getCurrentActivityInfo()); + addIntentFlags(intent); + startIntent(intent); + finish(); } private Intent makeIntent(final ActivityInfo activityInfo) { @@ -53,25 +53,25 @@ public class SettingsActivity extends Activity return intent; } - private void makeLongToast(final String s, int i) { + private void makeLongToast(final String s, int nums) { int n; - for (n = i / 2, i = 0; i < n; ++i) { + for (n = nums / 2, nums = 0; nums < n; ++nums) { Toast.makeText(this, s, Toast.LENGTH_LONG).show(); } } private void startIntent(final Intent intent) { try { - this.startActivity(intent); + startActivity(intent); } catch (ActivityNotFoundException ex) { ex.printStackTrace(); - this.makeLongToast(ex.getLocalizedMessage(), 10); + makeLongToast(ex.getLocalizedMessage(), 10); } } protected void onCreate(final Bundle bundle) { super.onCreate(bundle); - this.launchApp(); + launchApp(); } } diff --git a/leankeykeyboard/src/main/java/com/liskovsoft/inputchooser/widgets/DialogTitle.java b/leankeykeyboard/src/main/java/com/liskovsoft/other/widgets/DialogTitle.java similarity index 96% rename from leankeykeyboard/src/main/java/com/liskovsoft/inputchooser/widgets/DialogTitle.java rename to leankeykeyboard/src/main/java/com/liskovsoft/other/widgets/DialogTitle.java index 8d0f2be..5bf2afc 100644 --- a/leankeykeyboard/src/main/java/com/liskovsoft/inputchooser/widgets/DialogTitle.java +++ b/leankeykeyboard/src/main/java/com/liskovsoft/other/widgets/DialogTitle.java @@ -21,7 +21,7 @@ // : https://github.com/aosp-mirror/platform_frameworks_base/blob/master/core/res/res/values/attrs.xml -package com.liskovsoft.inputchooser.widgets; +package com.liskovsoft.other.widgets; import android.content.Context; import android.content.res.TypedArray; diff --git a/leankeykeyboard/src/main/java/com/liskovsoft/utils/Helpers.java b/leankeykeyboard/src/main/java/com/liskovsoft/utils/Helpers.java new file mode 100644 index 0000000..4427518 --- /dev/null +++ b/leankeykeyboard/src/main/java/com/liskovsoft/utils/Helpers.java @@ -0,0 +1,144 @@ +package com.liskovsoft.utils; + +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.os.Build; +import android.os.Handler; +import android.os.Looper; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.nio.charset.Charset; +import java.text.DateFormat; +import java.util.Date; +import java.util.List; +import java.util.Locale; +import java.util.Scanner; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class Helpers { + /** + * Simple wildcard matching routine. Implemented without regex. So you may expect huge performance boost. + * @param host + * @param mask + * @return + */ + public static boolean matchSubstr(String host, String mask) { + String[] sections = mask.split("\\*"); + String text = host; + for (String section : sections) { + int index = text.indexOf(section); + if (index == -1) { + return false; + } + text = text.substring(index + section.length()); + } + return true; + } + + public static boolean matchSubstrNoCase(String host, String mask) { + return matchSubstr(host.toLowerCase(), mask.toLowerCase()); + } + + public static InputStream getAsset(Context ctx, String fileName) { + InputStream is = null; + try { + is = ctx.getAssets().open(fileName); + } catch (IOException e) { + e.printStackTrace(); + } + return is; + } + + public static String encodeURI(byte[] data) { + try { + // make behaviour of java uri-encode the same as javascript's one + return URLEncoder.encode(new String(data, "UTF-8"), "UTF-8").replace("+", "%20"); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + } + + public static boolean floatEquals(float num1, float num2) { + float epsilon = 0.1f; + return Math.abs(num1 - num2) < epsilon; + } + + public static String getDeviceName() { + return String.format("%s (%s)", Build.MODEL, Build.PRODUCT); + } + + public static boolean deviceMatch(String[] devicesToProcess) { + String thisDeviceName = Helpers.getDeviceName(); + for (String deviceName : devicesToProcess) { + boolean match = matchSubstrNoCase(thisDeviceName, deviceName); + if (match) { + return true; + } + } + return false; + } + + public static String toString(InputStream inputStream) { + if (inputStream == null) { + return null; + } + + Scanner s = new Scanner(inputStream).useDelimiter("\\A"); + String result = s.hasNext() ? s.next() : ""; + return result; + } + + public static InputStream toStream(String content) { + return new ByteArrayInputStream(content.getBytes(Charset.forName("UTF8"))); + } + + public static void postOnUiThread(Runnable runnable) { + new Handler(Looper.getMainLooper()).post(runnable); + } + + public static String unixToLocalDate(Context ctx, String timestamp) { + Locale current = ctx.getResources().getConfiguration().locale; + DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.LONG, current); + Date date; + if (timestamp == null) { + date = new Date(); + } else { + date = new Date((long) Integer.parseInt(timestamp) * 1000); + } + return dateFormat.format(date); + } + + public static String runMultiMatcher(String input, String... patterns) { + if (input == null) { + return null; + } + + Pattern regex; + Matcher matcher; + String result = null; + for (String pattern : patterns) { + regex = Pattern.compile(pattern); + matcher = regex.matcher(input); + + if (matcher.find()) { + result = matcher.group(matcher.groupCount()); // get last group + break; + } + } + + return result; + } + + public static boolean isCallable(Context ctx, Intent intent) { + List list = ctx.getPackageManager().queryIntentActivities(intent, + PackageManager.MATCH_DEFAULT_ONLY); + return list.size() > 0; + } +} diff --git a/leankeykeyboard/src/main/java/com/liskovsoft/utils/LangUpdater.java b/leankeykeyboard/src/main/java/com/liskovsoft/utils/LangUpdater.java new file mode 100644 index 0000000..aaf7e8c --- /dev/null +++ b/leankeykeyboard/src/main/java/com/liskovsoft/utils/LangUpdater.java @@ -0,0 +1,127 @@ +package com.liskovsoft.utils; + +import android.content.Context; +import android.content.Intent; +import android.content.pm.ResolveInfo; +import android.content.res.Configuration; + +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import java.util.StringTokenizer; + +public class LangUpdater { + private static final String LOCALE_EN_US = "en_US"; + private static final String LOCALE_RU = "ru_RU"; + private Context mContext; + private String[] rusPackages = {"dkc.androidtv.tree", "dkc.video.fsbox", "dkc.video.hdbox", "dkc.video.uatv"}; + + public LangUpdater(Context ctx) { + mContext = ctx; + } + + public void update() { + tryToEnableRussian(); + tryToForceEnglishOnDevices(); + tryToRestoreLanguage(); + } + + private void tryToRestoreLanguage() { + String langCode = getPreferredLocale(); + if (langCode != null) { + forceLocale(langCode); + } + } + + private void tryToForceEnglishOnDevices() { + String deviceName = Helpers.getDeviceName(); + switch (deviceName) { + case "ChangHong Android TV (full_mst638)": + forceLocale(LOCALE_EN_US); + } + } + + private void tryToBypassChinese() { + String script = LocaleUtility.getScript(Locale.getDefault()); + if (isChineseScript(script)) { + forceLocale(LOCALE_EN_US); + } + } + + private boolean isChineseScript(String script) { + switch (script) { + case "Hani": + case "Hans": + case "Hant": + return true; + } + return false; + } + + private void tryToEnableRussian() { + List installedPackages = getListInstalledPackages(); + for (String pkgName : installedPackages) { + if (isRussianPackage(pkgName)) { + forceLocale(LOCALE_RU); + } + } + } + + // short lang code. ex: "ru" + private void forceLocale(String langCode) { + if (langCode == null || langCode.isEmpty()) { + return; + } + + Locale locale = parseLangCode(langCode); + Locale.setDefault(locale); + Configuration config = mContext.getResources().getConfiguration(); + config.locale = locale; + mContext.getResources().updateConfiguration(config, + mContext.getResources().getDisplayMetrics()); + } + + private boolean isRussianPackage(String pkgName) { + for (String rusPackage : rusPackages) { + if (rusPackage.equals(pkgName)){ + return true; + } + } + return false; + } + + private List getListInstalledPackages() { + Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); + mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); + List pkgAppsList = mContext.getPackageManager().queryIntentActivities( mainIntent, 0); + List result = new ArrayList<>(); + for (ResolveInfo info : pkgAppsList) { + result.add(info.activityInfo.packageName); + } + return result; + } + + public String getLocale() { + Configuration config = mContext.getResources().getConfiguration(); + return config.locale.getLanguage(); + } + + /** + * Get locale as lang code (e.g. zh, ru_RU etc) + * @return lang code + */ + public String getPreferredLocale() { + return LeanKeyPreferences.instance(mContext).getPreferredLanguage(); + } + + public void setPreferredLocale(String langCode) { + LeanKeyPreferences.instance(mContext).setPreferredLanguage(langCode); + } + + private Locale parseLangCode(String langCode) { + StringTokenizer tokenizer = new StringTokenizer(langCode, "_"); + String lang = tokenizer.nextToken(); + String country = tokenizer.hasMoreTokens() ? tokenizer.nextToken() : ""; + return new Locale(lang, country); + } +} diff --git a/leankeykeyboard/src/main/java/com/liskovsoft/inputchooser/LeanKeyPreferences.java b/leankeykeyboard/src/main/java/com/liskovsoft/utils/LeanKeyPreferences.java similarity index 66% rename from leankeykeyboard/src/main/java/com/liskovsoft/inputchooser/LeanKeyPreferences.java rename to leankeykeyboard/src/main/java/com/liskovsoft/utils/LeanKeyPreferences.java index ef982e5..52a1044 100644 --- a/leankeykeyboard/src/main/java/com/liskovsoft/inputchooser/LeanKeyPreferences.java +++ b/leankeykeyboard/src/main/java/com/liskovsoft/utils/LeanKeyPreferences.java @@ -1,4 +1,4 @@ -package com.liskovsoft.inputchooser; +package com.liskovsoft.utils; import android.content.Context; import android.content.SharedPreferences; @@ -6,6 +6,7 @@ import android.preference.PreferenceManager; public final class LeanKeyPreferences { private static final String APP_RUN_ONCE = "appRunOnce"; + private static final String BOOTSTRAP_SELECTED_LANGUAGE = "bootstrapSelectedLanguage"; private static LeanKeyPreferences sInstance; private final Context mContext; private SharedPreferences mPrefs; @@ -30,4 +31,15 @@ public final class LeanKeyPreferences { .putBoolean(APP_RUN_ONCE, runOnce) .apply(); } + + public void setPreferredLanguage(String name) { + mPrefs.edit() + .putString(BOOTSTRAP_SELECTED_LANGUAGE, name) + .apply(); + } + + public String getPreferredLanguage() { + String name = mPrefs.getString(BOOTSTRAP_SELECTED_LANGUAGE, ""); + return name; + } } diff --git a/leankeykeyboard/src/main/java/com/liskovsoft/utils/LocaleUtility.java b/leankeykeyboard/src/main/java/com/liskovsoft/utils/LocaleUtility.java new file mode 100644 index 0000000..605bb0c --- /dev/null +++ b/leankeykeyboard/src/main/java/com/liskovsoft/utils/LocaleUtility.java @@ -0,0 +1,768 @@ +package com.liskovsoft.utils; + +import android.content.Context; +import android.os.Build; + +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; + +/* + * Copyright 2013 Phil Brown + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * + * Get Script name by Locale + *
+ * @author Phil Brown + * @since 9:47:09 AM Dec 20, 2013 + * + */ + +/* + * Additional info: + * https://en.wikipedia.org/wiki/Writing_system + * https://stackoverflow.com/questions/19153384/how-to-get-the-script-from-a-locale-object-on-android + * https://docs.oracle.com/javase/7/docs/api/java/util/Locale.html#getScript() + * http://unicode.org/iso15924/iso15924-codes.html + * + * Usage: + * String script = LocaleUtilities.getScript(Locale.getDefault()); + * String script = LocaleUtilities.getScript(getDefaultLocale(myActivity)); + */ +public class LocaleUtility { + + public static Map> scriptsByLocale = new HashMap>(); + + public static Map getScriptsMap(String... keyValuePairs) { + Map languages = new HashMap(); + for (int i = 0; i < keyValuePairs.length; i += 2) { + languages.put(keyValuePairs[i], keyValuePairs[i + 1]); + } + return languages; + } + + static { + scriptsByLocale.put("aa", getScriptsMap("", "Latn")); + scriptsByLocale.put("ab", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("abq", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("abr", getScriptsMap("", "")); + scriptsByLocale.put("ace", getScriptsMap("", "Latn")); + scriptsByLocale.put("ach", getScriptsMap("", "Latn")); + scriptsByLocale.put("ada", getScriptsMap("", "Latn")); + scriptsByLocale.put("ady", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("ae", getScriptsMap("", "Avst")); + scriptsByLocale.put("af", getScriptsMap("", "Latn")); + scriptsByLocale.put("agq", getScriptsMap("", "Latn")); + scriptsByLocale.put("aii", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("ain", getScriptsMap("", "Kana")); + scriptsByLocale.put("ak", getScriptsMap("", "Latn")); + scriptsByLocale.put("akk", getScriptsMap("", "Xsux")); + scriptsByLocale.put("ale", getScriptsMap("", "Latn")); + scriptsByLocale.put("alt", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("am", getScriptsMap("", "Ethi")); + scriptsByLocale.put("amo", getScriptsMap("", "Latn")); + scriptsByLocale.put("an", getScriptsMap("", "Latn")); + scriptsByLocale.put("anp", getScriptsMap("", "Deva")); + scriptsByLocale.put("aoz", getScriptsMap("", "")); + scriptsByLocale.put("ar", getScriptsMap("", "Arab", "IR", "Syrc")); + scriptsByLocale.put("arc", getScriptsMap("", "Armi")); + scriptsByLocale.put("arn", getScriptsMap("", "Latn")); + scriptsByLocale.put("arp", getScriptsMap("", "Latn")); + scriptsByLocale.put("arw", getScriptsMap("", "Latn")); + scriptsByLocale.put("as", getScriptsMap("", "Beng")); + scriptsByLocale.put("asa", getScriptsMap("", "Latn")); + scriptsByLocale.put("ast", getScriptsMap("", "Latn")); + scriptsByLocale.put("atj", getScriptsMap("", "")); + scriptsByLocale.put("av", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("awa", getScriptsMap("", "Deva")); + scriptsByLocale.put("ay", getScriptsMap("", "Latn")); + scriptsByLocale.put("az", getScriptsMap("", "Latn", "AZ", "Cyrl", "IR", "Arab")); + scriptsByLocale.put("ba", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("bal", getScriptsMap("", "Arab", "IR", "Latn", "PK", "Latn")); + scriptsByLocale.put("ban", getScriptsMap("", "Latn", "ID", "Bali")); + scriptsByLocale.put("bap", getScriptsMap("", "")); + scriptsByLocale.put("bas", getScriptsMap("", "Latn")); + scriptsByLocale.put("bax", getScriptsMap("", "Bamu")); + scriptsByLocale.put("bbc", getScriptsMap("", "Latn", "ID", "Batk")); + scriptsByLocale.put("bbj", getScriptsMap("", "")); + scriptsByLocale.put("bci", getScriptsMap("", "")); + scriptsByLocale.put("be", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("bej", getScriptsMap("", "Arab")); + scriptsByLocale.put("bem", getScriptsMap("", "Latn")); + scriptsByLocale.put("bew", getScriptsMap("", "")); + scriptsByLocale.put("bez", getScriptsMap("", "Latn")); + scriptsByLocale.put("bfd", getScriptsMap("", "")); + scriptsByLocale.put("bfq", getScriptsMap("", "Taml")); + scriptsByLocale.put("bft", getScriptsMap("", "Arab")); + scriptsByLocale.put("bfy", getScriptsMap("", "Deva")); + scriptsByLocale.put("bg", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("bgc", getScriptsMap("", "")); + scriptsByLocale.put("bgx", getScriptsMap("", "")); + scriptsByLocale.put("bh", getScriptsMap("", "Deva")); + scriptsByLocale.put("bhb", getScriptsMap("", "Deva")); + scriptsByLocale.put("bhi", getScriptsMap("", "")); + scriptsByLocale.put("bhk", getScriptsMap("", "")); + scriptsByLocale.put("bho", getScriptsMap("", "Deva")); + scriptsByLocale.put("bi", getScriptsMap("", "Latn")); + scriptsByLocale.put("bik", getScriptsMap("", "Latn")); + scriptsByLocale.put("bin", getScriptsMap("", "Latn")); + scriptsByLocale.put("bjj", getScriptsMap("", "Deva")); + scriptsByLocale.put("bjn", getScriptsMap("", "")); + scriptsByLocale.put("bkm", getScriptsMap("", "")); + scriptsByLocale.put("bku", getScriptsMap("", "Latn")); + scriptsByLocale.put("bla", getScriptsMap("", "Latn")); + scriptsByLocale.put("blt", getScriptsMap("", "Tavt")); + scriptsByLocale.put("bm", getScriptsMap("", "Latn")); + scriptsByLocale.put("bmq", getScriptsMap("", "")); + scriptsByLocale.put("bn", getScriptsMap("", "Beng")); + scriptsByLocale.put("bo", getScriptsMap("", "Tibt")); + scriptsByLocale.put("bqi", getScriptsMap("", "")); + scriptsByLocale.put("bqv", getScriptsMap("", "Latn")); + scriptsByLocale.put("br", getScriptsMap("", "Latn")); + scriptsByLocale.put("bra", getScriptsMap("", "Deva")); + scriptsByLocale.put("brh", getScriptsMap("", "")); + scriptsByLocale.put("brx", getScriptsMap("", "Deva")); + scriptsByLocale.put("bs", getScriptsMap("", "Latn")); + scriptsByLocale.put("bss", getScriptsMap("", "")); + scriptsByLocale.put("bto", getScriptsMap("", "")); + scriptsByLocale.put("btv", getScriptsMap("", "Deva")); + scriptsByLocale.put("bua", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("buc", getScriptsMap("", "Latn")); + scriptsByLocale.put("bug", getScriptsMap("", "Latn", "ID", "Bugi")); + scriptsByLocale.put("bum", getScriptsMap("", "")); + scriptsByLocale.put("bvb", getScriptsMap("", "")); + scriptsByLocale.put("bya", getScriptsMap("", "Latn")); + scriptsByLocale.put("byn", getScriptsMap("", "Ethi")); + scriptsByLocale.put("byv", getScriptsMap("", "")); + scriptsByLocale.put("bze", getScriptsMap("", "")); + scriptsByLocale.put("bzx", getScriptsMap("", "")); + scriptsByLocale.put("ca", getScriptsMap("", "Latn")); + scriptsByLocale.put("cad", getScriptsMap("", "Latn")); + scriptsByLocale.put("car", getScriptsMap("", "Latn")); + scriptsByLocale.put("cay", getScriptsMap("", "Latn")); + scriptsByLocale.put("cch", getScriptsMap("", "Latn")); + scriptsByLocale.put("ccp", getScriptsMap("", "Beng")); + scriptsByLocale.put("ce", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("ceb", getScriptsMap("", "Latn")); + scriptsByLocale.put("cgg", getScriptsMap("", "Latn")); + scriptsByLocale.put("ch", getScriptsMap("", "Latn")); + scriptsByLocale.put("chk", getScriptsMap("", "Latn")); + scriptsByLocale.put("chm", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("chn", getScriptsMap("", "Latn")); + scriptsByLocale.put("cho", getScriptsMap("", "Latn")); + scriptsByLocale.put("chp", getScriptsMap("", "Latn")); + scriptsByLocale.put("chr", getScriptsMap("", "Cher")); + scriptsByLocale.put("chy", getScriptsMap("", "Latn")); + scriptsByLocale.put("cja", getScriptsMap("", "Arab")); + scriptsByLocale.put("cjm", getScriptsMap("", "Cham")); + scriptsByLocale.put("cjs", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("ckb", getScriptsMap("", "Arab")); + scriptsByLocale.put("ckt", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("co", getScriptsMap("", "Latn")); + scriptsByLocale.put("cop", getScriptsMap("", "Arab")); + scriptsByLocale.put("cpe", getScriptsMap("", "Latn")); + scriptsByLocale.put("cr", getScriptsMap("", "Cans")); + scriptsByLocale.put("crh", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("crj", getScriptsMap("", "")); + scriptsByLocale.put("crk", getScriptsMap("", "Cans")); + scriptsByLocale.put("crl", getScriptsMap("", "")); + scriptsByLocale.put("crm", getScriptsMap("", "")); + scriptsByLocale.put("crs", getScriptsMap("", "")); + scriptsByLocale.put("cs", getScriptsMap("", "Latn")); + scriptsByLocale.put("csb", getScriptsMap("", "Latn")); + scriptsByLocale.put("csw", getScriptsMap("", "")); + scriptsByLocale.put("cu", getScriptsMap("", "Glag")); + scriptsByLocale.put("cv", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("cy", getScriptsMap("", "Latn")); + scriptsByLocale.put("da", getScriptsMap("", "Latn")); + scriptsByLocale.put("daf", getScriptsMap("", "")); + scriptsByLocale.put("dak", getScriptsMap("", "Latn")); + scriptsByLocale.put("dar", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("dav", getScriptsMap("", "Latn")); + scriptsByLocale.put("dcc", getScriptsMap("", "")); + scriptsByLocale.put("de", getScriptsMap("", "Latn", "BR", "Runr", "KZ", "Runr", "US", "Runr")); + scriptsByLocale.put("del", getScriptsMap("", "Latn")); + scriptsByLocale.put("den", getScriptsMap("", "Latn")); + scriptsByLocale.put("dgr", getScriptsMap("", "Latn")); + scriptsByLocale.put("din", getScriptsMap("", "Latn")); + scriptsByLocale.put("dje", getScriptsMap("", "Latn")); + scriptsByLocale.put("dng", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("doi", getScriptsMap("", "Arab")); + scriptsByLocale.put("dsb", getScriptsMap("", "Latn")); + scriptsByLocale.put("dtm", getScriptsMap("", "")); + scriptsByLocale.put("dua", getScriptsMap("", "Latn")); + scriptsByLocale.put("dv", getScriptsMap("", "Thaa")); + scriptsByLocale.put("dyo", getScriptsMap("", "Arab")); + scriptsByLocale.put("dyu", getScriptsMap("", "Latn")); + scriptsByLocale.put("dz", getScriptsMap("", "Tibt")); + scriptsByLocale.put("ebu", getScriptsMap("", "Latn")); + scriptsByLocale.put("ee", getScriptsMap("", "Latn")); + scriptsByLocale.put("efi", getScriptsMap("", "Latn")); + scriptsByLocale.put("egy", getScriptsMap("", "Egyp")); + scriptsByLocale.put("eka", getScriptsMap("", "Latn")); + scriptsByLocale.put("eky", getScriptsMap("", "Kali")); + scriptsByLocale.put("el", getScriptsMap("", "Grek")); + scriptsByLocale.put("en", getScriptsMap("", "Latn")); + scriptsByLocale.put("eo", getScriptsMap("", "Latn")); + scriptsByLocale.put("es", getScriptsMap("", "Latn")); + scriptsByLocale.put("et", getScriptsMap("", "Latn")); + scriptsByLocale.put("ett", getScriptsMap("", "Ital")); + scriptsByLocale.put("eu", getScriptsMap("", "Latn")); + scriptsByLocale.put("evn", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("ewo", getScriptsMap("", "Latn")); + scriptsByLocale.put("fa", getScriptsMap("", "Arab")); + scriptsByLocale.put("fan", getScriptsMap("", "Latn")); + scriptsByLocale.put("ff", getScriptsMap("", "Latn")); + scriptsByLocale.put("ffm", getScriptsMap("", "")); + scriptsByLocale.put("fi", getScriptsMap("", "Latn")); + scriptsByLocale.put("fil", getScriptsMap("", "Latn", "US", "Tglg")); + scriptsByLocale.put("fiu", getScriptsMap("", "Latn")); + scriptsByLocale.put("fj", getScriptsMap("", "Latn")); + scriptsByLocale.put("fo", getScriptsMap("", "Latn")); + scriptsByLocale.put("fon", getScriptsMap("", "Latn")); + scriptsByLocale.put("fr", getScriptsMap("", "Latn")); + scriptsByLocale.put("frr", getScriptsMap("", "Latn")); + scriptsByLocale.put("frs", getScriptsMap("", "Latn")); + scriptsByLocale.put("fud", getScriptsMap("", "")); + scriptsByLocale.put("fuq", getScriptsMap("", "")); + scriptsByLocale.put("fur", getScriptsMap("", "Latn")); + scriptsByLocale.put("fuv", getScriptsMap("", "")); + scriptsByLocale.put("fy", getScriptsMap("", "Latn")); + scriptsByLocale.put("ga", getScriptsMap("", "Latn")); + scriptsByLocale.put("gaa", getScriptsMap("", "Latn")); + scriptsByLocale.put("gag", getScriptsMap("", "Latn", "MD", "Cyrl")); + scriptsByLocale.put("gay", getScriptsMap("", "Latn")); + scriptsByLocale.put("gba", getScriptsMap("", "Arab")); + scriptsByLocale.put("gbm", getScriptsMap("", "Deva")); + scriptsByLocale.put("gcr", getScriptsMap("", "Latn")); + scriptsByLocale.put("gd", getScriptsMap("", "Latn")); + scriptsByLocale.put("gez", getScriptsMap("", "Ethi")); + scriptsByLocale.put("ggn", getScriptsMap("", "")); + scriptsByLocale.put("gil", getScriptsMap("", "Latn")); + scriptsByLocale.put("gjk", getScriptsMap("", "")); + scriptsByLocale.put("gju", getScriptsMap("", "")); + scriptsByLocale.put("gl", getScriptsMap("", "Latn")); + scriptsByLocale.put("gld", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("glk", getScriptsMap("", "")); + scriptsByLocale.put("gn", getScriptsMap("", "Latn")); + scriptsByLocale.put("gon", getScriptsMap("", "Telu")); + scriptsByLocale.put("gor", getScriptsMap("", "Latn")); + scriptsByLocale.put("gos", getScriptsMap("", "")); + scriptsByLocale.put("got", getScriptsMap("", "Goth")); + scriptsByLocale.put("grb", getScriptsMap("", "Latn")); + scriptsByLocale.put("grc", getScriptsMap("", "Cprt")); + scriptsByLocale.put("grt", getScriptsMap("", "Beng")); + scriptsByLocale.put("gsw", getScriptsMap("", "Latn")); + scriptsByLocale.put("gu", getScriptsMap("", "Gujr")); + scriptsByLocale.put("gub", getScriptsMap("", "")); + scriptsByLocale.put("guz", getScriptsMap("", "Latn")); + scriptsByLocale.put("gv", getScriptsMap("", "Latn")); + scriptsByLocale.put("gvr", getScriptsMap("", "")); + scriptsByLocale.put("gwi", getScriptsMap("", "Latn")); + scriptsByLocale.put("ha", getScriptsMap("", "Arab", "NE", "Latn", "GH", "Latn")); + scriptsByLocale.put("hai", getScriptsMap("", "Latn")); + scriptsByLocale.put("haw", getScriptsMap("", "Latn")); + scriptsByLocale.put("haz", getScriptsMap("", "")); + scriptsByLocale.put("he", getScriptsMap("", "Hebr")); + scriptsByLocale.put("hi", getScriptsMap("", "Deva")); + scriptsByLocale.put("hil", getScriptsMap("", "Latn")); + scriptsByLocale.put("hit", getScriptsMap("", "Xsux")); + scriptsByLocale.put("hmn", getScriptsMap("", "Latn")); + scriptsByLocale.put("hnd", getScriptsMap("", "")); + scriptsByLocale.put("hne", getScriptsMap("", "Deva")); + scriptsByLocale.put("hnn", getScriptsMap("", "Latn")); + scriptsByLocale.put("hno", getScriptsMap("", "")); + scriptsByLocale.put("ho", getScriptsMap("", "Latn")); + scriptsByLocale.put("hoc", getScriptsMap("", "Deva")); + scriptsByLocale.put("hoj", getScriptsMap("", "Deva")); + scriptsByLocale.put("hop", getScriptsMap("", "Latn")); + scriptsByLocale.put("hr", getScriptsMap("", "Latn")); + scriptsByLocale.put("hsb", getScriptsMap("", "Latn")); + scriptsByLocale.put("ht", getScriptsMap("", "Latn")); + scriptsByLocale.put("hu", getScriptsMap("", "Latn")); + scriptsByLocale.put("hup", getScriptsMap("", "Latn")); + scriptsByLocale.put("hy", getScriptsMap("", "Armn")); + scriptsByLocale.put("hz", getScriptsMap("", "Latn")); + scriptsByLocale.put("ia", getScriptsMap("", "Latn")); + scriptsByLocale.put("iba", getScriptsMap("", "Latn")); + scriptsByLocale.put("ibb", getScriptsMap("", "Latn")); + scriptsByLocale.put("id", getScriptsMap("", "Latn")); + scriptsByLocale.put("ig", getScriptsMap("", "Latn")); + scriptsByLocale.put("ii", getScriptsMap("", "Yiii", "CN", "Latn")); + scriptsByLocale.put("ik", getScriptsMap("", "Latn")); + scriptsByLocale.put("ikt", getScriptsMap("", "")); + scriptsByLocale.put("ilo", getScriptsMap("", "Latn")); + scriptsByLocale.put("inh", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("is", getScriptsMap("", "Latn")); + scriptsByLocale.put("it", getScriptsMap("", "Latn")); + scriptsByLocale.put("iu", getScriptsMap("", "Cans", "CA", "Latn")); + scriptsByLocale.put("ja", getScriptsMap("", "Jpan")); + scriptsByLocale.put("jmc", getScriptsMap("", "Latn")); + scriptsByLocale.put("jml", getScriptsMap("", "")); + scriptsByLocale.put("jpr", getScriptsMap("", "Hebr")); + scriptsByLocale.put("jrb", getScriptsMap("", "Hebr")); + scriptsByLocale.put("jv", getScriptsMap("", "Latn", "ID", "Java")); + scriptsByLocale.put("ka", getScriptsMap("", "Geor")); + scriptsByLocale.put("kaa", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("kab", getScriptsMap("", "Latn")); + scriptsByLocale.put("kac", getScriptsMap("", "Latn")); + scriptsByLocale.put("kaj", getScriptsMap("", "Latn")); + scriptsByLocale.put("kam", getScriptsMap("", "Latn")); + scriptsByLocale.put("kao", getScriptsMap("", "")); + scriptsByLocale.put("kbd", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("kca", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("kcg", getScriptsMap("", "Latn")); + scriptsByLocale.put("kck", getScriptsMap("", "")); + scriptsByLocale.put("kde", getScriptsMap("", "Latn")); + scriptsByLocale.put("kdt", getScriptsMap("", "Thai")); + scriptsByLocale.put("kea", getScriptsMap("", "Latn")); + scriptsByLocale.put("kfo", getScriptsMap("", "Latn")); + scriptsByLocale.put("kfr", getScriptsMap("", "Deva")); + scriptsByLocale.put("kfy", getScriptsMap("", "")); + scriptsByLocale.put("kg", getScriptsMap("", "Latn")); + scriptsByLocale.put("kge", getScriptsMap("", "")); + scriptsByLocale.put("kgp", getScriptsMap("", "")); + scriptsByLocale.put("kha", getScriptsMap("", "Latn", "IN", "Beng")); + scriptsByLocale.put("khb", getScriptsMap("", "Talu")); + scriptsByLocale.put("khn", getScriptsMap("", "")); + scriptsByLocale.put("khq", getScriptsMap("", "Latn")); + scriptsByLocale.put("kht", getScriptsMap("", "Mymr")); + scriptsByLocale.put("khw", getScriptsMap("", "")); + scriptsByLocale.put("ki", getScriptsMap("", "Latn")); + scriptsByLocale.put("kj", getScriptsMap("", "Latn")); + scriptsByLocale.put("kjg", getScriptsMap("", "")); + scriptsByLocale.put("kjh", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("kk", getScriptsMap("", "Arab", "KZ", "Cyrl", "TR", "Cyrl")); + scriptsByLocale.put("kkj", getScriptsMap("", "")); + scriptsByLocale.put("kl", getScriptsMap("", "Latn")); + scriptsByLocale.put("kln", getScriptsMap("", "Latn")); + scriptsByLocale.put("km", getScriptsMap("", "Khmr")); + scriptsByLocale.put("kmb", getScriptsMap("", "Latn")); + scriptsByLocale.put("kn", getScriptsMap("", "Knda")); + scriptsByLocale.put("ko", getScriptsMap("", "Kore")); + scriptsByLocale.put("koi", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("kok", getScriptsMap("", "Deva")); + scriptsByLocale.put("kos", getScriptsMap("", "Latn")); + scriptsByLocale.put("kpe", getScriptsMap("", "Latn")); + scriptsByLocale.put("kpy", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("kr", getScriptsMap("", "Latn")); + scriptsByLocale.put("krc", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("kri", getScriptsMap("", "Latn")); + scriptsByLocale.put("krl", getScriptsMap("", "Latn")); + scriptsByLocale.put("kru", getScriptsMap("", "Deva")); + scriptsByLocale.put("ks", getScriptsMap("", "Arab")); + scriptsByLocale.put("ksb", getScriptsMap("", "Latn")); + scriptsByLocale.put("ksf", getScriptsMap("", "Latn")); + scriptsByLocale.put("ksh", getScriptsMap("", "Latn")); + scriptsByLocale.put("ku", getScriptsMap("", "Latn", "LB", "Arab")); + scriptsByLocale.put("kum", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("kut", getScriptsMap("", "Latn")); + scriptsByLocale.put("kv", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("kvr", getScriptsMap("", "")); + scriptsByLocale.put("kvx", getScriptsMap("", "")); + scriptsByLocale.put("kw", getScriptsMap("", "Latn")); + scriptsByLocale.put("kxm", getScriptsMap("", "")); + scriptsByLocale.put("kxp", getScriptsMap("", "")); + scriptsByLocale.put("ky", getScriptsMap("", "Cyrl", "CN", "Arab", "TR", "Latn")); + scriptsByLocale.put("kyu", getScriptsMap("", "Kali")); + scriptsByLocale.put("la", getScriptsMap("", "Latn")); + scriptsByLocale.put("lad", getScriptsMap("", "Hebr")); + scriptsByLocale.put("lag", getScriptsMap("", "Latn")); + scriptsByLocale.put("lah", getScriptsMap("", "Arab")); + scriptsByLocale.put("laj", getScriptsMap("", "")); + scriptsByLocale.put("lam", getScriptsMap("", "Latn")); + scriptsByLocale.put("lb", getScriptsMap("", "Latn")); + scriptsByLocale.put("lbe", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("lbw", getScriptsMap("", "")); + scriptsByLocale.put("lcp", getScriptsMap("", "Thai")); + scriptsByLocale.put("lep", getScriptsMap("", "Lepc")); + scriptsByLocale.put("lez", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("lg", getScriptsMap("", "Latn")); + scriptsByLocale.put("li", getScriptsMap("", "Latn")); + scriptsByLocale.put("lif", getScriptsMap("", "Deva")); + scriptsByLocale.put("lis", getScriptsMap("", "Lisu")); + scriptsByLocale.put("ljp", getScriptsMap("", "")); + scriptsByLocale.put("lki", getScriptsMap("", "Arab")); + scriptsByLocale.put("lkt", getScriptsMap("", "")); + scriptsByLocale.put("lmn", getScriptsMap("", "Telu")); + scriptsByLocale.put("lmo", getScriptsMap("", "")); + scriptsByLocale.put("ln", getScriptsMap("", "Latn")); + scriptsByLocale.put("lo", getScriptsMap("", "Laoo")); + scriptsByLocale.put("lol", getScriptsMap("", "Latn")); + scriptsByLocale.put("loz", getScriptsMap("", "Latn")); + scriptsByLocale.put("lrc", getScriptsMap("", "")); + scriptsByLocale.put("lt", getScriptsMap("", "Latn")); + scriptsByLocale.put("lu", getScriptsMap("", "Latn")); + scriptsByLocale.put("lua", getScriptsMap("", "Latn")); + scriptsByLocale.put("lui", getScriptsMap("", "Latn")); + scriptsByLocale.put("lun", getScriptsMap("", "Latn")); + scriptsByLocale.put("luo", getScriptsMap("", "Latn")); + scriptsByLocale.put("lus", getScriptsMap("", "Beng")); + scriptsByLocale.put("lut", getScriptsMap("", "Latn")); + scriptsByLocale.put("luy", getScriptsMap("", "Latn")); + scriptsByLocale.put("luz", getScriptsMap("", "")); + scriptsByLocale.put("lv", getScriptsMap("", "Latn")); + scriptsByLocale.put("lwl", getScriptsMap("", "Thai")); + scriptsByLocale.put("mad", getScriptsMap("", "Latn")); + scriptsByLocale.put("maf", getScriptsMap("", "")); + scriptsByLocale.put("mag", getScriptsMap("", "Deva")); + scriptsByLocale.put("mai", getScriptsMap("", "Deva")); + scriptsByLocale.put("mak", getScriptsMap("", "Latn", "ID", "Bugi")); + scriptsByLocale.put("man", getScriptsMap("", "Latn", "GN", "Nkoo")); + scriptsByLocale.put("mas", getScriptsMap("", "Latn")); + scriptsByLocale.put("maz", getScriptsMap("", "")); + scriptsByLocale.put("mdf", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("mdh", getScriptsMap("", "Latn")); + scriptsByLocale.put("mdr", getScriptsMap("", "Latn")); + scriptsByLocale.put("mdt", getScriptsMap("", "")); + scriptsByLocale.put("men", getScriptsMap("", "Latn")); + scriptsByLocale.put("mer", getScriptsMap("", "Latn")); + scriptsByLocale.put("mfa", getScriptsMap("", "")); + scriptsByLocale.put("mfe", getScriptsMap("", "Latn")); + scriptsByLocale.put("mg", getScriptsMap("", "Latn")); + scriptsByLocale.put("mgh", getScriptsMap("", "Latn")); + scriptsByLocale.put("mgp", getScriptsMap("", "")); + scriptsByLocale.put("mgy", getScriptsMap("", "")); + scriptsByLocale.put("mh", getScriptsMap("", "Latn")); + scriptsByLocale.put("mi", getScriptsMap("", "Latn")); + scriptsByLocale.put("mic", getScriptsMap("", "Latn")); + scriptsByLocale.put("min", getScriptsMap("", "Latn")); + scriptsByLocale.put("mk", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("ml", getScriptsMap("", "Mlym")); + scriptsByLocale.put("mn", getScriptsMap("", "Cyrl", "CN", "Mong")); + scriptsByLocale.put("mnc", getScriptsMap("", "Mong")); + scriptsByLocale.put("mni", getScriptsMap("", "Beng", "IN", "Mtei")); + scriptsByLocale.put("mns", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("mnw", getScriptsMap("", "Mymr")); + scriptsByLocale.put("moe", getScriptsMap("", "")); + scriptsByLocale.put("moh", getScriptsMap("", "Latn")); + scriptsByLocale.put("mos", getScriptsMap("", "Latn")); + scriptsByLocale.put("mr", getScriptsMap("", "Deva")); + scriptsByLocale.put("mrd", getScriptsMap("", "")); + scriptsByLocale.put("mrj", getScriptsMap("", "")); + scriptsByLocale.put("ms", getScriptsMap("", "Arab", "MY", "Latn", "SG", "Latn")); + scriptsByLocale.put("mt", getScriptsMap("", "Latn")); + scriptsByLocale.put("mtr", getScriptsMap("", "")); + scriptsByLocale.put("mua", getScriptsMap("", "Latn")); + scriptsByLocale.put("mus", getScriptsMap("", "Latn")); + scriptsByLocale.put("mvy", getScriptsMap("", "")); + scriptsByLocale.put("mwk", getScriptsMap("", "")); + scriptsByLocale.put("mwl", getScriptsMap("", "Latn")); + scriptsByLocale.put("mwr", getScriptsMap("", "Deva")); + scriptsByLocale.put("mxc", getScriptsMap("", "")); + scriptsByLocale.put("my", getScriptsMap("", "Mymr")); + scriptsByLocale.put("myv", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("myx", getScriptsMap("", "")); + scriptsByLocale.put("myz", getScriptsMap("", "Mand")); + scriptsByLocale.put("na", getScriptsMap("", "Latn")); + scriptsByLocale.put("nap", getScriptsMap("", "Latn")); + scriptsByLocale.put("naq", getScriptsMap("", "Latn")); + scriptsByLocale.put("nb", getScriptsMap("", "Latn")); + scriptsByLocale.put("nbf", getScriptsMap("", "")); + scriptsByLocale.put("nch", getScriptsMap("", "")); + scriptsByLocale.put("nd", getScriptsMap("", "Latn")); + scriptsByLocale.put("ndc", getScriptsMap("", "")); + scriptsByLocale.put("nds", getScriptsMap("", "Latn")); + scriptsByLocale.put("ne", getScriptsMap("", "Deva")); + scriptsByLocale.put("new", getScriptsMap("", "Deva")); + scriptsByLocale.put("ng", getScriptsMap("", "Latn")); + scriptsByLocale.put("ngl", getScriptsMap("", "")); + scriptsByLocale.put("nhe", getScriptsMap("", "")); + scriptsByLocale.put("nhw", getScriptsMap("", "")); + scriptsByLocale.put("nia", getScriptsMap("", "Latn")); + scriptsByLocale.put("nij", getScriptsMap("", "")); + scriptsByLocale.put("niu", getScriptsMap("", "Latn")); + scriptsByLocale.put("nl", getScriptsMap("", "Latn")); + scriptsByLocale.put("nmg", getScriptsMap("", "Latn")); + scriptsByLocale.put("nn", getScriptsMap("", "Latn")); + scriptsByLocale.put("nnh", getScriptsMap("", "")); + scriptsByLocale.put("nod", getScriptsMap("", "Lana")); + scriptsByLocale.put("noe", getScriptsMap("", "")); + scriptsByLocale.put("nog", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("nqo", getScriptsMap("", "Nkoo")); + scriptsByLocale.put("nr", getScriptsMap("", "Latn")); + scriptsByLocale.put("nsk", getScriptsMap("", "")); + scriptsByLocale.put("nso", getScriptsMap("", "Latn")); + scriptsByLocale.put("nus", getScriptsMap("", "Latn")); + scriptsByLocale.put("nv", getScriptsMap("", "Latn")); + scriptsByLocale.put("ny", getScriptsMap("", "Latn")); + scriptsByLocale.put("nym", getScriptsMap("", "Latn")); + scriptsByLocale.put("nyn", getScriptsMap("", "Latn")); + scriptsByLocale.put("nyo", getScriptsMap("", "Latn")); + scriptsByLocale.put("nzi", getScriptsMap("", "Latn")); + scriptsByLocale.put("oc", getScriptsMap("", "Latn")); + scriptsByLocale.put("oj", getScriptsMap("", "Cans")); + scriptsByLocale.put("om", getScriptsMap("", "Latn", "ET", "Ethi")); + scriptsByLocale.put("or", getScriptsMap("", "Orya")); + scriptsByLocale.put("os", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("osa", getScriptsMap("", "Latn")); + scriptsByLocale.put("osc", getScriptsMap("", "Ital")); + scriptsByLocale.put("otk", getScriptsMap("", "Orkh")); + scriptsByLocale.put("pa", getScriptsMap("", "Guru", "PK", "Arab")); + scriptsByLocale.put("pag", getScriptsMap("", "Latn")); + scriptsByLocale.put("pal", getScriptsMap("", "Phli")); + scriptsByLocale.put("pam", getScriptsMap("", "Latn")); + scriptsByLocale.put("pap", getScriptsMap("", "Latn")); + scriptsByLocale.put("pau", getScriptsMap("", "Latn")); + scriptsByLocale.put("peo", getScriptsMap("", "Xpeo")); + scriptsByLocale.put("phn", getScriptsMap("", "Phnx")); + scriptsByLocale.put("pi", getScriptsMap("", "Deva")); + scriptsByLocale.put("pko", getScriptsMap("", "")); + scriptsByLocale.put("pl", getScriptsMap("", "Latn")); + scriptsByLocale.put("pon", getScriptsMap("", "Latn")); + scriptsByLocale.put("pra", getScriptsMap("", "Brah")); + scriptsByLocale.put("prd", getScriptsMap("", "Arab")); + scriptsByLocale.put("prg", getScriptsMap("", "Latn")); + scriptsByLocale.put("prs", getScriptsMap("", "Arab")); + scriptsByLocale.put("ps", getScriptsMap("", "Arab")); + scriptsByLocale.put("pt", getScriptsMap("", "Latn")); + scriptsByLocale.put("puu", getScriptsMap("", "")); + scriptsByLocale.put("qu", getScriptsMap("", "Latn")); + scriptsByLocale.put("raj", getScriptsMap("", "Latn")); + scriptsByLocale.put("rap", getScriptsMap("", "Latn")); + scriptsByLocale.put("rar", getScriptsMap("", "Latn")); + scriptsByLocale.put("rcf", getScriptsMap("", "Latn")); + scriptsByLocale.put("rej", getScriptsMap("", "Latn", "ID", "Rjng")); + scriptsByLocale.put("ria", getScriptsMap("", "")); + scriptsByLocale.put("rif", getScriptsMap("", "")); + scriptsByLocale.put("rjs", getScriptsMap("", "Deva")); + scriptsByLocale.put("rkt", getScriptsMap("", "Beng")); + scriptsByLocale.put("rm", getScriptsMap("", "Latn")); + scriptsByLocale.put("rmf", getScriptsMap("", "")); + scriptsByLocale.put("rmo", getScriptsMap("", "")); + scriptsByLocale.put("rmt", getScriptsMap("", "")); + scriptsByLocale.put("rn", getScriptsMap("", "Latn")); + scriptsByLocale.put("rng", getScriptsMap("", "")); + scriptsByLocale.put("ro", getScriptsMap("", "Latn", "RS", "Cyrl")); + scriptsByLocale.put("rob", getScriptsMap("", "")); + scriptsByLocale.put("rof", getScriptsMap("", "Latn")); + scriptsByLocale.put("rom", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("ru", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("rue", getScriptsMap("", "")); + scriptsByLocale.put("rup", getScriptsMap("", "Latn")); + scriptsByLocale.put("rw", getScriptsMap("", "Latn")); + scriptsByLocale.put("rwk", getScriptsMap("", "Latn")); + scriptsByLocale.put("ryu", getScriptsMap("", "")); + scriptsByLocale.put("sa", getScriptsMap("", "Deva")); + scriptsByLocale.put("sad", getScriptsMap("", "Latn")); + scriptsByLocale.put("saf", getScriptsMap("", "Latn")); + scriptsByLocale.put("sah", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("sam", getScriptsMap("", "Hebr")); + scriptsByLocale.put("saq", getScriptsMap("", "Latn")); + scriptsByLocale.put("sas", getScriptsMap("", "Latn")); + scriptsByLocale.put("sat", getScriptsMap("", "Latn")); + scriptsByLocale.put("saz", getScriptsMap("", "Saur")); + scriptsByLocale.put("sbp", getScriptsMap("", "Latn")); + scriptsByLocale.put("sc", getScriptsMap("", "Latn")); + scriptsByLocale.put("sck", getScriptsMap("", "")); + scriptsByLocale.put("scn", getScriptsMap("", "Latn")); + scriptsByLocale.put("sco", getScriptsMap("", "Latn")); + scriptsByLocale.put("scs", getScriptsMap("", "")); + scriptsByLocale.put("sd", getScriptsMap("", "Arab", "IN", "Deva")); + scriptsByLocale.put("sdh", getScriptsMap("", "Arab")); + scriptsByLocale.put("se", getScriptsMap("", "Latn", "NO", "Cyrl")); + scriptsByLocale.put("see", getScriptsMap("", "Latn")); + scriptsByLocale.put("sef", getScriptsMap("", "")); + scriptsByLocale.put("seh", getScriptsMap("", "Latn")); + scriptsByLocale.put("sel", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("ses", getScriptsMap("", "Latn")); + scriptsByLocale.put("sg", getScriptsMap("", "Latn")); + scriptsByLocale.put("sga", getScriptsMap("", "Latn")); + scriptsByLocale.put("shi", getScriptsMap("", "Tfng")); + scriptsByLocale.put("shn", getScriptsMap("", "Mymr")); + scriptsByLocale.put("si", getScriptsMap("", "Sinh")); + scriptsByLocale.put("sid", getScriptsMap("", "Latn")); + scriptsByLocale.put("sk", getScriptsMap("", "Latn")); + scriptsByLocale.put("skr", getScriptsMap("", "")); + scriptsByLocale.put("sl", getScriptsMap("", "Latn")); + scriptsByLocale.put("sm", getScriptsMap("", "Latn")); + scriptsByLocale.put("sma", getScriptsMap("", "Latn")); + scriptsByLocale.put("smi", getScriptsMap("", "Latn")); + scriptsByLocale.put("smj", getScriptsMap("", "Latn")); + scriptsByLocale.put("smn", getScriptsMap("", "Latn")); + scriptsByLocale.put("sms", getScriptsMap("", "Latn")); + scriptsByLocale.put("sn", getScriptsMap("", "Latn")); + scriptsByLocale.put("snk", getScriptsMap("", "Latn")); + scriptsByLocale.put("so", getScriptsMap("", "Latn")); + scriptsByLocale.put("son", getScriptsMap("", "Latn")); + scriptsByLocale.put("sou", getScriptsMap("", "")); + scriptsByLocale.put("sq", getScriptsMap("", "Latn")); + scriptsByLocale.put("sr", getScriptsMap("", "Latn")); + scriptsByLocale.put("srn", getScriptsMap("", "Latn")); + scriptsByLocale.put("srr", getScriptsMap("", "Latn")); + scriptsByLocale.put("srx", getScriptsMap("", "")); + scriptsByLocale.put("ss", getScriptsMap("", "Latn")); + scriptsByLocale.put("ssy", getScriptsMap("", "Latn")); + scriptsByLocale.put("st", getScriptsMap("", "Latn")); + scriptsByLocale.put("su", getScriptsMap("", "Latn")); + scriptsByLocale.put("suk", getScriptsMap("", "Latn")); + scriptsByLocale.put("sus", getScriptsMap("", "Latn", "GN", "Arab")); + scriptsByLocale.put("sv", getScriptsMap("", "Latn")); + scriptsByLocale.put("sw", getScriptsMap("", "Latn")); + scriptsByLocale.put("swb", getScriptsMap("", "Arab", "YT", "Latn")); + scriptsByLocale.put("swc", getScriptsMap("", "Latn")); + scriptsByLocale.put("swv", getScriptsMap("", "")); + scriptsByLocale.put("sxn", getScriptsMap("", "")); + scriptsByLocale.put("syi", getScriptsMap("", "")); + scriptsByLocale.put("syl", getScriptsMap("", "Beng", "BD", "Sylo")); + scriptsByLocale.put("syr", getScriptsMap("", "Syrc")); + scriptsByLocale.put("ta", getScriptsMap("", "Taml")); + scriptsByLocale.put("tab", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("taj", getScriptsMap("", "")); + scriptsByLocale.put("tbw", getScriptsMap("", "Latn")); + scriptsByLocale.put("tcy", getScriptsMap("", "Knda")); + scriptsByLocale.put("tdd", getScriptsMap("", "Tale")); + scriptsByLocale.put("tdg", getScriptsMap("", "")); + scriptsByLocale.put("tdh", getScriptsMap("", "")); + scriptsByLocale.put("te", getScriptsMap("", "Telu")); + scriptsByLocale.put("tem", getScriptsMap("", "Latn")); + scriptsByLocale.put("teo", getScriptsMap("", "Latn")); + scriptsByLocale.put("ter", getScriptsMap("", "Latn")); + scriptsByLocale.put("tet", getScriptsMap("", "Latn")); + scriptsByLocale.put("tg", getScriptsMap("", "Cyrl", "PK", "Arab")); + scriptsByLocale.put("th", getScriptsMap("", "Thai")); + scriptsByLocale.put("thl", getScriptsMap("", "")); + scriptsByLocale.put("thq", getScriptsMap("", "")); + scriptsByLocale.put("thr", getScriptsMap("", "")); + scriptsByLocale.put("ti", getScriptsMap("", "Ethi")); + scriptsByLocale.put("tig", getScriptsMap("", "Ethi")); + scriptsByLocale.put("tiv", getScriptsMap("", "Latn")); + scriptsByLocale.put("tk", getScriptsMap("", "Latn")); + scriptsByLocale.put("tkl", getScriptsMap("", "Latn")); + scriptsByLocale.put("tkt", getScriptsMap("", "")); + scriptsByLocale.put("tli", getScriptsMap("", "Latn")); + scriptsByLocale.put("tmh", getScriptsMap("", "Latn")); + scriptsByLocale.put("tn", getScriptsMap("", "Latn")); + scriptsByLocale.put("to", getScriptsMap("", "Latn")); + scriptsByLocale.put("tog", getScriptsMap("", "Latn")); + scriptsByLocale.put("tpi", getScriptsMap("", "Latn")); + scriptsByLocale.put("tr", getScriptsMap("", "Latn", "DE", "Arab", "MK", "Arab")); + scriptsByLocale.put("tru", getScriptsMap("", "Latn")); + scriptsByLocale.put("trv", getScriptsMap("", "Latn")); + scriptsByLocale.put("ts", getScriptsMap("", "Latn")); + scriptsByLocale.put("tsf", getScriptsMap("", "")); + scriptsByLocale.put("tsg", getScriptsMap("", "Latn")); + scriptsByLocale.put("tsi", getScriptsMap("", "Latn")); + scriptsByLocale.put("tsj", getScriptsMap("", "")); + scriptsByLocale.put("tt", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("ttj", getScriptsMap("", "")); + scriptsByLocale.put("tts", getScriptsMap("", "Thai")); + scriptsByLocale.put("tum", getScriptsMap("", "Latn")); + scriptsByLocale.put("tut", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("tvl", getScriptsMap("", "Latn")); + scriptsByLocale.put("twq", getScriptsMap("", "Latn")); + scriptsByLocale.put("ty", getScriptsMap("", "Latn")); + scriptsByLocale.put("tyv", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("tzm", getScriptsMap("", "Latn")); + scriptsByLocale.put("ude", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("udm", getScriptsMap("", "Cyrl", "RU", "Latn")); + scriptsByLocale.put("ug", getScriptsMap("", "Arab", "KZ", "Cyrl", "MN", "Cyrl")); + scriptsByLocale.put("uga", getScriptsMap("", "Ugar")); + scriptsByLocale.put("uk", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("uli", getScriptsMap("", "Latn")); + scriptsByLocale.put("umb", getScriptsMap("", "Latn")); + scriptsByLocale.put("und", getScriptsMap("", "")); + scriptsByLocale.put("unr", getScriptsMap("", "Beng", "NP", "Deva")); + scriptsByLocale.put("unx", getScriptsMap("", "Beng")); + scriptsByLocale.put("ur", getScriptsMap("", "Arab")); + scriptsByLocale.put("uz", getScriptsMap("", "Latn", "AF", "Arab", "CN", "Cyrl")); + scriptsByLocale.put("vai", getScriptsMap("", "Vaii")); + scriptsByLocale.put("ve", getScriptsMap("", "Latn")); + scriptsByLocale.put("vi", getScriptsMap("", "Latn", "US", "Hani")); + scriptsByLocale.put("vic", getScriptsMap("", "")); + scriptsByLocale.put("vmw", getScriptsMap("", "")); + scriptsByLocale.put("vo", getScriptsMap("", "Latn")); + scriptsByLocale.put("vot", getScriptsMap("", "Latn")); + scriptsByLocale.put("vun", getScriptsMap("", "Latn")); + scriptsByLocale.put("wa", getScriptsMap("", "Latn")); + scriptsByLocale.put("wae", getScriptsMap("", "Latn")); + scriptsByLocale.put("wak", getScriptsMap("", "Latn")); + scriptsByLocale.put("wal", getScriptsMap("", "Ethi")); + scriptsByLocale.put("war", getScriptsMap("", "Latn")); + scriptsByLocale.put("was", getScriptsMap("", "Latn")); + scriptsByLocale.put("wbq", getScriptsMap("", "")); + scriptsByLocale.put("wbr", getScriptsMap("", "")); + scriptsByLocale.put("wls", getScriptsMap("", "")); + scriptsByLocale.put("wo", getScriptsMap("", "Latn")); + scriptsByLocale.put("wtm", getScriptsMap("", "")); + scriptsByLocale.put("xal", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("xav", getScriptsMap("", "")); + scriptsByLocale.put("xcr", getScriptsMap("", "Cari")); + scriptsByLocale.put("xh", getScriptsMap("", "Latn")); + scriptsByLocale.put("xnr", getScriptsMap("", "")); + scriptsByLocale.put("xog", getScriptsMap("", "Latn")); + scriptsByLocale.put("xpr", getScriptsMap("", "Prti")); + scriptsByLocale.put("xsa", getScriptsMap("", "Sarb")); + scriptsByLocale.put("xsr", getScriptsMap("", "Deva")); + scriptsByLocale.put("xum", getScriptsMap("", "Ital")); + scriptsByLocale.put("yao", getScriptsMap("", "Latn")); + scriptsByLocale.put("yap", getScriptsMap("", "Latn")); + scriptsByLocale.put("yav", getScriptsMap("", "Latn")); + scriptsByLocale.put("ybb", getScriptsMap("", "")); + scriptsByLocale.put("yi", getScriptsMap("", "Hebr")); + scriptsByLocale.put("yo", getScriptsMap("", "Latn")); + scriptsByLocale.put("yrk", getScriptsMap("", "Cyrl")); + scriptsByLocale.put("yua", getScriptsMap("", "")); + scriptsByLocale.put("yue", getScriptsMap("", "Hans")); + scriptsByLocale.put("za", getScriptsMap("", "Latn", "CN", "Hans")); + scriptsByLocale.put("zap", getScriptsMap("", "Latn")); + scriptsByLocale.put("zdj", getScriptsMap("", "")); + scriptsByLocale.put("zea", getScriptsMap("", "")); + scriptsByLocale.put("zen", getScriptsMap("", "Tfng")); + scriptsByLocale.put("zh", getScriptsMap("", "Hant", "CN", "Hans", "HK", "Hans", "MO", "Hans", "SG", "Hans", "MN", "Hans")); + scriptsByLocale.put("zmi", getScriptsMap("", "")); + scriptsByLocale.put("zu", getScriptsMap("", "Latn")); + scriptsByLocale.put("zun", getScriptsMap("", "Latn")); + scriptsByLocale.put("zza", getScriptsMap("", "Arab")); + } + + /** + * Gets the script (writing type) for the given locale. For example, if a US citizen uses German Locale, + * and calls this method with Locale.getDefault(), the result would be "Runr" + * + * @param locale + * @return + */ + public static String getScript(Locale locale) { + String localeString = locale.toString(); + String language = ""; + String country = ""; + if (localeString.contains("_")) { + String[] split = localeString.split("_"); + language = split[0]; + country = split[1]; + } else language = localeString; + + Map scripts = scriptsByLocale.get(language); + String script = scripts.get(country); + return script == null ? scripts.get("") : script; + + } + + /** + * Obtain right locale even if the user changes their Locale in settings after your application process is running. + * Android N (Api level 24) update (no warnings). + * @param context activity + * @return locale + */ + public static Locale getCurrentLocale(Context context){ + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){ + return context.getResources().getConfiguration().getLocales().get(0); + } else{ + //noinspection deprecation + return context.getResources().getConfiguration().locale; + } + } +} diff --git a/leankeykeyboard/src/main/res/values-ru/strings.xml b/leankeykeyboard/src/main/res/values-ru/strings.xml index 9e91082..8b42c58 100644 --- a/leankeykeyboard/src/main/res/values-ru/strings.xml +++ b/leankeykeyboard/src/main/res/values-ru/strings.xml @@ -6,5 +6,5 @@ Искать Готово Выберите дополнительные раскладки - Чтобы открыть диалог опять, зажмите кнопку \'земной шар\' + Чтобы открыть этот диалог, зажмите кнопку \'земной шар\'