【发布时间】: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 }
标签: qt internationalization qml