From 4476456b83233b5d0ff6da62004adde6be01e522 Mon Sep 17 00:00:00 2001 From: Helium314 Date: Mon, 29 Apr 2024 23:41:36 +0200 Subject: [PATCH] workaround for languages that don't have a display name in all languages --- .../keyboard/latin/common/LocaleUtils.kt | 24 +++++++++++++++---- .../latin/utils/SubtypeLocaleUtils.java | 2 +- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/helium314/keyboard/latin/common/LocaleUtils.kt b/app/src/main/java/helium314/keyboard/latin/common/LocaleUtils.kt index d8d99ead7..766308182 100644 --- a/app/src/main/java/helium314/keyboard/latin/common/LocaleUtils.kt +++ b/app/src/main/java/helium314/keyboard/latin/common/LocaleUtils.kt @@ -6,7 +6,9 @@ package helium314.keyboard.latin.common import android.content.Context +import android.content.res.Resources import helium314.keyboard.compat.locale +import helium314.keyboard.latin.BuildConfig import helium314.keyboard.latin.R import helium314.keyboard.latin.utils.ScriptUtils.script import helium314.keyboard.latin.utils.SubtypeLocaleUtils @@ -181,12 +183,26 @@ object LocaleUtils { @JvmStatic fun getLocaleDisplayNameInSystemLocale(locale: Locale, context: Context): String { + return getLocaleDisplayNameInLocale(locale, context.resources, context.resources.configuration.locale()) + } + + @JvmStatic + fun getLocaleDisplayNameInLocale(locale: Locale, resources: Resources, displayLocale: Locale): String { val languageTag = locale.toLanguageTag() - if (languageTag == SubtypeLocaleUtils.NO_LANGUAGE) return context.getString(R.string.subtype_no_language) + if (languageTag == SubtypeLocaleUtils.NO_LANGUAGE) return resources.getString(R.string.subtype_no_language) if (locale.script() != locale.language.constructLocale().script() || locale.language == "xdq") { - val resId = context.resources.getIdentifier("subtype_${languageTag.replace("-", "_")}", "string", context.packageName) - if (resId != 0) return context.getString(resId) + val resId = resources.getIdentifier( + "subtype_${languageTag.replace("-", "_")}", + "string", + BuildConfig.APPLICATION_ID // replaces context.packageName, see https://stackoverflow.com/a/24525379 + ) + if (resId != 0) return resources.getString(resId) + } + val localeDisplayName = locale.getDisplayName(displayLocale) + return if (localeDisplayName == languageTag) { + locale.getDisplayName(Locale.US) // try fallback to English name, relevant e.g. fpr pms, see https://github.com/Helium314/HeliBoard/pull/748 + } else { + localeDisplayName } - return locale.getDisplayName(context.resources.configuration.locale()) } } diff --git a/app/src/main/java/helium314/keyboard/latin/utils/SubtypeLocaleUtils.java b/app/src/main/java/helium314/keyboard/latin/utils/SubtypeLocaleUtils.java index 08a669308..67c1486db 100644 --- a/app/src/main/java/helium314/keyboard/latin/utils/SubtypeLocaleUtils.java +++ b/app/src/main/java/helium314/keyboard/latin/utils/SubtypeLocaleUtils.java @@ -192,7 +192,7 @@ private static String getSubtypeLocaleDisplayNameInternal(@NonNull final Locale if (exceptionalNameResId != null) { displayName = RunInLocaleKt.runInLocale(sResources, displayLocale, res -> res.getString(exceptionalNameResId)); } else { - displayName = locale.getDisplayName(displayLocale); + displayName = LocaleUtils.getLocaleDisplayNameInLocale(locale, sResources, displayLocale); } return StringUtils.capitalizeFirstCodePoint(displayName, displayLocale); }