2011-03-02 73 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