Официальный django doc предлагает написать следующее в settings.py
ugettext = lambda s: s
LANGUAGES = (
('de', ugettext('German')),
('en', ugettext('English')),
)
При таком расположении makejssage django-admin.py все равно найдет и пометит эти строки для перевода, но перевод выигралЭто не происходит во время выполнения - так что вам нужно помнить, чтобы обернуть языки в настоящий ugettext () в любой код, который использует ЯЗЫКИ во время выполнения.
Но я не понимаю, куда обернуть кодс реальными тегами перевода?
например, мой код в шаблоне
<form id="locale_switcher" method="POST" action="{% url localeurl_change_locale %}">
<label><b>{% trans "Language" %}:</b></label>
<select name="locale" onchange="$('#locale_switcher').submit()">
{% for lang in LANGUAGES %}
<option value="{{ lang.0 }}" {% ifequal lang.0 LANGUAGE_CODE %}selected="selected"{% endifequal %}>
{{ lang.1 }}</option>
{% endfor %}
</select>
<noscript>
<input type="submit" value="Set" />
</noscript>
</form>
Предлагаемое здесь решение: Использование settings.LANGUAGES с правильно переведенными именами с использованием gettext ()
Показывает пустое поле выбора без текста на любом языке