Troll Print Beispiel
Aktualisierung der Übersetzungen für spätere Versionen.
Troll Print ist eine Beispielanwendung, mit der der Benutzer Druckereinstellungen wählen kann. Es gibt sie in zwei Versionen: Englisch und Portugiesisch.
Wir haben eine Übersetzungsdatei, trollprint_pt.ts
, beigefügt, die einige portugiesische Übersetzungen für dieses Beispiel enthält.
Wir werden zwei Versionen der gleichen Anwendung betrachten: Troll Print 1.0 und 1.1. Wir werden lernen, wie man die für eine Version erstellten Übersetzungen in einer späteren Version wiederverwendet. (In diesem Tutorium müssen Sie einige Quelldateien bearbeiten. Es ist wahrscheinlich am besten, alle Dateien in ein neues temporäres Verzeichnis zu kopieren und von dort aus zu arbeiten).
Weitere Informationen zum Übersetzen von Qt-Anwendungen finden Sie im Qt Linguist Handbuch.
Zeile für Zeile durchgehen
Die Klasse PrintPanel
ist in printpanel.h
definiert.
class PrintPanel : public QWidget { Q_OBJECT
PrintPanel
ist ein QWidget. Sie benötigt das Q_OBJECT
Makro für tr()
, um richtig zu funktionieren.
Die Implementierungsdatei ist printpanel.cpp
.
PrintPanel::PrintPanel(QWidget *parent) : QWidget(parent) { /* QLabel *label = new QLabel(tr("<b>TROLL PRINT</b>")); label->setAlignment(Qt::AlignCenter); */
Ein Teil des Codes ist in Troll Print 1.0 auskommentiert; Sie werden ihn später für Troll Print 1.1 auskommentieren.
twoSidedGroupBox = new QGroupBox(tr("2-sided")); twoSidedEnabledRadio = new QRadioButton(tr("Enabled")); twoSidedDisabledRadio = new QRadioButton(tr("Disabled")); twoSidedDisabledRadio->setChecked(true); colorsGroupBox = new QGroupBox(tr("Colors")); colorsEnabledRadio = new QRadioButton(tr("Enabled")); colorsDisabledRadio = new QRadioButton(tr("Disabled"));
Beachten Sie die beiden Vorkommen von tr("Enabled")
und von tr("Disabled")
in PrintPanel. Da sowohl "Aktiviert "s als auch "Deaktiviert "s im gleichen Kontext erscheinen Qt Linguist nur jeweils ein Vorkommen an und verwendet die gleichen Übersetzungen für die nicht angezeigten Duplikate. Dies ist zwar eine nützliche Zeitersparnis, aber in einigen Sprachen, wie z. B. Portugiesisch, erfordert das zweite Auftreten eine separate Übersetzung. Wir werden sehen, wie Qt Linguist dazu gebracht werden kann, alle Vorkommen für eine separate Übersetzung anzuzeigen.
Die Header-Datei für MainWindow
, mainwindow.h
, enthält keine Überraschungen. In der Implementierung mainwindow.cpp
haben wir einige für den Benutzer sichtbare Quelltexte, die zur Übersetzung markiert werden müssen.
setWindowTitle(tr("Troll Print %1").arg(version));
Wir müssen den Fenstertitel übersetzen.
void MainWindow::createActions() { exitAct = new QAction(tr("E&xit"), this); exitAct->setShortcut(tr("Ctrl+Q", "Quit")); connect(exitAct, &QAction::triggered, this, &MainWindow::close); aboutAct = new QAction(tr("&About"), this); aboutAct->setShortcut(Qt::Key_F1); connect(aboutAct, &QAction::triggered, this, &MainWindow::about); aboutQtAct = new QAction(tr("About &Qt"), this); connect(aboutQtAct, &QAction::triggered, qApp, &QApplication::aboutQt); } void MainWindow::createMenus() { QMenu *fileMenu = menuBar()->addMenu(tr("&File")); fileMenu->addAction(exitAct); menuBar()->addSeparator(); QMenu *helpMenu = menuBar()->addMenu(tr("&Help")); helpMenu->addAction(aboutAct); helpMenu->addAction(aboutQtAct); }
Außerdem müssen wir die Aktionen und Menüs übersetzen. Beachten Sie, dass die Zwei-Argument-Form von tr()
für den Tastaturbeschleuniger "Ctrl+Q" verwendet wird, da das zweite Argument der einzige Anhaltspunkt ist, den der Übersetzer hat, um anzugeben, welche Funktion dieser Beschleuniger ausführen wird.
QTranslator translator; if (translator.load(locale, u"trollprint"_s, u"_"_s)) app.installTranslator(&translator);
Die Funktion main()
in main.cpp
ist die gleiche wie die im Arrow Pad Beispiel. Insbesondere wählt sie eine Übersetzungsdatei auf der Grundlage des aktuellen Gebietsschemas aus.
Ausführen von Troll Print 1.0 auf Englisch und auf Portugiesisch
Wir werden die Übersetzungen in der trollprint_pt.ts
Datei verwenden, die mitgeliefert wird.
Setzen Sie die Umgebungsvariable LANG
auf pt
, und führen Sie dann trollprint
aus. Sie sollten immer noch die englische Version sehen. Führen Sie nun lrelease
, z.B. lrelease trollprint.pro
, aus und führen Sie das Beispiel erneut aus. Nun sollten Sie die portugiesische Ausgabe sehen (Troll Imprimir 1.0):
Die Übersetzung erscheint zwar korrekt, ist aber in Wirklichkeit falsch. In gutem Portugiesisch müsste das zweite Vorkommen von "Enabled" "Ativadas" und nicht "Ativado" lauten, und die Endung für die zweite Übersetzung von "Disabled" muss ebenfalls geändert werden.
Wenn Sie trollprint_pt.ts
öffnen mit Qt Linguistöffnen, werden Sie feststellen, dass es nur ein Vorkommen von "Enabled" und "Disabled" in der Übersetzungsquelldatei gibt, obwohl es im Quellcode jeweils zwei davon gibt. Der Grund dafür ist Qt Linguist versucht, die Arbeit des Übersetzers zu minimieren, indem es die gleiche Übersetzung für doppelte Quelltexte verwendet. In Fällen wie diesem, in denen eine identische Übersetzung falsch ist, muss der Programmierer die doppelten Vorkommen disambiguieren. Dies lässt sich leicht durch die Verwendung der Zwei-Argument-Form von tr()
erreichen.
Wir können leicht feststellen, welche Datei geändert werden muss, da der "Kontext" des Übersetzers in der Tat der Klassenname der Klasse ist, in der die zu ändernden Texte erscheinen. In diesem Fall handelt es sich um die Datei printpanel.cpp
, in der es vier Zeilen zu ändern gibt. Fügen Sie das zweite Argument "two-sided" in den entsprechenden Aufrufen von tr()
für das erste Paar von Optionsfeldern hinzu:
twoSidedEnabledRadio = new QRadioButton(tr("Enabled", "two-sided")); twoSidedDisabledRadio = new QRadioButton(tr("Disabled", "two-sided"));
und fügen Sie das zweite Argument "colors" in die entsprechenden tr()
-Aufrufe für das zweite Paar von Optionsfeldern ein:
colorsEnabledRadio = new QRadioButton(tr("Enabled", "colors"), colors); colorsDisabledRadio = new QRadioButton(tr("Disabled", "colors"), colors);
Kompilieren Sie nun neu, führen Sie lupdate
aus und öffnen Sie trollprint_pt.ts
mit Qt Linguist. Sie sollten nun zwei Änderungen sehen.
Erstens enthält die Quelldatei der Übersetzung nun drei Paare "Enabled", "Disabled". Das erste Paar ist mit "(obs.)" gekennzeichnet, was bedeutet, dass sie veraltet sind. Dies liegt daran, dass diese Texte in Aufrufen von tr()
erschienen sind, die durch neue Aufrufe mit zwei Argumenten ersetzt wurden. Das zweite Paar hat "zweiseitig" als Kommentar, und das dritte Paar hat "Farben" als Kommentar. Die Kommentare werden im Bereich Source text and comments in Qt Linguist.
Zweitens wurde der Übersetzungstext "Ativado" und "Desativado" automatisch als Übersetzung für die neuen Texte "Enabled" und "Disabled" verwendet, wiederum um die Arbeit des Übersetzers zu minimieren. Natürlich sind diese in diesem Fall für das zweite Vorkommen jedes Wortes nicht korrekt, aber sie bieten einen guten Ausgangspunkt.
Ändern Sie das zweite "Ativado" in "Ativadas" und das zweite "Desativado" in "Desativadas", speichern und beenden Sie das Programm. Führen Sie lrelease
aus, um eine aktuelle Binärdatei trollprint_pt.qm
zu erhalten, und starten Sie Troll Print (oder besser Troll Imprimir).
Das zweite Argument der tr()
-Aufrufe, "Kommentare" genannt in Qt Linguistgenannt, unterscheidet zwischen identischen Quelltexten, die im gleichen Kontext (Klasse) vorkommen. Sie sind auch in anderen Fällen nützlich, um dem Übersetzer Hinweise zu geben, und im Fall von Strg-Tasten-Beschleunigern sind sie die einzige Möglichkeit, dem Übersetzer die Funktion des Beschleunigers zu vermitteln.
Eine weitere Möglichkeit, dem Übersetzer zu helfen, besteht darin, ihm Informationen darüber zu geben, wie er zu dem bestimmten Teil der Anwendung navigieren kann, der die zu übersetzenden Quelltexte enthält. Dies hilft ihm, den Kontext zu erkennen, in dem die Übersetzung erscheint, und hilft ihm auch, die Übersetzungen zu finden und zu testen. Dies kann durch die Verwendung eines TRANSLATOR
Kommentars im Quellcode erreicht werden:
/*
TRANSLATOR MainWindow
In this application the whole application is a MainWindow.
Choose Help|About from the menu bar to see some text
belonging to MainWindow.
...
*/
Versuchen Sie, diese Kommentare zu einigen Quelldateien hinzuzufügen, insbesondere zu Dialogklassen, die die Navigation beschreiben, die notwendig ist, um die Dialoge zu erreichen. Sie könnten sie auch in die Beispieldateien einfügen, z.B. mainwindow.cpp
und printpanel.cpp
sind geeignete Dateien. Führen Sie lupdate
aus und starten Sie dann Qt Linguist und laden Sie trollprint_pt.ts
. Sie sollten die Kommentare im Bereich Source text and comments sehen, wenn Sie durch die Liste der Quelltexte blättern.
Manchmal, besonders bei großen Programmen, kann es für den Übersetzer schwierig sein, seine Übersetzungen zu finden und zu überprüfen, ob sie korrekt sind. Kommentare, die gute Navigationsinformationen liefern, können ihnen Zeit ersparen:
/*
TRANSLATOR ZClientErrorDialog
Choose Client|Edit to reach the Client Edit dialog, then choose
Client Specification from the drop down list at the top and pick
client Bartel Leendert van der Waerden. Now check the Profile
checkbox and then click the Start Processing button. You should
now see a pop up window with the text "Error: Name too long!".
This window is a ZClientErrorDialog.
*/
Troll Print 1.1
Wir werden nun die Version 1.1 von Troll Print vorbereiten. Starten Sie Ihren bevorzugten Texteditor und folgen Sie diesen Schritten:
- Entkommentieren Sie die beiden Zeilen, die ein QLabel mit dem Text "<b>TROLL PRINT</b>" in
printpanel.cpp
erstellen. - Word-tidying: Ersetzen Sie "2-sided" durch "Two-sided" in
printpanel.cpp
. - Ersetzen Sie "1.0" durch "1.1", wo immer es in
mainwindow.cpp
vorkommt. - Aktualisieren Sie das Copyright-Jahr auf 1999-2000 in
mainwindow.cpp
.
(Natürlich würden die Versionsnummer und das Copyright-Jahr in einer realen Anwendung consts oder #defines sein).
Wenn Sie fertig sind, führen Sie lupdate
aus und öffnen Sie dann trollprint_pt.ts
in Qt Linguist. Die folgenden Punkte sind von besonderem Interesse:
PrintPanel
- 2-seitig - gekennzeichnet mit "(obs.)", veraltet
- <b>TROLL PRINT</b> - unmarkiert, d.h. unübersetzt
- Zweiseitig - unmarkiert, d.h. unübersetzt.
Um Überarbeitungen zu erleichtern, kann man statt tr("Troll Print 1.0") auch tr("Troll Print %1").arg("1.0") oder ähnliches verwenden, um zu vermeiden, dass man die Zeichenkette bei jeder Veröffentlichung aktualisieren muss.
Gehen Sie die Übersetzungen in MainWindow
durch und markieren Sie diese als "erledigt". Übersetzen Sie "<b>TROLL PRINT</b>" als "<b>TROLL IMPRIMIR</b>". Wenn Sie "Two-sided" übersetzen, drücken Sie die Taste Guess Again, um "Two-sided" zu übersetzen, aber ändern Sie die "2" in "Dois".
Speichern und beenden Sie das Programm und führen Sie dann lrelease
aus. Die portugiesische Version sollte wie folgt aussehen:
Wählen Sie Ajuda|Sobre (Help|About), um die Info-Box zu sehen.
Wenn Sie Ajuda|Sobre Qt (Help|About Qt) wählen, erhalten Sie einen englischen Dialog. Ups! Qt selbst muss übersetzt werden. Siehe Internationalisierung mit Qt für Details.
Setzen Sie nun LANG=en
, um die englische Originalversion zu erhalten:
© 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.