QML翻译

web*_*man 5 c++ translation symbian qml qt-quick

我尝试在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
    }
}
Run Code Online (Sandbox Code Playgroud)

我的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();
}
Run Code Online (Sandbox Code Playgroud)

然后我运行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
Run Code Online (Sandbox Code Playgroud)

小智 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
Run Code Online (Sandbox Code Playgroud)

它不是来自我的头脑,所以这里是来源(还有关于动态翻译的注释):https ://forum.qt.io/topic/30076/is-there-a-way-to-use -全球语境中的语言学家