i18n е пакет, който се опитва да опрости работата и развитието на интернационализирани приложения & Nbsp;. Тя е тънка обвивка около съществуващите инструменти, по-специално gettext и Бабел.
<Силен> Basic употребата
# Demo.py
#
от i18n.translator внос Преводач
supported_languages = ['it_IT "," fr_FR "," de_DE "]
# Активират италиански преводи
TR = Translator ("/ път / до / корен", supported_languages, "it_IT")
Принтирай TR ._ ("Здравей, свят!")
където / път / до / корен / е в главната директория на вашия проект. Когато инстанция, клас Преводач автоматично създава директория, наречена / път / до / корен / езици, където се съхраняват на преводите.
<Силни> Извличане съобщения
Преди да направи реалната превода, което трябва да се извлече посланията от вашите изходни файлове, като се позове на командата за извличане на модула i18n, която е обвивка около екстракт pybabel и pybabel актуализация:
& Nbsp; питон -m i18n --root = / път / до / корен --languages = it_IT, fr_FR, de_DE екстракт
екстракт търси всички съобщения, увити във вътрешността приканва да _ (), gettext () или ngettext () и произвежда файл, наречен езици / template.pot. Това е стандартен gettext PO file` която съдържа всички намерени в приложението послания.
Нещо повече, извличане () също създава съобщение на стоките файл за всеки от поддържаните езици като езици / $ CODE / LC_MESSAGES / messages.po, където $ код е един от езиците, посочени в supported_languages (it_IT, fr_FR и de_DE в примера по-горе ).
Файловете на каталози вече са готови да се превръщат в един от многото съществуващи инструменти, например QT лингвист или Poedit. За правилното функциониране на заявлението, цялата езици / йерархия трябва да се запази. Ние предлагаме да се проследят различните messages.po файловете в Version System Control заедно с други файлове, които принадлежат към заявлението.
<Силни> Обновяване на съобщения
По време на разработването на приложението, вие със сигурност ще добави нови съобщения да бъдат преведени. Командата екстракт автоматично се справят този случай: ако установи съществуващи каталожни файлове, тяхното съдържание (включително съществуващите преводи) се слива с новоприетите извлечени послания.
<Силни> Компилиране каталози
Необходимо е да се съберат данни за стоките файловете преди да ги използвате с gettext. По подразбиране, нашата Преводач обект автоматично събира всички намерени в езика / каталози, които произвеждат съответните .mo файлове. Компилацията се извършва само когато стоките файлът е редактиран. Това означава, че в повечето случаи не е нужно да се притеснявате за съставянето на каталозите.
Ако предпочитате да имате повече контрол върху тази стъпка, може да премине autocompile = False на конструктора на Преводач и да ги съберат ръчно от командния ред:
& Nbsp; питон -m i18n --root = / път / до / корен --languages = it_IT, fr_FR, de_DE компилирате
<Силен> Съхраняване на преводи в база данни
За някои приложения е полезно да се позволи на потребителя да дефинира нови преводи и / или отмени тези по подразбиране. i18n подкрепя този случай използвайте с класа DBTranslator, която е подклас на Translator. Когато превода, DBTranslator първо изглежда в базата данни: ако не бъде намерен на съобщение, то се делегира на стандартната gettext поведение.
DBTranslator се основава на SQLAlchemy. Неговият конструктор взема допълнителен параметър на двигателя:
от i18n.dbtranslator внос DBTranslator
от SQLAlchemy внос create_engine
двигател = create_engine ("SQLite: ///db.sqlite")
ROOT = "/ път / до / корен"
ЕЗИЦИ = ['it_IT "," fr_FR "]
DEST_LANGUAGE = "it_IT"
TR = DBTranslator (ROOT, езици, DEST_LANGUAGE, двигател = двигател)
Принтирай TR ._ ("Hello World")
DBTranslator автоматично създава translation_entries таблицата в ПБ. След това, той е до заявлението за предоставяне на потребителски интерфейс за манипулиране на масата. За тестване, можете да използвате метода на add_translation (), за да вмъкнете нов превод в ПБ:
tr.add_translation ("it_IT", "Hello World", "Ciao Мондо")
Принтирай TR ._ ("Hello World") # отпечатъци "Ciao Mondo"
<Силен> Как да използвате глобалната Преводач
По проект, i18n се опитва да избегне напълно всяка глобална държава. Това означава, че можете да конкретни примери, тъй като много Преводач и DBTranslator колкото искате, всеки един се позовава на друга директория и / или база данни. Това е особено полезно за тестване.
Въпреки това, на практика повечето проекти искат да използват глобалната преводач, който знае за посланията на всички компоненти на проекта. Приложението за демонстрация показва начин да го направя в модула translate.py:
внос пг
от i18n.translator внос Преводач
# Определят основата на проекта до директорията, съдържаща този файл
ROOT = py.path.local (__ __ файл). Dirpath ()
ЕЗИЦИ = ['it_IT "," fr_FR "," de_DE "]
TR = Translator (ROOT, езици, "it_IT")
_ = Tr._
ngettext = tr.ngettext
ако __name__ == "__main__":
& Nbsp; tr.cmdline (sys.argv)
По този начин, в останалата част на заявлението може просто да внасят и използват _ () и ngettext () от translate.py. Или, на ваше предпочитание, внос директно TR обект и използване ДС ._ () и tr.ngettext (), за да преведат съобщения.
Последните два реда от кода позволява удобен начин да се обадя екстракт и събират от командния ред, без да се налага ръчно да укажете кореновата директория и поддържаните езици. Просто пуснете:
& Nbsp; екстракт от питон translate.py # ... или съставят
<силни> Изисквания :
- Python
Коментари не е намерена