我在Qt 5.9中有一个使用QML的简单应用程序。该应用程序有一个Text
元素,我正在翻译其中的文本,并且使用在文本末尾带有空字符串的方法可以正常工作。
问题在于,当我在运行时更改Text
元素的文本时,该文本不再可翻译。
文本字段的文本如下提供,其中localization.updateLanguage
是空字符串:
Text
{
id: txt
text: qsTrId("test_label") + localization.updateLanguage
color: "white"
font.pixelSize: 40
}
在单击按钮时完成新文本的设置,并且可以工作。它使用正确的语言设置文本。但是之后,当尝试更改新文本的语言时,它将不起作用。
MouseArea
{
anchors.fill: parent
onClicked:
{
txt.text = qsTrId("new_label") + localization.updateLanguage;
}
}
答案 0 :(得分:1)
您的文本随后没有被翻译的原因是,当您执行txt.text = qsTrId("new_label") + localization.updateLanguage;
时,您正在执行命令式分配,这不会创建绑定,它只会被评估一次。
如果要强制创建属性绑定,可以使用Qt.binding()
:
txt.text = Qt.binding(function() { return qsTrId("new_label") + localization.updateLanguage;} )
更多信息在这里:http://doc.qt.io/qt-5/qtqml-syntax-propertybinding.html#creating-property-bindings-from-javascript
或者,您可以这样做:
property string label: "test_label"
text: qsTrId(label) + localization.updateLanguage
// ...
onClicked: txt.label = "new_label";
(我认为lupdate对于动态qsTrId
参数不会感到满意)
答案 1 :(得分:0)
您不必使用绑定,而可以使用预定义的QML绑定。要重新构建所有接口,请调用此方法:http://doc.qt.io/qt-5/qqmlengine.html#retranslate