#include "translator.h" #include #include #include #include #include #include namespace { const QString settingsKey = "translator/currentLanguage"; } Translator::Translator(QQmlEngine *engine, QObject *parent) : QObject(parent), mQmlEngine(engine), mCurrentTranslator(new QTranslator(this)), mCurrentQtTranslator(new QTranslator(this)), mCurrentQtBaseTranslator(new QTranslator(this)), mCurrentQtSerialTranslator(new QTranslator(this)) { mNamesMap = { {Language::English, tr("EN")}, {Language::Russian, tr("RU")}, {Language::Italian, tr("IT")} }; mIconsMap = { {Language::English, "qrc:/Icons/english-flag.svg"}, {Language::Russian, "qrc:/Icons/russian-flag.svg"}, {Language::Italian, "qrc:/Icons/italian-flag.svg"} }; mTranslationsMap = { {Language::English, ":/cubo_en.qm"}, {Language::Russian, ":/cubo_ru.qm"}, {Language::Italian, ":/cubo_it.qm"} }; mQtTranslationsMap = { {Language::English, ":/qt_en.qm"}, {Language::Russian, ":/qt_ru.qm"}, {Language::Italian, ":/qt_it.qm"} }; mQtBaseTranslationsMap = { {Language::English, ":/qtbase_en.qm"}, {Language::Russian, ":/qtbase_ru.qm"}, {Language::Italian, ":/qtbase_it.qm"} }; mQtSerialTranslationsMap = { {Language::English, ":/qtserialport_en.qm"}, {Language::Russian, ":/qtserialport_ru.qm"}, {Language::Italian, ":/qtserialport_en.qm"} }; QCoreApplication::installTranslator(mCurrentTranslator); QCoreApplication::installTranslator(mCurrentQtTranslator); QCoreApplication::installTranslator(mCurrentQtBaseTranslator); QCoreApplication::installTranslator(mCurrentQtSerialTranslator); QSettings settings; if (!settings.contains(::settingsKey)) { if (QLocale::system().language() == QLocale::Russian) { setCurrentLanguage(Language::Russian); } else if (QLocale::system().language() == QLocale::Italian) { setCurrentLanguage(Language::Italian); } else { setCurrentLanguage(Language::English); } } else { setCurrentLanguage(static_cast(settings.value(::settingsKey).toInt())); } } QString Translator::languageName(Language language) const { return mNamesMap.value(language); } QString Translator::languageIcon(Language language) const { return mIconsMap.value(language); } Translator::Language Translator::currentLanguage() const { return mCurrentLanguage; } void Translator::setCurrentLanguage(Language language) { mCurrentTranslator->load(mTranslationsMap.value(language)); mCurrentQtTranslator->load(mQtTranslationsMap.value(language)); mCurrentQtBaseTranslator->load(mQtBaseTranslationsMap.value(language)); mCurrentQtSerialTranslator->load(mQtSerialTranslationsMap.value(language)); QTimer::singleShot(0, this, [this]{ mQmlEngine->retranslate();} ); mCurrentLanguage = language; emit currentLanguageChanged(); emit currentLanguageNameChanged(); emit currentLanguageIconChanged(); QSettings().setValue(::settingsKey, static_cast(mCurrentLanguage)); } QString Translator::currentLanguageName() const { return languageName(mCurrentLanguage); } QString Translator::currentLanguageIcon() const { return languageIcon(mCurrentLanguage); }