2011-03-02 74 views
0

問題我升級到Django 1.2,現在我得到這個錯誤消息,看起來與i18n相關。你能告訴我該怎麼辦?由於已經添加了新的import語句的代碼看起來像GAE + django 1.2

# let user choose authenticator   
     for p in openIdProviders: 
      p_name = p.split('.')[0] # take "AOL" from "AOL.com" 
      p_url = p.lower()  # "AOL.com" -> "aol.com" 
      loginmsg = loginmsg + '<a href="%s">%s</a> ' % (#'','') 
      #  users.create_login_url(federated_identity=p_url), p_name) 
        'google.com', p_name) 
     loginmsg = loginmsg + '<a href=\"%s\">%s</a>' % ('login',_("Log in")) 

,並在模板

<ul><li><a href="ai">{% trans "Add" %}</a></li> 
    <li><a href="li">{{ latest.modified|date:"d M" }}</a></li>     
<li>{% if user %}<a href="{{ user_url|fix_ampersands }}">{% trans "Log out" %}</a> 
{% else %}{% trans "Log in" %}{{loginmsg}}{% endif %}</li> 
</ul> 

領先的喜歡這裏的圖像視圖中的垃圾,其中預期後

global name '_' is not defined 
Traceback (most recent call last): 
    File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/__init__.py", line 515, in __call__ 
    handler.get(*groups) 
    File "/base/data/home/apps/classifiedsmarket/blobstore.348713784647505124/i18n.py", line 252, in get 
    loginmsg = loginmsg + '<a href=\"%s\">%s</a>' % ('login',_("Log in")) 
NameError: global name '_' is not defined 

UPDATE輸出是鏈接和按鈕。你能多告知一點嗎?由於

enter image description here

現在檢查的HTML看來,這件事情與escpae編碼。你能否告訴?

<ul><li><a href="ai">Add</a></li><li><a href="li">03 Mar</a></li>     

<li>Log in&lt;a href=&quot;google.com&quot;&gt;Google&lt;/a&gt; &lt;a href=&quot;google.com&quot;&gt;Yahoo&lt;/a&gt; &lt;a href=&quot;google.com&quot;&gt;MySpace&lt;/a&gt; &lt;a href=&quot;google.com&quot;&gt;AOL&lt;/a&gt; &lt;a href=&quot;login&quot;&gt;Log in&lt;/a&gt;</li> 

</ul> 

回答

2

發現此問題在Old Django 1.0 manual(我認爲App Engine的默認版本是0.98)。

這裏的答案:

標準翻譯:

Python的標準庫的gettext模塊安裝_()到全局命名空間,作爲gettext的()的別名。在Django中,我們選擇不遵循這種做法,原因如下:

對於國際字符集(Unicode)支持,ugettext()比gettext()更有用。有時,您應該使用ugettext_lazy()作爲特定文件的默認翻譯方法。如果在全局名稱空間中沒有_(),開發人員必須考慮哪個是最合適的翻譯功能。

下劃線字符(_)用於表示Python交互式shell和doctest測試中的「以前的結果」。安裝全局_()函數會導致干擾。顯式導入ugettext()作爲_()可以避免這個問題。

這就是爲什麼舊的工作,同時在Django 1.2,你需要指定:

from django.utils.translation import gettext_lazy as _ 

爲尼克拉斯 - [R建議。

+0

謝謝丹尼爾。我改成了像上面這樣的導入語句,但它仍然不起作用。我用更多的信息更新了這個問題,希望你能提供建議。 – 2011-03-03 03:41:00

+0

我會看看新的更新... – 2011-03-12 03:46:56

2

看起來你缺少

from django.utils.translation import gettext_lazy as _ 

,但我不知道它爲什麼在以前的版本工作。

+0

感謝您提供非常豐富的答案。 – 2011-03-03 02:50:16