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实体中使用:"ø"。这将对任何Unicode 4.0字符有效。
翻译完成后,使用lrelease
程序将TS文件转换为QM Qt消息文件格式。QM格式是一种紧凑的二进制格式,设计用于实现非常快速的字段查找性能。两个lupdate
和lrelease
都会读取项目的所有源文件和头文件(在项目文件的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>
您不需要了解文件格式,因为它可以通过工具(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文件。可以通过在Qt Linguist内部(对于单个TS文件)实现生成QM文件,也可以使用命令行程序lrelease
,该程序将为项目文件中列出的每个TS文件生成一个QM文件。通过选择Qt Linguist菜单栏的File|Release并按下弹出文件保存对话框中的Save,从hellotr_la.ts
生成hellotr_la.qm
。现在再次运行hellotr
程序。这次按钮将标有“Orbis, te saluto!”。
© 2024 Qt公司有限 公司。本文件中包含的文档贡献的版权属于各自的所有者。本文件提供的文档是根据自由软件基金会发布的GNU自由文档许可版本1.3许可条款提供的。Qt及相应的徽标是芬兰及/或全球其他国家的Qt公司有限责任公司的商标。所有其他商标都是各自所有者的财产。