Некоторые небольшие проекты мы делаем на базе платформы Google App Engine. Например, там сейчас располагается наш скромный корпоративный сайт. Сегодня коротко покажу, как можно более менее удобно делать многоязыковые приложения на этой платформе.

Реализуется это с помощью фреймворка Django, который можно полностью или частями подключать к любому проекту на GAE. Здесь будут использоваться модули Internalization и Settings.

Для удобства будущего использования весь код собран в новый Gist на Github’е.

Материал опять же не является нашим открытием, собран из сети (в основном из одной статьи), переведен, осознан, переработан и будет опубликован и сохранен здесь, чтобы и мы в том числе могли в будущем к нему обращаться (скорее всего придется :)). Ссылки на источники, конечно, будут в конце статьи.

О том, как выделять в коде и шаблонах текст для перевода, можно посмотреть в документации I18n Django.

Для генерации файлов языковых файлов используется gettext, поэтому убедитесь в его наличии в вашей системе.

Здесь приведены команды, во-первых, для создания папки для хранения языковых файлов и, во-вторых, для генерации, обновления и компиляции этих файлов.

В файле conf/settings.py определяется список доступных в приложении языков и язык по умолчанию. Теперь давайте посмотрим на контроллер, использующий i18n.

Переключение языка реализовано с помощью изменения значения cookie django_language. Важно не забыть указать модуль настроек DJANGO_SETTINGS_MODULE и не забыть сделать импорт других нужных компонентов.

Вот и все, на основе этого кода можно писать уже и более сложные многоязыковые приложения.

Стоит упомянуть, к сожалению, что реализация i18n на GAE не лишена багов, ссылку на один из них, который я сам периодически ловил на своем локальном сервер, привожу ниже.

Буду рад ответить на вопросы, если такие появятся. И, конечно, не забывайте подписываться на наш блог по rss и фолловить Evercode Lab в твиттере.

  • http://blog.yjl.im/2009/02/using-django-i18n-in-google-app-engine.html
  • http://docs.djangoproject.com/en/1.0/topics/i18n/
  • http://code.google.com/p/googleappengine/issues/detail?id=769