【问题标题】:Engineering English not showing on UI工程英语未在 UI 上显示
【发布时间】:2015-07-03 10:45:32
【问题描述】:

这是我的 QML 代码:

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

摘自 Qt 文档here

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

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

提前致谢。

【问题讨论】:

  • 你加载生成的翻译文件了吗?
  • @peppe 我认为我们不会为开发构建提供翻译文件。我错了吗?
  • 我也偶然发现了这一点。我也有同样的期待。从文档来看,它应该是这样工作的。

标签: qt internationalization qml qtquick2 qt-linguist


【解决方案1】:

首先,您必须创建带有翻译字符串的.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 打开该文件才能翻译。

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

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] : "";
}

【讨论】:

  • 感谢您的回答。这是为了实现完全本地化。我的问题是How to see the Engineering Text rather than string id?例如:如果您使用button->setText(tr("Hello World"));,它将在按钮上显示Hello World。但是使用button->setText(qtrId("hello-world-id")); 显示hello-world-id 而不是Hello World 这是工程英语(加上//% "Hello World"。谢谢。
  • 好吧,我看你有点误会了。来自 Qt 帮助:Localizing with text IDs follows much the same process as for plain text。您在上面提供的所有 cmets 都是为了在 Qt Lunguist 中进行简化。 //% 是文本模式,而不是文本本身。您仍然必须创建ts 文件,如上所述,将其翻译并包含到您的应用程序中。评论的意思是您不能像在qtrId() 中那样提供模式,例如在qsTr("Hello, %1") 中。你只传递一个id
【解决方案2】:
  1. 通过 lupdate 创建了一个 .ts 文件:

    lupdate main.qml -ts your_project_ru_RU.ts

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

    lrelease -idbased your_project_ru_RU.ts

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多