En esta página

qt_add_lrelease

Añade objetivos para transformar archivos .ts de Qt Linguist en archivos .qm.

El comando está definido en el componente LinguistTools del paquete Qt6. Carga el paquete con:

find_package(Qt6 REQUIRED COMPONENTS LinguistTools)

Este comando se introdujo en Qt 6.2.

Sinopsis

Desde 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 ...])

Desde 6.2 (obsoleto):

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

Si los comandos versionless están deshabilitados, utilice qt6_add_lrelease() en su lugar. Admite el mismo conjunto de argumentos que este comando.

Advertencia: Para ejecutar qt_add_lrelease en un ámbito de directorio distinto del ámbito de directorio de destino se requiere al menos la versión 3.18 de CMake.

Descripción

Crea un comando personalizado para transformar archivos .ts en archivos .qm con lrelease.

La ejecución de la orden personalizada está controlada por un objetivo personalizado que se crea de forma predeterminada. El nombre de ese objetivo personalizado por defecto es ${PROJECT_NAME}_lrelease. Las siguientes llamadas a qt_add_lrelease crearán nombres de destino con un número creciente añadido. El nombre del objetivo personalizado puede especificarse con la opción LRELEASE_TARGET.

Los archivos .ts deben especificarse con el argumento TS_FILES.

Esta función está diseñada para utilizarse junto con qt_add_lupdate. Véase también el complemento qt_add_translations.

Opciones

Puede establecer OPTIONS adicionales que deben pasarse cuando se invoca lrelease. Puede encontrar las posibles opciones en la documentación de lrelease.

Ubicación de los archivos .qm generados

Por defecto, los archivos .qm se colocarán en el directorio de compilación actual (CMAKE_CURRENT_BINARY_DIR). Desde Qt 6.9 puedes usar el argumento QM_OUTPUT_DIRECTORY para generar los archivos .qm en un directorio diferente. Las rutas relativas se consideran por debajo de CMAKE_CURRENT_BINARY_DIR.

Por ejemplo, con el siguiente código, los archivos .qm se generan en un directorio translations por debajo del directorio de construcción actual.

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

Para un control más preciso, puede especificar el directorio de salida de archivos .qm individuales estableciendo la propiedad de archivo fuente OUTPUT_LOCATION en el archivo .ts correspondiente. Esto debe hacerse antes de llamar a qt_add_lrelease.

La propiedad de archivo fuente OUTPUT_LOCATION anula el directorio pasado a través de QM_OUTPUT_DIRECTORY.

Por ejemplo, con el siguiente código, los archivos .qm se generan en un directorio translations por debajo del directorio de compilación actual.

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)

Procesamiento de los archivos .qm generados

Para seguir procesando los archivos .qm generados, por ejemplo para crear reglas de instalación, qt_add_lrelease puede almacenar las rutas de los archivos .qm en una variable. Pase QM_FILES_OUTPUT_VARIABLE <variable-name> a la función para ello.

Construir por defecto

Por defecto, el comando crea un objetivo personalizado que se añade al objetivo de compilación por defecto. Esto asegura que los archivos .qm están siempre actualizados cuando se construye el proyecto. Este comportamiento puede desactivarse con el argumento EXCLUDE_FROM_ALL. En este caso, el usuario debe construir el objetivo ${PROJECT_NAME}_lrelease manualmente.

Objetivo paraguas

Además del objetivo ${target}_lrelease, se crea un objetivo paraguas release_translations. Este objetivo creará todos los objetivos ${target}_lrelease que se crearon con qt_add_lrelease.

Pase NO_GLOBAL_TARGET a qt_add_lrelease para evitar este comportamiento.

El nombre de este objetivo puede modificarse estableciendo la variable QT_GLOBAL_LRELEASE_TARGET antes de llamar a qt_add_lrelease.

Fusión de traducciones proporcionadas por Qt

Desde Qt 6.9, puedes combinar las traducciones proporcionadas por Qt en archivos .qm específicos de la aplicación. Para ello, pase la opción MERGE_QT_TRANSLATIONS a qt_add_translations. Esto determinará los catálogos de traducción de Qt que pertenecen a los módulos utilizados por su proyecto y los fusionará en los archivos .qm que son producidos por lrelease.

Los catálogos de traducción Qt están determinados por las llamadas a find_package en el ámbito de su CMakeLists.txt donde se llama a qt_add_translations. Por ejemplo, la siguiente secuencia fusionará los catálogos qtbase y qtmultimedia en sus archivos .qm:

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

Para especificar explícitamente los catálogos, utilice el argumento QT_TRANSLATION_CATALOGS:

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

Si su proyecto soporta un idioma para el que Qt no ofrece su propia traducción, se emitirá una advertencia en el momento de la configuración. Puede suprimir esta advertencia estableciendo la variable CMake QT_NO_MISSING_CATALOG_LANGUAGE_WARNING a ON.

Firma de comando obsoleta

Las versiones anteriores de qt_add_lrelease tomaban un objetivo como primer argumento. Esto todavía es posible, pero está obsoleto.

Ejemplos

Añade los objetivos myapp_lrelease y release_translations para transformar los archivos .ts en archivos .qm. Además, instala los archivos .qm generados. El objetivo myapp_lrelease se crea por defecto.

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")

Puede especificar el nombre del objetivo creado pasando el argumento 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
)

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