diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py index 0379628fa1e..08c1851b85e 100644 --- a/addons/base/controllers/main.py +++ b/addons/base/controllers/main.py @@ -159,7 +159,7 @@ class WebClient(openerpweb.Controller): return r @openerpweb.jsonrequest - def translations(self, mods, lang): + def translations(self, req, mods, lang): transs = {} for addon_name in mods: transl = {"messages":[]} @@ -175,7 +175,7 @@ class WebClient(openerpweb.Controller): for x in po: if x.id: transl["messages"].append({'id': x.id, 'string': x.string}) - return transs + return {"modules": transs} class Database(openerpweb.Controller): diff --git a/addons/base/static/src/js/boot.js b/addons/base/static/src/js/boot.js index 2791bf2bc27..3d1d1e75e7c 100644 --- a/addons/base/static/src/js/boot.js +++ b/addons/base/static/src/js/boot.js @@ -53,7 +53,6 @@ *---------------------------------------------------------*/ openerp.base = function(instance) { - openerp.base._t = function(x) { return x; }; openerp.base.core(instance); openerp.base.formats(instance); openerp.base.chrome(instance); diff --git a/addons/base/static/src/js/core.js b/addons/base/static/src/js/core.js index c8647170ba5..2c1bcb3e76d 100644 --- a/addons/base/static/src/js/core.js +++ b/addons/base/static/src/js/core.js @@ -563,6 +563,38 @@ openerp.base.OldWidget = openerp.base.Widget.extend({ } }); +openerp.base.TranslationDataBase = openerp.base.Class.extend({ + init: function() { + this.db = {}; + }, + set_bundle: function(translation_bundle) { + var self = this; + this.db = {}; + _.each(translation_bundle.modules, function(mod, name) { + var tmp = self.db[name] = {}; + _.each(mod.messages, function(message) { + tmp[message.id] = message.string; + }); + }); + }, + build_translation_function: function(addon_name) { + var self = this; + var fcnt = function(str) { + var tmp = self.get(addon_name, str); + return tmp === undefined ? str : tmp; + } + fcnt.database = this; + return fcnt; + }, + get: function(addon_name, key) { + if (this.db[addon_name] && this.db[addon_name].messages[key]) + this.db[addon_name].message[key]; + return undefined; + } +}); + +openerp.base._t = new openerp.base.TranslationDataBase().build_translation_function(); + openerp.base.Session = openerp.base.CallbackEnabled.extend( /** @lends openerp.base.Session# */{ /** * @constructs @@ -786,15 +818,19 @@ openerp.base.Session = openerp.base.CallbackEnabled.extend( /** @lends openerp.b var self = this; this.rpc('/base/session/modules', {}, function(result) { self.module_list = result; - var modules = self.module_list.join(','); - if(self.debug || true) { - self.rpc('/base/webclient/csslist', {"mods": modules}, self.do_load_css); - self.rpc('/base/webclient/jslist', {"mods": modules}, self.do_load_js); - } else { - self.do_load_css(["/base/webclient/css?mods="+modules]); - self.do_load_js(["/base/webclient/js?mods="+modules]); - } - openerp._modules_loaded = true; + self.rpc('/base/webclient/translations', {mods: ["base"].concat(result), lang: "fr"}) + .then(function(transs) { + openerp.base._t.database.set_bundle(transs); + var modules = self.module_list.join(','); + if(self.debug || true) { + self.rpc('/base/webclient/csslist', {"mods": modules}, self.do_load_css); + self.rpc('/base/webclient/jslist', {"mods": modules}, self.do_load_js); + } else { + self.do_load_css(["/base/webclient/css?mods="+modules]); + self.do_load_js(["/base/webclient/js?mods="+modules]); + } + openerp._modules_loaded = true; + }); }); }, do_load_css: function (files) { @@ -832,6 +868,7 @@ openerp.base.Session = openerp.base.CallbackEnabled.extend( /** @lends openerp.b openerp[mod] = {}; // init module mod if(openerp._openerp[mod] != undefined) { + openerp._openerp[mod]._T = openerp.base._t.database.build_translation_function(mod); openerp._openerp[mod](openerp); this.module_loaded[mod] = true; }