Джанго-перевод: Как переводить языки - PullRequest
4 голосов
/ 20 мая 2011

Официальный 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 ()

Показывает пустое поле выбора без текста на любом языке

1 Ответ

1 голос
/ 20 мая 2011

У меня работает следующий код:

// settings.py
ugettext = lambda s:s
LANGUAGES = (
    ('de', ugettext('German')),
    ('en', ugettext('English')),
)

// template
{% load i18n %}
{% get_available_languages as LANGUAGES %}

{% for LANGUAGE in LANGUAGES %}
    <p>{{ LANGUAGE.0 }} - {{ LANGUAGE.1 }}</p>
{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...