这是我的工作-
我有一个基本请求处理程序,所有请求处理程序都继承自该请求处理程序,然后在这里有一个包含可用语言的常量,并且我重写了init方法来为每个请求设置语言:
import webapp2from webapp2_extras import i18nAVAILABLE_LOCALES = ['en_GB', 'es_ES']class baseHandler(webapp2.RequestHandler): def __init__(self, request, response): """ Override the initialiser in order to set the language. """ self.initialize(request, response) # first, try and set locale from cookie locale = request.cookies.get('locale') if locale in AVAILABLE_LOCALES: i18n.get_i18n().set_locale(locale) else: # if that failed, try and set locale from accept language header header = request.headers.get('Accept-Language', '') # e.g. en-gb,en;q=0.8,es-es;q=0.5,eu;q=0.3 locales = [locale.split(';')[0] for locale in header.split(',')] for locale in locales: if locale in AVAILABLE_LOCALES: i18n.get_i18n().set_locale(locale) break else: # if still no locale set, use the first available one i18n.get_i18n().set_locale(AVAILABLE_LOCALES[0])首先,我检查cookie,然后检查标题,如果没有找到有效的语言,则默认使用第一种可用的语言。
要设置cookie,我有一个单独的控制器,看起来像这样:
import baseclass Index(base.baseHandler): """ Set the language cookie (if locale is valid), then redirect back to referrer """ def get(self, locale): if locale in self.available_locales: self.response.set_cookie('locale', locale, max_age = 15724800) # 26 weeks' worth of seconds # redirect to referrer or root url = self.request.headers.get('Referer', '/') self.redirect(url)因此,像www.example.com/locale/en_GB这样的URL会将语言环境更改为en_GB,设置cookie并返回引荐来源网址(这具有能够在任何页面上切换语言并将其保留在同一页面上的优势。页)。
此方法未考虑标头中语言环境的部分匹配,例如“ en”而不是“
en_GB”,但由于我在应用程序中启用的语言列表是固定的(语言环境更改网址很难在页脚中编码),我不太担心。
高温超导



