From fa16b8910efd576746fbcdece9eaa0bfbe9499b0 Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Mon, 12 Nov 2012 19:10:33 +0100 Subject: [PATCH] [ADD] req.lang property to get preferred lang for the current request bzr revid: chs@openerp.com-20121112181033-b17zj2io47me04kk --- addons/web/controllers/main.py | 4 +--- addons/web/http.py | 24 +++++++++++++++++++++++- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py index 42731c5aa3c..ffabe97661b 100644 --- a/addons/web/controllers/main.py +++ b/addons/web/controllers/main.py @@ -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: diff --git a/addons/web/http.py b/addons/web/http.py index 1a636971fb5..65111cd6775 100644 --- a/addons/web/http.py +++ b/addons/web/http.py @@ -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.