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 überSiehe
Internationalisierung von QuellcodeSchreiben von Quellcode für die Übersetzung
Konfigurieren und Bereitstellen von Übersetzungen sowie Verwenden vorhandener Qt-ModulübersetzungenAnwendungen lokalisieren
Verwendung der Qt-ÜbersetzungswerkzeugeQt 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.

QCollator

Vergleicht Strings nach einem lokalisierten Sortieralgorithmus

QCollatorSortKey

Kann verwendet werden, um die String-Kollationierung zu beschleunigen

QLocale

Konvertiert zwischen Zahlen und ihren String-Repräsentationen in verschiedenen Sprachen

QStringConverter

Basisklasse für die Kodierung und Dekodierung von Text

QStringDecoder

Zustandsbasierter Decoder für Text

QStringEncoder

Zustandsbasierter Kodierer für Text

QTextCodec

Konvertierungen zwischen Textkodierungen

QTextDecoder

Zustandsbasierter Decoder

QTextEncoder

Zustandsbasierter Kodierer

QTranslator

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 und fi, 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.

Localizing Applications

Lokalisierung von Qt- und Qt Quick -Anwendungen in mehrere Sprachen.

Qt Linguist Examples

Verwendung von Qt Linguist zur Internationalisierung Ihrer Qt-Anwendung

Qt Linguist Manual

Verwendung von Qt-Übersetzungswerkzeugen: lupdate, lrelease, und Qt Linguist

Text ID based translations

Text-ID-basierte Internationalisierung bietet Unterstützung für große Projekte mit vielen Zielsprachräumen und vielen zu übersetzenden Texten

Translation Rules for Plural Forms

Eine Zusammenfassung der Übersetzungsregeln für Pluralformen, die von den Qt-Übersetzungswerkzeugen erzeugt werden.

Writing Source Code for Translation

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.