Как локализовать веб-приложения на 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). Как для любого
Программирование веб-форм
Наверное, ни одно веб-приложение не обходится без динамической составляющей: разбор данных из веб-форм/запроса, заполнение веб-форм для (повторного) показа, валидация данных.Здесь тоже сделано по максимуму: все входные параметры автоматически преобразуются в юникод, так что даже делать ничего не нужно. Если для заполнения форм вы используете Kid, то эти юникодные строки будут корректно вставлены в шаблон. Если такое автоматическое преобразование отключить, тогда для каждого строкового входного параметра стоит использовать валидатор UnicodeString из turbogears.validators.
Локализация
За локализации представления валюты, форматов дат и календаря отвечает отдельный модуль turbogears.i18n.format. Фактически, это интерфейс к встроенной базе данных, которая хранит всю необходимую информацию по всем доступным локалям (я насчитал их аж 221).Перевод интерфейса
Механизм используется типичный для OSS-мира, gettext: все строки, подлежащие локализации оформляются в _("таком вот виде"). При помощи специальной программы (консольной tg-admin i18n или веб-модуля CatWalk) все такие строки собираются в .pot-файл из которого автоматически создаются (и обновляются) файлы перевода.Есть отдельный механизм для локализации содержимого Kid-шаблонов, но он неидеален.
1 коментар
Підписатись на коментаріВідписатись від коментарів Коментарі можуть залишати тільки користувачі з підтвердженими акаунтами.