首页 文章

QT QML翻译重新翻译

提问于
浏览
0

我在Windows上运行QT 5.10.1app 仅在 QML 中生成 . 我正在尝试使用新的 retranslate() 来在运行时更改语言 . 当前代码与使用附加的 getEmptyString() 的文本一起正常工作 . 但 qsTr() 内的其他文本却没有 . TranslationHandler.cpp 是空的,我还没有清理包含 .

所以我可以使用context属性从QML设置语言 . 我也检查了引擎是同一个实例 . 任何想法为什么重新翻译功能不起作用?

谢谢您的帮助!

main.cpp :

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QTranslator>
#include <QtGui>
#include <QQmlContext>
#include <QDebug>
#include <QQmlEngine>
#include "translationhandler.h"

int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    TranslationHandler transHndl(&engine);

    engine.rootContext()->setContextProperty("translateHandler", &transHndl);
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    if (engine.rootObjects().isEmpty())
        return -1;
    return app.exec();
}

TranslationHandler.h :

#ifndef TRANSLATIONHANDLER_H
#define TRANSLATIONHANDLER_H
#include <QTranslator>
#include <QString>
#include <QGuiApplication>
#include <QObject>
#include <QDebug>
#include <QQmlEngine>

class TranslationHandler : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QString emptyString READ getEmptyString NOTIFY languageChanged)

public:
    explicit TranslationHandler(QQmlEngine *engine)
    {
        m_translator1 = new QTranslator(this);
        m_currentLanguage = "en";
        m_engine = engine;
    }

    QString getEmptyString()
    {
        return "";
    }

    Q_INVOKABLE QString getCurrentLanguage()
    {
        return m_currentLanguage;
    }

    Q_INVOKABLE void selectLanguage(QString language)
    {
        if(language == QString("jp"))
        {
            m_currentLanguage = language;
            m_translator1->load(":/translation/qml_jp.qm");
            qGuiApp->installTranslator(m_translator1);
            m_engine->retranslate();
        }
        if(language == QString("en"))
        {
            m_currentLanguage = language;
            qGuiApp->removeTranslator(m_translator1);
            m_engine->retranslate();
        }
        emit languageChanged();
    }

signals:
    void languageChanged();

private:
    QTranslator *m_translator1;
    QString m_currentLanguage;
    QQmlEngine *m_engine;

public slots:
};

#endif // TRANSLATIONHANDLER_H

1 回答

相关问题