Главная | Архив новостей | Общение | Площадка | Примеры OpenID
Хостинг Django от «Джино»
Оглавление

Переводы и JavaScript

Добавление возможности перевода строк в JavaScript порождает ряд проблем:

  • Код на JavaScript не имеет доступа к реализации gettext.

  • Код на JavaScript не имеет доступа к .po или .mo файлам. Они должны быть предоставлены сервером.

  • Каталоги с переводами для JavaScript должны быть малы насколько это возможно.

Django предоставляет интегрированное решения для этих проблем. Оно передаёт переводы в JavaScript, таким образом вы можете использовать gettext в JavaScript.

Представление javascript_catalog

Основным решением для этих проблем является представление javascript_catalog(), которое создаёт библиотеку кода JavaScript с функциями, имитирующими поведение интерфейса gettext, и с массивом переведённых строк. Эти строки получаются из приложения, проекта или ядра Django, в соответствии с тем, что вы определили в info_dict или в URL.

Вы можете использовать это так:

js_info_dict = {
    'packages': ('your.app.package',),
}

urlpatterns = patterns('',
    (r'^jsi18n/$', 'django.views.i18n.javascript_catalog', js_info_dict),
)

Каждая строка в packages должна быть в формате, аналогичном параметру INSTALLED_APPS, и должна ссылаться на пакет, который содержит каталог locale. Если вы укажите несколько пакетов, все эти каталоги будут объединены в единый. Это полезно когда работаете с JavaScript, который использует строки из разных приложений.

Вы можете создать представление динамически, указав пакеты в схеме URL:

urlpatterns = patterns('',
    (r'^jsi18n/(?P<packages>\S+?)/$, 'django.views.i18n.javascript_catalog'),
)

Учитывая это, вы указываете пакеты в виде списка их имён, разделённых знаками + в URL. Это особенно полезно, если ваши страницы используют код из разных приложений, которые часто меняются и у вас нет желания помещать переводы в единый большой файл. С точки зрения безопасности эти значеним могут быть только в django.conf или в любом пакете указанном в параметре INSTALLED_APPS.

Использование каталога с переводами

Для использования каталога просто подключите динамически генерируемый скрипт:

<script type="text/javascript" src="/path/to/jsi18n/"></script>

Этим способом пользуется административный сайт для получения каталога с переводами от сервера. После загрузки каталога ваш JavaScript код может использовать стандартный интерфейс gettext:

document.write(gettext('this is to be translated'));

Есть даже интерфейс ngettext и функция интерполяции строк:

d = {
    count: 10
};
s = interpolate(ngettext('this is %(count)s object', 'this are %(count)s objects', d.count), d);

Функция interpolate() поддерживает как позиционную интерполяцию, так и именованную. Таким образом предыдущий код может быть переписан так:

s = interpolate(ngettext('this is %s object', 'this are %s objects', 11), [11]);

Синтаксис интерполяции позаимствован из Python. Вы не должны злоупотреблять интерполяцией, это всё ещё JavaScript, так что код будет повторять подстановки с помощью регулярного выражения. Это не так быстро как строковая интерполяция в Python, так что не используйте это лишний раз.

Создание каталога

Создание и обновление каталогов с переводами происходит аналогично другим видам каталогов. Единственное отличие в том, что следует указывать параметр -d djangojs:

make-messages.py -d djangojs -l de

Эта команда создаёт или обновляет каталог с переводами для JavaScript кода для немецкого языка. После обновления каталогов, просто выполните compile-messages.py аналогично предыдущим примерам.


Увидели ошибку?
Выделите её мышкой и нажмите
Ctrl-Enter
Обработано:
1049 49 130 71

Версия книги
1.0 2.0
Версия 2.0 в процессе перевода!

Мой луч
Многообразие света

Полезное
Актуальные вакансии, Python работа для python-разработчиков.


Скачать в формате
CHM от 2 сентября

Заказать PDF файл можно через почту, чат, джаббер. Всего 2WMZ. Содержимое точно соответствует содержимому сайта.
Чем чаще заказываете — тем больше перевожу.

Русская группа

на поддержку перевода
Яндекс Яндекс.Деньги Хочу такую же кнопку
Ускорить процесс перевода!
R130494980980
Z425285133788
E112528079659
U327380922061

Книга помогла реализовать:
Проект «Мой луч»
АРМ УФМС.


Мой вебсайт стоит666 337,31 руб

© 2008-2009 Ruslan Popov @ gmail.com Powered by Django 1.1 beta 1 SVN-11114
Главная | Архив новостей | Общение | Площадка | Примеры OpenID