qt_add_lrelease
Ajouter des cibles pour transformer les fichiers .ts de Qt Linguist en fichiers .qm.
La commande est définie dans le composant LinguistTools du paquetage Qt6. Chargez le paquet avec :
find_package(Qt6 REQUIRED COMPONENTS LinguistTools)
Cette commande a été introduite dans Qt 6.2.
Synopsis
Depuis la version 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 ...])Depuis la version 6.2 (obsolète) :
qt_add_lrelease(target TS_FILES file1.ts [file2.ts ...]
[NO_TARGET_DEPENDENCY]
[NO_GLOBAL_TARGET]
[QM_FILES_OUTPUT_VARIABLE variable-name]
[OPTIONS ...])Si les commandes sans version sont désactivées, utilisez qt6_add_lrelease() à la place. Elle supporte le même ensemble d'arguments que cette commande.
Attention : L'appel à qt_add_lrelease dans un répertoire différent du répertoire cible nécessite au moins la version 3.18 de CMake.
Description
Crée une commande personnalisée pour transformer les fichiers .ts en fichiers .qm avec lrelease.
L'exécution de la commande personnalisée est pilotée par une cible personnalisée qui est construite par défaut. Le nom de cette cible personnalisée est par défaut ${PROJECT_NAME}_lrelease. D'autres appels de qt_add_lrelease créeront des noms de cibles avec un nombre croissant de noms. Le nom de la cible personnalisée peut être spécifié avec l'option LRELEASE_TARGET.
Les fichiers .ts doivent être spécifiés avec l'argument TS_FILES.
Cette fonction est conçue pour être utilisée en conjonction avec qt_add_lupdate. Voir aussi le wrapper de commodité qt_add_translations.
Options
Vous pouvez définir des options supplémentaires pour OPTIONS qui doivent être transmises lorsque lrelease est invoqué. Vous trouverez les options possibles dans la documentation de lrelease.
Emplacement des fichiers .qm générés
Par défaut, les fichiers .qm seront placés dans le répertoire de construction actuel (CMAKE_CURRENT_BINARY_DIR). Depuis Qt 6.9, vous pouvez utiliser l'argument QM_OUTPUT_DIRECTORY pour générer les fichiers .qm dans un répertoire différent. Les chemins relatifs sont considérés comme étant inférieurs à CMAKE_CURRENT_BINARY_DIR.
Par exemple, avec le code suivant, les fichiers .qm sont générés dans un répertoire translations en dessous du répertoire de construction actuel.
qt_add_lrelease(
TS_FILES myapp_en.ts myapp_de.ts
QM_OUTPUT_DIRECTORY translations
)Pour un contrôle plus fin, vous pouvez spécifier le répertoire de sortie des fichiers .qm individuels en définissant la propriété du fichier source OUTPUT_LOCATION sur le fichier .ts correspondant. Cette opération doit être effectuée avant d'appeler qt_add_lrelease.
La propriété de fichier source OUTPUT_LOCATION remplace le répertoire transmis via QM_OUTPUT_DIRECTORY.
Par exemple, avec le code suivant, les fichiers .qm sont générés dans un répertoire translations situé sous le répertoire de construction actuel.
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)Traitement des fichiers .qm générés
Pour poursuivre le traitement des fichiers .qm générés, par exemple pour créer des règles d'installation, qt_add_lrelease peut stocker les chemins d'accès des fichiers .qm dans une variable. Passez QM_FILES_OUTPUT_VARIABLE <variable-name> à la fonction pour cela.
Création par défaut
Par défaut, la commande crée une cible personnalisée qui est ajoutée à la cible de construction par défaut. Cela permet de s'assurer que les fichiers .qm sont toujours à jour lorsque le projet est construit. Ce comportement peut être désactivé à l'aide de l'argument EXCLUDE_FROM_ALL. Dans ce cas, l'utilisateur doit construire la cible ${PROJECT_NAME}_lrelease manuellement.
Cible parapluie
En plus de la cible ${target}_lrelease, une cible parapluie release_translations est créée. Cette cible construira toutes les cibles ${target}_lrelease qui ont été créées avec qt_add_lrelease.
Passez NO_GLOBAL_TARGET à qt_add_lrelease pour éviter ce comportement.
Le nom de cette cible peut être modifié en définissant la variable QT_GLOBAL_LRELEASE_TARGET avant d'appeler qt_add_lrelease.
Fusionner les traductions fournies par Qt
Depuis Qt 6.9, vous pouvez fusionner les traductions fournies par Qt dans des fichiers .qm spécifiques à l'application. Pour ce faire, passez l'option MERGE_QT_TRANSLATIONS à qt_add_translations, ce qui déterminera les catalogues de traduction de Qt qui appartiennent aux modules utilisés par votre projet et les fusionnera dans les fichiers .qm produits par lrelease.
Les catalogues de traduction Qt sont déterminés par les appels à find_package dans la portée de votre CMakeLists.txt où qt_add_translations est appelé. Par exemple, la séquence suivante fusionnera les catalogues qtbase et qtmultimedia dans vos fichiers .qm:
find_package(Qt6 COMPONENTS MultimediaWidgets)
...
qt_add_lrelease(
TS_FILES myapp_de.ts myapp_fi.ts
MERGE_QT_TRANSLATIONS
)Pour spécifier explicitement les catalogues, utilisez l'argument QT_TRANSLATION_CATALOGS:
qt_add_lrelease(
TS_FILES myapp_de.ts myapp_fi.ts
MERGE_QT_TRANSLATIONS
QT_TRANSLATION_CATALOGS qtbase qtmultimedia
)Si votre projet supporte une langue pour laquelle Qt ne propose pas sa propre traduction, un avertissement sera émis au moment de la configuration. Vous pouvez supprimer cet avertissement en définissant la variable CMake QT_NO_MISSING_CATALOG_LANGUAGE_WARNING à ON.
Signature de commande obsolète
Les anciennes versions de qt_add_lrelease prenaient une cible comme premier argument. Ceci est toujours possible mais déprécié.
Exemples
Ajoutez les cibles myapp_lrelease et release_translations pour transformer les fichiers .ts donnés en fichiers .qm. Installez également les fichiers .qm générés. La cible myapp_lrelease est construite par défaut.
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")Vous pouvez spécifier le nom de la cible créée en passant l'argument 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.