i18n ist ein Paket, um den Arbeitsablauf und die Entwicklung von internationalisierten Anwendungen & nbsp vereinfachen versucht;. Es ist eine dünne Hülle um bestehende Instrumente, insbesondere gettext und babel.
Die grundsätzliche Verwendung
# Demo.py
#
von i18n.translator Import Übersetzer
supported_languages = ['it_IT "," fr_FR', 'de_DE']
# Aktivieren Italienisch Übersetzungen
tr = Übersetzer ("/ path / to / root ', supported_languages" it_IT)
Druck tr ._ ('Hallo Welt!')
wobei / path / to / root / ist das Stammverzeichnis Ihres Projektes. Wenn instanziiert, erstellt der Übersetzer Klasse automatisch ein Verzeichnis mit dem Namen / path / to / root / Sprachen, in denen die Übersetzungen gespeichert sind.
Extrahieren von Nachrichten
Bevor Sie die eigentliche Übersetzung, müssen Sie die Nachrichten von den Quelldateien zu extrahieren, indem Sie den Befehl Extrakt auf dem i18n-Modul, das ein Wrapper um pybabel Extrakt und pybabel Update:
& Nbsp; python -m i18n --root = / path / to / root --languages = it_IT fr_FR, de_DE Extrakt
Extrakt sucht alle Nachrichten nach innen eingewickelt ruft _ (), gettext () oder ngettext () und erzeugt eine Datei mit dem Namen Sprachen / template.pot. Dies ist ein Standard gettext po file`, die alle Nachrichten in der Anwendung gefunden enthält.
Außerdem extract () erzeugt auch eine Message-Catalog-Datei für jede der unterstützten Sprachen als Sprachen / $ CODE / LC_MESSAGES / messages.po, wobei $ CODE ist eine der in supported_languages (it_IT fr_FR und de_DE im Beispiel oben aufgeführten Sprachen ).
Die Katalogdateien sind nun bereit, mit einem der vielen vorhandenen Tools übersetzt werden, zum Beispiel Qt Linguist oder Poedit. Für die korrekte Funktionsweise der Anwendung muss die gesamte Sprache / Hierarchie erhalten bleibt. Wir schlagen vor, die verschiedenen messages.po Dateien im Version Control System zusammen mit den anderen Dateien zur Anwendung gehören zu verfolgen.
Aktualisieren von Nachrichten
Bei der Entwicklung der Anwendung, werden Sie sicherlich neue Nachrichten verfassen zu übersetzen. Der Befehl Extrakt automatisch verarbeiten diesen Fall: wenn es bestehende Katalogdateien, deren Inhalt (einschließlich der vorhandenen Übersetzungen) findet sich mit den neu extrahierten Nachrichten zusammengeführt.
Kompilieren Kataloge
Es ist notwendig, die Katalogdateien, bevor Sie sie mit gettext kompilieren. Standardmäßig stellt unsere Übersetzer Objekt automatisch alle Kataloge in Sprachen / gefunden, Herstellung der entsprechenden .mo-Dateien. Die Zusammenstellung erfolgt erst, wenn der Katalogdatei wurde geändert. Das bedeutet, dass in den meisten Fällen müssen Sie nicht über die Zusammenstellung der Kataloge kümmern.
Wenn Sie es vorziehen, mehr Kontrolle auf dieser Stufe haben, können Sie autocompile = False an den Konstruktor übergeben Übersetzer und kompilieren sie manuell über die Befehlszeile:
& Nbsp; python -m i18n --root = / path / to / root --languages = it_IT fr_FR, de_DE kompilieren
Speichern von Übersetzungen in einer Datenbank
Für manche Anwendungen ist es sinnvoll, dem Benutzer die neue Übersetzungen zu definieren und / oder zu überschreiben dabei die Standard lassen. i18n unterstützt diesen Anwendungsfall mit dem DBTranslator-Klasse, die eine Unterklasse der Übersetzer ist. Bei der Übersetzung sieht DBTranslator erste in der Datenbank: wenn die Nachricht nicht gefunden wird, es Delegierten zum Standard gettext Verhalten.
DBTranslator auf sqlalchemy basiert. Der Konstruktor nimmt einen weiteren Motor-Parameter:
von i18n.dbtranslator Import DBTranslator
von sqlalchemy Import create_engine
Motor = create_engine ('sqlite: ///db.sqlite')
ROOT = "/ path / to / root '
SPRACHEN = ['it_IT "," fr_FR "]
DEST_LANGUAGE = 'it_IT "
tr = DBTranslator (ROOT, Sprachen, DEST_LANGUAGE, Motor = Motor)
Druck tr ._ ("Hallo Welt")
DBTranslator erstellt automatisch die Tabelle translation_entries in der DB. Dann ist es an der Anwendung, um eine Benutzerschnittstelle, um die Tabelle zu manipulieren. Zu Testzwecken können Sie die add_translation () -Methode verwenden, um eine neue Übersetzung im DB einzufügen:
tr.add_translation ("it_IT", "Hallo Welt", "ciao mondo")
Druck tr ._ ("Hallo Welt") # prints "ciao mondo"
Wie, um eine globale Übersetzer verwenden
Standardmäßig versucht i18n, jede globalen Zustand vollständig zu vermeiden. Das heißt, Sie können so viele Übersetzer und DBTranslator wie Sie wollen, jeden Bezug auf ein anderes Verzeichnis und / oder Datenbank instanziieren. Dies ist besonders nützlich für die Prüfung.
In der Praxis die meisten Projekte wollen jedoch eine globale Übersetzer, die über die Botschaften aller Komponenten in das Projekt weiß verwenden. Die Demo-Anwendung zeigt einen Weg, um es in der translate.py Modul zu tun:
Import py
von i18n.translator Import Übersetzer
# Setzen Sie die Wurzel des Projekts in das Verzeichnis, das diese Datei enthält
ROOT = py.path.local (__ __-Datei). Dirpath ()
SPRACHEN = ['it_IT "," fr_FR', 'de_DE']
tr = Übersetzer (ROOT, Sprachen, "it_IT)
_ = Tr._
ngettext = tr.ngettext
wenn __name__ == '__main__':
& Nbsp; tr.cmdline (sys.argv)
Auf diese Weise kann der Rest der Anwendung einfach importieren und _ () und ngettext () aus translate.py. Oder an Ihrer Präferenz, Import direkt die tr Objekt und Verwendung tr ._ () und tr.ngettext (), um Nachrichten zu übersetzen.
Die letzten beiden Zeilen des Codes ermöglicht eine bequeme Möglichkeit, Extrakt aufrufen und übersetzen Sie über die Befehlszeile, ohne das root dir und den unterstützten Sprachen manuell angeben. Führen Sie einfach:
& Nbsp; python translate.py Extrakt # ... oder kompilieren
Anforderungen :
- Python
Kommentare nicht gefunden