[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",
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
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;
this.open_translate_dialog(event.data, res_id);
self.open_translate_dialog(event.data, res_id);
})
},
});

View File

@ -18,7 +18,7 @@
</th>
</tr>
<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">
<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>