From 74bc05914ee76257f15ba748d2aac0423dc79399 Mon Sep 17 00:00:00 2001 From: Glavo Date: Sun, 21 Sep 2025 22:08:22 +0800 Subject: [PATCH] update --- .../org/jackhuang/hmcl/setting/Config.java | 3 +- .../jackhuang/hmcl/ui/main/SettingsPage.java | 4 +- .../org/jackhuang/hmcl/util/i18n/I18n.java | 2 +- .../org/jackhuang/hmcl/util/i18n/Locales.java | 63 ------------------- .../hmcl/util/i18n/MinecraftWiki.java | 2 +- .../hmcl/util/i18n/SupportedLocale.java | 38 ++++++++++- .../l10n/LocaleNamesOverride.properties | 2 +- .../l10n/LocaleNamesOverride_zh.properties | 2 +- 8 files changed, 43 insertions(+), 73 deletions(-) delete mode 100644 HMCL/src/main/java/org/jackhuang/hmcl/util/i18n/Locales.java diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java index b6a908185..24e8acfd6 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java @@ -37,7 +37,6 @@ import org.jackhuang.hmcl.auth.authlibinjector.AuthlibInjectorServer; import org.jackhuang.hmcl.java.JavaRuntime; import org.jackhuang.hmcl.ui.FXUtils; import org.jackhuang.hmcl.util.gson.*; -import org.jackhuang.hmcl.util.i18n.Locales; import org.jackhuang.hmcl.util.i18n.SupportedLocale; import org.jackhuang.hmcl.util.javafx.DirtyTracker; import org.jackhuang.hmcl.util.javafx.ObservableHelper; @@ -222,7 +221,7 @@ public final class Config implements Observable { } @SerializedName("localization") - private final ObjectProperty localization = new SimpleObjectProperty<>(Locales.DEFAULT); + private final ObjectProperty localization = new SimpleObjectProperty<>(SupportedLocale.DEFAULT); public ObjectProperty localizationProperty() { return localization; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java index d8fa6ad46..ccc97f26e 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java @@ -33,7 +33,7 @@ import org.jackhuang.hmcl.upgrade.UpdateChannel; import org.jackhuang.hmcl.upgrade.UpdateChecker; import org.jackhuang.hmcl.upgrade.UpdateHandler; import org.jackhuang.hmcl.util.StringUtils; -import org.jackhuang.hmcl.util.i18n.Locales; +import org.jackhuang.hmcl.util.i18n.SupportedLocale; import org.jackhuang.hmcl.util.io.FileUtils; import org.jackhuang.hmcl.util.io.IOUtils; import org.tukaani.xz.XZInputStream; @@ -65,7 +65,7 @@ public final class SettingsPage extends SettingsView { FXUtils.smoothScrolling(scroll); // ==== Languages ==== - cboLanguage.getItems().setAll(Locales.getSupportedLocales()); + cboLanguage.getItems().setAll(SupportedLocale.getSupportedLocales()); selectedItemPropertyFor(cboLanguage).bindBidirectional(config().localizationProperty()); disableAutoGameOptionsPane.selectedProperty().bindBidirectional(config().disableAutoGameOptionsProperty()); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/util/i18n/I18n.java b/HMCL/src/main/java/org/jackhuang/hmcl/util/i18n/I18n.java index 3c705fde3..d54af4464 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/util/i18n/I18n.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/util/i18n/I18n.java @@ -33,7 +33,7 @@ public final class I18n { private I18n() { } - private static volatile SupportedLocale locale = Locales.DEFAULT; + private static volatile SupportedLocale locale = SupportedLocale.DEFAULT; public static void setLocale(SupportedLocale locale) { I18n.locale = locale; 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 deleted file mode 100644 index 441d44249..000000000 --- a/HMCL/src/main/java/org/jackhuang/hmcl/util/i18n/Locales.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Hello Minecraft! Launcher - * Copyright (C) 2021 huangyuhui and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.jackhuang.hmcl.util.i18n; - -import org.jackhuang.hmcl.util.gson.JsonUtils; - -import java.io.InputStream; -import java.util.*; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; - -import static org.jackhuang.hmcl.util.logging.Logger.LOG; - -public final class Locales { - private Locales() { - } - - public static final SupportedLocale DEFAULT = new SupportedLocale(); - - public static List getSupportedLocales() { - List list = new ArrayList<>(); - list.add(DEFAULT); - - InputStream locales = Locales.class.getResourceAsStream("/assets/lang/languages.json"); - if (locales != null) { - try (locales) { - list.addAll(JsonUtils.fromNonNullJsonFully(locales, JsonUtils.listTypeOf(SupportedLocale.class))); - } catch (Throwable e) { - LOG.warning("Failed to load languages.json", e); - } - } - return List.copyOf(list); - } - - private static final ConcurrentMap LOCALES = new ConcurrentHashMap<>(); - - public static SupportedLocale getLocale(Locale locale) { - return LOCALES.computeIfAbsent(locale, SupportedLocale::new); - } - - public static SupportedLocale getLocaleByName(String name) { - if (name == null || name.isEmpty() || "def".equals(name) || "default".equals(name)) - return DEFAULT; - - return getLocale(Locale.forLanguageTag(name.trim())); - } - -} diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/util/i18n/MinecraftWiki.java b/HMCL/src/main/java/org/jackhuang/hmcl/util/i18n/MinecraftWiki.java index 60a7dd04b..ac1b5536e 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/util/i18n/MinecraftWiki.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/util/i18n/MinecraftWiki.java @@ -41,7 +41,7 @@ public final class MinecraftWiki { translatedVersion = WenyanUtils.translateGameVersion(gameVersion); if (translatedVersion.equals(gameVersion.toString()) || gameVersion instanceof GameVersionNumber.Old) { - return getWikiLink(Locales.getLocale(LocaleUtils.LOCALE_ZH_HANT), version); + return getWikiLink(SupportedLocale.getLocale(LocaleUtils.LOCALE_ZH_HANT), version); } else if (SNAPSHOT_PATTERN.matcher(wikiVersion).matches()) { return locale.i18n("wiki.version.game.snapshot", translatedVersion); } else { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/util/i18n/SupportedLocale.java b/HMCL/src/main/java/org/jackhuang/hmcl/util/i18n/SupportedLocale.java index 83c1fa0fe..2c144faf4 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/util/i18n/SupportedLocale.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/util/i18n/SupportedLocale.java @@ -23,17 +23,51 @@ import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonToken; import com.google.gson.stream.JsonWriter; import org.jackhuang.hmcl.util.StringUtils; +import org.jackhuang.hmcl.util.gson.JsonUtils; import java.io.IOException; +import java.io.InputStream; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalAccessor; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; import static org.jackhuang.hmcl.util.logging.Logger.LOG; @JsonAdapter(SupportedLocale.TypeAdapter.class) public final class SupportedLocale { + public static final SupportedLocale DEFAULT = new SupportedLocale(); + + private static final ConcurrentMap LOCALES = new ConcurrentHashMap<>(); + + public static List getSupportedLocales() { + List list = new ArrayList<>(); + list.add(DEFAULT); + + InputStream locales = SupportedLocale.class.getResourceAsStream("/assets/lang/languages.json"); + if (locales != null) { + try (locales) { + list.addAll(JsonUtils.fromNonNullJsonFully(locales, JsonUtils.listTypeOf(SupportedLocale.class))); + } catch (Throwable e) { + LOG.warning("Failed to load languages.json", e); + } + } + return List.copyOf(list); + } + + public static SupportedLocale getLocale(Locale locale) { + return LOCALES.computeIfAbsent(locale, SupportedLocale::new); + } + + public static SupportedLocale getLocaleByName(String name) { + if (name == null || name.isEmpty() || "def".equals(name) || "default".equals(name)) + return DEFAULT; + + return getLocale(Locale.forLanguageTag(name.trim())); + } + private final boolean isDefault; private final String name; private final Locale locale; @@ -224,10 +258,10 @@ public final class SupportedLocale { @Override public SupportedLocale read(JsonReader in) throws IOException { if (in.peek() == JsonToken.NULL) - return Locales.DEFAULT; + return DEFAULT; String language = in.nextString(); - return Locales.getLocaleByName(switch (language) { + return getLocaleByName(switch (language) { // TODO: Remove these compatibility codes after updating the Config format case "zh_CN" -> "zh-Hans"; // For compatibility case "zh" -> "zh-Hant"; // For compatibility diff --git a/buildSrc/src/main/resources/org/jackhuang/hmcl/gradle/l10n/LocaleNamesOverride.properties b/buildSrc/src/main/resources/org/jackhuang/hmcl/gradle/l10n/LocaleNamesOverride.properties index d0c175467..b5cfee7c7 100644 --- a/buildSrc/src/main/resources/org/jackhuang/hmcl/gradle/l10n/LocaleNamesOverride.properties +++ b/buildSrc/src/main/resources/org/jackhuang/hmcl/gradle/l10n/LocaleNamesOverride.properties @@ -20,4 +20,4 @@ lzh=Classical Chinese # Scripts -Qabs=Upside down \ No newline at end of file +Qabs=Upside down diff --git a/buildSrc/src/main/resources/org/jackhuang/hmcl/gradle/l10n/LocaleNamesOverride_zh.properties b/buildSrc/src/main/resources/org/jackhuang/hmcl/gradle/l10n/LocaleNamesOverride_zh.properties index 3e0229f40..ad1b393e9 100644 --- a/buildSrc/src/main/resources/org/jackhuang/hmcl/gradle/l10n/LocaleNamesOverride_zh.properties +++ b/buildSrc/src/main/resources/org/jackhuang/hmcl/gradle/l10n/LocaleNamesOverride_zh.properties @@ -20,4 +20,4 @@ lzh=文言 # Scripts -Qabs=颠倒 \ No newline at end of file +Qabs=颠倒