来自多语言Django-CMS框架的典型language_chooser,显示如下语言:
<a href="{% page_language_url language.0 %}">{% trans language.1 %}</a>
English German Dutch
如何更改此代码段,将每种语言翻译成自己的原生形式,以便输出
English Deutsch Nederlands
让人们更容易在网页上找到它?
答案 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的答案。