qt_add_translations
Hinzufügen von Zielen zur Aktualisierung und Umwandlung von Qt Linguist.ts-Dateien in .qm-Dateien.
Der Befehl ist in der Komponente LinguistTools
des Pakets Qt6
definiert. Laden Sie das Paket mit:
find_package(Qt6 REQUIRED COMPONENTS LinguistTools)
Dieser Befehl wurde in Qt 6.2 eingeführt.
Zusammenfassung
Seit Qt 6.7:
qt_add_translations([target] [TARGETS target1 [target2...]] [SOURCE_TARGETS target1 [target2...]] [TS_FILE_BASE name] [TS_FILE_DIR directory] [TS_FILES file1.ts [file2.ts ...]] [PLURALS_TS_FILE file.ts] [NO_GENERATE_PLURALS_TS_FILE] [RESOURCE_PREFIX prefix] [OUTPUT_TARGETS variable-name] [TS_FILES_OUTPUT_VARIABLE variable-name] # since 6.8 [QM_FILES_OUTPUT_VARIABLE variable-name] [SOURCES source1.cpp [sources2.cpp ...]] [INCLUDE_DIRECTORIES directory1 [directory2 ...]] [LUPDATE_TARGET target-name] [LUPDATE_OPTIONS ...] [LRELEASE_TARGET target-name] [LRELEASE_OPTIONS ...] [IMMEDIATE_CALL])
Seit Qt 6.2 (veraltet):
qt_add_translations(target TS_FILES file1.ts [file2.ts ...] [RESOURCE_PREFIX prefix] [OUTPUT_TARGETS variable-name] [QM_FILES_OUTPUT_VARIABLE variable-name] [SOURCES source1.cpp [sources2.cpp ...]] [INCLUDE_DIRECTORIES directory1 [directory2 ...]] [LUPDATE_OPTIONS ...] [LRELEASE_OPTIONS ...])
Wenn versionslose Befehle deaktiviert sind, verwenden Sie stattdessen qt6_add_translations()
. Er unterstützt die gleichen Argumente wie dieser Befehl.
Warnung: Der Aufruf von qt_add_translations
in einem anderen Verzeichnisbereich als dem Zielverzeichnisbereich erfordert mindestens CMake Version 3.18.
Beschreibung
Erzeugt Ziele für die Aktualisierung von Qt Linguist .ts
Dateien und für deren Umwandlung in .qm
Dateien. Diese Funktion ist ein Convenience Wrapper um qt_add_lupdate und qt_add_lrelease und zielt darauf ab, die häufigsten Verwendungen beider Funktionen mit einem Aufruf anzubieten.
Der Parameter TARGETS
gibt eine Liste von Zielen an, die die generierten .qm
Dateien zur Laufzeit laden sollen. Wenn es nur ein solches Ziel gibt, können Sie den Namen des Ziels direkt als erstes Argument übergeben.
Der Parameter SOURCE_TARGETS
gibt eine Liste von ausführbaren oder Bibliothekszielen an, die Quellen mit übersetzbaren Zeichenfolgen enthalten. Aus den Quellen dieser Ziele werden die Dateien .ts
erstellt.
Wenn SOURCE_TARGETS
nicht angegeben wird, werden Ziele automatisch durch den Aufruf von qt_collect_translation_source_targets am Ende des Verzeichnisbereichs von PROJECT_SOURCE_DIR
gesammelt. Diese Funktionalität erfordert CMake 3.19 oder neuer. Diese Funktionalität kann mit dem Argument IMMEDIATE_CALL
ausgeschaltet werden.
Diese Funktion erstellt das Ziel update_translations
, das alle Quelldateien mit lupdate
durchsucht und die Dateien .ts
erstellt und aktualisiert.
Diese Funktion erstellt das Ziel release_translations
, das die .qm
Dateien aus den .ts
Dateien erzeugt. Dieses Ziel wird standardmäßig erstellt.
Die .ts
Dateien können mit dem Argument TS_FILES
angegeben werden, aber es ist bequemer, qt_add_translations
die Dateipfade automatisch ermitteln zu lassen. Siehe Automatische Ermittlung von .ts-Dateipfaden für Details.
Quellen und Include-Verzeichnisse
Mit SOURCES
können Sie explizit zusätzliche Quelldateien angeben, die übersetzbare Zeichenketten enthalten.
Sie können INCLUDE_DIRECTORIES
verwenden, um explizit Include-Verzeichnisse für diese Quelldateien anzugeben.
Automatische Ermittlung der Pfade für .ts-Dateien
Die Pfade der .ts
Dateien, die als Eingabe für qt_add_translations
verwendet werden, können automatisch ermittelt werden, wenn QT_I18N_TRANSLATED_LANGUAGES gesetzt wurde. Diese Variable kann bequem mit qt_standard_project_setup gesetzt werden.
Das folgende Projekt-Setup ist normalerweise ausreichend:
project(myproject) cmake_minimum_required(VERSION 3.19) find_package(Qt6 COMPONENTS Core LinguistTools) qt_standard_project_setup(I18N_TRANSLATED_LANGUAGES de fr) add_subdirectory(libs) add_subdirectory(apps) qt_add_translations(TARGETS myapp)
Damit werden die Dateien myproject_de.ts
und myproject_fr.ts
im Quellverzeichnis des Projekts angelegt.
Standardmäßig werden die .ts
Dateien in CMAKE_CURRENT_SOURCE_DIR
erstellt. Sie können den Speicherort ändern, indem Sie ein anderes Verzeichnis mit dem Argument TS_FILE_DIR
übergeben.
Standardmäßig werden die .ts
Dateinamen aus PROJECT_NAME
gebildet. Sie können einen anderen Basisnamen mit dem Argument TS_FILE_BASE
angeben.
Hinweis: TS_FILE_DIR
und TS_FILE_BASE
haben keine Auswirkungen auf explizit angegebene .ts
Dateien.
Seit Qt 6.8 können Sie das Argument TS_FILES_OUTPUT_VARIABLE
angeben, um die automatisch ermittelten .ts
Dateipfade in einer Variablen zu speichern.
Plural-Formen
QT_I18N_SOURCE_LANGUAGE gibt die Sprache an, in der die Quellcode-Strings geschrieben werden. Um Pluralformen korrekt zu behandeln, erstellen Sie eine zusätzliche .ts
Datei für diese Sprache, die nur übersetzbare Strings für Pluralformen enthält. Siehe Behandlung von Pluralformen für Details.
Mit PLURALS_TS_FILE
können Sie die Datei .ts
für die Ausgangssprache angeben. Diese Datei wird nur Pluralformen enthalten.
Eine Datei .ts
, die nur Pluralformen enthält, wird automatisch erzeugt, wenn nicht die Option NO_GENERATE_PLURALS_TS_FILE
angegeben wird.
Ein Beispiel,
project(myapp) qt_standard_project_setup( I18N_SOURCE_LANGUAGE en # optional - this is the default I18N_TRANSLATED_LANGUAGES de ) qt_add_executable(myapp ...) ... qt_add_translations(myapp)
erstellt die vollständige Übersetzungsdatei myapp_de.ts
und die Datei myapp_en.ts
, die nur Pluralformen enthält.
Wenn Sie eine vollständige Übersetzung der Ausgangssprache benötigen, fügen Sie diese zu QT_I18N_TRANSLATED_LANGUAGES
Zum Beispiel,
project(myapp) qt_standard_project_setup(I18N_TRANSLATED_LANGUAGES en de) qt_add_executable(myapp ...) ... qt_add_translations(myapp)
erstellt die vollständigen Übersetzungsdateien
myapp_en.ts
myapp_de.ts
Optionen
Sie können den Namen des benutzerdefinierten Ziels, das lupdate aufruft, mit der Option LUPDATE_TARGET
angeben. Ebenso steuert LRELEASE_TARGET
den Namen des benutzerdefinierten Ziels, das den Aufruf von lrelease
steuert.
Sie können zusätzliche Optionen für lupdate und lrelease mit LUPDATE_OPTIONS
und LRELEASE_OPTIONS
festlegen. Mögliche Optionen finden Sie in den lupdate-Optionen und lrelease-Optionen.
Um zum Beispiel ID-basierte Übersetzungen zu verwenden, müssen Sie LRELEASE_OPTIONS -idbased
an qt_add_translations
übergeben.
Standardmäßig werden die Dateien .qm
im aktuellen Build-Verzeichnis (CMAKE_CURRENT_BINARY_DIR
) abgelegt. Um dies zu ändern, können Sie OUTPUT_LOCATION
als eine Eigenschaft der Quelldatei .ts
festlegen.
Mit dem folgenden Code werden zum Beispiel die .qm
Dateien in einem translations
Verzeichnis unterhalb des aktuellen Build-Verzeichnisses erzeugt.
set_source_files_properties(app_en.ts app_de.ts PROPERTIES OUTPUT_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/translations")
Generierte .qm-Dateien in Ressourcen einbetten
Standardmäßig werden die generierten .qm
Dateien in eine Qt-Ressource eingebettet, die in die mit TARGETS
übergebenen Targets eingebunden wird. Die Dateien in der Ressource sind unter dem Ressourcenpräfix "/i18n"
zugänglich.
Sie können den Ressourcen-Präfix mit RESOURCE_PREFIX
setzen.
In einem statischen Qt-Build können bei der Erstellung eines Ressourcenziels weitere Ziele erstellt werden. Sie können qt_add_translations
anweisen, diese Ziele in einer Variablen zu speichern, indem Sie OUTPUT_TARGETS <variable-name>
übergeben.
Wenn OUTPUT_TARGETS
verwendet wird, muss entweder IMMEDIATE_CALL
oder SOURCE_TARGETS
angegeben werden.
Das automatische Einbetten von Ressourcen kann mit der Option QM_FILES_OUTPUT_VARIABLE
ausgeschaltet werden, gefolgt von dem Namen einer Variablen, in der der Befehl die Liste der erzeugten .qm
Dateien speichern soll.
qt_add_translations
vor Qt 6.7
Vor Qt 6.7 akzeptierte dieser Befehl nur ein Ziel als erstes Argument. Dieses Ziel wurde sowohl für das Extrahieren von übersetzbaren Quellen als auch für das Einbetten von .qm
Dateien verwendet.
Seit Qt 6.7 wird das Ziel im ersten Argument nicht mehr für die Quellextraktion verwendet.
Beispiele
Fügen Sie eine deutsche und eine französische Übersetzung zum Ziel frogger
mit qt_add_translations
hinzu:
cmake_minimum_required(VERSION 3.28) project(frogger) find_package(Qt6 COMPONENTS OpenGLWidgets) qt_standard_project_setup(I18N_TRANSLATED_LANGUAGES de fr) # The CMake files in the 'src' subdirectory create # the targets 'frogger_game' and 'frogger_level_editor'. add_subdirectory(src) # Add translations to the 'frogger_game' target. qt_add_translations(frogger_game)
Dies erzeugt die .ts
Dateien frogger_de.ts
und frogger_fr.ts
im Quellverzeichnis. lupdate sieht die Quelldateien aller Ziele, die für eine Übersetzung in Frage kommen, gemäß den Regeln von qt_collect_translation_source_targets.
Die .qm
Dateien, die aus den .ts
Dateien erzeugt werden, werden in das frogger_game
Ziel unter dem Ressourcenpräfix "i18n"
eingebettet.
Der Aufruf qt_add_translations
im obigen Beispiel entspricht in etwa dem folgenden:
qt_collect_translation_source_targets(i18n_targets) qt_add_lupdate( SOURCE_TARGETS ${i18n_targets} TS_FILES frogger_de.ts frogger_fr.ts) qt_add_lrelease( TS_FILES frogger_de.ts frogger_fr.ts QM_FILES_OUTPUT_VARIABLE qm_files) qt_add_resources(frogger_game "translations" PREFIX "/i18n" BASE "${CMAKE_CURRENT_BINARY_DIR}" FILES "${qm_files}" )
Verzeichnisse, Ziele und Quellen ausschließen
Sie können Ziele und Verzeichnisse von der automatischen Sammlung von Quellzielen ausschließen. Das folgende Beispiel schließt das Ziel helper_lib
und alles unter dem Verzeichnis tests
aus. Siehe die Verzeichniseigenschaft QT_EXCLUDE_FROM_TRANSLATION und die Zieleigenschaft QT_EXCLUDE_FROM_TRANSLATION.
# <project_root>/CMakeLists.txt qt_add_translations(frogger_game)
# <project_root>/src/helper_lib/CMakeLists.txt qt_add_library(helper_lib STATIC helpers.cpp) set_property(TARGET helper_lib PROPERTY QT_EXCLUDE_FROM_TRANSLATION ON)
# <project_root>/tests/CMakeLists.txt add_subdirectory(behavior_tests) add_subdirectory(physics_tests) set_directory_properties(PROPERTIES QT_EXCLUDE_FROM_TRANSLATION ON)
Im folgenden Beispiel schließen wir Quelldateien aus, die Teil des frogger_game
Targets sind, indem wir die Target-Eigenschaft QT_EXCLUDE_SOURCES_FROM_TRANSLATION verwenden:
qt_add_executable(frogger_game main.cpp 3rdparty/jumpsim.cpp 3rdparty/frogmath.cpp ) set_property(TARGET frogger_game PROPERTY QT_EXCLUDE_SOURCES_FROM_TRANSLATION "3rdparty/*" )
Explizite Angabe von Quellzielen
Wenn Sie die automatische Sammlung von Quellzielen nicht verwenden möchten, können Sie die Quellziele explizit angeben:
qt_add_translations(frogger_game SOURCE_TARGETS frogger_game )
Benutzerdefiniertes Ressourcen-Präfix
Lassen Sie uns nun die Dateien .qm
in frogger_game
und frogger_level_editor
einbetten und ein benutzerdefiniertes Ressourcenpräfix festlegen.
qt_add_translations( TARGETS frogger_game frogger_level_editor RESOURCE_PREFIX "/translations" )
Installieren von .qm-Dateien
Anstatt die .qm
Dateien einzubetten, können wir sie auch als normale Dateien installieren:
qt_add_translations( TARGETS frogger_game frogger_level_editor QM_FILES_OUTPUT_VARIABLE qm_files ) install(FILES ${qm_files} DESTINATION "translations")
Beeinflussung der Namen der .ts-Dateien
Legen Sie die .ts
Dateien in ein translations
Verzeichnis und ändern Sie den Basisnamen in frogger_i18n
:
qt_standard_project_setup(I18N_TRANSLATED_LANGUAGES de fr) ... qt_add_translations(frogger TS_FILE_BASE froggo TS_FILE_DIR translations )
Dies erzeugt die folgenden Dateien
translations/froggo_de.ts
translations/froggo_fr.ts
Sie können die Pfade auch explizit angeben:
qt_add_translations(frogger TS_FILES translations/froggo_de.ts translations/froggo_fr.ts )
© 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.