mirror of
https://github.com/OCA/account-financial-tools.git
synced 2025-02-02 12:47:26 +02:00
[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:
@@ -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>
|
||||
|
||||
@@ -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."""
|
||||
|
||||
Reference in New Issue
Block a user