1

这是我的 QML 代码:

Text {
     id: helloText
     //: Hello World text
     //% "Hello World"
     //~ Context No specific context
     text: qsTrId("hello-world-id");
     anchors.top: parent.top
}

此处摘自 Qt 文档:

您在开发版本的用户界面中看到的“工程英语”文本用 //% 注释表示。如果您不包含此项,则文本 ID 将显示在用户界面中。

当我运行应用程序时,我看到的hello-world-id不是Hello World,如文档中所述。我在这里错过了什么吗?

提前致谢。

4

2 回答 2

2

首先,您必须.ts使用已翻译的字符串创建文件。例如,如果我想为俄语语言环境创建翻译,我会这样做:

lupdate main.qml -ts your_project_ru_RU.ts

如果您有多个 QML 文件,您可以在.pro文件中指定它:

lupdate_only {
    SOURCES = main.qml \
              foo.qml
}

所以写:

lupdate your_project.pro -ts your_project_ru_RU.ts

此命令将为俄语语言环境创建未翻译的文件,您必须使用 QT Linguist 打开该文件才能翻译。

您可以.ts在 .pro 文件中指定文件:

TRANSLATIONS += your_project_ru_RU.ts

毕竟你必须编译文件(Qt Linguist 中的文件/编译)。那将创建your_project_ru_RU.qm.

最后,您必须加载.qm文件,例如main.cpp

QTranslator translator;    
translator.load("your_project_" + QLocale::system().name());
app.installTranslator(&translator);

更新:

如果你需要一些类似的 Qt i18n 引擎,但不提供qm文件:

foo.qml

import QtQuick 2.4
import QtQuick.Window 2.2
import "i18n.js" as I18n

Window {
    Text {
        text: I18n.myTr("text-id");
        anchors.centerIn: parent
    }
}

i18n.js

var texts = {
    "text-id": "Hello, World!",
    "another-text-id": "Goodbye, World!"
}

function myTr(textid) {
    return texts[textid] ? texts[textid] : "";
}
于 2015-07-04T05:33:04.427 回答
0
  1. 通过 lupdate 创建了一个 .ts 文件:

    lupdate main.qml -ts your_project_ru_RU.ts

  2. 在 Qt linguist 中打开 .ts 文件并添加您的翻译
  3. 在 lrelease 工具中调用 -idbased 选项:

    lrelease -idbased your_project_ru_RU.ts

访问http://doc.qt.io/qt-5/qml-qtqml-qt.html#qsTrId-method

于 2018-08-22T10:26:38.400 回答