首页 > 解决方案 > QT QML 在运行时不翻译文本集

问题描述

我在 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;
        }
    }

标签: qtqml

解决方案


之后没有翻译您的文本的原因是因为当您执行 : 时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参数会太满意)


推荐阅读