Украинское сообщество программистов

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

Макс Ищенко
Опубликовано 6.04.2006 в Статьи

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

Как я уже писал, главное правило разработки в контексте локализованных приложений: сквозное использование 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-шаблонов, но он неидеален.

Теги: , , ,

1 звезда2 звезды3 звезды4 звезды5 звезд (Еще не оценили)
Загрузка ... Загрузка ...

Понравилась статья? Подпишись на обновления по RSS/E-mail

Подписаться, не оставляя комментарий

Один комментарий “Как локализовать веб-приложения на TurboGears” RSS

  1. dem

    Если бы все было так просто, то это был бы рай.
    Вот мой опыт разработки:
    При попытках установить куку с unicode-симовлами – все приложение уходило в ступор.
    После долгих дней споров в рассылках оказалось, что моя версия Python (Slackware 10.2), собрана очень дивным образом и такая вещь как setdefaultencoding() – отсутствует напрочь.
    Помог вандализм: но после него у меня перестали вылетать и Zope и все остальное “барахло”
    в site.py
    установил кодировку по умалочанию UTF-8 – и после этого счастье.
    Такое решение может вызвать бурю возмущения, но когда пишешь проэкты для своего же хостинга, то такой способ очень приемлем.

Оставить комментарий

Указать свой сайт могут только зарегистрированные пользователи. Регистрация или вход.

Архив

Добавить статью

Станьте автором нашего сайта!

Какие материалы подходят для публикации? — Такие.

Присылайте статьи на editors@developers.org.ua.

Подробнее.

Популярные теги

Все теги

Комментарии

Последние комментарии

интернет магазин бытовая техника магазин Laptoper