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 2c190f968..47d86c2af 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 @@ -18,11 +18,13 @@ package org.jackhuang.hmcl.util.i18n; import org.jackhuang.hmcl.util.StringUtils; +import org.jackhuang.hmcl.util.gson.JsonUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Unmodifiable; import java.io.IOException; +import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Path; import java.util.*; @@ -44,6 +46,22 @@ public final class LocaleUtils { public static final String DEFAULT_LANGUAGE_KEY = "default"; + private static final Map subLanguageToParent = new HashMap<>(); + + static { + try (InputStream input = LocaleUtils.class.getResourceAsStream("/assets/lang/sublanguages.json")) { + if (input != null) { + JsonUtils.fromJsonFully(input, JsonUtils.mapTypeOf(String.class, JsonUtils.listTypeOf(String.class))).forEach((parent, subList) -> { + for (String subLanguage : subList) { + subLanguageToParent.put(subLanguage, parent); + } + }); + } + } catch (IOException e) { + LOG.warning("Failed to load sublanguages.json file", e); + } + } + private static Locale getInstance(String language, String script, String region, String variant) { Locale.Builder builder = new Locale.Builder(); @@ -314,12 +332,9 @@ public final class LocaleUtils { } public static @Nullable String getParentLanguage(String language) { - return switch (language) { - case "cmn", "lzh", "cdo", "cjy", "cpx", "czh", - "gan", "hak", "hsn", "mnp", "nan", "wuu", "yue" -> "zh"; - case "" -> null; - default -> ""; - }; + return !language.isEmpty() + ? subLanguageToParent.getOrDefault(language, "") + : null; } public static boolean isEnglish(Locale locale) { diff --git a/HMCLCore/src/main/resources/assets/lang/sublanguages.json b/HMCLCore/src/main/resources/assets/lang/sublanguages.json new file mode 100644 index 000000000..fc3f19abd --- /dev/null +++ b/HMCLCore/src/main/resources/assets/lang/sublanguages.json @@ -0,0 +1,17 @@ +{ + "zh" : [ + "cmn", + "lzh", + "cdo", + "cjy", + "cpx", + "czh", + "gan", + "hak", + "hsn", + "mnp", + "nan", + "wuu", + "yue" + ] +} \ No newline at end of file