i18n egy olyan csomag, amely megpróbálja egyszerűsíteni a munkafolyamatot és fejlesztés nemzetközivé alkalmazások. & Nbsp; Ez egy vékony közrefogja a meglévő eszközöket, különösen a gettext és Bábel.
alapszintű kezelése
# Demo.py
#
a i18n.translator import Fordító
supported_languages = ['it_IT', 'fr_FR "," de_DE']
# Aktiválja olasz fordítások
tr = Fordító ("/ path / to / root", supported_languages, "it_IT)
print tr ._ ("Hello world!")
ahol / path / to / root / a gyökér könyvtárába a projekt. Amikor példányai, a Fordító osztály automatikusan létrehozza a könyvtár neve / path / to / root / nyelveken, ahol a fordításokat tárolja.
kicsomagolása üzenetek
Mielőtt ezt a tényleges fordítás, csomagold ki a üzeneteket a forrás fájlokat, hivatkozva a kivonat parancsot az i18n modul, amely közrefogja pybabel kivonat és pybabel frissítés:
& Nbsp; python -m i18n --root = / path / to / root --languages = it_IT, fr_FR, de_DE kivonat
kivonat keresi összes üzenet becsomagolt belsejében kéri a _ (), gettext () vagy ngettext (), és egy fájlt úgynevezett nyelvek / template.pot. Ez egy standard gettext po file` amely tartalmazza az összes üzenetet a keresetben.
Sőt, kivonat () létrehoz egy üzenetet katalógusa fájl egyes támogatott nyelvek, mint a nyelvek / $ KÓD / LC_MESSAGES / messages.po, ahol a $ Kódex az egyik felsorolt nyelvek supported_languages (it_IT, fr_FR és de_DE a fenti példában ).
A katalógus fájlok most készen kell átszámítani, az egyik a sok meglévő eszközök, például a QT-nyelvész vagy Poedit. A helyes működését az alkalmazás, a teljes nyelvek / hierarchiát kell őrizni. Javasoljuk, hogy nyomon kövesse a különböző messages.po fájlokat Version Control System együtt a többi tartozó fájlok az alkalmazás.
frissítése üzenetek
A fejlesztés során az alkalmazás, akkor biztosan új üzeneteket kell fordítani. A kivonat parancs automatikusan kezeli az esetben: ha úgy találja, meglévő katalógusfájlokhoz, azok tartalmát (beleértve a meglévő fordítások) összevonásra kerül az újonnan kitermelt üzeneteket.
összeállítása katalógusok
Meg kell fordítani a katalógusban használata előtt őket gettext. Alapértelmezésben a Fordító-objektum automatikusan lefordítja az összes katalógusban található nyelvek /, termelő megfelelő .mo fájlokat. Az összeállítás történik csak akkor, ha a katalógusban fájl megváltozott. Ez azt jelenti, hogy a legtöbb esetben nem kell aggódnia összeállítása katalógusban.
Ha azt szeretné, hogy több ellenőrzés ezt a lépést, akkor át autocompile = false a kivitelező Fordító és fordítsd le őket kézzel a parancssorból:
& Nbsp; python -m i18n --root = / path / to / root --languages = it_IT, fr_FR, de_DE összeállítása
tárolása fordítások egy adatbázisban
Egyes alkalmazások esetében hasznos hagyja, hogy a felhasználó megadja az új fordítások és / vagy felülírhatja az alapértelmezett beállítások. i18n támogatja ezt a használati eset a DBTranslator osztály, ami egy alosztálya Translator. Fordítása esetén, DBTranslator elsőre tűnik az adatbázisban: ha az üzenet nem található, akkor a küldötteket, hogy a standard gettext viselkedését.
DBTranslator alapul SQLAlchemy. A konstruktor veszi egy további motort paraméter:
a i18n.dbtranslator import DBTranslator
a SQLAlchemy import create_engine
motor = create_engine ("SQLite: ///db.sqlite)
Root = "/ path / to / root"
NYELVEK = ['it_IT', 'fr_FR "]
DEST_LANGUAGE = 'it_IT "
tr = DBTranslator (gyökér, nyelvek, DEST_LANGUAGE, motor = a motor)
print tr ._ ("hello world")
DBTranslator automatikusan létrehozza az asztalra translation_entries a DB. Aztán, hogy akár a kérelmet, hogy a felhasználói felület, hogy manipulálják az asztalra. A teszteléshez, akkor a add_translation () metódus, hogy helyezze el a fordítást a DB:
tr.add_translation ("it_IT", "hello world", "ciao mondo")
print tr ._ ("hello world") # nyomatok "ciao mondo"
Hogyan kell használni a globális Fordító
A design, i18n megpróbálja teljesen elkerülni minden olyan globális állam. Ez azt jelenti, hogy példányosíthatnánk annyi Fordító és DBTranslator, amit akar, mindegyik utalva egy másik könyvtárba és / vagy adatbázis. Ez különösen hasznos a vizsgálathoz.
A gyakorlatban azonban a legtöbb projekt szeretné használni a globális fordító, amely ismeri az üzenetek az összes komponens a projektben. A demo alkalmazás megmutatja a megoldás erre a translate.py modul:
import py
a i18n.translator import Fordító
# A gyökér a projekt a könyvtárban az alábbi fájlt
Root = py.path.local (__ __ fájl). DIRPATH ()
NYELVEK = ['it_IT', 'fr_FR "," de_DE "]
tr = Fordító (gyökér, nyelveket, it_IT)
_ = Tr._
ngettext = tr.ngettext
Ha __name__ == '__main__ ":
& Nbsp; tr.cmdline (sys.argv)
Így, a többi lehet egyszerűen importálni, és használja _ () és ngettext () a translate.py. Vagy az a preferencia, import közvetlenül a tr objektumot, és segítségével tr ._ () és tr.ngettext () lefordítani üzeneteket.
Az utolsó két sor a kód segítségével kényelmesen hívhatjuk kivonat és összeállítja a parancssorból anélkül, hogy manuálisan adja meg a root dir és a támogatott nyelvek. Csak futtatni:
& Nbsp; python translate.py kivonat # ... vagy fordítsd
követelmények :
- Python
Hozzászólás nem található