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(); },