[FIX] account_chart_update_multilang: proper translating of HTML fields

The algorithm to translate them is done by terms, which is a bit clunky for our use case.

However, since `account.fiscal.position.template`'s note field is Text, not Html, and that's the one we care about, we can predict that the Html version will just wrap it with a <p> tag.

Well, in short, it's ugly but works.

MT-7597
This commit is contained in:
Jairo Llopis
2024-11-01 15:13:39 +00:00
parent 512d1486e8
commit 1bb3630fb5
2 changed files with 31 additions and 11 deletions

View File

@@ -8,10 +8,11 @@
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $
:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
Despite the name, some widely supported CSS2 features are used.
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
@@ -274,7 +275,7 @@ pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: grey; } /* line numbers */
pre.code .ln { color: gray; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
@@ -300,7 +301,7 @@ span.option {
span.pre {
white-space: pre }
span.problematic {
span.problematic, pre.problematic {
color: red }
span.section-subtitle {
@@ -434,7 +435,9 @@ If you spotted it first, help us to smash it by providing a detailed and welcome
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-7">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
<a class="reference external image-reference" href="https://odoo-community.org">
<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
</a>
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.</p>

View File

@@ -1,28 +1,45 @@
# Copyright 2024 Moduon Team S.L.
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl-3.0)
from odoo import models
from odoo import fields, models
from odoo.tools import ormcache
class WizardUpdateChartsAccount(models.TransientModel):
_inherit = "wizard.update.charts.accounts"
lang = fields.Selection(default="en_US")
@ormcache("self.lang")
def _other_langs(self):
return self.env["res.lang"].search([("code", "!=", self.lang)]).mapped("code")
def _get_lang_selection_options(self):
"""Only can translate in base language by default."""
en = self.env["res.lang"]._lang_get("en_US")
return [(en.code, en.name)]
def _update_other_langs(self, templates):
for _, tpl_xmlid in templates.get_external_id().items():
for tpl_xmlid in templates.get_external_id().values():
template = self.env.ref(tpl_xmlid)
module, xmlid = tpl_xmlid.split(".", 1)
rec_xmlid = f"{module}.{self.company_id.id}_{xmlid}"
rec = self.env.ref(rec_xmlid)
for lang in self._other_langs():
lang_tpl = template.with_context(lang=lang)
for key in self._diff_translate_fields(template, rec):
lang_rec = rec.with_context(lang=lang)
lang_rec[key] = lang_tpl[key]
translations = {}
for key in self._diff_translate_fields(template, rec):
for lang in self._other_langs():
field = rec._fields[key]
old_value = field._get_stored_translations(rec).get(
rec.env.lang, "en_US"
)
if old_value.startswith("<p>") and old_value.endswith("</p>"):
old_value = old_value[3:-4]
is_callable = callable(field.translate)
translated = template.with_context(lang=lang)[key]
translations[lang] = (
{old_value: translated} if is_callable else translated
)
rec.update_field_translations(key, translations)
def _diff_translate_fields(self, template, real):
"""Find differences by comparing the translations of the fields."""