Vor-und Nachteile der Verwendung von Gettext anstelle von QObject.tr () für die Lokalisierung von PyQt4-Anwendung?

8

Ich habe eine Reihe von Anwendungen geschrieben in PyQt4, wo ich Standard-Python-gettext-Bibliothek für die Internationalisierung und Lokalisierung von GUI verwendet habe. Es funktioniert gut für mich. Aber ich habe Gettext gewählt, nur weil ich bereits Kenntnisse und Erfahrung mit Gettext-Nutzung und null Erfahrung mit Qt4 tr () -Ansatz hatte.

Nun möchte ich lieber beide Ansätze vergleichen und verstehen, was ich verpasse, indem ich gettext anstelle von QObject.tr verwende, und gibt es einen ernsthaften Grund, warum ich gettext nicht für Qt4 / PyQt4-Anwendungen verwenden sollte?

>

Nach meinem Verständnis sind die Vorteile von gettext:

  • GNU gettext ist ausgereift und scheint in der GNU / Linux-Welt Standard de facto zu sein.
  • Es gibt genügend spezielle Editoren für PO-Dateien, um die Arbeit der Übersetzer zu erleichtern, obwohl die textliche Natur der PO-Vorlagen dies nicht unbedingt notwendig macht.
  • Es gibt sogar Webdienste, die für kollaborative Übersetzungen verwendet werden können.
  • gettext ist eine Standard-Python-Bibliothek, daher muss ich nichts spezielles installieren, um es in Runtime zu verwenden.
  • Es hat sehr gute Unterstützung für Singular / Plural Formen Auswahl über ngettext ().

Was ich als Vorteile von QObject.tr () sehe:

  • Dies ist native Technologie für Qt4 / PyQt4, also wird es vielleicht besser / schneller funktionieren (obwohl ich keine Daten zu beweisen habe).
  • Die zu übersetzenden Nachrichten können zusätzliche Kontextinformationen aufweisen, die Übersetzern dabei helfen, die besten Varianten für homonyme Wörter zu wählen, z. Das englische Wort "Letter" kann abhängig vom tatsächlichen Kontext als "Character", "Mail" oder sogar als "Paper size" übersetzt werden.

Was ich als Nachteile von QObject.tr () gegenüber gettext:

sehe
  • Ich habe in der Qt-Dokumentation nicht gefunden, wie die Singular / Plural-Auswahl dort unterstützt wird.
  • Die Qt4 TS-Übersetzungsvorlage ist im XML-Format und daher komplizierter zu bearbeiten ohne speziellen Editor (QT Linguist) und es scheint, dass es keine anderen Lösungen von Drittanbietern oder Web-Services gibt. Es würde also für Übersetzer notwendig sein, ein neues Werkzeug zu lernen (wenn sie bereits mit PO-Werkzeugen vertraut sind).

Aber alle obigen Punkte sind nicht kritisch genug, um klar zu sagen, dass jedes Werkzeug besser ist als das andere. Und ich will keinen Flammenkrieg darüber führen, was besser ist, weil es sehr subjektiv ist. Ich möchte nur wissen, was ich vermisse als Vor- und Nachteile von QObject.tr () vs gettext.

    
bialix 07.01.2010, 15:50
quelle

4 Antworten

2

Ein einfacher Grund, QObject.tr() zu verwenden, ist:

Es erspart Ihnen die Installation von gettext unter Windows, wodurch die plattformübergreifende Arbeit ein wenig einfacher wird. Ich versuche, so wenig binäre Abhängigkeiten wie möglich auf Windows zu haben.

    
Christian Tismer 15.12.2012 03:45
quelle
2

Alle haben ihre Vor- und Nachteile, aber um sie klarer zu definieren, müssten Sie zuerst definieren, ob Sie auf eine mobile Umgebung oder eine Desktop-Umgebung abzielen.

In unserem Unternehmen verwenden wir verschiedene Methoden, einfach weil die ideale Lösung noch nicht existiert. Für die Desktop-Entwicklung verwenden wir PO-Dateien einfach deshalb, weil die Schaltflächen nicht skaliert sind und daher der Text passt. Bei der mobilen Entwicklung hängt die Übersetzung einer Zeichenfolge von der Größe der Schaltfläche ab, die bei Quer- und Hochformatgeräten unterschiedlich sein kann. Das macht es etwas komplizierter, da eine PO-Datei nur eine Übersetzung eines bestimmten Wortes enthalten kann. Also haben wir XLIFF dafür gewählt, also konnten wir einer Zeichenkette eindeutige IDs zuweisen. Dies ist auch keine leichte Aufgabe, da es keine guten Lösungen gibt, um .RC-Dateien in XLIFF-Dateien umzuwandeln. (Weil aktuelle Werkzeuge ALLE Zeichenfolgen zwischen "" umwandeln, was natürlich unerwünschtes Verhalten ist). Also habe ich einen Konverter für diese Aufgabe geschrieben.

Wenn Sie jedoch an Lokalisierung denken, dann sind Pluralformen sehr wichtig, also ist dies keine gute Lokalisierungslösung. Daher würde ich sagen, für PO Gettext gehen.

Grüße, Floris.

    
user1813575 15.05.2013 10:41
quelle
2

Zur Zeit verarbeitet Qt keine Pluralformen, wenn Sie QT_TRANSLATE_NOOP

verwenden     
Floris van den Hoeven 01.10.2015 13:15
quelle
-1

Sie könnten hinzufügen, dass Argumente anders verwaltet werden ...

Mit Gettext können wir

machen

_("Hello %(name)s from %(city)s") % {person.__dict__}

während wir in PyQt

machen

self.tr("Hello %1 from %2").arg(person.name).arg(person.city)

    
leplatrem 22.03.2010 15:45
quelle