Почему файлы JavaScript должны быть локализованы по-разному в Django? - PullRequest
1 голос
/ 30 октября 2011

При локализации приложения Django команда makemessages просто анализирует все файлы TXT, HTML и PY и генерирует для них PO-файлы, но при локализации файлов JS необходимо выполнить команду djangojs.Я не углубился в источник Django, чтобы понять, почему это происходит по-другому.Может кто-нибудь объяснить?

Я читал, что в производственных средах Apache используется для обслуживания файлов приложения, а простой прокси-сервер, такой как Nginx, используется для обслуживания статических файлов, поскольку это значительно снижает нагрузку на сервер приложений.С этим сценарием, я думаю, он работает следующим образом: при рендеринге шаблона Django проверяет запрошенную локаль, загружает соответствующий файл локализации и обслуживает шаблон, но JS, с другой стороны, служащий в качестве статического носителя, не анализируется Django.Это так?

(Это мой первый набег в мир локализации с Джанго, и я полон вопросов, многие ответы на которые я не могу найти, и поэтому этот пост.)

Спасибо

1 Ответ

1 голос
/ 30 октября 2011

Причина, по которой он обрабатывается по-разному, заключается в документах .

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

  • Код JavaScript не имеет доступа к реализации gettext.
  • Код JavaScript не имеет доступа к файлам .po или .mo; они должны быть доставлены сервером.
  • Каталоги переводов для JavaScript должны быть как можно меньше.

Итак, по сути, внутренний перевод Python выполняется на сервере. Но для JS есть еще один файл, обслуживаемый сервером, который содержит все необходимые переводы для языка пользователя. И перевод сделан на стороне пользователя. Как видите, это совершенно другая стратегия. Django помогает, добавляя аналогичный интерфейс для файлов JS, даже если они обрабатываются совершенно по-другому.

Полагаю, это работает так: при рендеринге шаблона Django проверяет запрошенная локаль, загружает соответствующий файл локализации и служит для шаблона, но JS, с другой стороны, служит статическим Джанго не анализирует медиа. Это оно?

Вы правы в первой части, про обработку шаблонов. Обработка JS работает, как я объяснил выше.

Обратите внимание, что механизм перевода JS Django, не обрабатывает переводы JS как статические файлы. Он использует представление Django для генерации файла JS каждый раз (javascript_catalog, упомянутое в документах, указанных в первой строке). Это одна из проблем, с которыми я столкнулся. Такие файлы не нужно создавать при каждом запросе. Есть некоторые проекты, которые фактически позволяют вам упаковать эти JS-переводы в виде статических файлов и позволяют правильно их кэшировать (например, django-mediagenerator ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...