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.