【问题标题】:UpdateLanguage in translation in qtqt中翻译中的UpdateLanguage
【发布时间】:2020-08-19 08:11:02
【问题描述】:

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

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() 时,我的应用程序崩溃了。

【问题讨论】:

  • 你看过这篇文章了吗? stackoverflow.com/questions/47351298/…
  • 你为什么取消注释m_engine->retranslate(),你需要这样做让引擎知道加载了新语言
  • 在我的代码中使用 m_engine->retranslate() 会导致我的应用程序崩溃。是因为我在 main.cpp 中使用 QQmlApplicationEngine applicationEngine 吗??
  • 强烈建议不要将自定义组件命名为系统组件。

标签: qt qml


【解决方案1】:

我使用 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();

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-25
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    相关资源
    最近更新 更多