Qt Quick 不翻译通过 Loader 加载的组件

Posted

技术标签:

【中文标题】Qt Quick 不翻译通过 Loader 加载的组件【英文标题】:Qt Quick does not translate components loaded via Loader 【发布时间】:2015-11-05 10:50:30 【问题描述】:

情况:

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

问题:

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

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

lupdate 后清理构建,lrelease 没有帮助。 rm -rf build-$appname-*, build 没有帮助。

代码:

应用程序.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>

【问题讨论】:

DEMO.ui.qml 是否列在SOURCES 变量中,如here 所述? 是的:lupdate_only SOURCES += qml/*.qml qml/masks/*.qml 【参考方案1】:

DEMO.ui.qml 重命名为DEMO.qml 就成功了。我猜想语言学家工具(lupdatelrelease)和 Qt 运行时环境对于如何将文件名转换为上下文名称有不同的想法。

【讨论】:

以上是关于Qt Quick 不翻译通过 Loader 加载的组件的主要内容,如果未能解决你的问题,请参考以下文章

Qt Quick QML 实例之疯狂数字游戏(QML C++混合编程翻译QSetting )建议收藏

Qt Quick QML 实例之疯狂数字游戏(QML C++混合编程翻译QSetting )建议收藏

Qt Quick QML 实例之疯狂数字游戏(QML C++混合编程翻译QSetting )建议收藏

Yocto Project Quick Build 翻译

由于找不到qt5quick.dll,无法继续执行代码。重新安装程序可能会解决此问题,不知道怎么解决跪求大神帮忙

如何通过按下和拖动在 Qt Quick/QML 画布中绘制一个矩形