diff options
Diffstat (limited to 'addons/web/static/src/js/framework/translation.js')
| -rw-r--r-- | addons/web/static/src/js/framework/translation.js | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/addons/web/static/src/js/framework/translation.js b/addons/web/static/src/js/framework/translation.js new file mode 100644 index 00000000000..6f44a57b275 --- /dev/null +++ b/addons/web/static/src/js/framework/translation.js @@ -0,0 +1,98 @@ + +odoo.define('web.translation', ['web.Class', 'qweb'], function (require) { +"use strict"; + +var Class = require('web.Class'); + +var qweb = require('qweb'); + + +var TranslationDataBase = Class.extend(/** @lends instance.TranslationDataBase# */{ + init: function() { + this.db = {}; + this.parameters = {"direction": 'ltr', + "date_format": '%m/%d/%Y', + "time_format": '%H:%M:%S', + "grouping": [], + "decimal_point": ".", + "thousands_sep": ","}; + }, + set_bundle: function(translation_bundle) { + var self = this; + this.db = {}; + var modules = _.keys(translation_bundle.modules); + modules.sort(); + if (_.include(modules, "web")) { + modules = ["web"].concat(_.without(modules, "web")); + } + _.each(modules, function(name) { + self.add_module_translation(translation_bundle.modules[name]); + }); + if (translation_bundle.lang_parameters) { + this.parameters = translation_bundle.lang_parameters; + if (typeof(py) !== "undefined") { + this.parameters.grouping = py.eval(this.parameters.grouping); + } + } + }, + add_module_translation: function(mod) { + var self = this; + _.each(mod.messages, function(message) { + self.db[message.id] = message.string; + }); + }, + build_translation_function: function() { + var self = this; + var fcnt = function(str) { + var tmp = self.get(str); + return tmp === undefined ? str : tmp; + }; + fcnt.database = this; + return fcnt; + }, + get: function(key) { + return this.db[key]; + }, + /** + Loads the translations from an OpenERP server. + + @param {openerp.Session} session The session object to contact the server. + @param {Array} [modules] The list of modules to load the translation. If not specified, + 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. + @returns {jQuery.Deferred} + */ + load_translations: function(session, modules, lang) { + var self = this; + return session.rpc('/web/webclient/translations', { + "mods": modules || null, + "lang": lang || null + }).done(function(trans) { + self.set_bundle(trans); + }); + } +}); + +var _t = new TranslationDataBase().build_translation_function(); +var _lt = function (s) { + return {toString: function () { return _t(s); }}; +}; + +// provide timeago.js with our own translator method +$.timeago.settings.translator = _t; + +qweb.default_dict = { + '_' : _, + 'JSON': JSON, + '_t' : _t, +}; + +return { + _t: _t, + _lt: _lt, + TranslationDataBase: TranslationDataBase, +}; + +}); + |
