Hello tr() 示例

将一个小型 Hello World 程序翻译成拉丁语。

截图显示的是英文版本。

有关翻译 Qt 应用的更多信息,请参见Qt Linguist 手册

逐行分析

#include <QTranslator>

此行包含QTranslator 类的定义。此类对象的实例提供用户可见文本的翻译。

    QTranslator translator;

创建一个没有父级的QTranslator 对象。

    Q_UNUSED(translator.load("hellotr_la"));

尝试加载名为 hellotr_la.qm.qm 文件扩展名是隐式的)的文件,该文件包含程序中使用的源文本的拉丁语翻译。如果未找到文件,不会发生错误。此示例在桌面平台上运行效果最佳。在 Android 和 iOS 这样的平台上,.qm 文件需要成为应用程序包的一部分。通常,这涉及将 .qm 文件捆绑到 Qt 资源中。

    app.installTranslator(&translator);

hellotr_la.qm 中的翻译添加到程序使用的翻译池中。

    QPushButton hello(QPushButton::tr("Hello world!"));

创建一个显示 "Hello world!" 的按钮。如果找到 hellotr_la.qm 并包含对 "Hello world!" 的翻译,则显示翻译;如果没有,则显示源文本。

所有继承自 QObject 的类都有一个 tr() 函数。在 QObject 类的成员函数内部,我们简单地写下 tr("Hello world!"),而不是 QPushButton::tr("Hello world!")QObject::tr("Hello world!")

以英语运行应用程序

由于我们没有创建翻译文件 hellotr_la.qm,因此在运行应用程序时将显示源文本。

创建拉丁语信息文件

第一步是创建一个项目文件,列出项目中所有源文件。

当使用 qmake 时,在 hellotr.pro 中的相关行是

SOURCES      = main.cpp
TRANSLATIONS = hellotr_la.ts

TRANSLATIONS 指定了我们想要维护的消息文件。在此示例中,我们只维护一组翻译,即拉丁语。

当使用 CMake 时,在 CMakeLists.txt 中的相关行是

find_package(Qt6 REQUIRED COMPONENTS LinguistTools)

qt_standard_project_setup(I18N_TRANSLATED_LANGUAGES la)

qt6_add_translations(hellotr
    QM_FILES_OUTPUT_VARIABLE qm_files)
install(FILES ${qm_files} DESTINATION ${INSTALL_EXAMPLEDIR})

请注意,文件扩展名是 .ts,而不是 .qm。.ts 翻译源格式旨在在应用程序开发期间使用。程序员或发布经理运行 lupdate 程序来生成和更新 TS 文件,这些文件是从源代码中提取的源文本。翻译者使用 Qt Linguist 读取和更新 TS 文件,添加和编辑他们的翻译。

TS格式是可读性强的可读XML,可以直接发送电子邮件并将其置于版本控制之下。如果您手动编辑此文件,请注意,XML的默认编码为UTF-8,而非Latin1(ISO 8859-1)。输入像'ø'(带斜杠的挪威语o)这样的Latin1字符的一种方法是在XML实体中使用:"&#xf8;"。这将对任何Unicode 4.0字符有效。

翻译完成后,使用lrelease程序将TS文件转换为QM Qt消息文件格式。QM格式是一种紧凑的二进制格式,设计用于实现非常快速的字段查找性能。两个lupdatelrelease都会读取项目的所有源文件和头文件(在项目文件的HEADERS和SOURCES行中指定),并提取出现在tr()函数调用中的字符串。

lupdate用于创建和更新消息文件(例如本例中的hellotr_la.ts),以确保它们与源代码同步。运行lupdate是安全的,因为lupdate不会删除任何信息。

现在尝试运行lupdate

在使用qmake时,必须手动运行lupdate

lupdate -verbose hellotr.pro

-verbose选项指示lupdate显示解释其执行的messages。)

在使用CMake时,构建update_translations目标以运行lupdate

cmake --build . --target update_translations

您现在应在源目录中有一个文件hellotr_la.ts,其中包含以下内容

<!DOCTYPE TS><TS>
<context>
    <name>QPushButton</name>
    <message>
        <source>Hello world!</source>
        <translation type="unfinished"></translation>
    </message>
</context>
</TS>

您不需要了解文件格式,因为它可以通过工具(lupdateQt Linguistlrelease)读取和更新。

使用Qt Linguist进行拉丁语翻译

我们将使用Qt Linguist提供翻译,尽管您可以使用任何XML或纯文本编辑器将翻译输入TS文件。

要启动Qt Linguist,键入

linguist hellotr_la.ts

您现在应在左上窗格中看到文本"QPushButton"。双击它,然后点击“Hello world!”在Translation窗格(窗口中间右部)中输入“Orbis, te saluto!”。不要忘了感叹号!

点击Done复选框,并在菜单栏中选择File|Save。TS文件将不再包含

<translation type='unfinished'></translation>

而是有

<translation>Orbis, te saluto!</translation>

以拉丁语运行应用程序

要查看应用程序以拉丁语运行,我们必须从TS文件生成一个QM文件。可以通过在Qt Linguist内部(对于单个TS文件)实现生成QM文件,也可以使用命令行程序lrelease,该程序将为项目文件中列出的每个TS文件生成一个QM文件。通过选择Qt Linguist菜单栏的File|Release并按下弹出文件保存对话框中的Save,从hellotr_la.ts生成hellotr_la.qm。现在再次运行hellotr程序。这次按钮将标有“Orbis, te saluto!”。

示例项目 @ code.qt.io

© 2024 Qt公司有限 公司。本文件中包含的文档贡献的版权属于各自的所有者。本文件提供的文档是根据自由软件基金会发布的GNU自由文档许可版本1.3许可条款提供的。Qt及相应的徽标是芬兰及/或全球其他国家的Qt公司有限责任公司的商标。所有其他商标都是各自所有者的财产。