Skip to content
toukmanov edited this page Mar 31, 2015 · 30 revisions

Базовое API

configure

Конфигурация приложения

  • token (string): API token
  • locale (string): selected locale (ru, en, etc.), если не задано- используется язык по-умолчанию
  • application_id (int): API application id, если не задано- получаем приложение по-умолчанию
  • source (string): название источника (если None- переводы выдергиваются из API по одному)
  • client (Client): custom API client (для заглушек, логирования или кэша)
    configure(my_token, 'ru')
    configure(my_token, 'ru', preload = True, client = MyCustomAPIClient)

tr

Перевести строку

  • label (string): tranlation label
  • data (dict): user data
  • description (string): tranlation description
  • language (Language):
  • options (dict): options options: safe (boolean default False) - if False escape html special symbols
    print tr('{actor} give you {count} apples', {'actor':{'name':'John','gender':'male'},'count':10}, 'Apple giving')
    print tr('I want print {html}', {'html':'<b>Html</b><i>code</i>'}, options = {'safe':True})

submit_missed

Отправить пропущенные ключи на сервер

Context

Класс для работы в контексте, позволяет работать с несколькими контекстами одновременно:

ru = Context().configure(token, locale = 'ru')
en = Context().configure(token, locale = 'en')
print ru.tr('Hello world')
print en.tr('Hello world')
ru.submit_missed()

Demo

Demo web server + unittests

Make virtualenv

sudo pip install virtualenv
# create virtualenv:
virtualenv --no-site-packages tmldemo
# activate:
. tmldemo/bin/activate
# install deps:
pip install -r demo/requirements.txt
# run webserver 127.0.0.1:5000
./demo.sh
# run unittests:
./unittests.sh

Можно переводить тексты в тестовом режиме на http://127.0.0.1:5000 Демо работает на http://tml.budutam.ru Поддерживаются:

  • {name}
  • {name|жетон}
  • {name||pyped}}
  • {name::case}

Словарь

Для получения переводов используется словарь: объект наследующий классу AbstactDictionary

  • init(fallback) - в конструктор мы передаем ф-ю обработчик, которая вызывается если перевод не найден (по умолчанию мы возвращаем label ключа в качестве перевода)
  • fetch(key) - получить перевод (Translation) для ключа, если перевода нет- кинуть исключение
  • translate(key) - получить перевод, если его нет- вызвать fallback

Поддерживаются словари:

  • tml.dictionary.tranlations.Dictionary - получать переводы по API по одному (используется по-умолчанию)
  • tml.dictionary.source.SourceDictionary - загружать все переводы для источника (если перевод для источника не привязан, возвращаем fallback перевод), в деструкторе на сервер отправляются missed_keys и сбрасывается кэш (если missed_keys есть) словарь используется, если задан source
  • tml.dictionary.language.LanguageDictionary- загружать все переводы для языка (не используется)

Предобработка данных

  1. Если для перевода в массиве data передается элемент наследующий классу tml.tools.Renderable перед выводом в шаблон перевода этот объект заменяется на результат выполнения метода render(context), куда передается контекст выполнения (объект содержащий язык и ф-ю для перевода) Можно передавать объекты, генерирующие составные переводы (например tml.tools.list.List выводит список с форматированием и разделителем)
  2. В св-ве data_preprocessors объекта Context, хранится массив ф-й для предобработки данных, каждая переменная перед выводом проходит через эту цепочку (tml.tools.list.preprocess_lists - форматирует простые списки)
  3. В св-ве env_generators находятся генераторы данных по умолчанию, если data не содержит записи с некоторым ключем вызывается генератор (например tml.tools.viewing_user.get_viewing_user - пропихивает текущего пользователя)

Вывод списка

Класс List позволяет выводить форматированные списки:

from tml.tools.list import List
tr('Hello {users}', {'users':List(['Вася','Петя','Коля')}) # Вася, Петя, Коля
  • items - список
  • limit - кол-во выодимых элементов
List(range(100), limit = 3) # 1, 2, 3
  • separator - разделитель (по умолчанию ,)
  • last_separator - разделитель последнего эл-та (по умолчанию ,) переводится перед выводом
List(users, last_separator = 'or') # Вася, Петя или Коля
  • tpl - ф-я шаблон для вывода элемента
from tml.tools.template import Template
List(users, tpl = upper) # ВАСЯ, ПЕТЯ, КОЛЯ
List(ussrs, tpl = Template('{$0::dat}')) # Васе, Пете, Коле - поддерживаются стандартные ф-и токенов $0 - текущий элемент
Clone this wiki locally