Frage

Ich habe eine Anwendung in wxPython geschrieben, die ich mehrsprachig machen will. Unsere Optionen sind

  1. mit gettext http://docs.python.org/library/gettext.html
  2. seprating aus all UI Text eine messages.py Datei, und deren Verwendung zu Text übersetzen

Ich bin sehr viel in Richtung 2. geneigt und ich sehe keinen Vorteil in gettext Weg zu gehen, 2. Art und Weise unter Verwendung von i alle meine Nachrichten an einem Ort nicht im Code haben kann, also wenn ich eine Nachricht ändern müssen, Code nicht, kann bei gettext geändert werden muss ich verwirrend msg-Konstanten haben, wie ich Umwickeln wird nur das orginal msg statt es zu einer konstante in messages.py Umwandlung

grundsätzlich anstelle von

wx.MessageBox(_("Hi stackoverflow!"))

Ich denke

wx.MessageBox(messages.GREET_SO)

ist besser, so gibt es keinen Vorteil in gettext Weise und Nachteile der 2. Art und Weise? und gibt es einen dritten Weg?

edit: auch gettext Sprachen scheinen Dateien Code zu gebunden zu werden, und was passiert, wenn ich zwei Nachrichten in Englisch gleiche will, aber unterschiedlich in französisch z.B. suppose französisch hat subtile Übersetzung für unterschiedliche scnerarios für Englisch eines ok ist

Erfahrung: Ich habe bereits zweiten Weg gegangen, und ich muß jede Anwendung sagen sollte versuchen, aus dem Code UI Text zu extrahieren, gibt es eine Chance, Refactoring, zu sehen, wo UI in Modell kriecht, und wo UI Text verbessert werden kann, gettext im Vergleich ist Mechaniker, keine Eingabe für Coder gibt, und ich denke, wäre schwieriger aufrecht zu erhalten.

und während Sie einen Namen für Texterstellung z.B. PRINT_PROGRESS_MSG, gibt eine Chance zu sehen, dass an vielen Stellen, gleiche msg etwas anders verwendet wird, und kann in einen einzigen Namen zusammengeführt werden, die später auf helfen, wenn ich msg nur einmal ändern müssen.

Fazit: Ich bin noch nicht sicher, jeden Vorteil gettext zu verwenden und meine eigenen bin mit Nachrichten-Datei. aber ich habe die Antwort, die zumindest erklärt einige Punkte ausgewählt, warum gettext von Vorteil sein kann. Die endgültige Lösung ist IMO, die das Beste aus beiden Möglichkeiten, das heißt meine eigene Nachrichtenkennung von gettext z

gewickelt nimmt
wx.MessageBox(_("GREET_SO"))
War es hilfreich?

Lösung

Gettext ist der Weg zu gehen, in Ihrem Beispiel auch gettext zu können „vermeiden, dass die Übersetzungen im Code speichern“:

wx.MessageBox(messages.GREET_SO)

könnte die gleiche sein mit gettext wie:

wx.MessageBox(_("GREET_SO")) or wx.MessageBox(_("messages.GREET_SO"))

Gettext ist so ziemlich der Standard für mehrsprachige Anwendungen, und ich bin mir ziemlich sicher, dass Sie von dessen Verwendung in der Zukunft profitieren werden. So können Sie zB Poedit (oder andere ähnliche app) verwenden Übersetzungen an Ihre Mitarbeiter oder Autoren und auf Flagge eine oder mehrere Mitteilungen später zuweisen als nicht richtig übersetzt. Auch wenn es fehlende / zusätzliche Einträge poEdit Sie warnen. Mach dir nichts, gettext die einzige bewährte zuverlässige Art und Weise ist die Übersetzungen zu erhalten.

Andere Tipps

Es gibt einige Vorteile von gettext:

  1. Einer der größten Vorteile ist: wenn poedit mit den Übersetzungen zu tun, Sie aus der Übersetzungsdatenbank profitieren können. Grundsätzlich poedit ca Festplatte scannen und bereits übersetzten Dateien finden und Vorschläge machen, wenn Sie Ihre Datei übersetzen.
  2. Wenn Sie den Code zu anderen Menschen geben, die sie bereits übersetzen könnten die gettext Art und Weise zu übersetzen wissen, während Sie ihnen Ihre Art zu übersetzen, zu erklären haben.
  3. Sie haben den Text im Rahmen des Codes, so sollte es einfacher sein, zu übersetzen, wenn Sie den Code um die Übersetzung zu sehen
  4. Betrachten Sie Text wie: print _('%d files of %d files selected') % (num, numTotal) und noch kompliziertere Situationen. Hier ist es wirklich hilft, um den Code mit ...

Für das Web (dies ist PHP, aber die Idee ist die gleiche), habe ich immer mehrere Sprachdateien in einem bestimmten Verzeichnis zu erstellen. de.php, fr.php, et cetera. Diese Dateien enthalten Definitionen aller Ausgabetext in der angegebenen Sprache. Die Benutzereinstellung für die Sprache bestimmt diese Dateien, die, so enthalten bekommen, welche Sprache die Ausgabe erscheint in. Zum Beispiel ...

in de.php:     TEXT_I_AM = "Ich bin"

in fr.php:     TEXT_I_AM = "Je suis"

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top