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