qt_add_lrelease
Add targets to transform Qt Linguist .ts files into .qm files.
The command is defined in the LinguistTools
component of the Qt6
package. Load the package with:
find_package(Qt6 REQUIRED COMPONENTS LinguistTools)
This command was introduced in Qt 6.2.
Synopsis
Since 6.7:
qt_add_lrelease(TS_FILES file1.ts [file2.ts ...] [LRELEASE_TARGET target-name] [EXCLUDE_FROM_ALL] [NO_GLOBAL_TARGET] [QM_FILES_OUTPUT_VARIABLE variable-name] [MERGE_QT_TRANSLATIONS] [QT_TRANSLATION_CATALOGS catalog1 [catalog2 ...]] [OPTIONS ...])
Since 6.2 (deprecated):
qt_add_lrelease(target TS_FILES file1.ts [file2.ts ...] [NO_TARGET_DEPENDENCY] [NO_GLOBAL_TARGET] [QM_FILES_OUTPUT_VARIABLE variable-name] [OPTIONS ...])
If versionless commands are disabled, use qt6_add_lrelease()
instead. It supports the same set of arguments as this command.
Warning: Calling qt_add_lrelease
in a directory scope different than the target directory scope requires at least CMake version 3.18.
Description
Creates a custom command to transform .ts
files into .qm
files with lrelease.
The execution of the custom command is driven by a custom target that is built by default. The name of that custom target defaults to ${PROJECT_NAME}_lrelease
. Further calls of qt_add_lrelease
will create target names with an increasing number appended. The custom target name can be specified with the LRELEASE_TARGET
option.
The .ts
files must be specified with the argument TS_FILES
.
This function is designed to be used in conjunction with qt_add_lupdate. See also the convenience wrapper qt_add_translations.
Options
You can set additional OPTIONS
that should be passed when lrelease
is invoked. You can find possible options in the lrelease documentation.
By default, the .qm
files will be placed in the current build directory (CMAKE_CURRENT_BINARY_DIR
). To change this, you can set OUTPUT_LOCATION
as a property of the source .ts
file.
For example, with the following code, the .qm
files are generated in a translations
directory below the current build directory.
set_source_files_properties(app_en.ts app_de.ts PROPERTIES OUTPUT_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/translations")
Processing Generated .qm Files
To further process the generated .qm
files, for example to create install rules, qt_add_lrelease
can store the paths of the .qm
files in a variable. Pass QM_FILES_OUTPUT_VARIABLE <variable-name>
to the function for that.
Build by Default
By default, the command creates a custom target that is added to the default build target. This ensures that the .qm
files are always up-to-date when the project is built. This behavior can be turned off with the EXCLUDE_FROM_ALL
argument. In this case, the user must build the ${PROJECT_NAME}_lrelease
target manually.
Umbrella Target
In addition to the target ${target}_lrelease
, an umbrella target release_translations
is created. This target will build all ${target}_lrelease
targets that were created with qt_add_lrelease
.
Pass NO_GLOBAL_TARGET
to qt_add_lrelease
to prevent this behavior.
The name of this target can be overridden by setting the variable QT_GLOBAL_LRELEASE_TARGET
before calling qt_add_lrelease
.
Merging Qt-provided translations
Since Qt 6.9, you can merge the translations that are provided by Qt into application-specific .qm
files. To do that, pass the MERGE_QT_TRANSLATIONS
option to qt_add_translations
. This will determine the Qt translation catalogs that belong to the modules used by your project and merge them into the .qm
files that are produced by lrelease
.
The Qt translation catalogs are determined by the find_package
calls in the scope of your CMakeLists.txt
where qt_add_translations
is called. For example, the following sequence will merge the catalogs qtbase
and qtmultimedia
into your .qm
files:
find_package(Qt6 COMPONENTS MultimediaWidgets) ... qt_add_lrelease( TS_FILES myapp_de.ts myapp_fi.ts MERGE_QT_TRANSLATIONS )
To explicitly specify the catalogs, use the QT_TRANSLATION_CATALOGS
argument:
qt_add_lrelease( TS_FILES myapp_de.ts myapp_fi.ts MERGE_QT_TRANSLATIONS QT_TRANSLATION_CATALOGS qtbase qtmultimedia )
If your project supports a language for which Qt doesn't offer its own translation, a warning will be issued at configure time. You can suppress this warning by setting the CMake variable QT_NO_MISSING_CATALOG_LANGUAGE_WARNING
to ON
.
Deprecated Command Signature
Older versions of qt_add_lrelease
took a target as the first argument. This is still possible but deprecated.
Examples
Add the targets myapp_lrelease
and release_translations
for transforming the given .ts
files into .qm
files. Also, install the generated .qm
files. The target myapp_lrelease
is built by default.
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")
You can specify the name of the created target by passing the LRELEASE_TARGET
argument:
qt_add_lrelease( LRELEASE_TARGET create_myapp_qm_files TS_FILES myapp_de.ts myapp_fr.ts QM_FILES_OUTPUT_VARIABLE qm_files )
© 2024 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.