形勢加載的組件:Qt Quick的不通過翻譯裝載機
寫作嵌入式Linux系統的Qt的快速應用,希望使用Qt翻譯mechnanism。應用程序應在通過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沒有幫助。
代碼:
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>
「DEMO.ui.qml」列在[SOURCES]變量中,如[此處]所述(http://doc.qt.io/qt-5/qtquick-internationalization.html#use-a-conditional-要隱藏-QML-源來自該編譯器)? – Mitch
是:'lupdate_only {SOURCES + = qml/*。qml qml/masks/*。qml}' –