106 lines
2.4 KiB
C++
106 lines
2.4 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))
|
|
{
|
|
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"}
|
|
};
|
|
|
|
QCoreApplication::installTranslator(mCurrentTranslator);
|
|
|
|
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)
|
|
{
|
|
if (mCurrentTranslator->load(mTranslationsMap.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);
|
|
}
|