summaryrefslogtreecommitdiff
path: root/addons/base
diff options
context:
space:
mode:
Diffstat (limited to 'addons/base')
-rw-r--r--addons/base/controllers/main.py4
-rw-r--r--addons/base/static/src/js/boot.js1
-rw-r--r--addons/base/static/src/js/core.js55
3 files changed, 48 insertions, 12 deletions
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;
}