From 1cbf48417ec4909bfa0f0bb1f6c1206111d26c83 Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Thu, 27 Nov 2014 17:18:46 +0100 Subject: [PATCH] [FIX] translate: lang detection fallback actually falls back For instance, when a context was passed to a method, but no lang was defined in the context, it did not tried to fallback to other places where we could have find the user language. --- openerp/tools/translate.py | 45 ++++++++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/openerp/tools/translate.py b/openerp/tools/translate.py index 4a75e7f..7bf1470 100644 --- a/openerp/tools/translate.py +++ b/openerp/tools/translate.py @@ -195,26 +195,31 @@ class GettextAlias(object): def _get_lang(self, frame): # try, in order: context.get('lang'), kwargs['context'].get('lang'), # self.env.lang, self.localcontext.get('lang') - if 'context' in frame.f_locals: - return frame.f_locals['context'].get('lang') - kwargs = frame.f_locals.get('kwargs', {}) - if 'context' in kwargs: - return kwargs['context'].get('lang') - s = frame.f_locals.get('self') - if hasattr(s, 'env'): - return s.env.lang - if hasattr(s, 'localcontext'): - return s.localcontext.get('lang') - # Last resort: attempt to guess the language of the user - # Pitfall: some operations are performed in sudo mode, and we - # don't know the originial uid, so the language may - # be wrong when the admin language differs. - pool = getattr(s, 'pool', None) - (cr, dummy) = self._get_cr(frame, allow_create=False) - uid = self._get_uid(frame) - if pool and cr and uid: - return pool['res.users'].context_get(cr, uid)['lang'] - return None + lang = None + if frame.f_locals.get('context'): + lang = frame.f_locals['context'].get('lang') + if not lang: + kwargs = frame.f_locals.get('kwargs', {}) + if kwargs.get('context'): + lang = kwargs['context'].get('lang') + if not lang: + s = frame.f_locals.get('self') + if hasattr(s, 'env'): + lang = s.env.lang + if not lang: + if hasattr(s, 'localcontext'): + lang = s.localcontext.get('lang') + if not lang: + # Last resort: attempt to guess the language of the user + # Pitfall: some operations are performed in sudo mode, and we + # don't know the originial uid, so the language may + # be wrong when the admin language differs. + pool = getattr(s, 'pool', None) + (cr, dummy) = self._get_cr(frame, allow_create=False) + uid = self._get_uid(frame) + if pool and cr and uid: + lang = pool['res.users'].context_get(cr, uid)['lang'] + return lang def __call__(self, source): res = source -- 1.7.10.4