QTranslator Class
Die Klasse „QTranslator“ bietet Unterstützung bei der Internationalisierung der Textausgabe. Mehr...
| Kopfzeile: | #include <QTranslator> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| Erbt von: | 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 |
Ausführliche Beschreibung
Ein Objekt dieser Klasse enthält eine Reihe von Übersetzungen aus einer Ausgangssprache in eine Zielsprache. QTranslator bietet Funktionen zum Nachschlagen von Übersetzungen in einer Übersetzungsdatei. Übersetzungsdateien werden mit Qt Linguist.
Die häufigste Verwendung von QTranslator besteht darin, eine Übersetzungsdatei zu laden und sie mit QCoreApplication::installTranslator() zu installieren.
Hier ist ein Beispiel für eine ` main() `-Funktion, die den `QTranslator` verwendet:
// Required for using the '_L1' string literal.
using namespace Qt::StringLiterals;
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 mit dieser Klasse nie etwas anderes tun müssen. Die anderen von dieser Klasse bereitgestellten Funktionen sind nützlich für Anwendungen, die mit Übersetzungsdateien arbeiten.
Übersetzungen nachschlagen
Es ist möglich, eine Übersetzung mithilfe von ` translate()` abzufragen (wie es auch bei ` tr()` und ` QCoreApplication::translate()` der Fall ist). Die Funktion ` translate()` akzeptiert bis zu drei Parameter:
- Den Kontext – in der Regel den Klassennamen des Aufrufers von tr().
- Den Quelltext – in der Regel das Argument von ` tr()`.
- Die Eindeutigkeitsangabe – eine optionale Zeichenkette, die dabei hilft, verschiedene Verwendungen desselben Textes im selben Kontext voneinander zu unterscheiden.
Beispielsweise könnte das „Cancel“ in einem Dialogfeld „Anuluj“ lauten, wenn das Programm auf Polnisch ausgeführt wird (in diesem Fall wäre der Quelltext „Cancel“). Der Kontext wäre (normalerweise) der Klassenname des Dialogs; normalerweise gäbe es keinen Kommentar, und der übersetzte Text wäre „Anuluj“.
Doch so einfach ist es nicht immer. 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äre der Quelltext in beiden Fällen „Enabled“, und der Kontext wäre der Klassenname des Dialogs, aber die beiden Einträge hätten Unterscheidungsmerkmale wie „beidseitiger Druck“ für den einen und „Bindung“ für den anderen. Die Unterscheidung 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.
Verwendung mehrerer Übersetzungen
In einer Anwendung können mehrere Übersetzungsdateien installiert werden. Die Suche nach Übersetzungen erfolgt in umgekehrter Reihenfolge ihrer Installation, d. h., die zuletzt installierte Übersetzungsdatei wird zuerst durchsucht, die am frühesten installierte zuletzt. Die Suche wird beendet, sobald eine Übersetzung gefunden wird, die eine übereinstimmende Zeichenfolge enthält.
Dieser Mechanismus ermöglicht es, eine bestimmte Übersetzung „auszuwählen“ oder ihr Vorrang vor den anderen zu geben; deinstallieren Sie den Übersetzer einfach aus der Anwendung, indem Sie ihn an die Funktion ` QCoreApplication::removeTranslator()` übergeben, und installieren Sie ihn anschließend mit ` QCoreApplication::installTranslator()` neu. Er wird dann als erste Übersetzung nach übereinstimmenden Zeichenfolgen durchsucht.
Sicherheitshinweise
Installieren Sie Übersetzungsdateien nur aus vertrauenswürdigen Quellen.
Übersetzungsdateien sind Binärdateien, die aus textbasierten Übersetzungsquelldateien generiert werden. Das Format dieser Binärdateien ist durch Qt streng definiert, und jede Manipulation der Daten in der Binärdatei kann beim Laden der Datei zum Absturz der Anwendung führen. Darüber hinaus können selbst korrekt formatierte Übersetzungsdateien irreführende oder böswillige Übersetzungen enthalten.
Siehe auch QCoreApplication::installTranslator(), QCoreApplication::removeTranslator(), QObject::tr(), QCoreApplication::translate(), Beispiel für eine lokalisierte Uhr, Beispiel für ein Pfeiltastenfeld und Beispiel für „Troll Print“.
Dokumentation der Member-Funktionen
[explicit] QTranslator::QTranslator(QObject *parent = nullptr)
Erstellt ein leeres Nachrichten-Dateiobjekt mit dem übergeordneten Objekt „ parent “, das mit keiner Datei verknüpft ist.
[virtual noexcept] QTranslator::~QTranslator()
Löscht 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 die Übersetzung nicht aus einer Datei geladen wurde.
[virtual] bool QTranslator::isEmpty() const
Gibt „ true “ zurück, wenn dieser Übersetzer leer ist, andernfalls „ false “.
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), wobei es sich um einen absoluten Dateinamen oder einen relativen Pfad zu directory handeln 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. als „ currentPath(+)“).
Der bisherige Inhalt dieses Übersetzerobjekts wird verworfen.
Wenn der Dateiname nicht existiert, werden andere Dateinamen in der folgenden Reihenfolge ausprobiert:
- Dateiname ohne angehängtes „ suffix “.
- Dateiname, bei dem der Text nach einem Zeichen in „ search_delimiters “ entfernt wurde („_.“ ist der Standardwert für „ search_delimiters “, wenn es sich um eine leere Zeichenkette handelt) und „ suffix “.
- Dateiname ohne angehängtes „ suffix “ entfernt.
- Der Dateiname wird weiter gekürzt usw.
Beispielsweise könnte eine Anwendung, die in der Locale „fr_CA“ (französischsprachiges Kanada) läuft, 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
In der Regel ist es besser, stattdessen die Funktion `QTranslator::load(const QLocale &, const QString &, const QString &, const QString &, const QString &)` zu verwenden, da diese ` QLocale::uiLanguages()` nutzt und nicht einfach den Locale-Namen, der sich auf die Formatierung von Datumsangaben und Zahlen bezieht und nicht unbedingt auf die Sprache der Benutzeroberfläche.
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 (mit der Endung „.qm“, wenn der suffix nicht angegeben ist), wobei es sich um einen absoluten Dateinamen oder einen relativen Pfad zu directory handeln kann. Gibt true zurück, wenn die Übersetzung erfolgreich geladen wurde; andernfalls wird false zurückgegeben.
Der bisherige Inhalt dieses Übersetzerobjekts wird verworfen.
Wenn der Dateiname nicht existiert, werden andere Dateinamen in der folgenden Reihenfolge versucht:
- Dateiname ohne angehängtes „ suffix “.
- Dateiname, bei dem der Teil der UI-Sprache nach dem Zeichen „_“ entfernt wurde, sowie „ suffix “.
- Dateiname, bei dem der UI-Sprachteil entfernt wurde, ohne dass „ suffix “ angehängt wurde.
- Dateiname, bei dem der UI-Sprachteil weiter entfernt wurde, usw.
Beispielsweise könnte eine Anwendung, die in der locale mit den folgenden ui languages – „es“, „fr-CA“, „de“ – ausgeführt wird, load(QLocale(), „foo“, „.“, „/opt/foolib“, „.qm“) aufrufen. load() würde das „-“ (Bindestrich) in der UI-Sprache durch „_“ (Unterstrich) 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 “ außerdem, eine Version des Locale-Namens in Kleinbuchstaben zu laden.
bool QTranslator::load(const uchar *data, int len, const QString &directory = QString())
Lädt die QM-Datei „ data “ mit der Länge „ len “ in den Übersetzer.
Die Daten werden nicht kopiert. Der Aufrufer muss gewährleisten 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.
Diese Funktion überlädt QTranslator::load().
[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. Wird keine gefunden, werden auch (context, sourceText, "") versucht. Schlägt dies ebenfalls fehl, wird eine leere Zeichenkette zurückgegeben.
Hinweis: Unvollständige Übersetzungen können zu unerwartetem Verhalten führen: Wenn keine Übersetzung für (context, sourceText, "") bereitgestellt wird, gibt die Methode in diesem Fall möglicherweise tatsächlich eine Übersetzung für ein anderes disambiguation zurück.
Ist n nicht -1, wird dieser Wert verwendet, um eine geeignete Form für die Übersetzung auszuwählen (z. B. „%n Datei gefunden“ vs. „%n Dateien gefunden“).
Wenn Sie Übersetzungen programmgesteuert in ein ` QTranslator` einfügen müssen, kann diese Funktion neu implementiert werden.
Hinweis: Diese Funktion ist threadsicher.
Siehe auch load().
© 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.