summaryrefslogtreecommitdiff
path: root/addons/web
diff options
context:
space:
mode:
authorChristophe Simonis <chs@openerp.com>2012-11-12 19:10:33 +0100
committerChristophe Simonis <chs@openerp.com>2012-11-12 19:10:33 +0100
commitfa16b8910efd576746fbcdece9eaa0bfbe9499b0 (patch)
tree60ba51666e1a795b119d05b6da78e2247f48bff0 /addons/web
parent40734fc4c469be2f58a664a93377ecf6c22386e6 (diff)
[ADD] req.lang property to get preferred lang for the current request
bzr revid: chs@openerp.com-20121112181033-b17zj2io47me04kk
Diffstat (limited to 'addons/web')
-rw-r--r--addons/web/controllers/main.py4
-rw-r--r--addons/web/http.py24
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.