Qt中的UpdateLanguage翻译

问题描述

我正尝试更新代码中的语言,如下所示:

LanguageTranslation.h
    class LanguageTranslation : public QObject
    {
        Q_OBJECT
        Q_PROPERTY(QString emptyString READ getEmptyString NOTIFY languageChanged)
        QTranslator translator;
        QQmlEngine *m_engine;
    
    public:
        explicit LanguageTranslation();
        QString getEmptyString();
    
        enum Language {
            ENGLISH,french
        };
    
        Q_ENUM(Language)
    
    signals:
        void languageChanged();
    
    public slots:
        void updatelanguage(int lang);
    
};


LanguageTranslation.cpp
#include "LanguageTranslation.h"

QString LanguageTranslation::getEmptyString()
{
    return "";
}

void LanguageTranslation::updatelanguage(int language)
{
    switch (language)
    {
    case ENGLISH :
        if(!translator.isEmpty())
            qApp->removeTranslator(&translator);
        translator.load("Monitor_en_US",":/translations");
        qApp->installTranslator(&translator);
//        m_engine->retranslate();
        break;

    case french:
        translator.load("Monitor_fr_FR",":/translations");
        qApp->installTranslator(&translator);
//        m_engine->retranslate();
        break;

    default:
        break;
    }
    emit languageChanged();
}


Rectangle.qml
Rectangle
            {
                width: parent.width
                height: parent.height * 0.20
                color: "red"
                Text {
                    width: parent.width
                    text: qsTrId("abcId")+ LanguageTranslation.emptyString

                }
            }

此文本:qsTrId(“ abcId”)仅在我使用时更新

text: qsTrId("abcId") + LanguageTranslation.emptyString

除了追加emptyString之外,还有其他任何更新语言的方法吗? 我不想使用emptyString更新语言。另外,当我使用retranslate()时,我的应用程序崩溃了。

解决方法

我使用retranslate()获得了updateLanguage的解决方案,如下所示:

void LanguageTranslation::upDateLanguage(int language)
{
    switch (language)
    {
    case ENGLISH :
        m_translator.load("Language_en_US",":/translations");
        break;

    case FRENCH:
        m_translator.load("Language_fr_FR",":/translations");
        break;

    default:
        break;
    }
    qApp->installTranslator(&m_translator);
    m_engine->retranslate();
    emit languageChanged();

}