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

pull/1974/head
Enric Tobella 2021-03-29 16:45:16 +02:00
parent e9aea87272
commit 60a11c95d9
2 changed files with 36 additions and 18 deletions

View File

@ -22,15 +22,19 @@ odoo.define("web_translate_dialog.translate_dialog", function(require) {
template: "TranslateDialog",
init: function(parent, options) {
var title_string = _t("Translate fields: /");
var field_names = false;
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;
this.model = parent.modelName;
@ -60,7 +64,7 @@ odoo.define("web_translate_dialog.translate_dialog", function(require) {
});
},
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;
@ -69,7 +73,7 @@ odoo.define("web_translate_dialog.translate_dialog", function(require) {
!related_readonly &&
parent.renderer.state.getFieldNames().includes(name)
) {
field_list.push(name);
field_list[name] = field;
}
});
return field_list;
@ -126,14 +130,14 @@ odoo.define("web_translate_dialog.translate_dialog", function(require) {
// Set maxlength if initial field has size attr
_.each(
this.translatable_fields,
function(field_name) {
var size = $("[name=" + field_name + "]")[0].maxLength;
function(field, name) {
var size = $("[name=" + name + "]")[0].maxLength;
if (size > 0) {
this.$(
'input.oe_translation_field[name$="' +
field_name +
name +
'"], textarea.oe_translation_field[name$="' +
field_name +
name +
'"]'
).attr("maxlength", size);
}
@ -199,6 +203,10 @@ odoo.define("web_translate_dialog.translate_dialog", function(require) {
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);
@ -207,7 +215,7 @@ odoo.define("web_translate_dialog.translate_dialog", function(require) {
method: "get_field_translations",
args: [[this.res_id]],
kwargs: {
field_names: this.translatable_fields,
field_names: translatable_fields,
},
}).then(function(res) {
if (res[self.res_id]) {
@ -299,10 +307,23 @@ odoo.define("web_translate_dialog.translate_dialog", function(require) {
_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],
kwargs: {context: 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);
});
},
});

View File

@ -29,10 +29,7 @@
</th>
</tr>
<t t-foreach="widget.translatable_fields" t-as="field_name">
<t
t-set="field"
t-value="widget.view.renderer.state.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"