135 lines
3.5 KiB
C++
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);
|
|
}
|