[英]QML translation
我嘗試在QML中使用翻譯。 我開了一個新項目QtQuick項目,我選擇QtQuick Componenets for Symbian作為QtQuick應用程序類型。 Qt Creator創建了一個包含所有標准文件的應用程序源代碼樹(main.cpp,main.qml,mainpage.qml ...)
MainPage.qml非常簡單:
import QtQuick 1.1
import com.nokia.symbian 1.1
Page {
id: mainPage
Text {
anchors.centerIn: parent
text: qsTr('Hello world!')
color: platformStyle.colorNormalLight
font.pixelSize: 20
}
}
我的main.cpp文件看起來像這樣實現QTranslator:
#include "qmlapplicationviewer.h"
#include <QTranslator>
#include <QPushButton>
#include <QDebug>
Q_DECL_EXPORT int main(int argc, char *argv[])
{
QScopedPointer<QApplication> app(createApplication(argc, argv));
QTranslator* translator = new QTranslator;
qDebug()<<"Translating: "<<translator->load(QString("qml/International/inter_en"));
app->installTranslator(translator);
//QPushButton hello(QPushButton::tr("Hello world!"));
// hello.resize(100, 30);
// hello.show();
QScopedPointer<QmlApplicationViewer> viewer(QmlApplicationViewer::create());
viewer->setMainQmlFile(QLatin1String("qml/International/main.qml"));
viewer->showExpanded();
return app->exec();
}
然后我運行lupdate mainpage.qml -ts inter_en.ts,我用語言學家來翻譯POSIX表達式“Hello world!” 別的東西只是測試它正在翻譯。 然后我用語言學家創建了inter_en.qm文件。
但是當我在模擬器上運行應用程序時,我不會得到“Hello world!” 翻譯,雖然翻譯成功加載(我在qDebug中得到“翻譯:真實”)。
我確信翻譯工作正常,因為當我用QPushButton去除部分代碼時,(我再次為此目的重復lupdate和語言學的東西),然后是“Hello world!” QPushButton中的表達式被正確翻譯。
只有QmlApplicationViewer和QML文件無法正確執行轉換。 有問題?????
謝謝
UPDATE
我發現了以下內容:MainPage.qml作為可重用組件導入main.qml。 如果我在main.qml中使用qsTr(),則在main.qml中正確翻譯文本。 但是,MainPage.qml中的文本未正確轉換。 我想由於將其導入為可重用組件。 任何意見? 經驗?
更新2 - 解決方案
需要以區分大小寫的方式創建翻譯文件:
lupdate mainpage.qml -ts myapp_sk.ts is wrong
lupdate MainPage.qml -ts myapp_sk.ts is correct
我也使用QML文件作為可重用的組件,我對翻譯沒有任何問題。 所以我想以下內容對您也有幫助。
我也猜你不想為每個文件手動調用lupdate。 因此,您應該在.pro文件中使用以下行,以便自動查找QML和JS文件中的所有可翻譯短語(更正路徑)...
lupdate_hack{
SOURCES += qml/*.qml \
qml/*.js
}
TRANSLATIONS = \
langs/WakeOnLAN_cs.ts \
langs/WakeOnLAN_pl.ts \
langs/WakeOnLAN_es.ts \
langs/WakeOnLAN_fr.ts \
langs/WakeOnLAN_it.ts \
langs/WakeOnLAN_hu.ts \
langs/WakeOnLAN_fa.ts \
langs/WakeOnLAN_de.ts \
langs/WakeOnLAN_pt.ts
CODECFORTR = UTF-8
它不是來自我的頭,所以這里是源(還有關於動態翻譯的注釋): https : //forum.qt.io/topic/30076/is-there-a-way-to-use -linguist功能於全球范圍內
如果問題不是翻譯本身,而是在運行時更改語言,這可能對您有所幫助。 如果您使用app-> installTranslator(翻譯器)加載新的QTranslator; 它(QApplication)將觸發更改事件。 在你的Qt課程中,你必須抓住它
/*!
on the fly translation
*/
void MyQmlView::changeEvent(QEvent *event)
{
if (event->type() == QEvent::LanguageChange)
{
// triggers qml function/slots
emit retranslate();
}
else
{
QWidget::changeEvent(event);
}
}
加載“main.qml”之后的某些內容:
m_pQmlView->rootContext()->setContextProperty( "_view", this );
QML方面:
Component.onCompleted: {
/********************** Connections ***************************/
// connect Qt signal MyView::retranslate() with QML function (slot) retranslate
_view.retranslate.connect(retranslate)
}
// slot!
function retranslate () {
lblHelloWord.text = qsTr("Hello Word")
}
這對MS Windows平台非常有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.