gpt4 book ai didi

python - 在 Odoo 11 中通过 Python 修改的电子邮件模板中是否会忽略翻译?

转载 作者:太空宇宙 更新时间:2023-11-04 04:01:51 25 4
gpt4 key购买 nike

我想修改电子邮件模板的正文,例如 email_template_edi_sale在模块中 sale .

它的声明在 <data no update="1"> 中标签,这意味着我必须做一个变通办法来修改它。所以我决定制作一个 Python 方法来完成这个技巧并从 XML 调用它:

XML

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="0">
<function model="mail.template" name="_update_existing_mail_templates"/>
</data>
</odoo>

python

class MailTemplate(models.Model):
_inherit = 'mail.template'

@api.model
def _update_existing_mail_templates(self):
edi_sale = self.env.ref('sale.email_template_edi_sale', False)
if edi_sale:
body_html = _("""<p>Hello customer.</p>""")
edi_sale.write({
'body_html': body_html,
})

此解决方案按预期工作,因为加载模板时,我只看到Hello customer。现在我想导出它的翻译。 xx.po 文件已正确导出,因为我可以翻译术语 <p>Hello customer.</p> 。例如,我将其翻译成西类牙语,因此我生成了 es.po 文件。然后我更新模块并加载西类牙语覆盖术语的翻译。为了检查这是否有效,我在已翻译的术语 菜单中查找该术语,我发现它已正确翻译。但随后,我通过电子邮件发送了一位客户(设置了西类牙语)的销售订单,模板加载了英文源文本。

我无法弄清楚发生了什么。

这里有一个类似的问题:Email template translation Odoo 10

但是提出问题的人解决了通过界面手动翻译模板的问题。就我而言,我什至无法应用该解决方案,因为该术语已在界面中正确翻译。

有什么办法可以做到这一点吗?

最佳答案

此代码不会在 template 时调用被渲染。 _()方法在调用 时返回给定参数的翻译,例如当您 raise 时一个exception那一刻你调用_(msg)该方法将返回消息的翻译,但这里的代码仅在您 install 时执行或 upgrade模块 (when the XML file is loading) .

演示更改 SUPERUSER 的语言西类牙语然后升级模块,检查数据库中的值你会发现它是"""<p>Hello customer.</p>"""的翻译。 .因为正如您所知,当您安装或升级模块时,所有操作都由 super 用户完成,与单击按钮的用户无关(例如:self = self.sudo())

我更改了我的 SUPERUSER 的语言到法语然后我升级了模块:

value returned by _() call

所以实际上您在这里所做的只是转换将传递给写入方法并保存在数据库中的值。

甚至您可以通过更改 noupdate 来强制更新在 ir.model.data 中标记这个 record你不能将它导出到 PO,因为 Odoo 会忽略它,我真的不知道他们为什么决定这样做(或者可能只是我的版本不工作,我真的不知道)。

关于python - 在 Odoo 11 中通过 Python 修改的电子邮件模板中是否会忽略翻译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58136092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com