2011-05-20 162 views
4

的officual Django的文档建议写在settings.pyDjango的翻译:如何翻译语言

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> 

解决方案这里建议:Using settings.LANGUAGES with properly translated names using gettext()

显示空的选择框,没有任何文字上的任何laguage

回答

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 %} 
+0

对我来说它不会运行$ python manage.py runserver 错误:在包含'manage.py'的目录中找不到'settings.py' 。看起来你已经定制了一些东西。 您必须运行django-admin.py,将您的设置模块传递给它。 (如果文件settings.py确实存在,它会导致一个ImportError ) – 2011-05-20 08:47:15

+0

我觉得这行django.utils.translation导入ugettext导致错误,因为它在文档 – 2011-05-20 08:54:08

+0

中解释刚刚添加了{%get_available_languages作为语言%} 我prev代码,它的工作原理: - \ – 2011-05-20 09:08:14