Kapitel 30. Internationalisierung von Anwendungen

Dieses Kapitel zeigt, warum Internationalisierung keine “zusätzliche Option”, sondern eine strategische Entscheidung ist. Hier wird deutlich, wie einige richtige Schritte es ermöglichen, eine lokale Qt-Anwendung in ein globales Produkt zu verwandeln. Das Geheimnis wird enthüllt, wie man ohne Architekturkomplikation und ohne Leistungsverlust Unterstützung für Dutzende Sprachen und Regionen einbauen kann.

Es wird die Arbeit mit tr() behandelt, praktische Szenarien für die Verwendung von lupdate und Qt Linguist gezeigt sowie 3 Ansätze zum Sprachwechsel analysiert — einschließlich dynamischer ohne Neustart der Anwendung. Professionelle Teams verwenden genau solche Patterns, um Produkte auf dem Weltmarkt zu skalieren.

Dieses Kapitel zu überspringen bedeutet, bis zu 98 % der Benutzer außen vor zu lassen.

Das Kapitel enthält Code-Beispiele, die sofort einsatzbereit sind.

Selbstüberprüfung zum Kapitel

Warum erfüllt die Methode tr() gleichzeitig zwei Funktionen im Internationalisierungsprozess?Antwort
Richtige Antwort: Erstens markiert sie Strings für das Utility lupdate, das sie in TS-Dateien extrahiert. Zweitens führt sie die tatsächliche Übersetzung dieser Strings zur Laufzeit basierend auf dem geladenen QTranslator durch.
Was bedeuten die Abkürzungen i18n und l10n, und worin besteht der grundlegende Unterschied zwischen ihnen?Antwort
Richtige Antwort: i18n (internationalization) — Vorbereitung der Anwendung für die Arbeit in verschiedenen Sprachen, l10n (localization) — Anpassung an eine bestimmte Lokale (Datums-, Zahlen-, Währungsformate, Textrichtung). Internationalisierung ist die technische Grundlage, Lokalisierung ist die kulturelle Anpassung.
Warum wird dringend empfohlen, Englisch als Ausgangssprache für Übersetzungen zu verwenden?Antwort
Richtige Antwort: Erstens sind englische Zeichen Teil des Standard-Unicode und gewährleisten vollständige Kompatibilität. Zweitens ist Englisch die internationale Programmiersprache, was die Zusammenarbeit und das Erhalten von Hilfe von Entwicklern weltweit erleichtert.
Wozu dient der zweite Parameter-Kommentar für den Übersetzer in der Methode tr()?Antwort
Richtige Antwort: Der Kommentar präzisiert den Kontext für mehrdeutige Wörter und gewährleistet korrekte Übersetzung. Zum Beispiel kann das Wort “Date” Kalenderdatum oder romantisches Treffen bedeuten — der Kommentar beseitigt die Mehrdeutigkeit.
Warum löscht das Utility lupdate niemals vorhandene Übersetzungen aus TS-Dateien?Antwort
Richtige Antwort: Dies schützt die bereits geleistete Arbeit der Übersetzer. lupdate fügt nur neue Strings hinzu und markiert veraltete, behält aber alle vorhandenen Übersetzungen bei, was eine schrittweise Aktualisierung ohne Datenverlust ermöglicht.
Welche Rolle spielen die Dateien TS und QM, und warum werden beide Formate verwendet?Antwort
Richtige Antwort: TS-Dateien (XML) — editierbares Quellformat für Übersetzer. QM-Dateien — optimiertes Binärformat für schnelles Laden in die Anwendung. Die Trennung gewährleistet Arbeitskomfort und Performance.
Warum kann keine String-Konkatenation beim Erstellen übersetzter Texte verwendet werden?Antwort
Richtige Antwort: Verschiedene Sprachen haben unterschiedliche Grammatik und Wortreihenfolge. Zum Beispiel funktioniert die Konkatenation “Sehr geehrter” + Name nicht mit weiblichen Namen. Der Übersetzer benötigt den vollständigen Satzkontext für korrekte Übersetzung unter Berücksichtigung grammatikalischer Regeln.
Wie lädt man korrekt eine Übersetzungsdatei in die Anwendung und wendet sie an?Antwort
Richtige Antwort: Erstellen Sie ein QTranslator-Objekt, laden Sie die QM-Datei mit der Methode load() hinein, setzen Sie dann den Übersetzer in der Anwendung über qApp->installTranslator(). Alle in tr() eingewickelten Strings werden automatisch übersetzt.
Warum wird empfohlen, QM-Dateien in die Anwendungsressourcen einzubetten?Antwort
Richtige Antwort: Das Einbetten in Ressourcen reduziert die Anzahl der Dateien in der Auslieferung, schließt das Risiko zufälligen Verlusts oder Löschens von Übersetzungsdateien durch den Benutzer aus und vereinfacht die Anwendungsbereitstellung.
Welche drei Methoden zum Sprachwechsel zur Laufzeit gibt es, und welche ist am meisten zu bevorzugen?Antwort
Richtige Antwort: 1) Auswahl speichern und Neustart; 2) Zerstörung und Neuerstellung des Hauptfensters; 3) Überschreiben von changeEvent() und Aufruf von retranslateUi(). Die dritte Methode ist am meisten zu bevorzugen — sie aktualisiert die Oberfläche sofort ohne Neustart.
Wie hilft die Klasse QLocale bei der Lokalisierung der Anwendung?Antwort
Richtige Antwort: QLocale gewährleistet korrekte Formatierung von Zahlen, Daten, Zeiten und Währungen gemäß regionalen Standards. Zum Beispiel wird die Zahl 2876.56 als “2,876.56” in englischer Lokale und “2.876,56” in deutscher angezeigt.
Wozu wird das Makro QT_TR_NOOP für verzögerte Übersetzung benötigt?Antwort
Richtige Antwort: Es markiert den String für Übersetzung, verschiebt aber die tatsächliche Übersetzung auf einen späteren Zeitpunkt. Dies ist nützlich, wenn Strings an einer Stelle im Programm definiert werden (z.B. in Arrays oder Konstanten), aber an einer anderen verwendet und übersetzt werden.
Welches Event wird beim Sprachwechsel generiert, und wie verwendet man es zur Aktualisierung der Oberfläche?Antwort
Richtige Antwort: Beim Aufruf von installTranslator() wird das Event QEvent::LanguageChange generiert. Man muss die Methode changeEvent() in Widgets überschreiben, den Event-Typ prüfen und die Methode retranslateUi() aufrufen, die allen Strings aktuelle Übersetzungen neu zuweist.

Praktische Aufgaben

Einfaches Niveau

Taschenrechner mit zwei Sprachen
Erstellen Sie einen einfachen Taschenrechner mit Schaltflächen für grundlegende Operationen (+, -, *, /). Bereiten Sie ihn für Internationalisierung vor: wickeln Sie alle Strings in tr() ein, erstellen Sie Übersetzungsdateien für Russisch und Englisch. Übersetzen Sie Schaltflächennamen und Beschriftungen (“Ergebnis:”, “Taschenrechner” usw.).
Hinweise: Verwenden Sie QPushButton für Operationsschaltflächen. Fügen Sie in die .pro-Datei die Zeile TRANSLATIONS = calc_ru.ts calc_en.ts hinzu. Führen Sie lupdate aus, übersetzen Sie Strings in Qt Linguist, dann lrelease. Laden Sie die Übersetzung über QTranslator in main.cpp.

Mittleres Niveau

Anwendung mit dynamischem Sprachwechsel
Entwickeln Sie eine Anwendung mit Menü, Textbeschriftungen und Einstellungsdialog. Implementieren Sie die Möglichkeit, zwischen drei Sprachen (Russisch, Englisch, Deutsch) während der Laufzeit ohne Neustart zu wechseln. Fügen Sie im Menü einen Punkt “Sprache” mit Untermenü für die Auswahl hinzu. Verwenden Sie QLocale zur Anzeige des aktuellen Datums entsprechend der gewählten Lokale.
Hinweise: Überschreiben Sie changeEvent() im Hauptfenster zur Behandlung von QEvent::LanguageChange. Erstellen Sie eine retranslateUi()-Methode zur Aktualisierung aller Strings. Rufen Sie beim Sprachwechsel qApp->removeTranslator() für den alten Übersetzer auf, dann installTranslator() für den neuen. Verwenden Sie QLocale::setDefault() und QDate::currentDate().

Schwieriges Niveau

Mehrsprachiger Texteditor mit Lokalisierung
Erstellen Sie einen Texteditor mit vollständigem Funktionsumfang: Öffnen/Speichern von Dateien, Bearbeitung, Suchen/Ersetzen, Textstatistik. Implementieren Sie vollständige Internationalisierung und Lokalisierung für 3+ Sprachen einschließlich Arabisch (mit RTL-Unterstützung). Verwenden Sie Kontextkommentare für mehrdeutige Begriffe (“Open” als “Datei öffnen” vs. “Offener Status”). Behandeln Sie Pluralformen für Statistik (“1 Wort”, “2 Wörter”, “5 Wörter”). Integrieren Sie Übersetzungen von Qt-Standarddialogen. Speichern Sie die gewählte Sprache zwischen Starts.
Hinweise: Verwenden Sie QSettings zum Speichern der Sprache. Laden Sie Qt-Übersetzungen aus QLibraryInfo::path(QLibraryInfo::TranslationsPath). Für RTL verwenden Sie qApp->setLayoutDirection(Qt::RightToLeft). Dritter Parameter von tr() für Pluralformen. Erstellen Sie eine zentrale LanguageManager-Klasse zur Verwaltung von Übersetzungen. Betten Sie alle QM-Dateien in Ressourcen ein (:/translations/).

💬 Treten Sie der Diskussion bei!

Haben Sie die Internationalisierung von Qt-Anwendungen verstanden? Sind Fragen zur Arbeit mit lupdate/lrelease oder zum dynamischen Sprachwechsel aufgetaucht?

Sind Sie auf Besonderheiten der Lokalisierung für verschiedene Kulturen gestoßen? Teilen Sie Erfahrungen bei der Arbeit mit RTL-Sprachen oder der Formatierung von Daten und Zahlen!

Ihre Erfahrung kann anderen Entwicklern helfen, typische Fehler bei der Internationalisierung zu vermeiden.

Leave a Reply

Your email address will not be published. Required fields are marked *