ГЛАВНАЯ      ДОКУМЕНТАЦИЯ      СТАТЬИ      ПРОГРАММЫ      ССЫЛКИ      ФОРУМ      ДРУГОЕ   

Как локализовать веб-приложения на TurboGears

        Это обзорный пост, пытающийся охватить (вкратце) все элементы веб-приложения.
Как я уже писал, главное правило разработки в контексте локализованных приложений: сквозное использование Unicode внутри программы и перекодировка для общения с внешним миром.

Хранение данных в SQLObject

Хранением данных в TurboGears обычно занимается SQLObject. Эта библиотека имеет специальный тип UnicodeCol, который обеспечивает прозрачное кодирование/декодирование юникод-данных из Python в базу данных и назад.
К сожалению, такое автоматическое кодирование поддерживается только в конструкторе и при прямом доступе к атрибутам. Если необходимо, скажем, создать SQL WHERE, в котором используется наш UnicodeCol, придется “ручками” кодировать юникод-строку в кодировку БД (например, utf-8).
Вообще, SQLObject имеет и другие, более системные проблемы. В последние время часть пользователей TurboGears мигрирует на SQLAlchemy, как (во многом) более прогрессивную технологию. Поживем - увидим.

Представление в Kid-шаблонах

Для создания динамических веб-страниц по умолчанию используется Kid, который требует чтобы все входные параметры-строки были юникодными. На выходе тоже получается юникод, но TurboGears автоматически кодирует его, используя параметр конфигурации kid.encoding (по умолчанию это опять же utf-8) и проставляя правильный Content-Type. Таким образом, броузер получает поток utf-8 с правильным заголовком.
Единственное, на что стоит обратить внимание: кодировка исходного файла-шаблона (.kid). Как для любого XML-файла кодировка задается в заголовке - проследите чтобы содержимое ему соответствовало. В противному случае Kid “радует” очень странным сообщением об ошибке.

Программирование веб-форм

Наверное, ни одно веб-приложение не обходится без динамической составляющей: разбор данных из веб-форм/запроса, заполнение веб-форм для (повторного) показа, валидация данных.
Здесь тоже сделано по максимуму: все входные параметры автоматически преобразуются в юникод, так что даже делать ничего не нужно. Если для заполнения форм вы используете Kid, то эти юникодные строки будут корректно вставлены в шаблон. Если такое автоматическое преобразование отключить, тогда для каждого строкового входного параметра стоит использовать валидатор UnicodeString из turbogears.validators.

Локализация

За локализации представления валюты, форматов дат и календаря отвечает отдельный модуль turbogears.i18n.format. Фактически, это интерфейс к встроенной базе данных, которая хранит всю необходимую информацию по всем доступным локалям (я насчитал их аж 221).

Перевод интерфейса

Механизм используется типичный для OSS-мира, gettext: все строки, подлежащие локализации оформляются в _(”таком вот виде”). При помощи специальной программы (консольной tg-admin i18n или веб-модуля CatWalk) все такие строки собираются в .pot-файл из которого автоматически создаются (и обновляются) файлы перевода.
Есть отдельный механизм для локализации содержимого Kid-шаблонов, но он неидеален.

Источники:
        developers.org.ua

Автор: Ищенко М.   
ПОМОЩЬ САЙТУ :
sms.Є®ЇЁ«Є  *PythonUA*
Для чего Вы используете Python?
Admin( 46 )
Web( 61 )
GUI( 37 )
Embedding ( 16 )
Другое( 34 )
Какими продуктами Вы пользовались?
Zope( 15 )
Plone( 1 )
TG( 7 )
Django( 15 )
Twisted( 5 )
Другими( 10 )
ДРУЗЬЯ:
LUG.DN.UA
D-FENS.ORG.UA
SLAV0NIC.XSS.RU
CETUS.COM.UA
ENTDEV.ORG
[Python Powered]
Rambler's Top100
Copyright © 2006 python.com.ua