Zur Übersetzung von Qt-Programmen können mehrere Techniken eingesetzt werden.
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
Diese Schritte werde ich nicht näher erklären. Mehr Details finden Sie im QtLinguist Handbuch (Englisch).
lupdate-prosoll Ähnliches leisten, ich weiß darüber aber nichts.
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.
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
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).
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.
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.