[imp] added translation database

bzr revid: nicolas.vanhoren@openerp.com-20110812151736-ycx4jejdj0rpep5j
This commit is contained in:
niv-openerp 2011-08-12 17:17:36 +02:00
parent fb29f3a97e
commit eca2d44bba
3 changed files with 48 additions and 12 deletions

View File

@ -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):

View File

@ -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);

View File

@ -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;
}