Traduções em módulos de PrestaShop: domínios, catálogos e erros comuns
Se o seu módulo aparece em inglês numa loja espanhola, quase sempre é um domínio mal escrito ou uma cache. Explicamos como funciona o sistema de traduções do PrestaShop.
O PrestaShop tem dois sistemas de tradução que convivem: o antigo ($this->l() e ficheiros PHP em translations/) e o novo, baseado em domínios do Symfony. Para um módulo novo, use o novo.
Ativar o sistema novo
public function isUsingNewTranslationSystem()
{
return true;
}
Domínios
Cada texto pertence a um domínio com a forma Modules.Nombremodulo.Zona, em que o nome do módulo leva a primeira letra em maiúscula e o resto em minúsculas:
Modules.Mimodulo.Adminpara o back office.Modules.Mimodulo.Shoppara o front.
// PHP
$this->trans('Encomenda enviada', [], 'Modules.Mimodulo.Shop');
{* Smarty *}
{l s='Encomenda enviada' d='Modules.Mimodulo.Shop'}
{# Twig #}
{{ 'Encomenda enviada'|trans({}, 'Modules.Mimodulo.Admin') }}
Porque é que uma tradução não aparece
- Domínio mal escrito.
Modules.MiModulo.Shopnão é o mesmo queModules.Mimodulo.Shop. - O texto de origem mudou. A tradução é procurada pelo texto exato; um espaço ou uma vírgula de diferença e já não corresponde.
- Cache. As traduções ficam em cache; depois de as importar, limpe a cache.
- O tema tem a sua própria cópia do template. Se o tema sobrescrever o template do módulo, a tradução é procurada associada a esse tema. Guarde a tradução também para o tema ativo.
Parâmetros e plurais
$this->trans('Tem %count% produtos', ['%count%' => $n], 'Modules.Mimodulo.Shop');
Use marcadores com nome e nunca concatene frases: a ordem das palavras muda de um idioma para outro.
Distribuir as traduções
Exporte os catálogos em International > Traduções e inclua-os no ZIP do módulo, para que numa loja nova apareça traduzido desde o primeiro momento. E reveja sempre o módulo com a loja em pelo menos dois idiomas antes de publicar.