Conflito de tradução entre módulos na mesma seção system_config
-
13-12-2019 - |
Pergunta
Criei minha própria seção (diga "Empresa") em admin system_config
<config>
<sections>
<company translate="label">
<label>Company</label>
<tab>service</tab>
<frontend_type>text</frontend_type>
<sort_order>400</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</company >
</sections>
</config>
Criei 2 módulos adicionando seu próprio grupo na seção Empresa.Esses grupos são exibidos conforme pretendido.Ambos os módulos estão bem configurados para lidar com traduções adminhtml.
Módulo 1 :
<config>
<adminhtml>
<translate>
<modules>
<company>
<files>
<default>Company_Module1.csv</default>
</files>
</company>
</modules>
</translate>
</adminhtml>
</config>
e Módulo 2:
<config>
<adminhtml>
<translate>
<modules>
<company>
<files>
<default>Company_Module2.csv</default>
</files>
</company>
</modules>
</translate>
</adminhtml>
</config>
Então aqui está meu problema :Criei o Módulo 2 antes do Módulo 1.Desde que o Módulo 2 estivesse sozinho na seção Empresa, minhas strings foram traduzidas corretamente.Assim que criei o Módulo 1 e adicionei seu grupo na seção Empresa, apenas os rótulos e comentários do Módulo 1 foram traduzidos.
Parece que apenas Company_Module1.csv
é usado.Qualquer string em Company_Module2.csv
é ignorado.Se eu copiar meu Company_Module2.csv
conteúdo em Company_Module1.csv
arquivo, então o Módulo 2 agora está traduzido corretamente.É muito estranho porque configurei explicitamente o Módulo 2 para traduzir de Company_Module2.csv
e não de Company_Module1.csv
.
Alguém pode explicar esse comportamento?Eventualmente, isso me ajudará a entender o que fiz de errado e consertar.Obrigado !
Solução
Para entender esse comportamento você precisa saber como o Magento lê seus arquivos de configuração.
Primeiro, todos os arquivos XML são mesclados em uma grande estrutura.O resultado é assim:
<config>
<adminhtml>
<translate>
<modules>
<company>
<files>
<default>Company_Module1.csv</default>
<default>Company_Module2.csv</default>
</files>
</company>
</modules>
</translate>
</adminhtml>
</config>
Então a maioria dos valores são acessados via XPath ou convertidos em uma estrutura de array associativa.Essa estrutura seria algo como
'files' => array(
'default' => 'Company_Module1.csv',
'default' => 'Company_Module2.csv',
)
Mas um array não pode ter a mesma chave duas vezes, então ele termina com apenas um valor.
Solução
Sempre use exclusivo identificadores em seus arquivos de configuração, onde você puder escolhê-los por conta própria.
Deveria ser:
<config>
<adminhtml>
<translate>
<modules>
<company_module1>
<files>
<default>Company_Module1.csv</default>
</files>
</company>
</modules>
</translate>
</adminhtml>
</config>
e
<config>
<adminhtml>
<translate>
<modules>
<company_module2>
<files>
<default>Company_Module2.csv</default>
</files>
</company>
</modules>
</translate>
</adminhtml>
</config>
Além disso, em system.xml, você não especificou qual módulo deve ser usado, isso pode causar um comportamento inesperado se houver traduções conflitantes.Melhorar:
<company translate="label" module="Company_Module1">
Mas isso não está relacionado ao seu problema