Last active
December 15, 2017 10:19
-
-
Save Furkanzmc/b1151d6975ab032fcce08c80fc167205 to your computer and use it in GitHub Desktop.
An example usage of QML internationalization and a helper C++ class
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import QtQuick 2.6 | |
import QtQuick.Window 2.2 | |
import TranslationHelper 1.0 | |
Window { | |
visible: true | |
property int turn: 1 | |
TranslationHelper { | |
id: translationTest | |
} | |
MouseArea { | |
anchors.fill: parent | |
acceptedButtons: Qt.LeftButton | Qt.RightButton | |
onClicked: { | |
if (mouse.button == Qt.RightButton) { | |
translationTest.loadSystemLanguage(); | |
} | |
else { | |
if (turn === 1) { | |
translationTest.selectLanguage("en_US"); | |
turn = 2; | |
} | |
else if (turn === 2) { | |
translationTest.selectLanguage("fr_FR"); | |
turn = 1; | |
} | |
} | |
} | |
} | |
Text { | |
// When LanguageChangedSignal is emitted, qsTr's are re-evaluated | |
text: qsTr("Merhaba Dünya!") + translationTest.LanguageChangedSignal | |
anchors.centerIn: parent | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "TranslationHelper.h" | |
#include <QGuiApplication> | |
#include <QTranslator> | |
TranslationHelper::TranslationHelper(QObject *parent) | |
: QObject(parent) | |
, m_Translator(new QTranslator(this)) | |
, m_SourceLang("tr_TR") | |
, m_CurrentLang(m_SourceLang) | |
, m_TranslationsDir("translations") | |
{ | |
loadSystemLanguage(); | |
} | |
QString TranslationHelper::getLanguageChangedSignal() | |
{ | |
return ""; | |
} | |
void TranslationHelper::setSourceLang(const QString &lang) | |
{ | |
m_SourceLang = lang; | |
} | |
QString TranslationHelper::getSourceLang() const | |
{ | |
return m_SourceLang; | |
} | |
void TranslationHelper::selectLanguage(const QString &language) | |
{ | |
if (m_CurrentLang == language) { | |
return; | |
} | |
if (m_SourceLang == language) { | |
removeTranslator(); | |
return; | |
} | |
if (m_Translator->load(language, m_TranslationsDir)) { | |
m_CurrentLang = language; | |
qApp->installTranslator(m_Translator); | |
emit languageChanged(); | |
} | |
} | |
QString TranslationHelper::getCurrentLang() const | |
{ | |
return m_CurrentLang; | |
} | |
void TranslationHelper::loadSystemLanguage() | |
{ | |
selectLanguage(QLocale::system().name()); | |
} | |
void TranslationHelper::removeTranslator() | |
{ | |
if (qApp->removeTranslator(m_Translator)) { | |
emit languageChanged(); | |
} | |
} | |
QString TranslationHelper::getTranslationsDir() const | |
{ | |
return m_TranslationsDir; | |
} | |
void TranslationHelper::setTranslationsDir(const QString &dir) | |
{ | |
m_TranslationsDir = dir; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#ifndef TRANSLATIONTEST_H | |
#define TRANSLATIONTEST_H | |
#include <QObject> | |
class QTranslator; | |
class TranslationHelper : public QObject | |
{ | |
Q_OBJECT | |
Q_PROPERTY(QString LanguageChangedSignal READ getLanguageChangedSignal NOTIFY languageChanged) | |
public: | |
explicit TranslationHelper(QObject *parent = 0); | |
QString getLanguageChangedSignal(); | |
/** | |
* @brief Sets the source language. The source language does not have a *.qm file so If the language you requested to load equals to the source language | |
* the translator is removed to return to source language | |
* @param lang | |
*/ | |
Q_INVOKABLE void setSourceLang(const QString &lang); | |
Q_INVOKABLE QString getSourceLang() const; | |
Q_INVOKABLE void selectLanguage(const QString &language); | |
Q_INVOKABLE QString getCurrentLang() const; | |
Q_INVOKABLE void loadSystemLanguage(); | |
/** | |
* @brief Removes the translator from the application, making it return to the source language | |
*/ | |
Q_INVOKABLE void removeTranslator(); | |
Q_INVOKABLE QString getTranslationsDir() const; | |
Q_INVOKABLE void setTranslationsDir(const QString &dir); | |
signals: | |
void languageChanged(); | |
private: | |
QTranslator *m_Translator; | |
QString m_SourceLang, | |
m_CurrentLang, | |
m_TranslationsDir; | |
}; | |
#endif // TRANSLATIONTEST_H |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment