最近在facebook上搞一个中国象棋的东西,国际化时(给台湾人用,大陆人被墙了),设置好按fb_sig_locale这个参数来决定显示语言,但django老是搞不定。按照网上的方案设计了一遍又一遍,有时显示的很好,但不久就报一个环境错误:
EnvironmentError: Environment variable DJANGO_SETTINGS_MODULE is undefined.
在网上搜过,没有完美的办法;据说是google的人在app engine的webapp里加django模板时,把里面的一些参数
修改过,看来似乎是没办法啦..
http://code.google.com/p/googleappengine/issues/detail?id=980 里有一个方案,说是把
os.environ参数设置好,放在所有其它django模块导入前就行了。我也试过,这种方法也是有时候行,有时候不行。
看着这个讨厌的错误,很烦,终于定下心来,找它的stack,发现好像是在language.activate时才报的错,那是不是
说只有在调用这个函数前,os的参数才被清空;那么,只要在调用这个函数前,我们再设置一次os参数,就能,呵呵?
试了几下,这个临时方案到现在似乎还没有报过类似的错,应该是解决了:)
包装成函数的话,就是这样子:
@param handle: the class of webapp.RequestHandler
@param lang: the string parsed from 'fb_sig_locale'
def setHandlerLocale(handle, lang):
os.environ['DJANGO_SETTINGS_MODULE'] = 'conf.settings'
translation.activate(lang)
lang = translation.get_language()
handle.request.LANGUAGE_CODE = lang
return lang