QTranslator Class
Die Klasse QTranslator bietet Internationalisierungsunterstützung für Textausgaben. Mehr...
Kopfzeile: | #include <QTranslator> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
Vererbungen: | QObject |
Öffentliche Funktionen
QTranslator(QObject *parent = nullptr) | |
virtual | ~QTranslator() |
QString | filePath() const |
virtual bool | isEmpty() const |
QString | language() const |
bool | load(const QString &filename, const QString &directory = QString(), const QString &search_delimiters = QString(), const QString &suffix = QString()) |
bool | load(const QLocale &locale, const QString &filename, const QString &prefix = QString(), const QString &directory = QString(), const QString &suffix = QString()) |
bool | load(const uchar *data, int len, const QString &directory = QString()) |
virtual QString | translate(const char *context, const char *sourceText, const char *disambiguation = nullptr, int n = -1) const |
Detaillierte Beschreibung
Ein Objekt dieser Klasse enthält einen Satz von Übersetzungen von einer Ausgangssprache in eine Zielsprache. QTranslator bietet Funktionen zum Nachschlagen von Übersetzungen in einer Übersetzungsdatei. Übersetzungsdateien werden erstellt mit Qt Linguist.
Die gebräuchlichste Verwendung von QTranslator ist: Laden einer Übersetzungsdatei und deren Installation mit QCoreApplication::installTranslator().
Hier ist ein Beispiel für eine main()
Funktion, die den QTranslator verwendet:
int main(int argc, char *argv[]) { QApplication app(argc, argv); QTranslator translator; // look up e.g. :/i18n/myapp_de.qm if (translator.load(QLocale(), "myapp"_L1, "_"_L1, ":/i18n"_L1)) QCoreApplication::installTranslator(&translator); QPushButton hello(QCoreApplication::translate("main", "Hello world!")); hello.resize(100, 30); hello.show(); return app.exec(); }
Beachten Sie, dass der Übersetzer vor den Widgets der Anwendung erstellt werden muss.
Die meisten Anwendungen werden nie etwas anderes mit dieser Klasse tun müssen. Die anderen Funktionen dieser Klasse sind nützlich für Anwendungen, die mit Übersetzungsdateien arbeiten.
Nachschlagen von Übersetzungen
Es ist möglich, eine Übersetzung mit translate() nachzuschlagen (so wie tr() und QCoreApplication::translate() es tun). Die Funktion translate() benötigt bis zu drei Parameter:
- Der Kontext - in der Regel der Klassenname für den Aufrufer von tr().
- Der Quelltext - in der Regel das Argument für tr().
- Die Disambiguierung - eine optionale Zeichenkette, die dabei hilft, verschiedene Verwendungen desselben Textes im selben Kontext zu disambiguieren.
Zum Beispiel könnte "Abbrechen" in einem Dialog "Anuluj" heißen, wenn das Programm auf Polnisch läuft (in diesem Fall würde der Quelltext "Abbrechen" lauten). Der Kontext wäre (normalerweise) der Klassenname des Dialogs; normalerweise gäbe es keinen Kommentar, und der übersetzte Text wäre "Anuluj".
Aber es ist nicht immer so einfach. Die spanische Version eines Druckerdialogs mit Einstellungen für beidseitigen Druck und Bindung würde wahrscheinlich sowohl "Activado" als auch "Activada" als Übersetzungen für "Enabled" erfordern. In diesem Fall würde der Ausgangstext in beiden Fällen "Aktiviert" lauten, und der Kontext wäre der Klassenname des Dialogs, aber die beiden Elemente hätten Disambiguierungen wie "Zweiseitiger Druck" für das eine und "Bindung" für das andere. Die Disambiguierung ermöglicht es dem Übersetzer, das passende Geschlecht für die spanische Version zu wählen, und ermöglicht es Qt, zwischen den Übersetzungen zu unterscheiden.
Mehrere Übersetzungen verwenden
Es können mehrere Übersetzungsdateien in einer Anwendung installiert werden. Die Übersetzungen werden in der umgekehrten Reihenfolge ihrer Installation gesucht, d.h. die zuletzt installierte Übersetzungsdatei wird zuerst nach Übersetzungen durchsucht und die älteste Übersetzungsdatei wird zuletzt durchsucht. Die Suche wird beendet, sobald eine Übersetzung gefunden wird, die eine passende Zeichenfolge enthält.
Dieser Mechanismus ermöglicht es, eine bestimmte Übersetzung "auszuwählen" oder ihr Vorrang vor den anderen zu geben; deinstallieren Sie einfach den Übersetzer aus der Anwendung, indem Sie ihn an die Funktion QCoreApplication::removeTranslator() übergeben, und installieren Sie ihn mit QCoreApplication::installTranslator() neu. Er wird dann die erste Übersetzung sein, die nach übereinstimmenden Zeichenketten durchsucht wird.
Siehe auch QCoreApplication::installTranslator(), QCoreApplication::removeTranslator(), QObject::tr(), QCoreApplication::translate(), I18N Beispiel, Hello tr() Beispiel, Arrow Pad Beispiel, und Troll Print Beispiel.
Dokumentation der Mitgliedsfunktionen
[explicit]
QTranslator::QTranslator(QObject *parent = nullptr)
Konstruiert ein leeres Nachrichtendatei-Objekt mit übergeordnetem parent, das nicht mit einer Datei verbunden ist.
[virtual noexcept]
QTranslator::~QTranslator()
Zerstört das Objekt und gibt alle zugewiesenen Ressourcen frei.
QString QTranslator::filePath() const
Gibt den Pfad der geladenen Übersetzungsdatei zurück.
Der Dateipfad ist leer, wenn noch keine Übersetzung geladen wurde, das Laden fehlgeschlagen ist oder wenn die Übersetzung nicht aus einer Datei geladen wurde.
[virtual]
bool QTranslator::isEmpty() const
Gibt true
zurück, wenn dieser Übersetzer leer ist, ansonsten false
. Diese Funktion funktioniert mit gestrippten und nicht gestrippten Übersetzungsdateien.
QString QTranslator::language() const
Gibt die Zielsprache zurück, wie sie in der Übersetzungsdatei gespeichert ist.
bool QTranslator::load(const QString &filename, const QString &directory = QString(), const QString &search_delimiters = QString(), const QString &suffix = QString())
Lädt filename + suffix (".qm", wenn suffix nicht angegeben ist), das ein absoluter Dateiname oder relativ zu directory sein kann. Gibt true
zurück, wenn die Übersetzung erfolgreich geladen wurde; andernfalls wird false
zurückgegeben.
Wenn directory nicht angegeben ist, wird das aktuelle Verzeichnis verwendet (d.h. wie currentPath()).
Der vorherige Inhalt dieses Übersetzungsobjekts wird verworfen.
Wenn der Dateiname nicht existiert, werden andere Dateinamen in der folgenden Reihenfolge ausprobiert:
- Dateiname ohne angehängte suffix.
- Dateiname ohne Text nach einem Zeichen in search_delimiters ("_." ist der Standardwert für search_delimiters, wenn es eine leere Zeichenkette ist) und suffix.
- Dateiname ohne Anhängen von suffix.
- Dateiname ohne weitere Zeichen, usw.
Ein Beispiel: Eine Anwendung, die im fr_CA-Locale (französischsprachiges Kanada) läuft, könnte load("foo.fr_ca", "/opt/foolib") aufrufen. load() würde dann versuchen, die erste vorhandene lesbare Datei aus dieser Liste zu öffnen:
/opt/foolib/foo.fr_ca.qm
/opt/foolib/foo.fr_ca
/opt/foolib/foo.fr.qm
/opt/foolib/foo.fr
/opt/foolib/foo.qm
/opt/foolib/foo
Normalerweise ist es besser, stattdessen die Funktion QTranslator::load(const QLocale &, const QString &, const QString &, const QString &, const QString &) zu verwenden, weil sie QLocale::uiLanguages() und nicht einfach den Namen des Gebietsschemas verwendet, der sich auf die Formatierung von Daten und Zahlen und nicht unbedingt auf die Sprache der Benutzeroberfläche bezieht.
bool QTranslator::load(const QLocale &locale, const QString &filename, const QString &prefix = QString(), const QString &directory = QString(), const QString &suffix = QString())
Lädt filename + prefix + ui language name + suffix (".qm", wenn suffix nicht angegeben ist), das ein absoluter Dateiname oder relativ zu directory sein kann. Gibt true
zurück, wenn die Übersetzung erfolgreich geladen wurde; andernfalls wird false
zurückgegeben.
Der vorherige Inhalt dieses Translator-Objekts wird verworfen.
Wenn der Dateiname nicht existiert, werden andere Dateinamen in der folgenden Reihenfolge ausprobiert:
- Dateiname ohne angehängte suffix.
- Dateiname mit dem ui-Sprachteil nach einem "_"-Zeichen, der entfernt wurde und suffix.
- Dateiname ohne den ui-Sprachteil, ohne suffix angehängt.
- Dateiname, bei dem der ui-Sprachteil weiter entfernt wurde, usw.
Zum Beispiel könnte eine Anwendung, die in locale mit den folgenden ui languages - "es", "fr-CA", "de" läuft, load(QLocale(), "foo", ".", "/opt/foolib", ".qm") aufrufen. load() würde '-' (Bindestrich) durch '_' (Unterstrich) in der Sprache der Benutzeroberfläche ersetzen und dann versuchen, die erste vorhandene lesbare Datei aus dieser Liste zu öffnen:
/opt/foolib/foo.es.qm
/opt/foolib/foo.es
/opt/foolib/foo.fr_CA.qm
/opt/foolib/foo.fr_CA
/opt/foolib/foo.fr.qm
/opt/foolib/foo.fr
/opt/foolib/foo.de.qm
/opt/foolib/foo.de
/opt/foolib/foo.qm
/opt/foolib/foo
./opt/foolib/foo
Auf Betriebssystemen, bei denen das Dateisystem zwischen Groß- und Kleinschreibung unterscheidet, versucht QTranslator auch, eine klein geschriebene Version des Gebietsschemas zu laden.
bool QTranslator::load(const uchar *data, int len, const QString &directory = QString())
Diese Funktion überlastet load().
Lädt die Daten der QM-Datei data der Länge len in den Übersetzer.
Die Daten werden nicht kopiert. Der Aufrufer muss garantieren können, dass data nicht gelöscht oder verändert wird.
directory wird nur verwendet, um das Basisverzeichnis beim Laden der Abhängigkeiten einer QM-Datei anzugeben. Wenn die Datei keine Abhängigkeiten hat, wird dieses Argument ignoriert.
[virtual]
QString QTranslator::translate(const char *context, const char *sourceText, const char *disambiguation = nullptr, int n = -1) const
Gibt die Übersetzung für den Schlüssel (context, sourceText, disambiguation) zurück. Wenn keine gefunden wird, wird auch versucht (context, sourceText, ""). Schlägt auch dies fehl, wird ein Null-String zurückgegeben.
Hinweis: Unvollständige Übersetzungen können zu unerwartetem Verhalten führen: Wenn keine Übersetzung für (context, sourceText, "") bereitgestellt wird, könnte die Methode in diesem Fall tatsächlich eine Übersetzung für ein anderes disambiguation zurückgeben.
Wenn n nicht -1 ist, wird es verwendet, um eine geeignete Form für die Übersetzung zu wählen (z.B. "%n file found" vs. "%n files found").
Wenn Sie programmatisch Übersetzungen in eine QTranslator einfügen müssen, kann diese Funktion neu implementiert werden.
Siehe auch load().
© 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.