Не игнорируются ли переводы в шаблонах электронной почты, измененных с помощью Python в Odoo 11? - PullRequest
2 голосов
/ 27 сентября 2019

Я хочу изменить тело шаблона электронной почты, например, 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,
            })

Это решение работает должным образом, поскольку при загрузке шаблона я вижу только Привет, клиент .Теперь я хочу экспортировать его перевод.Файл xx.po правильно экспортирован, поскольку у меня есть возможность перевести термин <p>Hello customer.</p>.Я, например, перевожу его на испанский, поэтому создаю файл es.po .Затем я обновляю модуль и загружаю перевод на испанском языке.Чтобы убедиться, что это сработало, я ищу термин в меню Переведенные термины и считаю его правильно переведенным.Но затем я отправляю по электронной почте заказ на продажу клиента (у которого установлен испанский язык), и шаблон загружается с исходным текстом на английском языке.

Я не смог выяснить, что происходит.

Здесь есть похожий вопрос: Перевод шаблона электронной почты Odoo 10

Но парень, который спрашивает, решил проблему с переводом шаблона вручную через интерфейс.В моем случае я даже не могу применить это решение, поскольку термин правильно переведен в интерфейсе.

Есть идеи, чтобы сделать это нормально?

1 Ответ

1 голос
/ 29 сентября 2019

этот код не будет вызываться при визуализации template.метод _() возвращает перевод заданного аргумента, когда он называется , например, когда вы raise an exception в тот момент, когда вы вызываете _(msg), метод вернет перевод сообщения,но здесь этот код выполняется только тогда, когда вы install или upgrade модуль (when the XML file is loading).

Чтобы продемонстрировать изменение языка SUPERUSER на испанский, а затем обновить модуль, проверьте значение вбазу данных вы обнаружите, что это перевод """<p>Hello customer.</p>""".Потому что, как вы знаете, когда вы устанавливаете или обновляете модуль, все операции выполняются суперпользователем, независимо от того, кто нажал кнопку (например: self = self.sudo())

Я изменил язык моего SUPERUSER на Французский Затем я обновил модуль:

value returned by _() call

Так что на самом деле вы просто переводите значение, которое будет переданометод записи и сохраняется в базе данных.

, и даже вы принудительно обновляете, изменяя флаг noupdate в ir.model.data этого record, вы не можете экспортировать его в PO, потому что Odoo игнорирует его, и ядействительно не знаю, почему они решили это сделать (или, может быть, не работали только с моей версией, не знаю).

...