Text-ID-basierte Übersetzungen
Der Text-ID-Übersetzungsmechanismus ist ein industrietaugliches System für die Internationalisierung und Lokalisierung. Jeder Text in der Anwendung hat einen eindeutigen Bezeichner (Text-ID), den Sie im Quellcode anstelle von Text verwenden. Dies erleichtert die Verwaltung einer großen Anzahl von übersetzten Texten erheblich.
Hinweis: Sie dürfen in einer Anwendung nur rein textbasierte oder nur text-ID-basierte Funktionen verwenden. Wenn Sie sie mischen, erhalten Sie einen unvollständigen Satz von zu übersetzenden Texten.
Internationalisierung mit Text-IDs
Bei der Verwendung von Text-IDs anstelle von reinem Text ist die allgemeine Methode der Internationalisierung einer Anwendung dieselbe, aber die Details sind etwas anders:
- Die Funktionen und Makros für das Text-ID-basierte Übersetzungssystem unterscheiden sich vom Klartextsystem. Sie verwenden die Funktion
qsTrId()
anstelle von qsTr(), das MakroQT_TRID_NOOP()
anstelle von QT_TR_NOOP(), und das MakroQT_TRID_N_NOOP()
anstelle von QT_TR_N_NOOP()). - Verwenden Sie Text-IDs als Zeichenfolgen für die Benutzeroberfläche und nicht als reine Textzeichenfolgen. Ein Beispiel,
qsTrId("id-back-not-front")
- Sie können einen Kontextparameter nicht mit einer Text-ID angeben, und daher benötigen gleich geschriebene Wörter mit unterschiedlichen Bedeutungen separate Text-IDs. So unterscheidet beispielsweise
qsTrId("id-back-backstep")
den Back-Step Back vonid-back-not-front
Back. - Der technische englische Text, den Sie in der Benutzeroberfläche für Entwicklungs-Builds sehen, wird mit einem
//%
-Kommentar gekennzeichnet. Wenn Sie diesen Kommentar nicht einfügen, wird die Text-ID in der Benutzeroberfläche angezeigt. Dies ist besonders wichtig, wenn Sie Texte mit Parametern haben. Der Kommentar//%
muss die Parameterindikatoren in der Zeichenkette enthalten. Ein Beispiel,//% "Number of files: %1"
- Die
//:
Kommentare, die dem Übersetzer zusätzliche Informationen liefern, sind im Klartextsystem optional. Im Text-ID-basierten System sind diese zusätzlichen Informationen jedoch unerlässlich, da man ohne sie nur die Text-ID hat und der Übersetzer ohne weiteren Kontext möglicherweise keine sinnvolle Übersetzung daraus erstellen kann. Sie können lange beschreibende Text-IDs und keine Kommentare verwenden, aber Kommentare sind oft leichter zu verstehen.
Die folgenden Codeschnipsel zeigen einen Vergleich von text-ID-basierten und rein textbasierten Übersetzungen:
text-ID-basiert | Klartext-basiert |
---|---|
Text { id: backTxt; //: The back of the object, not the front //% "Back" //~ Context Not related to back-stepping text: qsTrId("id-back-not-front"); } | Text { id: backTxt; //: The back of the object, not the front //~ Context Not related to back-stepping text: qsTr("Back","Not front") } |
Lokalisierung mit Text-IDs
Die Lokalisierung mit Text-IDs läuft ähnlich ab wie die mit reinem Text.
Sie verwenden das Tool lupdate, um die TS-Dateien zu erzeugen, in die Sie die Übersetzungen einfügen. Die Ausgangswerte in den Übersetzungsdateien sind Text-IDs und kein reiner Text. Daher benötigen Sie entweder beschreibende Text-IDs oder gute zusätzliche Kommentare oder beides, um sicherzustellen, dass die Übersetzungen korrekt sind.
Das Beispiel der Text-ID-basierten Benutzeroberfläche von oben ergibt den folgenden Inhalt in der .ts-Datei:
<message id="id-back-not-front"> <source>Back</source> <extracomment>The back of the object, not the front</extracomment> <translation type="unfinished"></translation> <extra-Context>Not related to back-stepping</extra-Context> </message>
Wenn Sie lrelease verwenden, müssen Sie angeben, dass die Schlüssel für übersetzte Texte auf Text-IDs und nicht auf einfachem Text basieren. Wenn Sie qsTr()
verwenden, um die Zeichenketten im Code als übersetzbar zu kennzeichnen, wird das Attribut id
nicht gesetzt und lrelease
ignoriert sie.
Wenn jedoch für einen bestimmten Text keine Übersetzung verfügbar ist (was in der Regel erst spät in der Entwicklung der Fall ist), wird die Text-ID in der Benutzeroberfläche anstelle eines richtigen Textes angezeigt. Um die Anwendung besser testen zu können, können Sie lrelease
veranlassen, den englischen Engineering-Quelltext (aus den //%
-Kommentaren) als übersetzten Text zu verwenden und ihn mit einem Indikator, z. B. einem Ausrufezeichen (!), zu kennzeichnen, damit Sie noch nicht übersetzte Texte sehen können.
CMake-Konfiguration
Wenn Sie mit CMake bauen, verwenden Sie das Präfix qml_
für .ts-Dateien. qml_en.ts
In der Datei CMakeLists.txt fügen Sie die Funktion qt_add_translations hinzu, in der Sie die *.ts-Dateien als Werte von TS_FILES
auflisten, den Wert von RESOURCE_PREFIX auf die URI der Datei main.qml für das Projekt, gefolgt von /i18n, setzen und den Wert von LRELEASE_OPTIONS
auf -idbased
setzen:
qt_add_translations(${CMAKE_PROJECT_NAME} TS_FILES i18n/qml_de_DE.ts i18n/qml_en_US.ts RESOURCE_PREFIX Main/i18n LRELEASE_OPTIONS -idbased )
Erweiterte Verwendung mit qmake
Für Projekte, die auf eine große Anzahl von Sprachumgebungen abzielen, können Sie die TRANSLATIONS-Information aus der .pro-Datei entfernen und stattdessen die Übersetzungen mit einem separaten Skript verwalten. Das Skript kann lrelease
und lupdate
für jedes der gewünschten Ziele aufrufen.
Die Aktualisierungen könnten etwa so ablaufen:
lupdate -recursive <project-dir> -ts <project-dir>/i18n/myapp-text_en_GB.ts lupdate -recursive <project-dir> -ts <project-dir>/i18n/myapp-text_en_US.ts ...
Die Erzeugung der endgültigen .qm-Dateien könnte etwa so programmiert werden:
lrelease -idbased <project-dir>/i18n/myapp-text_en_GB.ts lrelease -idbased <project-dir>/i18n/myapp-text_en_US.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.