es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

flask_babel y Jinja2: ¿Cómo incluir HTML o marcadores de posición en texto traducible?

En un sitio web básico de Flask destinado a ser multilingüe, me gustaría aplicar un estilo a palabras o expresiones específicas. Para manejar la multilingüe, uso flaskbabelex y tokenize.

from tokenize import u
from flask</em>babelex import gettext

<p>page_title = gettext(u'¡Las mejores papas del mundo!')

En la plantilla, tendría esto:
<h2>{{ page_title }}</h2>
que se representaría así:
<h2>¡Las mejores papas del mundo!</h2>

Para aplicar el efecto de estilo adecuado, me gustaría que la palabra “papas” esté en un span.

<h2>¡Las mejores <span>papas</span> del mundo!</h2>

Incluir el span en la cadena de definición page_title no funciona. Parece estar sanitizado y el html aparece como parte de la cadena en lugar de ser interpretado.

Una simple función de javascript para apuntar a la palabra en la página representada no funcionaría ya que la palabra cambiaría con un idioma diferente (por ejemplo, patatas). Supongo que se podría crear una función de javascript compleja, que contenga marcadores de posición y se complete en el momento de la representación, pero … espero que haya una manera más fácil de lograr esto.

¿Cuál es la mejor manera de incluir HTML en la cadena original o incluir marcadores de posición para reemplazar en la plantilla Jinja2 o cualquier otra sugerencia?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    La mejor manera de incluir etiquetas HTML en una cadena traducida de Flask-Babel es usar la clase Markup proporcionada por el módulo jinja2 de Flask. La clase Markup se usa para marcar una cadena como código HTML seguro que no debe ser escapado por las plantillas de Jinja2.

    Aquí hay un ejemplo de cómo usar Markup para incluir una etiqueta <span> en una cadena traducida:

    from flask_babel import gettext
    from jinja2 import Markup
    
    page_title = gettext(u'¡Las mejores %s del mundo!') % Markup('<span>patatas</span>')
    

    En el código anterior, la función Markup envuelve la cadena HTML “patatas“. Al usar el operador %, podemos insertar esta cadena HTML en la cadena traducida “¡Las mejores %s del mundo!”.

    En la plantilla, simplemente podemos usar la variable page_title de la siguiente manera:

    <h2>{{ page_title }}</h2>
    

    El resultado HTML incluirá la etiqueta <span>, y la palabra “patatas” se estilizará en consecuencia.

    Usar marcadores de posición y la función Markup es la mejor manera de incluir etiquetas HTML en cadenas traducidas en Flask-Babel.

Comments are closed.