[FIX] web_translate_dialog: Translations were not generated, and then cannot be stored properly

pull/1836/head
Enric Tobella 2021-03-29 16:45:16 +02:00
parent 442ebe182e
commit 8360d8c8a3
2 changed files with 29 additions and 13 deletions

View File

@ -24,15 +24,15 @@ var TranslateDialog = Dialog.extend({
template: "TranslateDialog", template: "TranslateDialog",
init: function(parent, options) { init: function(parent, options) {
var title_string = _t("Translate fields: /"); var title_string = _t("Translate fields: /");
var field_names; var field_names = {};
var single_field = false; var single_field = false;
if (options.field){ if (options.field){
this.record_id = options.field.id; this.record_id = options.field.id;
var record = parent.model.get(options.field.id) var record = parent.model.get(options.field.id)
this.model = record.model; this.model = record.model;
field_names = [options.field.fieldName]; field_names[options.field.fieldName] = record.fields[options.field.fieldName];
single_field = true; single_field = true;
title_string = title_string.replace('/', field_names); title_string = title_string.replace('/', record.fields[options.field.fieldName].string);
} }
else { else {
this.record_id = parent.handle; this.record_id = parent.handle;
@ -65,11 +65,11 @@ var TranslateDialog = Dialog.extend({
}); });
}, },
get_translatable_fields: function(parent) { get_translatable_fields: function(parent) {
var field_list = []; var field_list = {};
_.each(parent.renderer.state.fields, function(field, name){ _.each(parent.renderer.state.fields, function(field, name){
var related_readonly = typeof field.related !== 'undefined' && field.readonly; var related_readonly = typeof field.related !== 'undefined' && field.readonly;
if (field.translate == true && !related_readonly && parent.renderer.state.getFieldNames().includes(name)){ if (field.translate == true && !related_readonly && parent.renderer.state.getFieldNames().includes(name)){
field_list.push(name); field_list[name] = field;
} }
}); });
return field_list; return field_list;
@ -116,10 +116,10 @@ var TranslateDialog = Dialog.extend({
}, },
set_maxlength: function(){ set_maxlength: function(){
// set maxlength if initial field has size attr // set maxlength if initial field has size attr
_.each(this.translatable_fields, function(field_name){ _.each(this.translatable_fields, function(field, name){
var size = $('[name='+field_name+']')[0].maxLength; var size = $('[name='+name+']')[0].maxLength;
if (size > 0){ 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); }, this);
}, },
@ -169,7 +169,10 @@ var TranslateDialog = Dialog.extend({
deferred = []; deferred = [];
this.$('.oe_translation_field').val('').removeClass('touched'); this.$('.oe_translation_field').val('').removeClass('touched');
var translatable_fields = []
_.forEach(this.translatable_fields, function(field, name) {
translatable_fields.push(name)
});
var def = $.Deferred(); var def = $.Deferred();
deferred.push(def); deferred.push(def);
rpc.query({ rpc.query({
@ -179,7 +182,7 @@ var TranslateDialog = Dialog.extend({
[this.res_id], [this.res_id],
], ],
kwargs: { kwargs: {
field_names: this.translatable_fields, field_names: translatable_fields,
}, },
}).done( }).done(
function (res) { function (res) {
@ -259,6 +262,7 @@ FormController.include({
}, },
on_button_translate: function() { on_button_translate: function() {
var self = this; var self = this;
var record = self.model.get(this.handle)
$.when(this.has_been_loaded).then(function() { $.when(this.has_been_loaded).then(function() {
self.open_translate_dialog(null, self.getSelectedIds()[0]); self.open_translate_dialog(null, self.getSelectedIds()[0]);
}); });
@ -273,8 +277,20 @@ BasicController.include({
_onTranslate: function(event) { _onTranslate: function(event) {
// the image next to the fields opens the translate dialog // the image next to the fields opens the translate dialog
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; var res_id = event.target.res_id ? event.target.res_id : event.target.state.res_id;
this.open_translate_dialog(event.data, res_id); self.open_translate_dialog(event.data, res_id);
})
}, },
}); });

View File

@ -18,7 +18,7 @@
</th> </th>
</tr> </tr>
<t t-foreach="widget.translatable_fields" t-as="field_name"> <t t-foreach="widget.translatable_fields" t-as="field_name">
<t t-set="field" t-value="widget.view.searchView.fields[field_name]" /> <t t-set="field" t-value="widget.translatable_fields[field_name]"/>
<tr t-att-data-field="field_name"> <tr t-att-data-field="field_name">
<td t-if="!widget.single_field" class="oe_form_frame_cell field_name" width="1%" nowrap="nowrap"> <td t-if="!widget.single_field" class="oe_form_frame_cell field_name" width="1%" nowrap="nowrap">
<label class="oe_label"><t t-esc="field.string"/>:</label> <label class="oe_label"><t t-esc="field.string"/>:</label>