Merge 5844cf25a6982fbbcafea95978a8eac38ec7e19c into bd9ae189f83e33a6977bbe056774c851e96fe0a7

This commit is contained in:
辞庐 2025-09-21 15:25:58 +08:00 committed by GitHub
commit 8cf333b40f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
11 changed files with 50 additions and 13 deletions

View File

@ -494,4 +494,13 @@ public final class Controllers {
FXUtils.shutdown();
}
public static void resetAllLazyPage() {
rootPage.reset();
versionPage.reset();
gameListPage.reset();
downloadPage.reset();
accountListPage.reset();
settingsPage.reset();
}
}

View File

@ -45,16 +45,23 @@ public class Navigator extends TransitionPane {
private boolean initialized = false;
public void init(Node init) {
stack.push(init);
backable.set(canGoBack());
setRootPage(init);
getChildren().setAll(init);
fireEvent(new NavigationEvent(this, init, Navigation.NavigationDirection.START, NavigationEvent.NAVIGATED));
if (init instanceof PageAware) ((PageAware) init).onPageShown();
initialized = true;
}
public void setRootPage(Node root) {
if (stack.isEmpty()) {
stack.push(root);
} else {
stack.set(0, root);
}
}
public void navigate(Node node, AnimationProducer animationProducer) {
FXUtils.checkFxUserThread();

View File

@ -53,8 +53,8 @@ import org.jackhuang.hmcl.ui.animation.AnimationUtils;
import org.jackhuang.hmcl.ui.animation.ContainerAnimations;
import org.jackhuang.hmcl.ui.construct.DialogAware;
import org.jackhuang.hmcl.ui.construct.DialogCloseEvent;
import org.jackhuang.hmcl.ui.construct.Navigator;
import org.jackhuang.hmcl.ui.construct.JFXDialogPane;
import org.jackhuang.hmcl.ui.construct.Navigator;
import org.jackhuang.hmcl.ui.wizard.Refreshable;
import org.jackhuang.hmcl.ui.wizard.WizardProvider;
import org.jackhuang.hmcl.util.Lang;
@ -65,7 +65,10 @@ import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.*;
import java.util.List;
import java.util.Locale;
import java.util.Optional;
import java.util.Random;
import java.util.stream.Stream;
import static java.util.stream.Collectors.toList;
@ -547,4 +550,9 @@ public class DecoratorController {
decorator.addEventFilter(DragEvent.DRAG_DROPPED, AuthlibInjectorDnD.dragDroppedHandler(
url -> Controllers.dialog(new AddAuthlibInjectorServerPane(url))));
}
public void setRootPage(Node n) {
navigator.setRootPage(n);
navigator.clear();
}
}

View File

@ -33,6 +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.I18n;
import org.jackhuang.hmcl.util.i18n.Locales;
import org.jackhuang.hmcl.util.io.FileUtils;
import org.jackhuang.hmcl.util.io.IOUtils;
@ -67,6 +68,15 @@ public final class SettingsPage extends SettingsView {
// ==== Languages ====
cboLanguage.getItems().setAll(Locales.LOCALES);
selectedItemPropertyFor(cboLanguage).bindBidirectional(config().localizationProperty());
selectedItemPropertyFor(cboLanguage).addListener((observableValue, oldValue, newValue) -> {
I18n.setLocale(newValue);
Controllers.resetAllLazyPage();
System.gc();
Controllers.getDecorator().setRootPage(Controllers.getRootPage());
});
disableAutoGameOptionsPane.selectedProperty().bindBidirectional(config().disableAutoGameOptionsProperty());
// ====

View File

@ -26,7 +26,7 @@ import java.util.function.Supplier;
* @param <T> value type
*/
public final class Lazy<T> {
private Supplier<T> supplier;
private final Supplier<T> supplier;
private T value = null;
public Lazy(Supplier<T> supplier) {
@ -34,10 +34,13 @@ public final class Lazy<T> {
}
public T get() {
if (supplier != null) {
if (value == null) {
value = supplier.get();
supplier = null;
}
return value;
}
public void reset() {
value = null;
}
}

View File

@ -1361,7 +1361,7 @@ settings.launcher.font.anti_aliasing.auto=Auto
settings.launcher.font.anti_aliasing.gray=Grayscale
settings.launcher.font.anti_aliasing.lcd=Sub-pixel
settings.launcher.general=General
settings.launcher.language=Language (Applies After Restart)
settings.launcher.language=Language
settings.launcher.launcher_log.export=Export Launcher Logs
settings.launcher.launcher_log.export.failed=Failed to export logs.
settings.launcher.launcher_log.export.success=Logs have been exported to "%s".

View File

@ -1157,7 +1157,7 @@ settings.launcher.font.anti_aliasing.auto=自調
settings.launcher.font.anti_aliasing.gray=灰階
settings.launcher.font.anti_aliasing.lcd=子像素
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」

View File

@ -1357,7 +1357,7 @@ settings.launcher.font.anti_aliasing.auto=Автоматический
settings.launcher.font.anti_aliasing.gray=Оттенки серого
settings.launcher.font.anti_aliasing.lcd=Субпиксель
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

View File

@ -1298,7 +1298,7 @@ settings.launcher.font.anti_aliasing.auto=Авто
settings.launcher.font.anti_aliasing.gray=Відтінки сірого
settings.launcher.font.anti_aliasing.lcd=Субпіксельне
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".

View File

@ -1149,7 +1149,7 @@ settings.launcher.font.anti_aliasing.auto=自動
settings.launcher.font.anti_aliasing.gray=灰階
settings.launcher.font.anti_aliasing.lcd=子像素
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」。

View File

@ -1160,7 +1160,7 @@ settings.launcher.font.anti_aliasing.auto=自动
settings.launcher.font.anti_aliasing.gray=灰度
settings.launcher.font.anti_aliasing.lcd=子像素
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”