🌍 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

MetodoSistemaArchivosRecomendado para
$this->l('texto')Legacymodules/mymodule/translations/es.phpPS 1.6 / 1.7 (compatibilidad)
$this->trans('texto', [], 'Dominio')Modernomodules/mymodule/translations/es-ES.xlfPS 8+ (recomendado)
$module->trans()Moderno desde objeto externo.xlfPS 8+ fuera del modulo
$this->getTranslator()->trans()Symfony directo.xlfControllers 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.

DominioUso
Modules.Mymodule.AdminStrings del Back Office del modulo
Modules.Mymodule.ShopStrings del Front Office del modulo
Modules.Mymodule.ErrorMensajes de error del modulo
Admin.GlobalPalabras globales del BO del core (Save, Cancel, Yes, No...)
Admin.ActionsAcciones del BO del core (Edit, Delete, Add...)
Admin.Notifications.SuccessMensajes de exito del core
Admin.Notifications.ErrorMensajes de error del core
Shop.NavigationNavegacion del Front Office del core
Shop.ActionsAcciones del Front Office del core
Global.GeneralTerminos 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.