From 27938877d5d7bcba970350e9d1960e49aa7d185c Mon Sep 17 00:00:00 2001 From: "vta vta@openerp.com" <> Date: Thu, 27 Dec 2012 14:25:30 +0100 Subject: [PATCH] [IMP] Improve code bzr revid: vta@openerp.com-20121227132530-2qrid9metzuuhqpo --- .../static/src/js/portal_anonymous.js | 28 ++++++++++++------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/addons/portal_anonymous/static/src/js/portal_anonymous.js b/addons/portal_anonymous/static/src/js/portal_anonymous.js index 44f599b9fb6..875268be196 100644 --- a/addons/portal_anonymous/static/src/js/portal_anonymous.js +++ b/addons/portal_anonymous/static/src/js/portal_anonymous.js @@ -3,16 +3,24 @@ openerp.portal_anonymous = function(instance) { instance.web.Session.include({ load_translations: function() { var self = this; - if (self.username === 'anonymous') { - self.user_context.lang = (navigator.language || navigator.userLanguage).replace('-', '_'); - if (self.user_context.lang.length === 2) { - return (new instance.web.Model('res.lang')).query(['code']) - .filter([['iso_code', '=', self.user_context.lang]]).all() - .then(function(result) { - self.user_context.lang = result[0].code; - return self._super(); - }); - } + // browser_lang can contain 'xx' or 'xx_XX' + // we use the 'xx' to find matching languages installed in the DB + var browser_lang = (navigator.language || navigator.userLanguage).replace('-', '_'); + // By default for anonymous session.user_context.lang === 'en_US', + // so do nothing if browser_lang is contained in 'en_US' (like 'en' or 'en_US') + if (this.username === 'anonymous' && this.user_context.lang.indexOf(browser_lang) === -1) { + return (new instance.web.Model('res.lang')).query(['code', 'iso_code']) + .filter([['code', 'like', browser_lang.substring(0, 2).toLowerCase()]]).all() + .then(function(langs) { + // If langs is empty (OpenERP doesn't support the language), + // then don't change session.user_context.lang else take the + // first returned language + if (langs.length > 0) { + self.user_context.lang = langs.sort(function(a, b) { + return a.length - b.length; + })[0].code; + } + }); } return self._super(); },