2011-03-02 6 views
0

django 1.2로 업그레이드했는데 이제 i18n과 관련된이 오류 메시지가 나타납니다. 내가 뭘해야하는지 말해 줄 수 있니? 감사GAE + django의 문제점 1.2

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 코드가 예상 한 위치에

# 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> 

에 보이는 새 import 문을 추가 한 후 출력은 링크와 버튼입니다. 좀 더 알려줄 수 있니?

enter image description here

감사

는 지금은 그것이 escpae 코딩 뭔가 있다고 표시되는 HTML을 검사. 말할 수 있니? 당신이
from django.utils.translation import gettext_lazy as _ 

누락처럼

<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이라고 생각합니다.)

표준 번역 :

가 여기에 대답 gettext에 대한 별칭으로,

파이썬의 표준 라이브러리의 gettext 모듈이 설치 _() 글로벌 네임 스페이스에(). Django에서는 다음과 같은 두 가지 이유로이 방법을 따르지 않기로 결정했습니다.

국제 문자 집합 (유니 코드) 지원의 경우 ugettext()가 gettext()보다 유용합니다. 경우에 따라 특정 파일의 기본 변환 방법으로 ugettext_lazy()를 사용해야합니다. 전역 네임 스페이스에서 _()가 없으면 개발자는 가장 적합한 변환 함수가 무엇인지 생각해야합니다.

밑줄 문자 (_)는 파이썬의 대화 형 쉘 및 doctest 테스트에서 "이전 결과"를 나타내는 데 사용됩니다. 전역 _() 함수를 설치하면 간섭이 발생합니다. ugettext()를 _()로 명시 적으로 가져 오면이 문제를 피할 수 있습니다. 니클라스 R이 제안

from django.utils.translation import gettext_lazy as _ 

: 예전 작동하는 이유

한편 장고 1.2 당신은 지정해야합니다.

+0

다니엘 감사합니다. 위와 같은 import 문으로 변경되었지만 여전히 작동하지 않습니다. 나는 당신이 조언을 할 수 있기를 바란다. –

+0

새 업데이트를 살펴 보겠습니다 ... –

2

이 보이지만 나는 이전 버전에서 일을 왜 아무 생각이 없습니다.

+0

매우 유익한 답변에 감사드립니다. –