---
title: Traducciones en modulos — guia completa
section: modules
slug: translation
description: "Guia completa de traducciones en modulos PrestaShop 8/9: trans() vs l(), archivos XLIFF, dominios, deteccion del sistema y activar el nuevo motor de traducciones."
keywords: prestashop traduccion modulo trans l() XLIFF dominios isUsingNewTranslationSystem PS8
last_updated: 2024-12-01
source_url: "https://ayudaprestashop.es/modules/translation"
---

# Traducciones en modulos — guia completa

> Guia completa de traducciones en modulos PrestaShop 8/9: trans() vs l(), archivos XLIFF, dominios, deteccion del sistema y activar el nuevo motor de traducciones.

PrestaShop tiene dos sistemas de traduccion. Los modulos modernos (PS 8+) usan `trans()` con archivos XLIFF. Los modulos legacy usan `l()` con archivos PHP. Es posible soportar ambos simultaneamente detectando el sistema activo.

## Detectar el sistema de traducciones

*Usar el sistema correcto segun la version de PS*

```php
<?php

// isUsingNewTranslationSystem() devuelve true si:
// - PS version >= 1.7.6
// - Existe el directorio translations/ con archivos .xlf
if ($this->isUsingNewTranslationSystem()) {
    $text = $this->trans('Guardar', [], 'Admin.Actions');
} else {
    $text = $this->l('Guardar');
}

// Para forzar el sistema moderno (PS 8+):
// Crear directorio translations/ con al menos un .xlf vacio
// (PS detecta la presencia del directorio)
```

## Sistema moderno: trans() + XLIFF

*Usar trans() con dominios en el modulo*

```php
<?php

// En PHP (modulo, controlador, servicio)
$text = $this->trans('Guardar configuracion', [], 'Modules.Mymodule.Admin');
$text = $this->trans('Añadir al carrito', [], 'Modules.Mymodule.Shop');
$text = $this->trans('Error al conectar', [], 'Modules.Mymodule.Error');

// Con parametros
$text = $this->trans(
    'Hola %name%, tienes %count% pedidos.',
    ['%name%' => $firstname, '%count%' => $count],
    'Modules.Mymodule.Shop'
);

// En Twig (BO)
// {{ 'Guardar'|trans({}, 'Admin.Actions') }}

// En Smarty (FO, sistema legacy aun dominante)
// {l s='Guardar' mod='mymodule'}
```

## Sistema legacy: l() + archivos .php

*Crear archivo de traduccion legacy*

```php
<?php

// Archivo: modules/mymodule/translations/es.php
global $_MODULE;
$_MODULE = [];
$_MODULE['<{mymodule}prestashop>mymodule_abc123'] = 'Guardar configuracion';
$_MODULE['<{mymodule}prestashop>mymodule_def456'] = 'Error al guardar';

// En el modulo:
$text = $this->l('Save configuration'); // Busca la clave en el archivo de idioma
// La clave es el hash MD5 de 'Save configuration' en el contexto del modulo
```

## Checklist para soporte multilingue

| Punto | Verificacion |
| --- | --- |
| PHP strings | Todas las strings en trans() o l() |
| Templates Smarty | Todas las strings en {l s='' mod=''} |
| Templates Twig | Todas las strings con \|trans({}, 'Dominio') |
| Emails | Plantillas HTML+TXT en mails/{iso}/ |
| Formularios | Labels y hints en trans() |
| Mensajes de error | En trans() con dominio Error |
| Nombres en BO | getTabNames() por idioma |
| Archivos .xlf | Creados con bin/console extract o manualmente |


---

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