qt中翻译中的UpdateLanguage

Posted

技术标签:

【中文标题】qt中翻译中的UpdateLanguage【英文标题】:UpdateLanguage in translation in qt 【发布时间】: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() 时,我的应用程序崩溃了。

【问题讨论】:

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


【讨论】:

以上是关于qt中翻译中的UpdateLanguage的主要内容,如果未能解决你的问题,请参考以下文章

Qt安装程序框架:翻译组件描述

Qt - QThread(翻译帮助文档)

qt lrelease windows 二进制文件?

qt中制作添加 .ts 翻译文件

qt中制作添加 .ts 翻译文件

Qt中的tr函数和中文乱码问题