Files
CuboBmsTool/translator.cpp

135 lines
3.5 KiB
C++

#include "translator.h"
#include <QTranslator>
#include <QCoreApplication>
#include <QQmlEngine>
#include <QLocale>
#include <QTimer>
#include <QSettings>
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<Language>(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<int>(mCurrentLanguage));
}
QString Translator::currentLanguageName() const
{
return languageName(mCurrentLanguage);
}
QString Translator::currentLanguageIcon() const
{
return languageIcon(mCurrentLanguage);
}