C
使用 Qt Quick Ultralite 进行国际化与本地化
基于 Qt
Qt Quick Ultralite 的功能基于 Qt 中的国际化和本地化 和 Qt Linguist。本文档描述了与 Qt 相比的不同之处、增强功能和限制。
翻译
在 QML 文件中使用 qsTr()
或 qsTrId()
函数来标记字符串字面量以进行翻译。所有这些标记的字符串字面量都会被 Qt Linguist 工具找到,该工具生成包含这些字符串的翻译源文件(.ts
)。
重要提示:在应用程序中使用这两种方法中的任意一种。在应用程序中使用两者可能会导致意外的行为。
翻译完成后,将为每种语言创建一个 .ts
文件。这些文件被编译成翻译发布文件(.qm
),并传递给 QML 编译器,该编译器根据 Qt.uiLanguage
属性查找正确的字符串。
也可以在其他绑定中使用 Qt.uiLanguage
属性来根据活动语言做出决策。
翻译示例 展示了如何使用 qsTr()
和 Qt.uiLanguage
属性。
使用 CMake 构建
在 TranslationFiles.files QmlProject 属性中列出目标语言的翻译源文件,并在 qul_add_target
中使用包含的 QmlProject 文件,指定 QML_PROJECT,将产生以下两个效果:
- 创建一个不包含在默认构建中的
update_translations
CMake 目标。触发此目标的构建以创建或更新包含源自代码中的新和更改的翻译字符串的.ts
文件。 - 设置构建系统以在程序二进制中嵌入从
.ts
文件中的翻译。
每个.ts
文件引入了一种翻译语言,可以通过设置Qt.uiLanguage
属性在运行时切换。语言的名称来自.ts
文件的名称。例如,“app_nb_NO.ts”文件定义了nb_NO
的翻译,这是挪威博克迈尔的ISO语言代码。
当Qt.uiLanguage
为空时,不应用任何翻译,会显示源代码中使用的字符串。
如果应用程序不支持多语言,将TranslationFiles.MCU.omitSourceLanguage
设置为false。
独立的qmlprojectexporter
当使用CMake以外的构建系统进行开发时,可以单独运行qmlprojectexporter
来更新翻译,有关详细信息,请参阅qmlprojectexporter的更新翻译参数。
基于文本ID的翻译
文本ID翻译机制是一个强大的国际化本地化系统。应用程序中的每个文本都有一个唯一的标识符(文本ID),在源代码中使用它而不是文本本身,这使得管理大量翻译文本变得容易得多。
如果您在.qmlproject
文件中将idBasedTranslations设置为true,将为您的项目启用基于文本ID的翻译。在QML文件中使用qsTrId()
函数而不是qsTr()
来标记字符串进行基于文本ID的翻译。
注意:在一个应用程序中,必须只使用基于纯文本或只使用基于文本ID的函数。如果混合它们,最终只会得到部分翻译的文本集。如果应用程序中的QML模块有需要翻译的QML文件,QML模块应遵循与主项目相同的翻译机制。
内存优化
在使用基于ID的翻译时,应用程序不应显示源字符串。强烈建议将TranslationFiles.MCU.omitSourceLanguage标志设置为true,以在启用idBasedTranslations时减少ROM占用。
Qt Design Studio翻译
Qt Design Studio可以使用翻译视图创建和维护翻译。使用此功能时,Qt Design Studio将自动更新.qmlproject
文件,将翻译包含在应用程序中。
注意:在运行qmlprojectexporter
之前,请确保从Qt Design Studio生成翻译文件。
限制
以下功能目前不支持
- C++文件中的字符串翻译
- 使用CMake进行基于文本ID的翻译
- 除
qsTr()
或qsTrId()
之外的翻译函数,如qsTranslate()
,QT_TR_NOOP()
,QT_TRANSLATE_NOOP()
和QT_TRID_NOOP()
- 在
qsTr()
或qsTrId()
中的复数歧义参数
在某些Qt许可证下可用。
了解更多信息。