官方 Django 文档建议在 settings.py 中编写以下内容:
这里提供的解决方案:使用gettext()和properly translated names配置settings.LANGUAGES 在任何语言下都会显示空的选择框,没有任何文本。
ugettext = lambda s: s
LANGUAGES = (
('de', ugettext('German')),
('en', ugettext('English')),
)
通过这种方式,django-admin.py makemessages 仍然能够找到并标记这些需要翻译的字符串,但是实际的翻译不会在运行时发生——因此你必须记得在任何使用 LANGUAGES 的代码中使用真正的 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>
这里提供的解决方案:使用gettext()和properly translated names配置settings.LANGUAGES 在任何语言下都会显示空的选择框,没有任何文本。