From 1d790c9eb74c16ad3d186a4a81d00080e742fce3 Mon Sep 17 00:00:00 2001 From: Connor McLaughlin Date: Tue, 17 Aug 2021 13:39:14 +1000 Subject: [PATCH] Qt: Load base translation files --- src/duckstation-qt/qthostinterface.cpp | 40 +++++++++++++++++++------- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/src/duckstation-qt/qthostinterface.cpp b/src/duckstation-qt/qthostinterface.cpp index a040c5796..2e1c65051 100644 --- a/src/duckstation-qt/qthostinterface.cpp +++ b/src/duckstation-qt/qthostinterface.cpp @@ -134,32 +134,50 @@ void QtHostInterface::shutdownOnThread() void QtHostInterface::installTranslator() { - std::string language = GetStringSettingValue("Main", "Language", ""); - if (language.empty()) - language = "en"; + const QString language(QString::fromStdString(GetStringSettingValue("Main", "Language", "en"))); - const QString path = - QStringLiteral("%1/translations/duckstation-qt_%3.qm").arg(qApp->applicationDirPath()).arg(language.c_str()); + // install the base qt translation first + const QString base_dir(QStringLiteral("%1/translations").arg(qApp->applicationDirPath())); + const QString base_path(QStringLiteral("%1/qtbase_%2.qm").arg(base_dir).arg(language)); + if (QFile::exists(base_path)) + { + QTranslator* base_translator = new QTranslator(qApp); + if (!base_translator->load(base_path)) + { + QMessageBox::warning( + nullptr, QStringLiteral("Translation Error"), + QStringLiteral("Failed to find load base translation file for '%1':\n%2").arg(language).arg(base_path)); + delete base_translator; + } + else + { + m_translators.push_back(base_translator); + qApp->installTranslator(base_translator); + } + } + + const QString path = QStringLiteral("%1/duckstation-qt_%3.qm").arg(base_dir).arg(language); if (!QFile::exists(path)) { QMessageBox::warning( nullptr, QStringLiteral("Translation Error"), - QStringLiteral("Failed to find translation file for language '%1':\n%2").arg(language.c_str()).arg(path)); + QStringLiteral("Failed to find translation file for language '%1':\n%2").arg(language).arg(path)); return; } - auto translator = std::make_unique(qApp); + QTranslator* translator = new QTranslator(qApp); if (!translator->load(path)) { QMessageBox::warning( nullptr, QStringLiteral("Translation Error"), - QStringLiteral("Failed to load translation file for language '%1':\n%2").arg(language.c_str()).arg(path)); + QStringLiteral("Failed to load translation file for language '%1':\n%2").arg(language).arg(path)); + delete translator; return; } - Log_InfoPrintf("Loaded translation file for language '%s'", language.c_str()); - qApp->installTranslator(translator.get()); - m_translators.push_back(translator.release()); + qDebug() << "Loaded translation file for language " << language; + qApp->installTranslator(translator); + m_translators.push_back(translator); } void QtHostInterface::reinstallTranslator()