Qt Quick不会转换通过Loader加载的组件

时间:2015-11-05 10:50:30

标签: qt internationalization qml

情况:

为嵌入式Linux系统编写Qt Quick应用程序,想要使用Qt翻译mechnanism。应用程序应选择通过RS232输入的语言,目前在设置为英语的系统上硬编码为“de”。应用程序根据RS232命令加载各种掩码。

问题:

Qt Quick仅翻译主页面(main.qml),但不翻译通过Qt Loader(DEMO.ui.qml)加载的页面。 main.qml中的文本以德语显示,DEMO.ui.qml中的文本显示为未翻译。

我为所有英文翻译(qml.en.ts)添加了一个“XX”前缀,它也没有出现在屏幕上。因此,对于通过Qt Loader加载的页面,不会加载英语或德语翻译。

在lupdate之后清理构建,lrelease没有帮助。 rm -rf build- $ appname- *,build无济于事。

代码:

application.cpp:

xlat=new QTranslator();
if (xlat->load(QLocale("de"), "qml", ".", ":/qml/i18n/", ".qm")) {
    qDebug()<<"load translator ok";
    bool ok=installTranslator(xlat);
    //...
} // else error message
// ...
viewer->setSource(QUrl("qrc:/qml/main.qml"));
viewer->showFullScreen();
// ...

main.qml:

import QtQuick 2.0
Rectangle {
    Text {
        id: loadingMsg
        text: qsTr("Loading ...")
        // ...
    }
    Loader {
        // ...
        source: ""
        function loadMask(aMaskId) {
            // ...
            setSource(gui.urlForMask(aMaskId));
        }
    }
    // ...
}

部件/ SimpleButton.qml:

import QtQuick 2.0
// ...
Rectangle {
    Text { 
        id: label
        text: ""
        // ...
    }
    property alias text: label.text
}

掩模/ DEMO.ui.qml:

import QtQuick 2.0
import "../components"
//...
    SimpleButton {
        //...
        text: qsTr("Vent.")
    }
//...

qml.de.ts:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="de_DE">
<!-- ... -->
<context>
    <name>DEMO</name>
    <!-- ... --->
    <message>
        <source>Vent.</source>
        <translation>Belüften</translation>
    </message>
</context>
<context>
    <name>main</name>
    <message>
        <source>Loading ...</source>
        <translation>Lade ...</translation>
    </message>
    <!-- ... -->
</context>

1 个答案:

答案 0 :(得分:1)

DEMO.ui.qml重命名为DEMO.qml就可以了。我想Linguist工具(lupdatelrelease)和Qt运行时环境对如何将文件名转换为上下文名称有不同的想法。