i18n это пакет, который пытается упростить рабочий процесс и развитие многоязычных приложений & NBSP;. Это тонкая обертка вокруг существующих инструментов, в частности Gettext и Бабеля.
Основы использования
# Demo.py
#
от i18n.translator импорта Переводчик
supported_languages = ['it_IT', 'fr_FR', 'de_DE']
# Активировать итальянские переводы
TR = Переводчик ('/ путь / к / корневой ", supported_languages" it_IT')
печать TR ._ ('Привет, мир! ")
где / путь / к / корневой / корневой каталог вашего проекта. Когда экземпляр, класс Переводчик автоматически создает каталог называется / путь / к / корневой / языки, где переводы хранятся.
Извлечение сообщения
Перед тем, как реально перевода, вы должны извлечь сообщения из ваших исходных файлов, вызвав команду экстракт на модуле i18n, которая является оберткой экстракта pybabel и обновления pybabel:
& NBSP; питона -m i18n --root = / путь / к / корневой --languages = it_IT, fr_FR, de_DE экстракт
Экстракт ищет все сообщения завернутые в вызовы (_), Gettext () или ngettext () и производит файл называется языки / template.pot. Это стандартная Gettext ро file`, который содержит все сообщения, найденные в приложении.
Кроме того, экстракт () также создает файл каталога сообщений для каждого из поддерживаемых языков как / $ CODE / LC_MESSAGES / messages.po, где $ КОД является одним из языков, перечисленных в supported_languages (it_IT, fr_FR и de_de в приведенном выше примере ).
Файлы каталога теперь готовы быть переведены с помощью одного из многих существующих инструментов, например, QT Linguist или PoEdit. Для правильного функционирования приложения, целые языки / иерархия должна быть сохранена. Мы предлагаем отслеживать различные messages.po файлов в системе управления версиями вместе с другими файлами, принадлежащих к приложению.
Обновление сообщения
Во время разработки приложения, вы, несомненно, добавить новые сообщения должны быть переведены. Команда экстракт автоматически обрабатывать этот случай: если она находит существующие файлы каталога, их содержание (в том числе существующих переводов) объединяется с вновь добытых сообщений.
Компиляция каталоги
Это необходимо собрать файлы каталога перед использованием их с Gettext. По умолчанию, наша Переводчик объект автоматически компилирует все каталоги, найденные в языках /, производя соответствующих .mo файлов. Компиляция делается только тогда, когда файл каталога был изменен. Это означает, что в большинстве случаев вам не придется беспокоиться о составлении каталогов.
Если вы предпочитаете иметь больше контроля на этом этапе, вы можете пройти autocompile = False конструктору Переводчик и компилировать их вручную из командной строки:
& NBSP; питона -m i18n --root = / путь / к / корневой --languages = it_IT, fr_FR, de_DE компиляции
Хранение переводы в базе данных
Для некоторых приложений полезно, чтобы позволить пользователю определять новые переводы и / или переопределения по умолчанию. i18n поддерживает этот прецедент с классом DBTranslator, который является подклассом Переводчик. При переводе, DBTranslator сначала ищет в базе данных: если сообщение не найдено, он делегирует к стандартной поведения GetText.
DBTranslator основан на SQLAlchemy. Его конструктор принимает дополнительный параметр двигателя:
от i18n.dbtranslator DBTranslator импорта
от SQLAlchemy импорта create_engine
Двигатель = create_engine ('SQLite: ///db.sqlite')
КОРЕНЬ = '/ путь / к / корневой "
ЯЗЫКИ = ['it_IT', 'fr_FR']
DEST_LANGUAGE = 'it_IT "
TR = DBTranslator (корень, ЯЗЫКИ, DEST_LANGUAGE, двигатель = двигателя)
печать TR ._ ("привет мир")
DBTranslator автоматически создает таблицу translation_entries в БД. Затем это до применения, чтобы обеспечить пользовательский интерфейс для работы с таблицей. Для тестирования вы можете использовать метод add_translation (), чтобы вставить новый перевод в БД:
tr.add_translation ("it_IT", "привет мир", "чао Mondo")
печать TR ._ ("привет мир") # печатает "чао" Mondo
Как использовать глобальную Переводчик
По дизайну, i18n пытается полностью избежать глобального состояния. Это означает, что вы можете создать экземпляр, как много Переводчик и DBTranslator, как вы хотите, каждый со ссылкой на другой каталог и / или базы данных. Это особенно полезно для тестирования.
Тем не менее, на практике большинство проектов необходимо использовать глобальную переводчик, который знает о сообщениях всех компонентов в проекте. Демо приложение показывает способ, чтобы сделать это в модуле translate.py:
импорт ру
от i18n.translator импорта Переводчик
# Установить корень проекта в каталог, содержащий этот файл
КОРЕНЬ = py.path.local (__ __ файл). Dirpath ()
ЯЗЫКИ = ['it_IT', 'fr_FR', 'de_DE']
TR = Переводчик (корень, ЯЗЫКИ, "it_IT ')
_ = Tr._
ngettext = tr.ngettext
если __name__ == '__main__ ":
& NBSP; tr.cmdline (sys.argv)
Таким образом, остальная часть приложения может просто импортировать и использовать _ () и ngettext () из translate.py. Или, по вашему предпочтению, импорт непосредственно объект TR и использование TR ._ () и tr.ngettext (), чтобы перевести сообщения.
Последние две строки кода позволяет удобный способ вызова экстракт и компиляции из командной строки без необходимости вручную указать корневой каталог и поддерживаемые языки. Просто беги:
& NBSP; экстракт питона translate.py # ... или скомпилировать
Требования
- Python
Комментарии не найдены