diff --git a/web_translate_dialog/static/src/js/web_translate_dialog.js b/web_translate_dialog/static/src/js/web_translate_dialog.js index 36d5f26cf..4b069b10a 100644 --- a/web_translate_dialog/static/src/js/web_translate_dialog.js +++ b/web_translate_dialog/static/src/js/web_translate_dialog.js @@ -24,15 +24,15 @@ var TranslateDialog = Dialog.extend({ template: "TranslateDialog", init: function(parent, options) { var title_string = _t("Translate fields: /"); - var field_names; + var field_names = {}; var single_field = false; if (options.field){ this.record_id = options.field.id; var record = parent.model.get(options.field.id) this.model = record.model; - field_names = [options.field.fieldName]; + field_names[options.field.fieldName] = record.fields[options.field.fieldName]; single_field = true; - title_string = title_string.replace('/', field_names); + title_string = title_string.replace('/', record.fields[options.field.fieldName].string); } else { this.record_id = parent.handle; @@ -65,11 +65,11 @@ var TranslateDialog = Dialog.extend({ }); }, get_translatable_fields: function(parent) { - var field_list = []; + var field_list = {}; _.each(parent.renderer.state.fields, function(field, name){ var related_readonly = typeof field.related !== 'undefined' && field.readonly; if (field.translate == true && !related_readonly && parent.renderer.state.getFieldNames().includes(name)){ - field_list.push(name); + field_list[name] = field; } }); return field_list; @@ -116,10 +116,10 @@ var TranslateDialog = Dialog.extend({ }, set_maxlength: function(){ // set maxlength if initial field has size attr - _.each(this.translatable_fields, function(field_name){ - var size = $('[name='+field_name+']')[0].maxLength; + _.each(this.translatable_fields, function(field, name){ + var size = $('[name='+name+']')[0].maxLength; if (size > 0){ - this.$('input.oe_translation_field[name$="'+field_name+'"], textarea.oe_translation_field[name$="'+field_name+'"]').attr('maxlength', size); + this.$('input.oe_translation_field[name$="'+field_name+'"], textarea.oe_translation_field[name$="'+name+'"]').attr('maxlength', size); } }, this); }, @@ -169,7 +169,10 @@ var TranslateDialog = Dialog.extend({ deferred = []; this.$('.oe_translation_field').val('').removeClass('touched'); - + var translatable_fields = [] + _.forEach(this.translatable_fields, function(field, name) { + translatable_fields.push(name) + }); var def = $.Deferred(); deferred.push(def); rpc.query({ @@ -179,7 +182,7 @@ var TranslateDialog = Dialog.extend({ [this.res_id], ], kwargs: { - field_names: this.translatable_fields, + field_names: translatable_fields, }, }).done( function (res) { @@ -259,6 +262,7 @@ FormController.include({ }, on_button_translate: function() { var self = this; + var record = self.model.get(this.handle) $.when(this.has_been_loaded).then(function() { self.open_translate_dialog(null, self.getSelectedIds()[0]); }); @@ -273,8 +277,20 @@ BasicController.include({ _onTranslate: function(event) { // the image next to the fields opens the translate dialog - var res_id = event.target.res_id ? event.target.res_id : event.target.state.res_id; - this.open_translate_dialog(event.data, res_id); + event.stopPropagation(); + var self = this; + var record = this.model.get(event.data.id, {raw: true}); + this._rpc({ + route: '/web/dataset/call_button', + params: { + model: 'ir.translation', + method: 'translate_fields', + args: [record.model, record.res_id, event.data.fieldName, record.getContext()], + } + }).then(function () { + var res_id = event.target.res_id ? event.target.res_id : event.target.state.res_id; + self.open_translate_dialog(event.data, res_id); + }) }, }); diff --git a/web_translate_dialog/static/src/xml/base.xml b/web_translate_dialog/static/src/xml/base.xml index 3306c7e42..221f4e212 100644 --- a/web_translate_dialog/static/src/xml/base.xml +++ b/web_translate_dialog/static/src/xml/base.xml @@ -18,7 +18,7 @@ - +