Traducciones en modulos — guia completa

Actualizado: 2024-12-01

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

PuntoVerificacion
PHP stringsTodas las strings en trans() o l()
Templates SmartyTodas las strings en {l s='' mod=''}
Templates TwigTodas las strings con |trans({}, 'Dominio')
EmailsPlantillas HTML+TXT en mails/{iso}/
FormulariosLabels y hints en trans()
Mensajes de errorEn trans() con dominio Error
Nombres en BOgetTabNames() por idioma
Archivos .xlfCreados con bin/console extract o manualmente
Descargar en Markdown Pensado para pegar en ChatGPT, Claude u otra IA. Incluye solo el contenido de esta pagina.