Imprimir valores traducidos en un Twig paragraphs

Descripción

Es posible que te hayas encontrado con la necesidad de imprimir algún contenido, dentro de un paragraphs en un sitio multi-idioma.

En mi caso me tocó hacerlo con el witget de Turitop, para un sitio en dos idiomas, así que comparto el ejemplo por si te hace falta.

La solución es implementar una preprocess function:

Instrucciones
  1. Activa el modo debug, para conocer el nombre de la plantilla para el paragraphs donde quieres imprimir el valor.
     
  2. Añade la siguiente función preproceso, dentro del archivo (.theme) en tu tema personalizado.
    function ishow_preprocess_paragraph(&$variables) {
      $variables['lang_id'] = $variables['paragraph']->language()->getId();
    }
  3. Añade el siguiente código dentro de la plantilla y sustituye los valores, según lo que quieras imprimir, en la línea del idioma correspondiente.
Código

CONTENIDO PLANTILLA paragraphs.html.twig

{% block paragraph %}
<div{{ attributes.addClass(classes) }}>
{% block content %}
{{ content }}
{% endblock %}
</div>
{% endblock paragraph %}

ESTO PASA A CONVERTIRSE EN LO SIGUIENTE

{% block paragraph %}
  <div{{ attributes.addClass(classes) }}>
    {% block content %}
   {#{{ content }}#} #Anulo la variable content, para que sólo se muestre el valor del widtget Turitop
{% if lang_id == 'en' %} 
  <div class="load-turitop" data-service="P1" data-lang="en"  data-embed="box"></div>
{% else %}
        <div class="load-turitop" data-service="P1" data-lang="es"  data-embed="box"></div>
{% endif %}
    {% endblock %}
    <script id="js-turitop" src="https://app.turitop.com/js/load-turitop.min.js" data-company="I437" data-ga="no" data-buttoncolor="green" data-afftag="ttafid"></script>
  </div>
{% endblock paragraph %}

Más Snippets