diff --git a/addons/web/static/src/js/core/session.js b/addons/web/static/src/js/core/session.js index c98ff7fbe9a..c21a855bab5 100644 --- a/addons/web/static/src/js/core/session.js +++ b/addons/web/static/src/js/core/session.js @@ -87,14 +87,19 @@ var Session = core.Class.extend(mixins.EventDispatcherMixin, { * Init a session, reloads from cookie, if it exists */ session_init: function () { - var def = this.session_reload(); - if (this.is_frontend) return def; - var self = this; + var def = this.session_reload(); + + if (this.is_frontend) { + return def.then(function () { + return self.load_translations(); + }); + } + return def.then(function () { var modules = self.module_list.join(','); var deferred = self.load_qweb(modules); - if(self.session_is_valid()) { + if (self.session_is_valid()) { return deferred.then(function () { return self.load_modules(); }); } return $.when( @@ -217,7 +222,7 @@ var Session = core.Class.extend(mixins.EventDispatcherMixin, { }); }, load_translations: function () { - return _t.database.load_translations(this, this.module_list, this.user_context.lang); + return _t.database.load_translations(this, this.module_list, this.user_context.lang, this.translationURL); }, load_css: function (files) { var self = this; diff --git a/addons/web/static/src/js/core/translation.js b/addons/web/static/src/js/core/translation.js index f2bad0db4ee..fae44774a07 100644 --- a/addons/web/static/src/js/core/translation.js +++ b/addons/web/static/src/js/core/translation.js @@ -57,11 +57,12 @@ var TranslationDataBase = Class.extend(/** @lends instance.TranslationDataBase# it will default to all the modules installed in the current database. @param {Object} [lang] lang The language. If not specified it will default to the language of the current user. + @param {string} [url='/web/webclient/translations'] @returns {jQuery.Deferred} */ - load_translations: function(session, modules, lang) { + load_translations: function(session, modules, lang, url) { var self = this; - return session.rpc('/web/webclient/translations', { + return session.rpc(url || '/web/webclient/translations', { "mods": modules || null, "lang": lang || null }).done(function(trans) { diff --git a/addons/web_editor/static/src/js/base.js b/addons/web_editor/static/src/js/base.js index 4368f6de274..a241905c631 100644 --- a/addons/web_editor/static/src/js/base.js +++ b/addons/web_editor/static/src/js/base.js @@ -1,10 +1,8 @@ odoo.define('web_editor.base', function (require) { "use strict"; -var core = require('web.core'); var ajax = require('web.ajax'); -var qweb = core.qweb; -var _t = core._t; +var session = require('web.session'); var get_context = function (dict) { var html = document.documentElement; @@ -17,59 +15,21 @@ var get_context = function (dict) { var data = { 'get_context': get_context, - 'url_translations': '/web/webclient/translations', }; var dom_ready = $.Deferred(); $(document).ready(function () { dom_ready.resolve(data); // fix for ie - if($.fn.placeholder) $('input, textarea').placeholder(); + if ($.fn.placeholder) $('input, textarea').placeholder(); }); data.dom_ready = dom_ready; // todo: remove and load a bundle of translated templates -var all_ready; data.ready = function () { - if (!all_ready) { - all_ready = $.when(dom_ready, ajax.loadXML()).then(function () { - // TODO find a better way to find if we are in the backend or not - // We don't load translation if we are in the backend since it's already done by the webclient - if (!$(document).find('.o_web_client').length) { - return load_translations(); - } - }); - } else if(all_ready.state() === "resolved") { // can add async template - all_ready = $.when(dom_ready, ajax.loadXML()); - } - return all_ready; + return $.when(dom_ready, session.is_bound, ajax.loadXML()); }; -function load_translations() { - function translate_node(node) { - if(node.nodeType === 3) { // TEXT_NODE - if(node.nodeValue.match(/\S/)) { - var space = node.nodeValue.match(/^([\s]*)([\s\S]*?)([\s]*)$/); - node.nodeValue = space[1] + $.trim(_t(space[2])) + space[3]; - } - } - else if(node.nodeType === 1 && node.hasChildNodes()) { // ELEMENT_NODE - _.each(node.childNodes, translate_node); - } - } - return ajax.jsonRpc(data.url_translations, 'call', { - 'mods': ['web_editor'], - 'lang': data.get_context().lang - }) - .then(function (trans) { - _t.database.set_bundle(trans); - }).then(function () { - var keys = _.keys(qweb.templates); - for (var i = 0; i < keys.length; i++) { - translate_node(qweb.templates[keys[i]]); - } - }).promise(); -} return dom_ready; }); diff --git a/addons/web_editor/views/iframe.xml b/addons/web_editor/views/iframe.xml index b73611f545a..2b1c4209e58 100644 --- a/addons/web_editor/views/iframe.xml +++ b/addons/web_editor/views/iframe.xml @@ -20,6 +20,7 @@ is_superuser: , is_frontend: true, // this is not really the frontend here but this key is used to detect if xml has to be manually loaded }, + _modules: ['web_editor'], }; diff --git a/addons/website/controllers/main.py b/addons/website/controllers/main.py index e0eb3c34c3a..acc5e75a4d4 100644 --- a/addons/website/controllers/main.py +++ b/addons/website/controllers/main.py @@ -280,7 +280,7 @@ class Website(Home): def get_website_translations(self, lang, mods=None): Modules = request.env['ir.module.module'].sudo() modules = Modules.search([ - ('name', 'ilike', 'website'), + '|', ('name', 'ilike', 'website'), ('name', '=', 'web_editor'), ('state', '=', 'installed') ]).mapped('name') if mods: diff --git a/addons/website/static/src/js/website.js b/addons/website/static/src/js/website.js index 8324e7457ac..bf819b5664a 100644 --- a/addons/website/static/src/js/website.js +++ b/addons/website/static/src/js/website.js @@ -11,7 +11,6 @@ odoo.define('website.website', function (require) { var qweb = core.qweb; var _t = core._t; - base.url_translations = '/website/translations'; /* --- Set the browser into the dom for css selectors --- */ var browser; diff --git a/addons/website/views/website_templates.xml b/addons/website/views/website_templates.xml index cf5ba00df04..4bf165d3abe 100644 --- a/addons/website/views/website_templates.xml +++ b/addons/website/views/website_templates.xml @@ -132,6 +132,7 @@ is_superuser: , is_system: , is_frontend: true, + translationURL: '/website/translations', is_website_user: , user_id: };