en français in deutsch Übersetzungen in Qt-Programme einbetten

Einleitung

Zur Übersetzung von Qt-Programmen können mehrere Techniken eingesetzt werden.

screen shot

Die Prozedur, die ich auf dieser Seite beschreibe, habe ich ausgearbeitet, damit Übersetzungen in die ausführbare Programmdatei integriert und sofort für die Anzeige in der Benutzeroberfläche verwendet werden, ohne, dass der Speicherort von Sprachdateien auf dem System des Endbenutzers im Auge behalten werden muss.

Ich kann nicht behaupten, dass meine Vorgehensweise in irgeneiner Weise speziell sei, weil ich nur benutze, was die Qt Entwicklungsumgebung ohnehin zur Verfügung stellt. Dennoch halte ich mich weder (mehr) an die Empfehlungen der offiziellen Dokumentation -, noch an die Vorschläge in diversen Diskussionen im Web, – hauptsächlich weil ich sie nicht verstehen kann!

Am Besten vergleichen Sie meine Erklärungen hier mit denen, die Sie sonstwo finden und dann machen Sie, was Sie wollen …

Meine Qt-Version ist zum Zeitpunkt des Entstehens dieses Dokuments: 6.4

Vorbereitende Arbeiten

Diese Schritte werde ich nicht näher erklären. Mehr Details finden Sie im QtLinguist Handbuch (Englisch).

  1. Der C++ Entwickler, der die QTranslator-Instanz einsetzt, muss Strings an die Methode QObject::tr() übergeben, damit sie übersetzt werden können.
  2. Derselbe Entwickler muss sicherstellen, dass der zweite Parameter für die load() Methode des QTranslator-Objekts exakt ":i18n" lautet. Das ist der Standard “Resource Prefix” für Übersetzungen. Zum Beispiel:
    [[maybe_unused]] bool isso = translator.load(QString("project_") + locale, ":i18n");
  3. Mit der Ausführung des Hilfsprogramms lupdate werden alle übersetzbaren Strings aus dem Quellcode extrahiert und in XML-Dateien mit der Endung *.ts geschrieben. Ein neueres Tool lupdate-pro soll Ähnliches leisten, ich weiß darüber aber nichts.
  4. Die *.ts Dateien können einem Übersetzer überlassen werden, der dann für jeden der gelisteten Strings eine Übersetzung einträgt. Oder der Übersetzer verwendet das Programm Qt-Linguist zum gleichen Zweck, aber unter Beachtung des Kontexts für jedes Textfragment.

Damit Anwendungen von der fertigen Übersetzung profitieren, muss jede *.ts Datei noch in eine binäre Qt message (*.qm) Datei kompiliert werden. Das geschieht in einem der nachfolgend beschriebenen Handlungsschritte.

Die Projekt-Datei (*.pro) vorbereiten

In der Projektdatei nennen Sie die Dateinamen der originalen Übersetzungen.:

       TRANSLATIONS += project_name_fr_FR.ts \
                       project_name_de_DE.ts 

Die Konvertierung dieser Dateien ins *.qm Format wird von der Hilfsanwendung lrelease erledigt. Der Aufruf von lrelease und die Forderung, die Übersetzungen in der Programmdatei einzubetten, werden mit zwei zusätzlichen Werten in der Variablen CONFIG, in der selben Projektdatei durchgesetzt:

       CONFIG += lrelease embed_translations
       TRANSLATIONS += project_name_fr_FR.ts \
                       project_name_de_DE.ts 

Die Kompilierung vorbereiten

Damit die Reste vorangegangener Kompilierungen keinen störenden Einfluss nehmen und sofern ein Makefile bereits existiert, bereinigen Sie das Projektverzeichnis mit
:~/[project]$ make distclean.

Jetzt erzeugen Sie ein neues Makefile durch den Aufruf von qmake:
:~/[project]$ qmake.

Die Änderungen in der Projektdatei haben zur Folge, dass zusätzliche Dateien erzeugt werden. Die erste davon ist eine Standard Resourcendatei qmake_qmake_qm_files.qrc, die sie nach der Ausführung von qmake sehen. Sie enthält die zukünftigen Ablageorte der kompilierten *.qm Dateien:

      <!DOCTYPE RCC><RCC version="1.0">
       <qresource prefix="i18n">
         <file alias="project_fr_FR.qm">/project/.qm/project_fr_FR.qm</file>
         <file alias="project_de_DE.qm">/project/.qm/project_de_DE.qm</file>
       </qresource>
      </RCC> 

Das versteckte Verzeichnis .qm wird während der Ausführung von make angelegt, wie auch die *.qm-Dateien, die mit den gewünschten Übersetzungen korrespondieren. Der Resourcen-Prefix i18n ist derselbe, der als zweiter Parameter für die Methode QTranslator::load() dient (siehe oben).

Make ausführen

Jetzt, da das Makefile und die Resourcendatei existieren, können Sie das Programm kompilieren
:~/[project]$ make.

Damit wird das lrelease Werkzeug gefunden, die *.qm Dateien kompiliert und in das versteckte Verzeichnis .qm geschrieben. Zu jeder *.qm Datei wird dann eine neue Quellcode-Datei *.cpp und ein Header *.h erzeugt. Letztendlich werden die Übersetzungen mit dem Rest des Quellcodes kompiliert und in die ausführbare Programmdatei gelinkt.

Wenn Sie es kompliziert mögen

Die bis hierher gezeigte Vorgehensweise beruht großenteils auf vom Qt-Framework gemachten Standard-Werten und -Vorgaben. Wenn Sie das vorziehen, können Sie einige der Parameter abwandeln, um

Dabei werde ich Ihnen allerdings nicht behilflich sein.

Ω

31. März 2023