#include "translationloader.h" #include #include TranslationLoader::TranslationLoader(const QQmlApplicationEngine *engine, const QString filename, const QString translationsDirectory, QObject *parent) : QObject{parent} , engine(engine) , filename(filename) , translationsDirectory(translationsDirectory) { QObject::connect(engine, &QJSEngine::uiLanguageChanged, this, &TranslationLoader::_q_loadTranslations); _q_loadTranslations(); } void TranslationLoader::_q_loadTranslations() { if (translationsDirectory.isEmpty()) return; auto uiLanguage = engine->uiLanguage(); auto translator = std::make_unique(); if (!uiLanguage.isEmpty()) { QLocale locale(uiLanguage); if (translator->load(locale, filename, QLatin1String("_"), translationsDirectory, QLatin1String(".qm"))) { if (activeTranslator) QCoreApplication::removeTranslator(activeTranslator.get()); QCoreApplication::installTranslator(translator.get()); activeTranslator.swap(translator); } else { qWarning() << "TranslationLoader: failed to load"; } } else { activeTranslator.reset(); } const_cast(engine)->retranslate(); }