diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/web_editor/models/ir_translation.py | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/web_editor/models/ir_translation.py')
| -rw-r--r-- | addons/web_editor/models/ir_translation.py | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/addons/web_editor/models/ir_translation.py b/addons/web_editor/models/ir_translation.py new file mode 100644 index 00000000..0a0e34da --- /dev/null +++ b/addons/web_editor/models/ir_translation.py @@ -0,0 +1,46 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from lxml import etree + +from odoo import models, api +from odoo.tools.translate import encode, xml_translate, html_translate + + +def edit_translation_mapping(data): + data = dict(data, model=data['name'].partition(',')[0], value=data['value'] or data['src']) + return '<span data-oe-model="%(model)s" data-oe-translation-id="%(id)s" data-oe-translation-state="%(state)s">%(value)s</span>' % data + + +class IrTranslation(models.Model): + _inherit = 'ir.translation' + + @api.model + def _get_terms_mapping(self, field, records): + if self._context.get('edit_translations'): + self.insert_missing(field, records) + return edit_translation_mapping + return super(IrTranslation, self)._get_terms_mapping(field, records) + + def save_html(self, value): + """ Convert the HTML fragment ``value`` to XML if necessary, and write + it as the value of translation ``self``. + """ + assert len(self) == 1 and self.type == 'model_terms' + mname, fname = self.name.split(',') + field = self.env[mname]._fields[fname] + if field.translate == xml_translate: + # wrap value inside a div and parse it as HTML + div = "<div>%s</div>" % encode(value) + root = etree.fromstring(div, etree.HTMLParser(encoding='utf-8')) + # root is html > body > div + # serialize div as XML and discard surrounding tags + value = etree.tostring(root[0][0], encoding='utf-8')[5:-6] + elif field.translate == html_translate: + # wrap value inside a div and parse it as HTML + div = "<div>%s</div>" % encode(value) + root = etree.fromstring(div, etree.HTMLParser(encoding='utf-8')) + # root is html > body > div + # serialize div as HTML and discard surrounding tags + value = etree.tostring(root[0][0], encoding='utf-8', method='html')[5:-6] + return self.write({'value': value}) |
