oca-technical/odoo-bringout-oca-server-ux-template_content_swapper/template_content_swapper/models/ir_qweb.py
2025-08-29 15:43:03 +02:00

51 lines
1.6 KiB
Python

# Copyright 2024 Quartile Limited
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
import re
from markupsafe import Markup
from odoo import api, models
from odoo.tools.profiler import QwebTracker
class IrQWeb(models.AbstractModel):
_inherit = "ir.qweb"
@QwebTracker.wrap_render
@api.model
def _render(self, template, values=None, **options):
result = super()._render(template, values=values, **options)
if not isinstance(template, str):
return result
result_str = str(result)
lang_code = "en_US"
request = values.get("request")
if request:
# For views
lang_code = request.env.lang
else:
# For reports
lang_match = re.search(r'data-oe-lang="([^"]+)"', result_str)
if lang_match:
lang_code = lang_match.group(1)
view = self.env["ir.ui.view"]._get(template)
content_mappings = (
self.env["template.content.mapping"]
.sudo()
.search(
[
("template_id", "=", view.id),
"|",
("lang", "=", lang_code),
("lang", "=", False),
]
)
)
if content_mappings:
for mapping in content_mappings:
content_from = mapping.content_from
content_to = mapping.content_to or ""
result_str = result_str.replace(content_from, content_to)
result = Markup(result_str)
return result