This commit is contained in:
Glavo 2025-09-21 22:43:33 +08:00
parent 5b55e9f74a
commit 22f5a2991c
2 changed files with 38 additions and 6 deletions

View File

@ -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<String, String> 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) {

View File

@ -0,0 +1,17 @@
{
"zh" : [
"cmn",
"lzh",
"cdo",
"cjy",
"cpx",
"czh",
"gan",
"hak",
"hsn",
"mnp",
"nan",
"wuu",
"yue"
]
}