Если makemessages Django не видит нужных строк
А бывает так: только-только человек приготовился локализовать своё приложение для Django, а тут на тебе — makemessages в упор не видит некоторые строки.
Прежде всего, нужно вспомнить, что в Django существует с десяток функций для пометки строк, назначенных к переводу, самые известные из которых, пожалуй, gettext_lazy и ngettext_lazy. И вполне нормально, когда вы используете сразу несколько.
Проблемы могут возникнуть если попытаться импортировать функции под другими именами.
Присвоить-то вы присвоите, только такую пометку команда
А причина вот в чём — https://github.com/<...>makemessages.py
Команда использует утилиту
«Позвольте!» — скажете вы, так ведь и *_* там тоже нет. Это верно: там подчерка нет. Однако о нём
То есть, сэкономить на символах не выйдет, придётся вернуть ungettext_lazy.
Проблемы могут возникнуть если попытаться импортировать функции под другими именами.
from django.utils.translation import ugettext_lazy as _ # Классика.
# А теперь для краткости присвоим псевдоним ungettext_lazy:
from django.utils.translation import ungettext_lazy as _n
Присвоить-то вы присвоите, только такую пометку команда
makemessages
не поймёт, и не сможет собрать для вас .po-файл. А причина вот в чём — https://github.com/<...>makemessages.py
Команда использует утилиту
xgettext
, и по ссылке видно, что этой утилите передаются ключевые слова, которые должны служить маркером строк для перевода. Само собой, среди этих слов нашего _n нет.«Позвольте!» — скажете вы, так ведь и *_* там тоже нет. Это верно: там подчерка нет. Однако о нём
xgettext
знает и сам.For Python: gettext, ugettext, dgettext:2, ngettext:1,2, ungettext:1,2, dngettext:2,3, _.
То есть, сэкономить на символах не выйдет, придётся вернуть ungettext_lazy.
На заметку
Зарегистрированные пользователи могут получать еженедельный дайджест обновлений на сайте.