Internationalisierung mit Qt
Die Internationalisierung und Lokalisierung einer Anwendung sind die Prozesse, bei denen die Anwendung an verschiedene Sprachen, regionale Besonderheiten und technische Anforderungen eines Zielmarktes angepasst wird.
- Internationalisierung bedeutet, eine Anwendung so zu konzipieren, dass sie ohne technische Änderungen an verschiedene Sprachen und Regionen angepasst werden kann.
- Lokalisierung bedeutet, internationalisierte Anwendungen durch Hinzufügen regionalspezifischer Komponenten (wie Datums-, Zeit- und Zahlenformate) sowie durch die Übersetzung von Texten an eine bestimmte Region oder Sprache anzupassen.
Der Bedarf an Internationalisierung reicht von Rechtschreibänderungen bis hin zur Möglichkeit, die Anwendung in verschiedenen Sprachen zu betreiben und unterschiedliche Eingabetechniken, Zeichenkodierungen und Darstellungs konventionen zu verwenden.
Alle Eingabesteuerelemente und Textdarstellungsmethoden in Qt bieten integrierte Unterstützung für alle unterstützten Sprachen. Die integrierte Schriftart-Engine rendert Text, der Zeichen aus einer Vielzahl unterschiedlicher Schriftsysteme gleichzeitig enthält, korrekt.
| Weitere Informationen zu | Siehe |
|---|---|
| Internationalisierung von Quellcode | Schreiben von Quellcode für die Übersetzung |
| Konfigurieren und Bereitstellen von Übersetzungen sowie Verwenden vorhandener Qt-Modulübersetzungen | Lokalisierung von Anwendungen |
| Verwendung der Qt-Übersetzungstools | Qt Linguist Handbuch |
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 Zeichenfolgen gemäß einem lokalisierten Sortieralgorithmus | |
Kann zur Beschleunigung der Zeichenfolgen-Sortierung verwendet werden | |
Konvertiert zwischen Zahlen und deren Zeichenfolgendarstellungen in verschiedenen Sprachen | |
Basisklasse für die Kodierung und Dekodierung von Text | |
Zustandsbasierter Decoder für Text | |
Zustandsbasierter Encoder für Text | |
Konvertierungen zwischen Textkodierungen | |
Zustandsbasierter Decoder | |
Zustandsbasierter Encoder | |
Unterstützung der Internationalisierung für die Textausgabe |
Weitere Informationen zur Verwendung der Klassen in Anwendungen finden Sie unter „Quellcode für die Übersetzung schreiben “.
Sprachen und Schriftsysteme
Qt unterstützt die meisten heute gebräuchlichen „ languages “.
Eingabesteuerelemente wie der Typ „ Qt Quick “ ( TextInput ) und die Klassen „ QLineEdit “, „ QTextEdit “ sowie davon abgeleitete Klassen, aber auch Anzeigesteuerelemente wie der Typ „ Text “ und die Klasse „ QLabel “ berücksichtigen die folgenden Besonderheiten der verschiedenen Schriftsysteme:
- Zeilenumbrüche
Einige asiatische Sprachen werden ohne Leerzeichen zwischen den Wörtern geschrieben. Zeilenumbrüche können entweder nach jedem beliebigen 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, mit Ausnahme von Zahlen und eingebettetem englischem Text, der von links nach rechts geschrieben wird. Das genaue Verhalten ist im Unicode Technical Annex Nr. 9 definiert.
- Nicht-trennende Zeichen oder diakritische Zeichen, wie Akzente oder Umlaute in europäischen Sprachen
In einigen Sprachen, wie beispielsweise Vietnamesisch, werden diese Zeichen häufig verwendet, und manche Zeichen können zur Verdeutlichung der Aussprache mehr als ein Zeichen gleichzeitig aufweisen.
- Ligaturen
In bestimmten Kontexten werden manche Zeichenpaare durch ein kombiniertes Zeichen ersetzt, das eine Ligatur bildet. Gängige Beispiele sind die Ligaturen „
fl“ und „fi“, die beim Satz von Büchern in den USA und Europa verwendet werden.
Die Text-Engine von Qt unterstützt verschiedene „ writing systems “, die auf allen Plattformen funktionieren, sofern die für ihre Darstellung erforderlichen Schriftarten installiert sind.
Sie müssen nichts über das in einer bestimmten Sprache verwendete Schriftsystem wissen, es sei denn, Sie möchten eigene Texteingabesteuerelemente schreiben. In einigen Sprachen, wie beispielsweise Arabisch oder Sprachen des indischen Subkontinents, ändern sich Breite und Form eines Glyphs je nach den umgebenden Zeichen. Um dies im C++-Code zu berücksichtigen, verwenden Sie „ QTextLayout “. Das Schreiben von Eingabesteuerelementen erfordert zudem gewisse Kenntnisse der Schriftsysteme, in denen sie verwendet werden sollen. In der Regel ist es am einfachsten, eine Unterklasse von „ QLineEdit “ oder „ QTextEdit “ zu erstellen.
Kodierung
Die Kodierung ist sowohl für Anwendungsquelldateien als auch für die Textdateien relevant, die die Anwendung liest oder schreibt.
Kodierung des Quellcodes
Qt Qml-Dokumente werden immer im UTF-8-Format kodiert. Seit Qt 6 ist 8-Bit-UTF-8 auch in Qt C++ die vorherrschende Kodierung.
Das Tool „ lupdate “ extrahiert UI-Zeichenfolgen aus Ihrer Anwendung. Es geht standardmäßig davon aus, dass der gesamte Quellcode in UTF-8 kodiert ist.
Einige Editoren, wie beispielsweise Visual Studio, verwenden jedoch standardmäßig eine andere Kodierung. Eine Möglichkeit, Kodierungsprobleme zu vermeiden, besteht darin, den Quellcode auf ASCII zu beschränken und für übersetzbare Zeichenfolgen mit anderen Zeichen Escape-Sequenzen zu verwenden, zum Beispiel:
label->setText(tr("F\374r \310lise"));QString::toUtf8() gibt den Text in UTF-8-Kodierung zurück, wodurch Unicode-Informationen erhalten bleiben, während der Text wie reines ASCII aussieht, wenn er vollständig aus ASCII-Zeichen besteht. Um Unicode in die lokale 8-Bit-Kodierung zu konvertieren, verwenden Sie ` QString::toLocal8Bit()`. Auf Unix-Systemen entspricht dies ` toUtf8()`. Unter Windows wird die aktuelle Codepage des Systems verwendet.
Zur Konvertierung von UTF-8 und der lokalen 8-Bit-Kodierung in „ QString “ verwenden Sie die Hilfsfunktionen „ QString::fromUtf8()“ und „ QString::fromLocal8Bit()“.
Kodierung von Texteingaben und -ausgaben
Verwenden Sie ` QTextStream::setEncoding()` zum Festlegen der allgemeinen Kodierung für Textströme.
Wenn Sie eine andere, veraltete Kodierung benötigen, verwenden Sie die Klasse ` QTextCodec ` aus dem Modul `Qt5Compat`.
Beim Start einer Anwendung bestimmt die Locale des Computers die 8-Bit-Kodierung, die für externe 8-Bit-Daten verwendet wird. QTextCodec::codecForLocale() gibt einen Codec zurück, mit dem Sie zwischen dieser Locale-Kodierung und Unicode konvertieren können.
Gelegentlich benötigt die Anwendung möglicherweise eine andere Kodierung als die standardmäßige lokale 8-Bit-Kodierung. Beispielsweise muss eine Anwendung in einer kyrillischen KOI8-R-Locale (der De-facto-Standard-Locale in Russland) möglicherweise kyrillische Zeichen in der ISO 8859-5-Kodierung ausgeben. Der entsprechende Code würde wie folgt lauten:
QString string = ...; // some Unicode text
QTextCodec *codec = QTextCodec::codecForName("ISO 8859-5");
QByteArray encodedString = codec->fromUnicode(string);Der folgende Code veranschaulicht die Konvertierung von kyrillischen Zeichen in der Kodierung ISO 8859-5 in 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 zu „ QTextCodec “.
Betriebs- und Fenstersysteme
Einige der Betriebssysteme und Fensterverwaltungssysteme, auf denen Qt läuft, bieten nur eingeschränkte Unterstützung für Unicode. Der Grad der Unterstützung im zugrunde liegenden System hat einen gewissen Einfluss auf die Unterstützung, die Qt auf diesen Plattformen bieten kann, obwohl Qt-Anwendungen im Allgemeinen keine allzu großen Bedenken hinsichtlich plattformspezifischer Einschränkungen haben müssen.
Unix/X11
- Qt verbirgt lokalisierungsabhängige Schriftarten und Eingabemethoden und bietet Unicode-Ein- und -Ausgabe.
- Die meisten Unix-Varianten verwenden standardmäßig Dateisystemkonventionen wie UTF-8. Alle Qt-Dateifunktionen unterstützen Unicode, konvertieren Dateinamen jedoch in die lokale 8-Bit-Kodierung, da dies der Unix-Konvention entspricht.
- Die Datei-E/A verwendet standardmäßig die lokale 8-Bit-Kodierung, wobei Unicode-Optionen in ` QTextStream` verfügbar sind.
- Einige ältere Unix-Distributionen bieten nur eine teilweise Unterstützung für bestimmte Locales. Selbst wenn Sie beispielsweise über ein Verzeichnis „
/usr/share/locale/ja_JP.EUC“ verfügen, können Sie japanischen Text nur dann anzeigen, wenn Sie japanische Schriftarten installieren und das Verzeichnis vollständig ist. Um optimale Ergebnisse zu erzielen, sollten Sie vollständige Locales Ihres Systemanbieters verwenden.
Linux
- Qt bietet vollständige Unicode-Unterstützung, einschließlich Eingabemethoden, Schriftarten, Zwischenablage und Drag-and-Drop.
- Das Dateisystem ist in allen modernen Linux-Distributionen in UTF-8 kodiert. Die Datei-E/A erfolgt standardmäßig in UTF-8.
Windows
- Qt bietet vollständige Unicode-Unterstützung, einschließlich Eingabemethoden, Schriftarten, Zwischenablage, Drag-and-Drop und Dateinamen.
- Die Datei-E/A erfolgt standardmäßig in Latin1, wobei Unicode-Optionen unter „ QTextStream “ verfügbar sind. Einige Windows-Programme verstehen jedoch keine Unicode-Textdateien im Big-Endian-Format, obwohl dies die vom Unicode-Standard vorgeschriebene Reihenfolge ist, sofern keine übergeordneten Protokolle vorhanden sind.
Verwandte Themen
Lokalisierung von Qt- und „ Qt Quick “-Anwendungen in mehrere Sprachen. | |
Referenzhandbuch für Metazeichenfolgen, die im Übersetzungssystem von Qt verwendet werden | |
Verwendung von „ Qt Linguist “ zur Internationalisierung Ihrer Qt-Anwendung | |
Verwendung der Qt-Übersetzungstools: lupdate, lrelease und Qt Linguist | |
Die auf Text-IDs basierende Internationalisierung bietet Unterstützung für groß angelegte Projekte mit vielen Zielspracheinstellungen und zahlreichen zu übersetzenden Texten | |
Eine Zusammenfassung der Übersetzungsregeln für Pluralformen, die von den Qt-Übersetzungstools erzeugt werden. | |
Schreiben von Quellcode, der die Lokalisierung von Anwendungen ermöglicht. |
© 2026 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.