官方的django文档建议在settings.py中编写以下内容
ugettext = lambda s: s
LANGUAGES = (
('de', ugettext('German')),
('en', ugettext('English')),
)在这种安排下,django-admin.py makemessages仍然会查找并标记这些字符串进行翻译,但翻译不会在运行时发生--因此您必须记住在运行时使用语言的任何代码中将语言包装在真正的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>这里建议的解决方案是:Using settings.LANGUAGES with properly translated names using gettext()
显示任何语言上没有任何文本的空选择框
发布于 2011-05-20 16:31:46
以下代码适用于我:
// 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 %}https://stackoverflow.com/questions/6068898
复制相似问题