6

QMLで翻訳を使用しようとしています。新しいプロジェクト QtQuick プロジェクトを開き、QtQuick アプリケーション タイプとして Symbian 用の QtQuick Componenets を選択しました。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 で "Translating: true" が表示されます)。

コードの一部を QPushButton でマーク解除すると (この目的のために lupdate と言語学を繰り返します)、「Hello world!」QPushButton の式は正しく変換されます。

正しく翻訳されていないのは QmlApplicationViewer と QML ファイルだけです。何か質問がありますか?????

ありがとう

アップデート

次のことがわかりました: MainPage.qml は、再利用可能なコンポーネントとして main.qml にインポートされます。main.qml で qsTr() を使用すると、テキストは main.qml で正しく翻訳されます。ただし、MainPage.qml のテキストは正しく翻訳されていません。再利用可能なコンポーネントとしてインポートしたためだと思います。コメントはありますか?経験?

UPDATE2 - ソリューション

翻訳ファイルは、大文字と小文字を区別して作成する必要があります。

lupdate mainpage.qml -ts myapp_sk.ts is wrong

lupdate MainPage.qml -ts myapp_sk.ts is correct
4

2 に答える 2

0

また、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 -グローバルな文脈の言語学者

于 2016-01-02T20:42:16.937 に答える