Относительно blocktrans
, вы не понимаете, как это работает с передаваемыми значениями. Если у вас есть что-то вроде этого:
{% blocktrans with foo=bar %}-- {{ foo }} --{% endblocktrans %}
Это примерно эквивалентно любому из следующего в Python:
gettext('-- %(foo)s --') % {'foo': bar}
gettext('-- {foo} --').format(foo=bar)
Здесь важно то, что app.name
не будет переводиться. Передается дословно, после перевода. msgid
в каталоге перевода будет "-- %(foo)s --"
(потому что оно превращает его в формат Python для поиска перевода).
{% trans app.name %}
будет работать, но не будет вводить имена приложений в каталог перевода с manage.py makemessages
, потому что последний просто просматривает код, чтобы выяснить, что там, статически. Если вы сделаете что-то вроде gettext(app.name)
в своем коде Python, он не сможет решить, что он должен поместить в каталог, потому что он не оценил код, а просто проанализировал его статически.
Окончательное резюме заключается в том, что использование gettext_noop
является правильным способом отображения сообщений в каталоге переводов. makemessages
не пытается быть слишком умным для своего блага и оставляет это вам.
Относительно билета 3591 - это билет 1668 , который, хотя и устарел, вероятно, стоит того, чтобы его прочесть, если вы этого еще не сделали (возможно, вы уже сделали, как натолкнулись на 3591) .