Skip to content

Instantly share code, notes, and snippets.

@Furkanzmc
Last active December 15, 2017 10:19
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Furkanzmc/b1151d6975ab032fcce08c80fc167205 to your computer and use it in GitHub Desktop.
Save Furkanzmc/b1151d6975ab032fcce08c80fc167205 to your computer and use it in GitHub Desktop.
An example usage of QML internationalization and a helper C++ class
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
}
}
#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;
}
#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