Anwendungen lokalisieren

Die Schritte zur Lokalisierung von Anwendungen umfassen die Erstellung übersetzbarer Anwendungen, die Vorbereitung für die Übersetzung, die Übersetzung der Strings und die Erstellung von Laufzeit-Übersetzungsdateien für die freigegebene Anwendung.

Qt Quick und Qt C++-Anwendungen verwenden dasselbe zugrunde liegende Lokalisierungssystem: lupdate lrelease , und die von ihnen erzeugten Übersetzungsquelldateien (TS) und QM-Dateien. Sie verwenden dieselben Werkzeuge für QML- und C++-Code, wie im HandbuchQt Linguist beschrieben.

Sie können sogar Benutzeroberflächen-Strings in QML- und C++-Quelldateien in derselben Anwendung haben. Das System erstellt eine einzige kombinierte Übersetzungsdatei, und die Strings sind von QML- und C++-Code aus zugänglich.

So lokalisieren Sie internationalisierte Anwendungen:

Übersetzungsquellen in Qt-Projektdateien spezifizieren

Damit lupdate und lrelease TS- und QM-Dateien erzeugen können, muss die Projektdatei der Anwendung aktualisiert werden, um die Quelldateien anzugeben, die zu übersetzenden Text enthalten.

Verwenden Sie die ISO-Sprach- und Ländercodes im TS-Dateinamen, um die Sprache zu bestimmen, die zur Laufzeit geladen werden soll. Weitere Informationen finden Sie unter Aktivieren der Übersetzung.

Das Tool lupdate extrahiert Zeichenketten der Benutzeroberfläche aus Ihrer Anwendung. Es erwartet, dass der gesamte Quellcode standardmäßig in UTF-8 kodiert ist. Weitere Informationen finden Sie unter Kodierung.

CMake verwenden

Machen Sie die CMake-Befehle von Qt für die Internationalisierung verfügbar, indem Sie das Paket Qt6LinguistTools laden.

cmake_minimum_required(VERSION 3.16)
project(myproject)
find_package(Qt6 COMPONENTS Core LinguistTools)

Deklarieren Sie die unterstützten Sprachen mit dem I18N_TRANSLATED_LANGUAGES Argument von qt_standard_project_setup.

# Declare that the project will have a German and a French translation.
qt_standard_project_setup(I18N_TRANSLATED_LANGUAGES de fr)

Es wird angenommen, dass der Quellcode übersetzbare Strings in Englisch enthält. Sie können die Sprache der Zeichenketten im Quellcode mit dem Parameter qt_standard_project_setup I18N_SOURCE_LANGUAGE anpassen.

Rufen Sie den Befehl qt_add_translations auf dem Ziel auf, das die .qm Dateien zur Laufzeit laden soll.

qt_add_translations(myapplication)

Wenn sie noch nicht vorhanden sind, werden dadurch die Dateien myproject_de.ts und myproject_fr.ts erstellt. Siehe Automatische Ermittlung von .ts-Dateipfaden, wie diese Dateinamen aufgebaut sind.

Mit diesem Befehl wird auch die Datei myproject_en.ts erstellt, bei der es sich um eine reine Plural-Übersetzungsdatei handelt. Weitere Informationen finden Sie unter Handhabung von Pluralformen. Die Erzeugung der Datei, die nur Pluralformen enthält, kann mit dem Argument NO_GENERATE_PLURALS_TS_FILE ausgeschaltet werden.

Alle Quelldateien aller Ziele im Projekt werden als Eingabe für die Erzeugung der .ts Dateien betrachtet. Siehe die qt_add_translations Referenzdokumentation für weitere Informationen, wie die Ziele des Projekts gesammelt werden und wie man Ziele und einzelne Quellen ausschließt.

Verwendung von qmake

Wenn Sie qmake verwenden, setzen Sie eine bedingte Anweisung, um die QML-Quellen vor dem Compiler zu verbergen, die Sie im SOURCES oder HEADERS Eintrag in der .pro Datei auflisten.

Die SOURCES-Variable ist für C++-Quelldateien vorgesehen. Wenn Sie dort QML- oder JavaScript-Quelldateien auflisten, versucht der Compiler, sie so zu erstellen, als ob es sich um C++-Dateien handelt. Als Abhilfe können Sie eine lupdate_only{...} bedingte Anweisung verwenden, damit das Tool lupdate die .qml-Dateien sieht, der C++-Compiler sie aber ignoriert.

Der folgende Ausschnitt aus der .pro-Datei gibt zum Beispiel zwei .qml-Dateien in der Anwendung an.

lupdate_only{
SOURCES = main.qml \
          MainPage.qml
}

Sie können die .qml-Quelldateien auch mit einem Wildcard-Match angeben. Die Suche ist nicht rekursiv, daher müssen Sie jedes Verzeichnis angeben, das Quelldateien enthält, die UI-Strings enthalten:

lupdate_only{
SOURCES = *.qml \
          *.js \
          content/*.qml \
          content/*.js
}

Übersetzungen bereitstellen

Der einfachste Weg, .qm Dateien bereitzustellen, ist, sie in Qt-Ressourcen einzubetten. Der CMake-Befehl qt_add_translations kümmert sich automatisch um diese Aufgabe. Die .qm Dateien sind unter dem ":/i18n" Ressourcenpräfix zugänglich.

# Automatically embed generated .qm files.
qt_add_translations(myapplication)

Alternativ können die .qm Dateien auch in einem Verzeichnis im Dateisystem bereitgestellt werden. Dies ist wünschenswert für größere Anwendungen, die nicht alle verfügbaren Übersetzungen im Speicher halten wollen. Übergeben Sie das Argument QM_FILES_OUTPUT_VARIABLE an qt_add_translations. Der Befehl speichert die Liste der erzeugten .qm Dateien in der angegebenen Variable. Verwenden Sie die regulären Installationsbefehle von CMake für die Dateinamen in dieser Liste.

# Do not embed generated .qm files.
qt_add_translations(myapplication
    QM_FILES_OUTPUT_VARIABLE qm_files
)

# Install generated .qm files.
install(FILES ${qm_files} DESTINATION translations)

Legen Sie die .qm Dateien, die für die Anwendung benötigt werden, an einem Ort ab, an dem der Loader-Code, der QTranslator verwendet, sie finden kann. Normalerweise geben Sie einen Pfad relativ zu QCoreApplication::applicationDirPath() an.

Zusätzlich zu den QM-Dateien der Anwendung müssen Sie die QM-Dateien für die Qt-Module bereitstellen, die Sie in der Anwendung verwenden, sofern diese nicht auf dem System installiert sind.

Die QM-Dateien sind nach Modulen aufgeteilt und es gibt eine sogenannte Meta-Katalogdatei, die die QM-Dateien aller Module enthält. Sie müssen jedoch nur die QM-Dateien für die Module bereitstellen, die Sie in der Anwendung verwenden.

Mit dem Tool lconvert können Sie im Deployment-Schritt die benötigten QM-Dateien zu einer Datei verketten, die der Meta-Katalogdatei entspricht. Um zum Beispiel eine deutsche Übersetzungsdatei für eine Anwendung zu erstellen, die das Modul Qt Core, Qt GUI, und Qt Quick Module verwendet, führen Sie aus:

lconvert -o installation_folder/qt_de.qm qtbase_de.qm qtdeclarative_de.qm

Qt-Modul-Übersetzungen verwenden

Qt-Module enthalten mehrere Tausend Strings, die ebenfalls in die Sprachen übersetzt werden müssen, die Sie anvisieren. Sie können eine Reihe von TS-Dateien im qttranslations Repository finden. Bevor Sie mit der Übersetzung von Qt beginnen, lesen Sie die Wiki-Seite Übersetzen von Qt in andere Sprachen.

Auffinden von Qt-Übersetzungen

Sie können QLibraryInfo::path() verwenden, um die Übersetzungen für die Qt-Module zu finden, die Ihre Anwendung verwendet. Sie können den Pfad zu den Übersetzungen zur Laufzeit abfragen, indem Sie QLibraryInfo::TranslationsPath an diese Funktion übergeben.

Verfügbare Kataloge

Die Qt-Übersetzungskataloge befinden sich im Repository qttranslations.

Achtung! Qt-Übersetzungen werden von der Qt-Community beigesteuert und ohne jegliche Garantie zur Verfügung gestellt. Übersetzungen können fehlen, veraltet oder völlig falsch sein, bis hin zur Bösartigkeit. Es wird empfohlen, dass Sie alle von Ihnen gelieferten Übersetzungen überprüfen.

In Qt 4 gibt es eine große, monolithische .qm Datei pro Gebietsschema. Zum Beispiel enthält die Datei qt_de.qm die deutsche Übersetzung aller Bibliotheken.

Der Metakatalog qt_ enthält die noch vorhandenen Qt-Übersetzungen, die in Qt 4 im Katalog qt_ enthalten waren. Er wurde erstellt, um die Portierung von Anwendungen von Qt 4 auf Qt 5 zu erleichtern. Der Meta-Katalog ist auf Übersetzungen angewiesen, die möglicherweise nicht vorhanden sind, weil sie zu unnötigen oder veralteten Modulen gehören, was dazu führen kann, dass das Laden der Übersetzungen fehlschlägt. Wenn Sie in Ihrer Anwendung Module verwenden, die in Qt 5 oder später neu sind, müssen Sie die Namen der Kataloge für diese Module angeben, auch wenn Sie den Metakatalog verwenden.

Die folgende Tabelle listet die verfügbaren Übersetzungskataloge für die Qt-Module und -Werkzeuge in Qt auf.

Qt Modul oder WerkzeugKatalog
Qt Bluetoothqtconnectivity
Qt Concurrentqtbase
Qt Coreqtbase
Qt D-Busqtbase
Qt Widgets Designerdesigner
Qt GUIqtbase
Qt Helpqt_help
Qt Linguistlinguist
Qt Locationqtlocation
Qt Multimediaqtmultimedia
Qt Networkqtbase
Qt NFCqtconnectivity
Qt Print Supportqtbase
Qt Qmlqtdeclarative
Qt Quickqtdeclarative
Qt Quick Controlsqtdeclarative
Qt Quick Widgetsqtdeclarative
Qt Serial Portqtserialport
Qt SQLqtbase
Qt Widgetsqtbase
Qt WebSocketsqtsockets
Qt WebEngineqtwebengine

Beispiel: Wesentliche Qt-Module

Um beispielsweise Übersetzungen für wichtige Qt-Module wie Qt Core, Qt GUI, Qt Network und Qt Widgets zu finden, fügen Sie der Funktion main() den folgenden Code hinzu:

    QTranslator qtTranslator;
    if (qtTranslator.load(QLocale::system(), u"qtbase"_s, u"_"_s,
                          QLibraryInfo::path(QLibraryInfo::TranslationsPath))) {
        app.installTranslator(&qtTranslator);
    }

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