django-cms language_chooser用那种语言

qdo*_*dot 5 django localization internationalization django-cms

来自多语言Django-CMS框架的典型language_chooser,显示如下语言:

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

English German Dutch
Run Code Online (Sandbox Code Playgroud)

如何更改此片段,将每种语言翻译成自己的原生形式,以便输出

English Deutsch Nederlands
Run Code Online (Sandbox Code Playgroud)

让人们更容易在页面上找到?

mko*_*nen 10

虽然@ mongoose_za的答案是彻底和有用的,但它回答了一个不同的问题而不是提出的问题.

真正的答案只是更改您的设置中的语言列表,以包括这些本机表单:

LANGUAGES = (
    ('de', u'Deutsch'),
    ('en', u'English'),
    ('nl', u'Nederlands'),
    ('es', u'Español'),
    ('fr', u'français'),
    ('jp', u'???'),
)
Run Code Online (Sandbox Code Playgroud)

我添加了一对,以使我们正在做的更明显.

由于您希望始终以原生方式显示语言,因此无需翻译它们,因此,不需要ugettext()包装器.您想确保设置文件中的第一行是:

# -*- coding: utf-8 -*-
Run Code Online (Sandbox Code Playgroud)

确保Python正确解释所有内容.

这个练习的一个很好的来源是:http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes


dar*_*ren 5

我认为这只是需要翻译的语言列表.然后您的上述代码段应该没问题.在列出语言的设置中,它应如下所示:

ugettext = lambda s: s

LANGUAGES = (
    ('de', ugettext('German')),
    ('en', ugettext('English')),
    ('nl', ugettext('Dutch')),
    )
Run Code Online (Sandbox Code Playgroud)

因为那时你会在你的locales文件中设置翻译的字符串,这些文件应该用你拥有的代码在模板上翻译.

我的更改语言如下所示:

{% 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>
Run Code Online (Sandbox Code Playgroud)

  • 我不认为这解决了这个问题.在LANGUAGES设置中翻译语言时,表示您将以当前活动语言显示所有语言.OP不希望这样.他希望始终以原生拼写显示语言. (2认同)