qt_add_lrelease

添加目标,将Qt Linguist.ts 文件转换为 .qm 文件。

该命令在Qt6 软件包的LinguistTools 组件中定义。使用该命令加载软件包:

find_package(Qt6 REQUIRED COMPONENTS LinguistTools)

此命令在 Qt 6.2 中引入。

简介

自 6.7 起:

qt_add_lrelease(TS_FILES file1.ts [file2.ts ...]
                [LRELEASE_TARGET target-name]
                [EXCLUDE_FROM_ALL]
                [NO_GLOBAL_TARGET]
                [QM_OUTPUT_DIRECTORY directory]             # since 6.9
                [QM_FILES_OUTPUT_VARIABLE variable-name]
                [MERGE_QT_TRANSLATIONS]
                [QT_TRANSLATION_CATALOGS catalog1 [catalog2 ...]]
                [OPTIONS ...])

自 6.2 起(已弃用):

qt_add_lrelease(target TS_FILES file1.ts [file2.ts ...]
                [NO_TARGET_DEPENDENCY]
                [NO_GLOBAL_TARGET]
                [QM_FILES_OUTPUT_VARIABLE variable-name]
                [OPTIONS ...])

如果禁用了无版本命令,请使用qt6_add_lrelease() 代替。它支持与此命令相同的参数集。

警告: 在与目标目录作用域不同的目录作用域中调用qt_add_lrelease 至少需要 CMake 3.18 版本。

说明

创建一条自定义命令,通过lrelease.ts 文件转换为.qm 文件。

自定义命令的执行由默认构建的自定义目标驱动。自定义目标的名称默认为${PROJECT_NAME}_lrelease 。进一步调用qt_add_lrelease 时,创建的目标名称将附加越来越多的数字。可使用LRELEASE_TARGET 选项指定自定义目标名称。

必须使用参数TS_FILES 指定.ts 文件。

该函数可与qt_add_lupdate 结合使用。另请参阅方便的包装器qt_add_translations

选项

你可以设置调用lrelease 时应传递的其他OPTIONS 。你可以在lrelease 文档中找到可能的选项。

生成 .qm 文件的位置

默认情况下,.qm 文件将放置在当前编译目录 (CMAKE_CURRENT_BINARY_DIR)。自 Qt 6.9 起,您可以使用QM_OUTPUT_DIRECTORY 参数在不同目录下生成.qm 文件。相对路径被视为低于CMAKE_CURRENT_BINARY_DIR

例如,使用以下代码,.qm 文件将在当前构建目录下的translations 目录中生成。

qt_add_lrelease(
    TS_FILES myapp_en.ts myapp_de.ts
    QM_OUTPUT_DIRECTORY translations
)

要实现更精细的控制,可以通过在相应的.ts 文件上设置源文件属性OUTPUT_LOCATION 来指定单个.qm 文件的输出目录。这必须在调用qt_add_lrelease 之前进行。

OUTPUT_LOCATION 源文件属性会覆盖通过QM_OUTPUT_DIRECTORY 传递的目录。

例如,使用以下代码,.qm 文件将在当前构建目录下的translations 目录中生成。

set_source_files_properties(app_en.ts app_de.ts
    PROPERTIES OUTPUT_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/translations")
qt_add_lrelease(TS_FILES myapp_en.ts myapp_de.ts)

处理生成的 .qm 文件

要进一步处理生成的.qm 文件,例如创建安装规则,qt_add_lrelease 可以将.qm 文件的路径存储在一个变量中。为此,请将QM_FILES_OUTPUT_VARIABLE <variable-name> 传递给函数。

默认创建

默认情况下,该命令会创建一个自定义目标,并将其添加到默认构建目标中。这将确保在构建项目时,.qm 文件始终是最新的。可以使用EXCLUDE_FROM_ALL 参数关闭此行为。在这种情况下,用户必须手动构建${PROJECT_NAME}_lrelease 目标。

伞目标

除了目标${target}_lrelease 之外,还会创建一个伞目标release_translations 。该目标将构建通过qt_add_lrelease 创建的所有${target}_lrelease 目标。

NO_GLOBAL_TARGET 传递至qt_add_lrelease 可避免此行为。

在调用qt_add_lrelease 之前,可以通过设置变量QT_GLOBAL_LRELEASE_TARGET 来重写该目标的名称。

合并 Qt 提供的翻译

自 Qt 6.9 起,您可以将 Qt 提供的翻译合并到应用程序特定的.qm 文件中。为此,请向qt_add_translations 传递MERGE_QT_TRANSLATIONS 选项。这将确定属于项目所用模块的 Qt 翻译目录,并将其合并到lrelease 生成的.qm 文件中。

Qt 翻译目录由您的CMakeLists.txt 范围内调用qt_add_translationsfind_package 决定。例如,以下序列将把qtbaseqtmultimedia 目录合并到.qm 文件中:

find_package(Qt6 COMPONENTS MultimediaWidgets)
...
qt_add_lrelease(
    TS_FILES myapp_de.ts myapp_fi.ts
    MERGE_QT_TRANSLATIONS
)

要明确指定目录,请使用QT_TRANSLATION_CATALOGS 参数:

qt_add_lrelease(
    TS_FILES myapp_de.ts myapp_fi.ts
    MERGE_QT_TRANSLATIONS
    QT_TRANSLATION_CATALOGS qtbase qtmultimedia
)

如果您的项目支持的语言 Qt 没有提供自己的翻译,则在配置时会发出警告。您可以通过将 CMake 变量QT_NO_MISSING_CATALOG_LANGUAGE_WARNING 设置为ON 来抑制该警告。

过时的命令签名

旧版本的qt_add_lrelease 将目标作为第一个参数。这仍然可行,但已被弃用。

示例

添加目标myapp_lreleaserelease_translations ,将给定的.ts 文件转换为.qm 文件。同时,安装生成的.qm 文件。目标myapp_lrelease 默认已生成。

project(myapp)
...
qt_add_lrelease(
    TS_FILES myapp_de.ts myapp_fr.ts
    QM_FILES_OUTPUT_VARIABLE qm_files
)
install(FILES ${qm_files} DESTINATION "translations")

您可以通过LRELEASE_TARGET 参数指定已创建目标的名称:

qt_add_lrelease(
    LRELEASE_TARGET create_myapp_qm_files
    TS_FILES myapp_de.ts myapp_fr.ts
    QM_FILES_OUTPUT_VARIABLE qm_files
)

© 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.