Internationalisierung mit Qt
Die Internationalisierung und Lokalisierung einer Anwendung ist der Prozess der Anpassung der Anwendung an verschiedene Sprachen, regionale Unterschiede und technische Anforderungen eines Zielmarktes.
- Internationalisierung bedeutet, eine Anwendung so zu gestalten, dass sie ohne technische Änderungen an verschiedene Sprachen und Regionen angepasst werden kann.
- Lokalisierung bedeutet, dass internationalisierte Anwendungen für eine bestimmte Region oder Sprache angepasst werden, indem landesspezifische Komponenten (z. B. Datums-, Zeit- und Zahlenformate) hinzugefügt und Texte übersetzt werden.
Die Notwendigkeit der Internationalisierung reicht von Änderungen der Rechtschreibung bis hin zur Ermöglichung des Betriebs der Anwendung in verschiedenen Sprachen und der Verwendung unterschiedlicher Eingabetechniken, Zeichenkodierungen und Darstellungskonventionen.
Alle Eingabekontrollen und Textdarstellungsmethoden in Qt bieten integrierte Unterstützung für alle unterstützten Sprachen. Die eingebaute Font-Engine rendert Text, der Zeichen aus einer Vielzahl verschiedener Schriftsysteme enthält, korrekt und gleichzeitig.
Für weitere Informationen über | Siehe |
---|---|
Internationalisierung von Quellcode | Schreiben von Quellcode für die Übersetzung |
Konfigurieren und Bereitstellen von Übersetzungen sowie Verwenden vorhandener Qt-Modulübersetzungen | Anwendungen lokalisieren |
Verwendung der Qt-Übersetzungswerkzeuge | Qt Linguist Manuell |
Das folgende Video zeigt, wie man eine einfache Beispielanwendung internationalisiert und lokalisiert:
Qt-Klassen für die Internationalisierung
Die folgenden Klassen unterstützen die Internationalisierung von Qt-Anwendungen.
Vergleicht Strings nach einem lokalisierten Sortieralgorithmus | |
Kann verwendet werden, um die String-Kollationierung zu beschleunigen | |
Konvertiert zwischen Zahlen und ihren String-Repräsentationen in verschiedenen Sprachen | |
Basisklasse für die Kodierung und Dekodierung von Text | |
Zustandsbasierter Decoder für Text | |
Zustandsbasierter Kodierer für Text | |
Konvertierungen zwischen Textkodierungen | |
Zustandsbasierter Decoder | |
Zustandsbasierter Kodierer | |
Internationalisierungsunterstützung für die Textausgabe |
Weitere Informationen über die Verwendung der Klassen in Anwendungen finden Sie unter Schreiben von Quellcode für die Übersetzung.
Sprachen und Schriftsysteme
Qt unterstützt die meisten heute gebräuchlichen languages.
Eingabe-Steuerelemente, wie der Typ Qt Quick TextInput und die Klassen QLineEdit, QTextEdit und abgeleitete Klassen, sowie Anzeige-Steuerelemente, wie der Typ Text und die Klasse QLabel behandeln die folgenden Besonderheiten der verschiedenen Schriftsysteme:
- Zeilenumbrüche
Einige der asiatischen Sprachen werden ohne Leerzeichen zwischen den Wörtern geschrieben. Der Zeilenumbruch kann entweder nach jedem Zeichen (mit Ausnahmen) wie im Chinesischen, Japanischen und Koreanischen oder nach logischen Wortgrenzen wie im Thailändischen erfolgen.
- Bidirektionale Schrift
Arabisch und Hebräisch werden von rechts nach links geschrieben, außer bei Zahlen und eingebettetem englischen Text, der von links nach rechts geschrieben wird. Das genaue Verhalten ist im Unicode Technical Annex #9 definiert.
- Nicht-Abstandszeichen oder diakritische Zeichen, wie Akzente oder Umlaute in europäischen Sprachen
Einige Sprachen, wie z. B. Vietnamesisch, machen ausgiebig Gebrauch von diesen Zeichen, und einige Zeichen können mehr als ein Zeichen gleichzeitig haben, um die Aussprache zu verdeutlichen.
- Ligaturen
In besonderen Kontexten werden einige Zeichenpaare durch eine kombinierte Glyphe ersetzt, die eine Ligatur bildet. Gängige Beispiele sind die Ligaturen
fl
undfi
, die im amerikanischen und europäischen Buchsatz verwendet werden.
Die Text-Engine von Qt unterstützt verschiedene writing systems, die auf allen Plattformen funktionieren, wenn die Schriftarten für ihre Darstellung installiert sind.
Sie müssen das in einer bestimmten Sprache verwendete Schriftsystem nicht kennen, es sei denn, Sie möchten Ihre eigenen Texteingabe-Steuerelemente schreiben. In einigen Sprachen, wie z. B. Arabisch oder Sprachen des indischen Subkontinents, ändert sich die Breite und Form einer Glyphe in Abhängigkeit von den umgebenden Zeichen. Um dies in C++-Code zu berücksichtigen, verwenden Sie QTextLayout. Das Schreiben von Eingabesteuerelementen erfordert auch eine gewisse Kenntnis der Skripte, in denen sie verwendet werden sollen. Normalerweise ist es am einfachsten, die Unterklassen QLineEdit oder QTextEdit zu verwenden.
Kodierung
Die Kodierung ist sowohl für die Quelldateien der Anwendung als auch für die Textdateien, die die Anwendung liest oder schreibt, von Bedeutung.
Kodierung von Quellcode
QML-Dokumente sind immer im UTF-8-Format kodiert. Seit Qt 6 ist 8-bit UTF-8 die vorherrschende Kodierung auch in Qt C++.
Das Tool lupdate
extrahiert UI-Strings aus Ihrer Anwendung. Es erwartet, dass der gesamte Quellcode standardmäßig in UTF-8 kodiert ist.
Einige Editoren, wie z. B. Visual Studio, verwenden jedoch standardmäßig eine andere Kodierung. Eine Möglichkeit, Kodierungsprobleme zu vermeiden, besteht darin, jeglichen Quellcode auf ASCII zu beschränken und Escape-Sequenzen für übersetzbare Strings mit anderen Zeichen zu verwenden, zum Beispiel:
label->setText(tr("F\374r \310lise"));
QString::toUtf8() gibt den Text in der UTF-8-Kodierung zurück, die Unicode-Informationen beibehält, aber wie reines ASCII aussieht, wenn der Text vollständig aus ASCII besteht. Um Unicode in eine lokale 8-Bit-Kodierung zu konvertieren, verwenden Sie QString::toLocal8Bit(). Auf Unix-Systemen ist dies äquivalent zu toUtf8()
. Unter Windows wird die aktuelle Codepage des Systems verwendet.
Für die Konvertierung von UTF-8 und lokaler 8-Bit-Kodierung nach QString verwenden Sie die Komfortfunktionen QString::fromUtf8() und QString::fromLocal8Bit().
Kodierung von Textein- und -ausgängen
Verwenden Sie QTextStream::setEncoding(), um die allgemeine Kodierung für Textströme festzulegen.
Wenn Sie eine andere Legacy-Kodierung benötigen, verwenden Sie die Klasse QTextCodec aus dem Modul Qt5Compat.
Wenn eine Anwendung startet, bestimmt das Gebietsschema des Rechners die 8-Bit-Kodierung, die für externe 8-Bit-Daten verwendet wird. QTextCodec::codecForLocale() gibt einen Codec zurück, den Sie zur Konvertierung zwischen dieser Locale-Kodierung und Unicode verwenden können.
Die Anwendung kann gelegentlich eine andere Kodierung als die standardmäßige lokale 8-Bit-Kodierung erfordern. Zum Beispiel könnte eine Anwendung in einem kyrillischen KOI8-R Gebietsschema (das de-facto Standard Gebietsschema in Russland) kyrillisch in der ISO 8859-5 Kodierung ausgeben müssen. Der Code hierfür wäre:
QString string = ...; // some Unicode text QTextCodec *codec = QTextCodec::codecForName("ISO 8859-5"); QByteArray encodedString = codec->fromUnicode(string);
Der folgende Code demonstriert die Konvertierung von ISO 8859-5 Kyrillisch nach Unicode:
QByteArray encodedString = ...; // some ISO 8859-5 encoded text QTextCodec *codec = QTextCodec::codecForName("ISO 8859-5"); QString string = codec->toUnicode(encodedString);
Eine vollständige Liste der unterstützten Kodierungen finden Sie in der Dokumentation QTextCodec.
Betriebssysteme und Windowing-Systeme
Einige der Betriebssysteme und Windowing-Systeme, auf denen Qt läuft, haben nur eine begrenzte Unterstützung für Unicode. Der Grad der Unterstützung, der im zugrunde liegenden System verfügbar ist, hat einen gewissen Einfluss auf die Unterstützung, die Qt auf diesen Plattformen bieten kann, obwohl sich Qt-Anwendungen im Allgemeinen nicht zu sehr mit plattformspezifischen Einschränkungen beschäftigen müssen.
Unix/X11
- Qt verbirgt lokal orientierte Schriftarten und Eingabemethoden und bietet Unicode-Eingabe und -Ausgabe.
- Die meisten Unix-Varianten verwenden standardmäßig Dateisystemkonventionen wie UTF-8. Alle Qt-Dateifunktionen erlauben Unicode, konvertieren aber Dateinamen in die lokale 8-Bit-Kodierung, da dies die Unix-Konvention ist.
- Datei-E/A wird standardmäßig in der lokalen 8-Bit-Kodierung ausgeführt, mit Unicode-Optionen in QTextStream.
- Einige ältere Unix-Distributionen enthalten nur eine teilweise Unterstützung für einige Sprachumgebungen. Selbst wenn Sie beispielsweise ein Verzeichnis
/usr/share/locale/ja_JP.EUC
haben, können Sie keinen japanischen Text anzeigen, es sei denn, Sie installieren japanische Schriftarten und das Verzeichnis ist vollständig. Die besten Ergebnisse erzielen Sie, wenn Sie die vollständigen Locales Ihres Systemherstellers verwenden.
Linux
- Qt bietet vollständige Unicode-Unterstützung, einschließlich Eingabemethoden, Schriftarten, Zwischenablage und Drag-and-Drop.
- Das Dateisystem ist bei allen modernen Linux-Distributionen in UTF-8 kodiert. Datei-E/A ist standardmäßig in UTF-8 kodiert.
Windows
- Qt bietet vollständige Unicode-Unterstützung, einschließlich Eingabemethoden, Schriftarten, Zwischenablage, Drag-and-Drop und Dateinamen.
- Die Dateieingabe und -ausgabe erfolgt standardmäßig in Latin1, mit Unicode-Optionen in QTextStream. Einige Windows-Programme verstehen jedoch keine Big-Endian-Unicode-Textdateien, obwohl dies die vom Unicode-Standard vorgeschriebene Reihenfolge ist, wenn keine übergeordneten Protokolle vorhanden sind.
Verwandte Themen
Lokalisierung von Qt- und Qt Quick -Anwendungen in mehrere Sprachen. | |
Verwendung von Qt Linguist zur Internationalisierung Ihrer Qt-Anwendung | |
Verwendung von Qt-Übersetzungswerkzeugen: lupdate, lrelease, und Qt Linguist | |
Text-ID-basierte Internationalisierung bietet Unterstützung für große Projekte mit vielen Zielsprachräumen und vielen zu übersetzenden Texten | |
Eine Zusammenfassung der Übersetzungsregeln für Pluralformen, die von den Qt-Übersetzungswerkzeugen erzeugt werden. | |
Schreiben von Quellcode, der die Lokalisierung von Anwendungen ermöglicht. |
© 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.