Conflitto di traduzione tra moduli all'interno della stessa sezione System_Config
-
13-12-2019 - |
Domanda
Ho creato la mia sezione (ad esempio "Azienda") sotto Amministratore 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>
.
Ho creato 2 moduli aggiungendo il proprio gruppo sotto la sezione aziendale. Questi gruppi sono visualizzati come previsto. Entrambi i moduli sono ben configurati per gestire le traduzioni adminhtml.
Modulo 1:
<config>
<adminhtml>
<translate>
<modules>
<company>
<files>
<default>Company_Module1.csv</default>
</files>
</company>
</modules>
</translate>
</adminhtml>
</config>
.
e modulo 2:
<config>
<adminhtml>
<translate>
<modules>
<company>
<files>
<default>Company_Module2.csv</default>
</files>
</company>
</modules>
</translate>
</adminhtml>
</config>
.
Quindi ecco il mio problema: Ho creato il modulo 2 prima del modulo 1. Finché il modulo 2 è stato solo nella sezione aziendale, le mie stringhe sono state tradotte correttamente. Non appena ho creato il modulo 1 e ha aggiunto il suo gruppo sotto la sezione aziendale, solo moduli 1 etichette e commenti sono stati tradotti.
Sembra che venga utilizzato solo Company_Module1.csv
. Qualsiasi stringa in Company_Module2.csv
viene ignorata. Se copia il mio contenuto Company_Module2.csv
nel file Company_Module1.csv
, il modulo 2 è ora tradotto correttamente. È molto strano perché ho configurato esplicitamente il modulo 2 per tradurre da Company_Module2.csv
e non da Company_Module1.csv
.
Qualcuno può spiegare questo comportamento? Alla fine questo mi aiuterà a capire cosa ho fatto di sbagliato e risolverlo. Grazie!
Soluzione
Per capire questo comportamento è necessario sapere come Magento legge i suoi file di configurazione.
Innanzitutto, tutti i file XML vengono uniti in una grande struttura.Il risultato è simile a questo:
<config>
<adminhtml>
<translate>
<modules>
<company>
<files>
<default>Company_Module1.csv</default>
<default>Company_Module2.csv</default>
</files>
</company>
</modules>
</translate>
</adminhtml>
</config>
.
Quindi la maggior parte dei valori è accessibile tramite XPath o convertiti in una struttura di array associativa.Questa struttura sarebbe qualcosa come
'files' => array(
'default' => 'Company_Module1.csv',
'default' => 'Company_Module2.csv',
)
.
Ma un array non può avere la stessa chiave due volte, quindi finisce con un solo valore.
Soluzione
Utilizzare sempre i identificatori Unique nei file di configurazione, ovunque puoi sceglierli da solo.
dovrebbe essere:
<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>
.
.
Inoltre, in System.xml, non hai specificato quale modulo dovrebbe essere utilizzato, questo potrebbe darti comportamenti inaspettati se ci sono traduzioni in conflitto.Meglio:
<company translate="label" module="Company_Module1">
.
Ma questo non è correlato al tuo problema