From ff23483846daa772d067a494c1046d042feffe05 Mon Sep 17 00:00:00 2001 From: Martin Trigaux Date: Fri, 20 Oct 2023 13:55:38 +0200 Subject: [PATCH] [FIX] developer: adapt markup documentation On how to combine Markup and translations Note that this does not work before 17.0 closes odoo/documentation#6189 Related: odoo/odoo#139316 Related: odoo/enterprise#49379 Signed-off-by: Martin Trigaux (mat) --- .../developer/reference/backend/security.rst | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/content/developer/reference/backend/security.rst b/content/developer/reference/backend/security.rst index 5daef4abb..9e6b4c4b0 100644 --- a/content/developer/reference/backend/security.rst +++ b/content/developer/reference/backend/security.rst @@ -418,9 +418,9 @@ the content (text). Markup('<R&D>

Hello

') >>> escape("") Markup('<R&D>') - >>> escape(_("List of Tasks on project %s: %s")) % ( + >>> _("List of Tasks on project %s: %s", ... project.name, - ... Markup("
    %s
") % Markup().join([Markup("
  • %s
  • ") % t.name for t in project.task_ids]) + ... Markup("
      %s
    ") % Markup().join(Markup("
  • %s
  • ") % t.name for t in project.task_ids) ... ) Markup('Liste de tâches pour le projet <R&D>:
    • First <R&D> task
    ') @@ -434,6 +434,22 @@ the content (text). >>> Markup(f"

    Foo {self.bar}

    ") # bad, bar is inserted before escaping >>> Markup("

    Foo {bar}

    ").format(bar=self.bar) # good, sorry no fstring +When working with translations, it is especially important to separate the HTML +from the text. The translation methods accepts a :class:`~markupsafe.Markup` +parameters and will escape the translation if it gets receives at least one. + +.. code-block:: pycon + + >>> Markup("

    %s

    ") % _("Hello ") + Markup('

    Bonjour <R&D>

    ') + >>> _("Order %s has been confirmed", Markup("%s") % order.name) + Markup('Order SO42 has been confirmed') + >>> _("Message received from %(name)s <%(email)s>", + ... name=self.name, + ... email=Markup("%s") % (self.email, self.email) + Markup('Message received from Georges <george@abitbol.example>') + + Escaping vs Sanitizing ----------------------