Hello tr() 示例
将一个 Hello World 小程序翻译成拉丁文。
截图显示的是英文版本。
有关翻译 Qt 应用程序的更多信息,请参阅Qt Linguist Manual。
逐行演示
#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 文件。翻译人员阅读并更新 TS 文件,使用 Qt Linguist添加和编辑他们的译文。
TS 格式是人类可读的 XML,可以直接通过电子邮件发送,而且易于版本控制。如果手动编辑该文件,请注意 XML 的默认编码是 UTF-8,而不是 Latin1 (ISO 8859-1)。输入 Latin1 字符(如 "ø",挪威语中带有斜线的 o)的一种方法是使用 XML 实体:"ø"。这将适用于任何 Unicode 4.0 字符。
翻译完成后,lrelease
程序将 TS 文件转换为 QM Qt XML 消息文件格式。QM 格式是一种紧凑的二进制格式,旨在提供极快的查找性能。lupdate
和lrelease
都会读取项目的所有源文件和头文件(在项目文件的 HEADERS 和 SOURCES 行中指定),并提取出现在tr()
函数调用中的字符串。
lupdate
hellotr_la.ts
用于创建和更新消息文件(本例中为 ),使其与源代码保持同步。在任何时候运行 都是安全的,因为 不会删除任何信息。lupdate
lupdate
请尝试立即运行lupdate
。
使用 qmake 时,必须手动运行lupdate
:
lupdate -verbose hellotr.pro
(-verbose
选项指示lupdate
显示信息,解释它在做什么)。
使用 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>
你不需要了解文件格式,因为它是通过工具读取和更新的 (lupdate
、 Qt Linguist,lrelease
)。
翻译成拉丁文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 文件。生成 QM 文件可以在 Qt Linguist(生成 QM 文件(针对单个 TS 文件),或使用命令行程序lrelease
生成,该程序将为项目文件中列出的每个 TS 文件生成一个 QM 文件。File|Release 从hellotr_la.ts
生成hellotr_la.qm
,方法是从 Qt Linguist并在弹出的文件保存对话框中按Save 。现在再次运行hellotr
程序。这次的按钮将标为 "Orbis, te saluto!"。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.