---
title: Funcion trans() — traducciones en PS 8/9
section: i18n
slug: trans
description: "Como usar trans() para traducciones en modulos PrestaShop 8/9: dominios, parametros, pluralizacion, trans() vs l(), y diferencias entre Front/Admin/Core."
keywords: prestashop traducciones trans funcion dominio modulo front admin xliff PS8 PS9
last_updated: 2024-12-01
source_url: "https://ayudaprestashop.es/i18n/trans"
---

# Funcion trans() — traducciones en PS 8/9

> Como usar trans() para traducciones en modulos PrestaShop 8/9: dominios, parametros, pluralizacion, trans() vs l(), y diferencias entre Front/Admin/Core.

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 *}
```


---

*Fuente: [https://ayudaprestashop.es/i18n/trans](https://ayudaprestashop.es/i18n/trans). Version Markdown generada automaticamente para consumo por LLMs.*
