From f295b4d9bbf818b18964aaa2d0a25805d72c65d2 Mon Sep 17 00:00:00 2001 From: yyc12345 Date: Tue, 13 Oct 2026 15:29:43 +0800 Subject: [PATCH] fix: move EnumComboBoxTransformer statics back into SettingsDialog ctor As namespace-scope statics, their initialization evaluates QCoreApplication::translate() during static initialization, before the QTranslator is installed in main(), so the combo box options always kept the untranslated source text. Function-local statics are initialized lazily on first dialog construction, after translations are loaded. --- app/settingsdialog.cpp | 51 +++++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/app/settingsdialog.cpp b/app/settingsdialog.cpp index f0e8267..7011f54 100644 --- a/app/settingsdialog.cpp +++ b/app/settingsdialog.cpp @@ -49,35 +49,40 @@ private: Pairs pairs; }; -static EnumComboBoxTransformer MW_OPTIONS { - { - { Settings::MouseWheelBehavior::Zoom, QCoreApplication::translate("SettingsDialog", "Zoom in and out") }, - { Settings::MouseWheelBehavior::Switch, QCoreApplication::translate("SettingsDialog", "View next or previous item") } - } -}; - -static EnumComboBoxTransformer IWS_OPTIONS { - { - { Settings::WindowSizeBehavior::Maximized, QCoreApplication::translate("SettingsDialog", "Maximized") }, - { Settings::WindowSizeBehavior::Windowed, QCoreApplication::translate("SettingsDialog", "Windowed") } - } -}; - -static EnumComboBoxTransformer HIDPI_OPTIONS { - { - { Qt::HighDpiScaleFactorRoundingPolicy::Round, QCoreApplication::translate("SettingsDialog", "Round (Integer scaling)", "This option means round up for .5 and above") }, - { Qt::HighDpiScaleFactorRoundingPolicy::Ceil, QCoreApplication::translate("SettingsDialog", "Ceil (Integer scaling)", "This option means always round up") }, - { Qt::HighDpiScaleFactorRoundingPolicy::Floor, QCoreApplication::translate("SettingsDialog", "Floor (Integer scaling)", "This option means always round down") }, - { Qt::HighDpiScaleFactorRoundingPolicy::PassThrough, QCoreApplication::translate("SettingsDialog", "Follow system (Fractional scaling)", "This option means don't round") } - } -}; - SettingsDialog::SettingsDialog(QWidget *parent) : QDialog(parent), ui(new QT_PREPEND_NAMESPACE(Ui::SettingsDialog)) { ui->setupUi(this); setWindowFlag(Qt::WindowContextHelpButtonHint, false); + // YYC MARK: + // These transformers must stay as function-local statics: their initialization + // evaluates QCoreApplication::translate(), which returns translated text only + // after the QTranslator is installed in main(). Namespace-scope statics would + // be initialized before that and always keep the untranslated source text. + static EnumComboBoxTransformer MW_OPTIONS { + { + { Settings::MouseWheelBehavior::Zoom, QCoreApplication::translate("SettingsDialog", "Zoom in and out") }, + { Settings::MouseWheelBehavior::Switch, QCoreApplication::translate("SettingsDialog", "View next or previous item") } + } + }; + + static EnumComboBoxTransformer IWS_OPTIONS { + { + { Settings::WindowSizeBehavior::Maximized, QCoreApplication::translate("SettingsDialog", "Maximized") }, + { Settings::WindowSizeBehavior::Windowed, QCoreApplication::translate("SettingsDialog", "Windowed") } + } + }; + + static EnumComboBoxTransformer HIDPI_OPTIONS { + { + { Qt::HighDpiScaleFactorRoundingPolicy::Round, QCoreApplication::translate("SettingsDialog", "Round (Integer scaling)", "This option means round up for .5 and above") }, + { Qt::HighDpiScaleFactorRoundingPolicy::Ceil, QCoreApplication::translate("SettingsDialog", "Ceil (Integer scaling)", "This option means always round up") }, + { Qt::HighDpiScaleFactorRoundingPolicy::Floor, QCoreApplication::translate("SettingsDialog", "Floor (Integer scaling)", "This option means always round down") }, + { Qt::HighDpiScaleFactorRoundingPolicy::PassThrough, QCoreApplication::translate("SettingsDialog", "Follow system (Fractional scaling)", "This option means don't round") } + } + }; + auto* settings = Settings::instance(); ui->m_showNavigatorView->setChecked(Settings::instance()->showNavigatorView()); ui->m_useLightCheckerboard->setChecked(settings->useLightCheckerboard());