diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/util/i18n/Locales.java b/HMCL/src/main/java/org/jackhuang/hmcl/util/i18n/Locales.java index 2333f462e..e0bfe99f8 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/util/i18n/Locales.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/util/i18n/Locales.java @@ -142,9 +142,9 @@ public final class Locales { } Locale inJavaLocale = inLocale.getLocale(); - if (LocaleUtils.isISO3Language(inJavaLocale.getLanguage())) { + if (inJavaLocale.getLanguage().length() > 2) { String iso1 = LocaleUtils.getISO1Language(inJavaLocale); - if (LocaleUtils.isISO1Language(iso1)) { + if (iso1.length() <= 2) { Locale.Builder builder = new Locale.Builder() .setLocale(inJavaLocale) .setLanguage(iso1); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/i18n/DefaultResourceBundleControl.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/i18n/DefaultResourceBundleControl.java index 8bfc484df..75d8880a9 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/i18n/DefaultResourceBundleControl.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/i18n/DefaultResourceBundleControl.java @@ -30,7 +30,7 @@ import java.util.ResourceBundle; /// - For all Chinese locales, `zh-CN` is always added to the candidate list. If `zh-Hans` already exists in the candidate list, /// `zh-CN` is inserted before `zh`; otherwise, it is inserted after `zh`. /// - For all Traditional Chinese locales, `zh-TW` is always added to the candidate list (before `zh`). -/// - For all [supported][LocaleUtils#toISO1Language(String)] ISO 639-3 language code (such as `eng`, `zho`, `lzh`, etc.), +/// - For all [supported][LocaleUtils#mapToISO1Language(String)] ISO 639-3 language code (such as `eng`, `zho`, `lzh`, etc.), /// a candidate list with the language code replaced by the ISO 639-1 (Macro)language code is added to the end of the candidate list. /// /// @author Glavo @@ -41,7 +41,6 @@ public class DefaultResourceBundleControl extends ResourceBundle.Control { public DefaultResourceBundleControl() { } - @Override public List getCandidateLocales(String baseName, Locale locale) { return LocaleUtils.getCandidateLocales(locale); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/i18n/LocaleUtils.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/i18n/LocaleUtils.java index 80c3e8c5c..9f0912994 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/i18n/LocaleUtils.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/i18n/LocaleUtils.java @@ -64,18 +64,24 @@ public final class LocaleUtils { : locale.stripExtensions().toLanguageTag(); } - public static boolean isISO1Language(String language) { - return language.length() == 2; - } - - public static boolean isISO3Language(String language) { - return language.length() == 3; - } - public static @NotNull String getISO1Language(Locale locale) { String language = locale.getLanguage(); if (language.isEmpty()) return "en"; - return isISO3Language(language) ? toISO1Language(language) : language; + if (language.length() <= 2) + return language; + + String lang = language; + while (lang != null) { + if (lang.length() <= 2) + return lang; + else { + String iso1 = mapToISO1Language(lang); + if (iso1 != null) + return iso1; + } + lang = getParentLanguage(lang); + } + return language; } /// Get the script of the locale. If the script is empty and the language is Chinese, @@ -288,6 +294,7 @@ public final class LocaleUtils { // --- + /// Map ISO 639-3 language codes to ISO 639-1 language codes. private static @Nullable String mapToISO1Language(String iso3Language) { return switch (iso3Language) { case "eng" -> "en"; @@ -309,23 +316,6 @@ public final class LocaleUtils { }; } - /// Try to convert ISO 639-3 language codes to ISO 639-1 language codes. - public static String toISO1Language(String languageTag) { - String lang = languageTag; - while (lang != null) { - if (lang.length() <= 2) - return lang; - else { - String iso1 = mapToISO1Language(lang); - if (iso1 != null) - return iso1; - } - lang = getParentLanguage(lang); - } - - return languageTag; - } - public static boolean isEnglish(Locale locale) { return "en".equals(getISO1Language(locale)); }