From c85c074eeefb5310cce810b0bd2faf4a68401af1 Mon Sep 17 00:00:00 2001 From: Glavo Date: Fri, 8 Mar 2024 15:04:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E8=AF=AD=E8=A8=80=E5=BA=94?= =?UTF-8?q?=E5=9C=A8=E9=87=8D=E5=90=AF=E5=90=8E=E7=94=9F=E6=95=88=20(#2905?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/jackhuang/hmcl/setting/ConfigHolder.java | 4 ++++ .../java/org/jackhuang/hmcl/setting/Settings.java | 9 --------- .../org/jackhuang/hmcl/ui/main/SettingsView.java | 5 +++-- .../java/org/jackhuang/hmcl/util/i18n/I18n.java | 15 +++++++-------- .../main/resources/assets/lang/I18N.properties | 2 +- .../main/resources/assets/lang/I18N_zh.properties | 2 +- .../resources/assets/lang/I18N_zh_CN.properties | 2 +- 7 files changed, 17 insertions(+), 22 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/ConfigHolder.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/ConfigHolder.java index 2a3db2e7e..8011acfb4 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/ConfigHolder.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/ConfigHolder.java @@ -21,12 +21,14 @@ import com.google.gson.JsonParseException; import org.jackhuang.hmcl.Metadata; import org.jackhuang.hmcl.util.InvocationDispatcher; import org.jackhuang.hmcl.util.Lang; +import org.jackhuang.hmcl.util.i18n.I18n; import org.jackhuang.hmcl.util.io.FileUtils; import org.jackhuang.hmcl.util.io.JarUtils; import org.jackhuang.hmcl.util.platform.OperatingSystem; import java.io.IOException; import java.nio.file.*; +import java.util.Locale; import java.util.logging.Level; import static org.jackhuang.hmcl.util.Logging.LOG; @@ -87,6 +89,8 @@ public final class ConfigHolder { globalConfigInstance = loadGlobalConfig(); globalConfigInstance.addListener(source -> markGlobalConfigDirty()); + Locale.setDefault(config().getLocalization().getLocale()); + I18n.setLocale(configInstance.getLocalization()); Settings.init(); if (newlyCreated) { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Settings.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Settings.java index b2244dcb5..6c61e9acf 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Settings.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Settings.java @@ -24,8 +24,6 @@ import org.jackhuang.hmcl.ui.animation.AnimationUtils; import org.jackhuang.hmcl.util.CacheRepository; import org.jackhuang.hmcl.util.io.FileUtils; -import java.util.Locale; - import static org.jackhuang.hmcl.setting.ConfigHolder.config; public final class Settings { @@ -47,9 +45,6 @@ public final class Settings { } private Settings() { - config().localizationProperty().addListener(unused -> updateSystemLocale()); - updateSystemLocale(); - DownloadProviders.init(); ProxyManager.init(); Accounts.init(); @@ -81,8 +76,4 @@ public final class Settings { return null; } } - - private static void updateSystemLocale() { - Locale.setDefault(config().getLocalization().getLocale()); - } } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsView.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsView.java index 132ea76f6..445f28be1 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsView.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsView.java @@ -37,6 +37,7 @@ import org.jackhuang.hmcl.ui.SVG; import org.jackhuang.hmcl.ui.construct.ComponentList; import org.jackhuang.hmcl.ui.construct.ComponentSublist; import org.jackhuang.hmcl.ui.construct.MultiFileItem; +import org.jackhuang.hmcl.util.i18n.I18n; import org.jackhuang.hmcl.util.i18n.Locales.SupportedLocale; import java.util.Arrays; @@ -176,8 +177,8 @@ public abstract class SettingsView extends StackPane { languagePane.setLeft(left); cboLanguage = new JFXComboBox<>(); - cboLanguage.setConverter(stringConverter(locale -> locale.getName(config().getLocalization().getResourceBundle()))); - FXUtils.setLimitWidth(cboLanguage, 400); + cboLanguage.setConverter(stringConverter(locale -> locale.getName(I18n.getCurrentLocale().getResourceBundle()))); + FXUtils.setLimitWidth(cboLanguage, 300); languagePane.setRight(cboLanguage); settingsPane.getContent().add(languagePane); 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 7df27957c..638c28e24 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 @@ -17,7 +17,6 @@ */ package org.jackhuang.hmcl.util.i18n; -import org.jackhuang.hmcl.setting.ConfigHolder; import org.jackhuang.hmcl.util.i18n.Locales.SupportedLocale; import java.time.Instant; @@ -34,14 +33,14 @@ public final class I18n { private I18n() { } + private static volatile SupportedLocale locale = Locales.DEFAULT; + + public static void setLocale(SupportedLocale locale) { + I18n.locale = locale; + } + public static SupportedLocale getCurrentLocale() { - try { - return ConfigHolder.config().getLocalization(); - } catch (IllegalStateException e) { - // e is thrown by ConfigHolder.config(), indicating the config hasn't been loaded - // fallback to use default locale - return Locales.DEFAULT; - } + return locale; } public static ResourceBundle getResourceBundle() { diff --git a/HMCL/src/main/resources/assets/lang/I18N.properties b/HMCL/src/main/resources/assets/lang/I18N.properties index afbca4df7..417eb5af7 100644 --- a/HMCL/src/main/resources/assets/lang/I18N.properties +++ b/HMCL/src/main/resources/assets/lang/I18N.properties @@ -1118,7 +1118,7 @@ settings.launcher.download_source.auto=Auto Choose Download Mirror settings.launcher.enable_game_list=Show version list in home page settings.launcher.font=Font settings.launcher.general=General -settings.launcher.language=Language +settings.launcher.language=Language (applies after restart) settings.launcher.launcher_log.export=Export launcher logs settings.launcher.launcher_log.export.failed=Unable to export logs settings.launcher.launcher_log.export.success=Logs have been exported to %s diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh.properties b/HMCL/src/main/resources/assets/lang/I18N_zh.properties index bbe8d1f60..b85bb51b0 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh.properties @@ -984,7 +984,7 @@ settings.launcher.download_source.auto=自動選擇下載來源 settings.launcher.enable_game_list=在首頁內顯示遊戲列表 settings.launcher.font=字體 settings.launcher.general=通用 -settings.launcher.language=語言 +settings.launcher.language=語言 (重啟後生效) settings.launcher.launcher_log.export=匯出啟動器日誌 settings.launcher.launcher_log.export.failed=無法匯出日誌 settings.launcher.launcher_log.export.success=日誌已儲存到 %s diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties index 9f1f2b374..9aeae86be 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties @@ -992,7 +992,7 @@ settings.launcher.download_source.auto=自动选择下载源 settings.launcher.enable_game_list=在主页内显示版本列表 settings.launcher.font=字体 settings.launcher.general=通用 -settings.launcher.language=语言 +settings.launcher.language=语言 (重启后生效) settings.launcher.launcher_log.export=导出启动器日志 settings.launcher.launcher_log.export.failed=无法导出日志 settings.launcher.launcher_log.export.success=日志已保存到 %s