🌍 Funcion trans() — traducciones en PS 8/9
Actualizado: 2024-12-01
PrestaShop tiene dos sistemas de traduccion: el legacy basado en $this->l() con archivos .php y el moderno basado en $this->trans() con archivos .xlf (XLIFF). Los modulos nuevos para PS 8+ deben usar el sistema moderno.
#trans() vs l() — cuando usar cada uno
| Metodo | Sistema | Archivos | Recomendado para |
|---|---|---|---|
| $this->l('texto') | Legacy | modules/mymodule/translations/es.php | PS 1.6 / 1.7 (compatibilidad) |
| $this->trans('texto', [], 'Dominio') | Moderno | modules/mymodule/translations/es-ES.xlf | PS 8+ (recomendado) |
| $module->trans() | Moderno desde objeto externo | .xlf | PS 8+ fuera del modulo |
| $this->getTranslator()->trans() | Symfony directo | .xlf | Controllers Symfony PS 8+ |
#Sintaxis de trans()
Uso de trans() en el modulo
php
<?php
// Forma basica
$text = $this->trans('Guardar configuracion', [], 'Modules.Mymodule.Admin');
// Con parametros (interpolacion)
$text = $this->trans(
'Hay %count% productos en la categoria %name%.',
['%count%' => 5, '%name%' => 'Electronica'],
'Modules.Mymodule.Admin'
);
// Con locale especifico (para emails multilingue)
$text = $this->trans(
'Tu pedido ha sido confirmado.',
[],
'Modules.Mymodule.Shop',
'fr-FR' // locale IETF
);
// Deteccion automatica del nuevo sistema
if ($this->isUsingNewTranslationSystem()) {
$text = $this->trans('Mi texto', [], 'Modules.Mymodule.Admin');
} else {
$text = $this->l('Mi texto');
}
#Dominios de traduccion
El dominio identifica de donde vienen las traducciones. Para modulos propios, el formato es Modules.NombreModuloPascalCase.Contexto.
| Dominio | Uso |
|---|---|
| Modules.Mymodule.Admin | Strings del Back Office del modulo |
| Modules.Mymodule.Shop | Strings del Front Office del modulo |
| Modules.Mymodule.Error | Mensajes de error del modulo |
| Admin.Global | Palabras globales del BO del core (Save, Cancel, Yes, No...) |
| Admin.Actions | Acciones del BO del core (Edit, Delete, Add...) |
| Admin.Notifications.Success | Mensajes de exito del core |
| Admin.Notifications.Error | Mensajes de error del core |
| Shop.Navigation | Navegacion del Front Office del core |
| Shop.Actions | Acciones del Front Office del core |
| Global.General | Terminos generales reutilizables |
#Parametros y variables
Interpolacion de variables en traducciones
php
<?php
// Los parametros usan el formato %nombre%
$text = $this->trans(
'Bienvenido, %name%! Tienes %count% mensajes nuevos.',
[
'%name%' => $customer->firstname,
'%count%' => (int) $unreadMessages,
],
'Modules.Mymodule.Shop'
);
// Para el archivo .xlf, la cadena se escribe asi:
// <source>Bienvenido, %name%! Tienes %count% mensajes nuevos.</source>
// <target>Welcome, %name%! You have %count% new messages.</target>
// IMPORTANTE: Los parametros NO se escapan automaticamente.
// Escapa los valores del usuario antes de pasarlos:
$text = $this->trans(
'Tu busqueda: %query%',
['%query%' => htmlspecialchars($userQuery)],
'Modules.Mymodule.Shop'
);
#Traduccion en Twig
Filtro trans en templates Twig del BO
twig
{# Forma basica #}
{{ 'Save'|trans({}, 'Admin.Actions') }}
{# Con parametros #}
{{ 'Hello %name%'|trans({'%name%': customer.firstname}, 'Modules.Mymodule.Admin') }}
{# Bloque trans para textos largos #}
{% trans into 'Modules.Mymodule.Admin' %}
Este es un texto largo que sera traducido.
{% endtrans %}
{# Variable de traduccion #}
{% set label = 'Configuration'|trans({}, 'Modules.Mymodule.Admin') %}
<h2>{{ label }}</h2>
#Traduccion en Smarty
Plugin {l} en templates Smarty del FO
smarty
{* Sistema legacy - modulos PS 1.7 *}
{l s='Guardar configuracion' mod='mymodule'}
{* Con variables (d=sprintf parameters) *}
{l s='Hola %s, tienes %d mensajes.' sprintf=[$customer.firstname, $count] mod='mymodule'}
{* Para el sistema moderno en Smarty (PS 8 FO) *}
{* Usar $this->trans() en PHP y pasar la string ya traducida a Smarty *}
Descargar en Markdown
Pensado para pegar en ChatGPT, Claude u otra IA. Incluye solo el contenido de esta pagina.