簡體   English   中英

QML翻譯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM