From 3dc357a8c9ff7385bea29a091e3884004b5a6fd7 Mon Sep 17 00:00:00 2001 From: exertustfm <54768149+exertustfm@users.noreply.github.com> Date: Sat, 6 Jun 2026 12:37:42 -0500 Subject: [PATCH] qt: Fix incorrect system language detection (#1558) --- src/citra_qt/citra_qt.cpp | 37 ++++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/src/citra_qt/citra_qt.cpp b/src/citra_qt/citra_qt.cpp index c1dd6e78e..8a5d8dc7b 100644 --- a/src/citra_qt/citra_qt.cpp +++ b/src/citra_qt/citra_qt.cpp @@ -4080,25 +4080,48 @@ void GMainWindow::UpdateUITheme() { } void GMainWindow::LoadTranslation() { + bool loaded = false; + + const QString lang_en = QStringLiteral("en"); + const QString languages_dir = QStringLiteral(":/languages/"); + + // Workaround for incorrect Qt system language detection + // TODO: Allow the "" option to actually be selected rather than overriding the + // selected language option? Current behaviour is better than the issue it fixes, + // but not ideal. + if (UISettings::values.language.isEmpty()) { + const auto languages = QLocale::system().uiLanguages(QLocale::TagSeparator::Underscore); + for (const auto& lang : languages) { + // If the first language found is English, no need to install any translation + if (lang == lang_en) { + UISettings::values.language = lang_en; + return; + } + loaded = translator.load(lang, languages_dir); + if (loaded) { + UISettings::values.language = lang; + break; + } + } + } + // If the selected language is English, no need to install any translation - if (UISettings::values.language == QStringLiteral("en")) { + if (UISettings::values.language == lang_en) { return; } - bool loaded; - - if (UISettings::values.language.isEmpty()) { + if (UISettings::values.language.isEmpty() && !loaded) { // Use the system's default locale - loaded = translator.load(QLocale::system(), {}, {}, QStringLiteral(":/languages/")); + loaded = translator.load(QLocale::system(), {}, {}, languages_dir); } else { // Otherwise load from the specified file - loaded = translator.load(UISettings::values.language, QStringLiteral(":/languages/")); + loaded = translator.load(UISettings::values.language, languages_dir); } if (loaded) { qApp->installTranslator(&translator); } else { - UISettings::values.language = QStringLiteral("en"); + UISettings::values.language = lang_en; } }