QT QML Перевод ретранслировать - PullRequest
0 голосов
/ 16 мая 2018

Я использую QT 5.10.1 в Windows, app производится только в QML.Я пытаюсь использовать новый retranslate() для изменения языка во время выполнения.Текущий код работает нормально с текстами, которые используют getEmptyString(), добавленный к нему.Но остальная часть текста в qsTr() не имеет.TranslationHandler.cpp пусто, и я не очистил включения.

Так что я могу установить язык из QML, используя свойство context.Также я проверил, чтобы двигатель был такой же экземпляр.Есть идеи, почему функция ретрансляции не работает?

Спасибо за помощь!

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 Ответ

0 голосов
/ 13 июня 2018

Это было подтверждено как ошибка и будет исправлено в версии 5.12.Если вы хотите скомпилировать его самостоятельно, пожалуйста, проверьте отчет об ошибке

https://bugreports.qt.io/browse/QTBUG-68350

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...