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的主要内容,如果未能解决你的问题,请参考以下文章