Django翻译:如何翻译语言

4
官方 Django 文档建议在 settings.py 中编写以下内容:
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

在任何语言下都会显示空的选择框,没有任何文本。
1个回答

1
以下代码对我来说可行:
// 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 %}

对我来说,$ python manage.py runserver无法运行。 错误:在包含'manage.py'的目录中找不到文件'settings.py'。看起来你已经自定义了一些东西。 你需要运行django-admin.py,并传递你的设置模块。 (如果确实存在settings.py文件,则会以某种方式导致ImportError。) - Oleg Tarasenko
我认为django.utils.translation中的这行代码"from django.utils.translation import ugettext"引起了错误,正如文档中所解释的那样。 - Oleg Tarasenko
刚刚在我的之前的代码中添加了 {% get_available_languages as LANGUAGES %},现在它可以正常工作了 :-\ - Oleg Tarasenko
哦,好的,我以为你会在某个地方包含像 {% load i18n %} 这样的行。 - BFil
3
根据文档:"永远不要在设置文件中导入django.utils.translation,因为该模块本身取决于设置,这将导致循环导入。" https://docs.djangoproject.com/en/dev//topics/i18n/deployment/ - Andriy Drozdyuk
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接