django-cms language_chooser на этом языке - PullRequest
5 голосов
/ 25 января 2012

Типичный language_chooser из многоязычной платформы Django-CMS, отображает такие языки:

<a href="{% page_language_url language.0 %}">{% trans language.1 %}</a>

English German Dutch

Как изменить этот фрагмент, чтобы перевести каждый язык в его собственную нативную форму, чтобы на выходе было

English Deutsch Nederlands

Облегчить ли людям поиск на странице?

Ответы [ 3 ]

10 голосов
/ 09 апреля 2013

Хотя ответ @ mongoose_za исчерпывающий и полезный, он отвечает на другой вопрос, а не на поставленный.

Реальный ответ - просто изменить список языков в настройках, включив эти родные формы как таковые:

LANGUAGES = (
    ('de', u'Deutsch'),
    ('en', u'English'),
    ('nl', u'Nederlands'),
    ('es', u'Español'),
    ('fr', u'français'),
    ('jp', u'日本語'),
)

Я добавил пару, чтобы было более понятно, что мы делаем.

Поскольку вы хотите всегда отображать языки в их родном виде, вам не нужно переводитьих, таким образом, нет необходимости в обертках ugettext ().Вы хотите убедиться, что первая строка в вашем файле настроек:

# -*- coding: utf-8 -*-

Чтобы все правильно интерпретировалось Python.

Отличный источник для этого упражнения здесь: http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes

5 голосов
/ 25 января 2012

Я думаю, что это просто список языков, которые нужно перевести. Тогда ваш фрагмент кода должен быть в порядке как есть. В ваших настройках, где вы указали свой язык, он должен выглядеть примерно так:

ugettext = lambda s: s

LANGUAGES = (
    ('de', ugettext('German')),
    ('en', ugettext('English')),
    ('nl', ugettext('Dutch')),
    )

Потому что тогда вы должны настроить переведенные строки в ваших файлах локалей, которые должны быть переведены в шаблон с кодом, который у вас есть.

Мой язык смены выглядит следующим образом:

{% load i18n %}
{% trans 'Change language' %}
<form action="/i18n/setlang/" method="post" style="display: inline;">{% csrf_token %}
    <div style="display: inline;">
        <select name="language" onchange="javascript:form.submit()">
            {% for lang in LANGUAGES %}
                <option value="{{ lang.0 }}"{% ifequal LANGUAGE_CODE lang.0 %} selected="selected"{% endifequal %}>{{ lang.1 }}</option>
            {% endfor %}
        </select>
    </div>
</form>
0 голосов
/ 01 июля 2015

Ответ mkoistinen - хорошее и простое решение.Однако это не позволяет использовать названия этих языков на любом другом языке, если вам когда-либо понадобится.

Другое решение - исправить ответ mongoose_za с помощью тега шаблона language (https://docs.djangoproject.com/en/1.8/topics/i18n/translation/#switching-language-in-templates)).переключаться на каждый язык для каждого <a>.

...