From 8d8f1bdb6a48db1da486fa093477b0f928a0d9d9 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Fri, 1 Jul 2016 15:43:02 +0200 Subject: [PATCH] [FIX] ir.qweb: `t-lang` had no effect anymore, e.g. when printing reports Setting the env of the qwebcontext is not sufficient because the closure of the `loader` carries its own contexts and lang, so subsequent t-calls may still use the original language. This was broken by the new API conversion at commit 4ddc32313996c8cf6e8e6dffd2253aad8a144ccf, and further broken by the forward-port 6c8141a1dfa9fa44067d052b368e3851972d836cA with a wrongly indented line. --- openerp/addons/base/ir/ir_qweb.py | 6 +++--- openerp/addons/base/ir/ir_ui_view.py | 5 ++++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/openerp/addons/base/ir/ir_qweb.py b/openerp/addons/base/ir/ir_qweb.py index 1b1b374790f..c981bd54a1c 100644 --- a/openerp/addons/base/ir/ir_qweb.py +++ b/openerp/addons/base/ir/ir_qweb.py @@ -75,7 +75,7 @@ class FileSystemLoader(object): if name: yield name - def __call__(self, name): + def __call__(self, name, env=None): for node in self.doc: if node.get('t-name') == name: root = etree.Element('templates') @@ -161,7 +161,7 @@ class QWeb(models.AbstractModel): def get_template(self, name, qwebcontext): origin_template = qwebcontext.get('__caller__') or qwebcontext['__stack__'][0] try: - document = qwebcontext.loader(name) + document = qwebcontext.loader(name, env=qwebcontext.env) except ValueError: raise_qweb_exception(QWebTemplateNotFound, message="Loader could not find template %r" % name, template=origin_template) @@ -439,7 +439,7 @@ class QWeb(models.AbstractModel): lang_eval = lang lang = qwebcontext.get('res_company') and qwebcontext['res_company'].partner_id.lang or 'en_US' _logger.info("'%s' is not a valid language code, is an empty field or is not installed, falling back to %s", lang_eval, lang) - d.env = d.env(context=dict(d.context, lang=lang)) + d.env = d.env(context=dict(d.context, lang=lang)) d[0] = self.render_element(element, template_attributes, generated_attributes, d) diff --git a/openerp/addons/base/ir/ir_ui_view.py b/openerp/addons/base/ir/ir_ui_view.py index ff8e3656bfa..843c5ad3400 100644 --- a/openerp/addons/base/ir/ir_ui_view.py +++ b/openerp/addons/base/ir/ir_ui_view.py @@ -1028,7 +1028,10 @@ actual arch. return '[]' qcontext['get_modules_order'] = get_modules_order - return self.env[engine].render(self.id, qcontext, loader=self.read_template) + def loader(name, env=self.env): + return self.with_env(env).read_template(name) + + return self.env[engine].render(self.id, qcontext, loader=loader) #------------------------------------------------------ # Misc