django-cms language_chooser用那种语言

时间:2012-01-25 05:52:18

标签: django localization internationalization django-cms

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

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

English German Dutch

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

English Deutsch Nederlands

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

3 个答案:

答案 0 :(得分:10)

虽然@ 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

答案 1 :(得分:5)

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

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>

答案 2 :(得分:0)

mkoistinen的答案是一个很好的简单解决方案。但是,如果您需要,可以使您无法使用任何其他语言的语言名称。

另一个解决方案是使用language模板代码(https://docs.djangoproject.com/en/1.8/topics/i18n/translation/#switching-language-in-templates)切换到每个<a>的每种语言来修复mongoose_za的答案。