QQuickView を使用して、ウィジェット アプリケーションで qml インターフェイスを表示します
m_window = new QQuickView();
m_container = QWidget::createWindowContainer(m_window,hostWidget,Qt::FramelessWindowHint);
m_container->setFocusPolicy(Qt::TabFocus);
m_window->setResizeMode(QQuickView::SizeRootObjectToView);
m_window->setSource(file_url);
qml インターフェイスを多言語にする必要があるため、QQuickView をインスタンス化する前に、新しいトランスレーターをアプリケーションにインストールします。
m_qmlTranslator = new QTranslator(this); // this - host QWidget
m_qmlTranslator->load(QString::fromUtf8("translate_%1").arg(QLocale::system().name()),strTranslationDir);
QScopedPointer<QCoreApplication> pAppl(QApplication::instance());
pAppl->installTranslator(m_qmlTranslator);
load関数とinstallTranslator関数の両方が true を返します。(ターゲット言語の翻訳は ts ファイルに存在し、右のディレクトリに配置された qm ファイルにコンパイルされます)
問題は、C++ の翻訳がうまく機能することです。次のコードはターゲット言語で文字列を出力します。
qDebug() << tr("translation test");
しかし、QQuickView文字列によって表示されるqmlインターフェースでは、翻訳されていないままです
Text {
id: title
text: qsTr("translation test")
font.pixelSize: 36
font.bold: true
anchors.horizontalCenter: parent.horizontalCenter
}
デバッグ中に、正しいsourceText変数を使用してQCoreApplication::translate
関数が Qt によって呼び出されることがわかりましたが、からのすべての QTranslatorsは null QStringsを返すため、表示されるテキストは翻訳されません。qsTr("translation test")
self->d_func()->translators
なぜこれが起こるのか、QQuickViewでテキストを翻訳する方法はありますか?