QT QML在运行时不翻译文本集

QT QML在运行时不翻译文本集,qt,qml,Qt,Qml,我在Qt5.9中有一个使用QML的简单应用程序。该应用程序有一个Text元素,我正在翻译该元素的文本,它可以使用文本末尾带有空字符串的方法正常工作 问题是,当我在运行时更改text元素的文本时,它不再是可翻译的 文本字段的文本如下所示,其中本地化.updateLanguage为空字符串: 文本 { id:txt 文本:qsTrId(“测试标签”)+本地化.updateLanguage 颜色:“白色” font.pixelSize:40 } 新文本的设置在单击按钮时完成,并且有效。它使用正确的语

我在Qt5.9中有一个使用QML的简单应用程序。该应用程序有一个
Text
元素,我正在翻译该元素的文本,它可以使用文本末尾带有空字符串的方法正常工作

问题是,当我在运行时更改
text
元素的文本时,它不再是可翻译的

文本字段的文本如下所示,其中
本地化.updateLanguage
为空字符串:

文本
{
id:txt
文本:qsTrId(“测试标签”)+本地化.updateLanguage
颜色:“白色”
font.pixelSize:40
}
新文本的设置在单击按钮时完成,并且有效。它使用正确的语言设置文本。但在那之后,当试图改变新文本的语言时,它就不起作用了

MouseArea
{ 
锚定。填充:父级
再次点击:
{
txt.text=qsTrId(“新标签”)+localization.updateLanguage;
}
}

之后没有翻译文本的原因是:当您这样做时:
txt.text=qsTrId(“新标签”)+localization.updateLanguage,您正在执行命令式赋值,这不会创建绑定,它只计算一次

如果要强制创建属性绑定,可以使用
Qt.binding()

更多信息请点击此处:

或者,您可以这样做:

property string label: "test_label"
text: qsTrId(label) + localization.updateLanguage
// ...
onClicked: txt.label = "new_label";

(但我认为lupdate不会对动态
qsTrId
参数太满意)

您不必使用绑定,而是预定义的QML绑定。要重新稳定所有接口,请调用此方法:

是否确实已翻译
new\u label
?尝试在运行时交换这些字符串,即设置
test\u标签
。用空字符串连接字符串的原因是什么?尝试删除本地化。同时更新语言。是的,新标签已翻译。使用空字符串连接的原因是一种黑客解决方案,用于强制使用QtWiki描述的翻译更新字符串。他们在5.10之后修复了它,可以使用QQmlEngine::retranslate()[slot],但仍然无法解决问题。OP使用的是Qt 5.9,此方法仅在5.10之后可用
property string label: "test_label"
text: qsTrId(label) + localization.updateLanguage
// ...
onClicked: txt.label = "new_label";