Разберитесь с тегом trans template и makemessages
Я работал над тем, чтобы заставить i18n работать и иметь многоязычные версии моего сайта.
У меня есть несколько человек, любезно делающих переводы для меня, но, поскольку я столкнулся с несколькими проблемами, изучая Интернет, кажется, что некоторым людям трудно начинать с модулей интернационализации и локализации django.
Основные проблемы, с которыми я сталкивался до сих пор:
- Файлы django.po не обновляются при запуске django-admin.py makemessages -a
- При наличии языковых файлов при смене языка на веб-сайте не происходит никаких изменений, кроме тех, которые предварительно встроены в пакет django.†
- Представление 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 ответ
Кажется, я смог ответить на свой вопрос.
Там, где я обновлял свой перевод, раньше он находился вне дерева проекта в translations / locale, по какой-то причине у меня было сообщение о том, что он устарел и не мог сделать это таким образом, по какой-то причине теперь это изменилось и исправило проблема makemessages не обновляется правильно.
удалить #, нечеткие теги из переводов.
добавить LocaleMiddleware к MIDDLEWARE_CLASSES
Задача решена.