Traducciones en módulos de PrestaShop: dominios, catálogos y errores comunes
Si tu módulo sale en inglés en una tienda española, casi siempre es un dominio mal escrito o una caché. Te explicamos cómo funciona el sistema de traducciones de PrestaShop.
PrestaShop tiene dos sistemas de traducción que conviven: el antiguo ($this->l() y ficheros PHP en translations/) y el nuevo, basado en dominios de Symfony. Para un módulo nuevo, usa el nuevo.
Activar el sistema nuevo
public function isUsingNewTranslationSystem()
{
return true;
}
Dominios
Cada texto pertenece a un dominio con la forma Modules.Nombremodulo.Zona, donde el nombre del módulo va con la primera letra en mayúscula y el resto en minúscula:
Modules.Mimodulo.Adminpara el back office.Modules.Mimodulo.Shoppara el front.
// PHP
$this->trans('Pedido enviado', [], 'Modules.Mimodulo.Shop');
{* Smarty *}
{l s='Pedido enviado' d='Modules.Mimodulo.Shop'}
{# Twig #}
{{ 'Pedido enviado'|trans({}, 'Modules.Mimodulo.Admin') }}
Por qué una traducción no aparece
- Dominio mal escrito.
Modules.MiModulo.Shopno es lo mismo queModules.Mimodulo.Shop. - El texto fuente cambió. La traducción se busca por el texto exacto; un espacio o una coma de diferencia y ya no casa.
- Caché. Las traducciones se cachean; tras importarlas, vacía la caché.
- El tema tiene su propia copia de la plantilla. Si el tema sobrescribe la plantilla del módulo, la traducción se busca asociada a ese tema. Guarda la traducción también para el tema activo.
Parámetros y plurales
$this->trans('Tienes %count% productos', ['%count%' => $n], 'Modules.Mimodulo.Shop');
Usa marcadores con nombre y nunca concatenes frases: el orden de las palabras cambia de un idioma a otro.
Distribuir las traducciones
Exporta los catálogos desde Internacional > Traducciones e inclúyelos en el ZIP del módulo, para que en una tienda nueva salga traducido desde el primer momento. Y revisa siempre el módulo con la tienda en al menos dos idiomas antes de publicar.