Разберитесь с тегом trans template и makemessages

Я работал над тем, чтобы заставить i18n работать и иметь многоязычные версии моего сайта.

У меня есть несколько человек, любезно делающих переводы для меня, но, поскольку я столкнулся с несколькими проблемами, изучая Интернет, кажется, что некоторым людям трудно начинать с модулей интернационализации и локализации django.

Основные проблемы, с которыми я сталкивался до сих пор:

  1. Файлы django.po не обновляются при запуске django-admin.py makemessages -a
  2. При наличии языковых файлов при смене языка на веб-сайте не происходит никаких изменений, кроме тех, которые предварительно встроены в пакет django.†
  3. Представление i18n/setlang не работает.††

Теперь это только пункт 1, который я не решил. Во-первых, что делает makemessages не обновляемыми? Я использую -a для обновления всех ранее созданных файлов (de, da, fi), а fi - единственный языковой файл, к которому фактически добавлены переводы (в настоящее время остальные являются просто пустыми строками перевода)

† Теперь я решил номер 2. Кажется, что, когда makemessages создает файл.po, он делает это с нечетким тегом.

#, fuzzy

Согласно некоторым исследованиям, которые я провел, этот файл обрабатывается так, как будто он нуждается в обновлении, как опция no-op, которая поставляется с тегом trans.

{% trans "translation string" noop %}

После удаления #, нечеткой линии это решило эту проблему.

†† Я добавил номер 3 только для справки, поскольку сам решил это. Вы должны убедиться, что LocaleMiddleware присутствует в вашем MIDDLEWARE_CLASSES

MIDDLEWARE_CLASSES = (
    'django.middleware.locale.LocaleMiddleware',
) 

1 ответ

Решение

Кажется, я смог ответить на свой вопрос.

  1. Там, где я обновлял свой перевод, раньше он находился вне дерева проекта в translations / locale, по какой-то причине у меня было сообщение о том, что он устарел и не мог сделать это таким образом, по какой-то причине теперь это изменилось и исправило проблема makemessages не обновляется правильно.

  2. удалить #, нечеткие теги из переводов.

  3. добавить LocaleMiddleware к MIDDLEWARE_CLASSES

Задача решена.

Другие вопросы по тегам