i18n є пакет, який намагається спростити робочий процес і розвиток інтернаціональних додатків & NBSP ;. Це тонка оболонка навколо існуючих інструментів, зокрема, gettext, і Бабеля.
Основи використання
# Demo.py
#
від i18n.translator імпорту Перекладач
supported_languages = ['it_IT', 'fr_FR', 'de_DE']
# Активувати італійські переклади
TR = Переводчик ('/ шлях / до / Root', 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, де $ CODE є однією з мов, перелічених у 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')
ROOT = '/ шлях / до / кореневої "
МОВИ = ['it_IT', 'fr_FR']
DEST_LANGUAGE = 'it_IT "
TR = DBTranslator (корінь, мов, DEST_LANGUAGE, двигун = двигуна)
друк TR ._ ("привіт світ")
DBTranslator автоматично створює таблицю translation_entries в БД. Потім це до застосування щоб забезпечити користувальницький інтерфейс для роботи з таблицею. Для тестування ви можете використовувати метод add_translation (), щоб вставити новий переклад в БД:
tr.add_translation ("it_IT", "привіт світ", "Ciao Mondo")
друк TR ._ ("привіт світ") # виводить "чао Mondo"
Як використовувати глобальну Перекладач
Відповідно до проекту, i18n намагається повністю уникнути глобального стану. Це означає, що ви можете створити екземпляр, як багато Перекладач і DBTranslator, як ви хочете, кожен з посиланням на інший каталог та / або бази даних. Це особливо корисно для тестування.
Тим не менш, на практиці більшість проектів хоче використовувати глобальну перекладач, який знає про посланнях всіх компонентів в проекті. Демонстраційна програма показує, як це зробити в модулі translate.py:
імпорт ру
від i18n.translator імпорту Перекладач
# Встановити корінь проекту в каталог, що містить цей файл
ROOT = 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
Коментар не знайдено