[ADD] req.lang property to get preferred lang for the current request

bzr revid: chs@openerp.com-20121112181033-b17zj2io47me04kk
This commit is contained in:
Christophe Simonis
2012-11-12 19:10:33 +01:00
parent 40734fc4c4
commit fa16b8910e
2 changed files with 24 additions and 4 deletions
+1 -3
View File
@@ -691,12 +691,10 @@ class WebClient(openerpweb.Controller):
until we have established a valid session. This is meant only
for translating the login page and db management chrome, using
the browser's language. """
lang = req.httprequest.accept_languages.best or 'en'
# For performance reasons we only load a single translation, so for
# sub-languages (that should only be partially translated) we load the
# main language PO instead - that should be enough for the login screen.
if '-' in lang: # RFC2616 uses '-' separators for sublanguages
lang = lang.split('-')[0]
lang = req.lang.split('_')[0]
translations_per_module = {}
for addon_name in mods:
+23 -1
View File
@@ -21,6 +21,7 @@ import urlparse
import uuid
import xmlrpclib
from babel.core import LOCALE_ALIASES
import simplejson
import werkzeug.contrib.sessions
import werkzeug.datastructures
@@ -93,7 +94,28 @@ class WebRequest(object):
if not self.session:
self.httpsession[self.session_id] = self.session = session.OpenERPSession()
self.context = self.params.pop('context', None)
self.debug = self.params.pop('debug', False) != False
self.debug = self.params.pop('debug', False) is not False
self._params_lang = self.params.pop('lang')
@property
def lang(self):
if not hasattr(self, '_lang'):
lang = self._params_lang
if lang is None:
lang = self.httprequest.cookies.get('lang')
if lang is None:
context = self.session.eval_context(self.context)
lang = context.get('lang')
if lang is None:
lang = self.httprequest.accept_languages.best
if lang is None:
lang = 'en_US'
lang = LOCALE_ALIASES.get(lang, lang)
lang = lang.replace('-', '_') # RFC2616 uses '-' separators for sublanguages
self._lang = lang
return self._lang
class JsonRequest(WebRequest):
""" JSON-RPC2 over HTTP.