🌿 Traducciones en templates Twig (BO moderno)
Actualizado: 2024-12-01
Los templates Twig del Back Office de PrestaShop 8+ usan la extension Symfony Translation. La forma principal de traducir es el filtro |trans con el dominio como segundo argumento.
#Filtro |trans en Twig
Uso basico del filtro |trans en templates Twig
twig
{# Forma basica: cadena | trans(params, dominio) #}
{{ 'Save'|trans({}, 'Admin.Actions') }}
{{ 'Configuration'|trans({}, 'Modules.Mymodule.Admin') }}
{# Reutilizar dominios del core para terminos comunes #}
{{ 'Yes'|trans({}, 'Admin.Global') }}
{{ 'No'|trans({}, 'Admin.Global') }}
{{ 'Cancel'|trans({}, 'Admin.Actions') }}
{{ 'Delete'|trans({}, 'Admin.Actions') }}
{{ 'Edit'|trans({}, 'Admin.Actions') }}
{{ 'Enable'|trans({}, 'Admin.Actions') }}
{{ 'An error occurred.'|trans({}, 'Admin.Notifications.Error') }}
{{ 'Successful update.'|trans({}, 'Admin.Notifications.Success') }}
{# Variable de traduccion para reutilizar #}
{% set saveLabel = 'Save'|trans({}, 'Admin.Actions') %}
<button>{{ saveLabel }}</button>
{# En atributos HTML #}
<button title="{{ 'Delete this item'|trans({}, 'Modules.Mymodule.Admin') }}">
#Bloque trans para textos largos
Bloque trans para parrafos y textos multilinea
twig
{# Bloque trans — util para textos largos o HTML en las traducciones #}
{% trans with {} into 'Modules.Mymodule.Admin' %}
This module allows you to manage your custom content.
{% endtrans %}
{# Con variables dentro del bloque #}
{% set productName = product.name %}
{% trans with {'%name%': productName} into 'Modules.Mymodule.Admin' %}
Product %name% has been saved successfully.
{% endtrans %}
{# En un parrafo de ayuda (hint) #}
<p class="help-block">
{% trans with {} into 'Modules.Mymodule.Admin' %}
Enter your API key from the provider dashboard.
{% endtrans %}
</p>
#Variables y parametros
Interpolacion de variables en traducciones Twig
twig
{# Parametros: segundo argumento del filtro trans #}
{{ 'Hello %name%!'|trans({'%name%': customer.firstname}, 'Modules.Mymodule.Admin') }}
{# Numeros y formatos #}
{{ 'You have %count% items in your cart.'|trans({'%count%': cart.nbProducts}, 'Modules.Mymodule.Shop') }}
{# El formato %variable% es el estandar Symfony #}
{# Otros formatos (NO RECOMENDADOS para nuevos modulos): #}
{# {{ 'Hello {{ name }}'|trans({'{{ name }}': customer.firstname}, ...) }} #}
{# Para fechas formateadas (pasar ya formateadas desde PHP) #}
{{ 'Last updated: %date%'|trans({'%date%': lastUpdated}, 'Modules.Mymodule.Admin') }}
#Pluralizacion en Twig
Pluralizacion con transchoice (Symfony)
twig
{# Symfony < 5.x: usar transchoice #}
{{ '{0} No items|{1} One item|]1,Inf[ %count% items'|transchoice(count, {'%count%': count}, 'Modules.Mymodule.Admin') }}
{# Symfony 5+: usar trans con |syntax #}
{{ 'one product|%count% products'|trans({'%count%': count}, 'Modules.Mymodule.Admin') }}
{# En el archivo .xlf para pluralizacion: #}
{# <source>{0} No products|{1} One product|]1,Inf[ %count% products</source> #}
#Traducciones en JS (Twig a JS)
Pasar traducciones de Twig a JavaScript
twig
{# Inyectar traducciones en un objeto JS desde el template #}
<script>
var MyModuleTranslations = {
confirm_delete: {{ 'Are you sure you want to delete this item?'|trans({}, 'Modules.Mymodule.Admin')|json_encode|raw }},
save_success: {{ 'Saved successfully.'|trans({}, 'Admin.Notifications.Success')|json_encode|raw }},
error_generic: {{ 'An error occurred.'|trans({}, 'Admin.Notifications.Error')|json_encode|raw }},
};
</script>
{# Uso en JavaScript: #}
{# if (confirm(MyModuleTranslations.confirm_delete)) { ... } #}
Descargar en Markdown
Pensado para pegar en ChatGPT, Claude u otra IA. Incluye solo el contenido de esta pagina.