2012-06-05 3 views
1

나는 범주 목록을 가지고 있으므로 로캘별로 언어를 변경할 수 있도록 i18n과 함께 사용하고 싶습니다.webapp2에서 i18n으로 전역 설정을 할 수 있습니까?

from webapp2_extras import i18n 

category_list = {} 
category_list['bikes'] = {'value': i18n.gettext('CATEGORY_BIKES')} 

class CategoriesHandler(BaseHandler): 
    """List categories""" 
    def get(self, **kwargs): 
     """List all categories""" 
     self.response.write(self.json_output(category_list)) 

그리고 오류가 발생합니다 :

내 파이썬 코드는 다음과 같습니다 I 클래스의 get 메소드로 category_list를 이동하는 경우에는

File "/Users/user/Developer/GAE/project/CategoriesHandler.py", line 11, in <module> 
    category_list['bikes'] = {'value': i18n.gettext('CATEGORY_BIKES')} 
    File "/Users/user/Developer/GAE/project/webapp2_extras/i18n.py", line 713, in gettext 
    return get_i18n().gettext(string, **variables) 
    File "/Users/user/Developer/GAE/project/webapp2_extras/i18n.py", line 894, in get_i18n 
    request = request or webapp2.get_request() 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2/webapp2.py", line 1720, in get_request 
    assert getattr(_local, 'request', None) is not None, _get_request_error 
AssertionError: Request global variable is not set. 

을, 모든 것이 괜찮습니다.

class CategoriesHandler(BaseHandler): 
    """List categories""" 
    def get(self, **kwargs): 
     """List all categories""" 
     category_list = {} 
     category_list['bikes'] = {'value': i18n.gettext('CATEGORY_BIKES')} 
     self.response.write(self.json_output(category_list)) 
     pass 

문제는 코드를 쉽게 유지할 수 있도록 category_list를 다른 설정 파일로 분리해야한다는 것입니다. 이 문제를 해결할 방법이 있습니까? 감사!

답변

3

대신 gettext_lazy를 시도해보십시오. 나중에 번역 할 언어가 무엇인지 알 때까지 실제 번역 조회를하지 않습니다.

매우 일반적인 규칙은

from webapp2_extras.i18n import _lazy as _ 
category_list['bikes'] = {'value': _('CATEGORY_BIKES')} 
+0

훌륭한 답변입니다! 그건 내 문제를 해결 ..하지만 또 다른 문제가 있어요 : json.dumps()를 사용하여 category_list JSON 개체로 변환 할 필요가 있지만 ugettext_lazy 사용 후 category_list 더 이상 JSON serializable 될 것 같습니다. 이 문제를 해결할 방법이 있습니까? 어쨌든 귀하의 답변 주셔서 감사합니다! –

+1

기본 인수로 json.dumps에 전달하는 defaultencode 메소드를 작성하십시오. 객체에 전달 된 객체가 게으른 번역 객체인지 확인하고, 번역이 제대로 연결되면 str (객체) 또는 unicode (객체)를 수행합니다. – tesdal

+0

완벽한 답변! 나는 노력했다. 그리고 그것은 마술처럼 작동한다! 감사! –

관련 문제