2011-05-20 241 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