Übersetzungskonflikt zwischen Modulen innerhalb desselben system_config-Abschnitts
-
13-12-2019 - |
Frage
Ich habe unter admin einen eigenen Bereich (z. B. "Firma") erstellt 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>
Ich habe 2 Module erstellt, die im Unternehmensbereich eine eigene Gruppe hinzugefügt haben.Diese Gruppen werden wie vorgesehen angezeigt.Beide Module sind gut konfiguriert, um adminhtml-Übersetzungen zu verarbeiten.
Modul 1 :
<config>
<adminhtml>
<translate>
<modules>
<company>
<files>
<default>Company_Module1.csv</default>
</files>
</company>
</modules>
</translate>
</adminhtml>
</config>
und Modul 2 :
<config>
<adminhtml>
<translate>
<modules>
<company>
<files>
<default>Company_Module2.csv</default>
</files>
</company>
</modules>
</translate>
</adminhtml>
</config>
Also hier ist mein Problem :Ich habe Modul 2 vor Modul 1 erstellt.Solange Modul 2 alleine im Firmenbereich war, wurden meine Zeichenfolgen korrekt übersetzt.Sobald ich Modul 1 erstellt und seine Gruppe im Unternehmensbereich hinzugefügt habe, wurden nur Beschriftungen und Kommentare von Modul 1 übersetzt.
Es scheint, dass nur Company_Module1.csv
verwendet wird.Beliebige Zeichenfolge in Company_Module2.csv
wird ignoriert.Wenn ich meine kopiere Company_Module2.csv
inhalt in Company_Module1.csv
datei, dann ist Modul 2 jetzt korrekt übersetzt.Es ist sehr seltsam, weil ich Modul 2 explizit für die Übersetzung konfiguriert habe Company_Module2.csv
und nicht von Company_Module1.csv
.
Kann jemand dieses Verhalten erklären?Irgendwann wird mir das helfen zu verstehen, was ich falsch gemacht habe und es zu beheben.Danke !
Lösung
Um dieses Verhalten zu verstehen, müssen Sie wissen, wie Magento seine Konfigurationsdateien liest.
Zunächst werden alle XML-Dateien zu einer großen Struktur zusammengeführt.Das Ergebnis sieht so aus:
<config>
<adminhtml>
<translate>
<modules>
<company>
<files>
<default>Company_Module1.csv</default>
<default>Company_Module2.csv</default>
</files>
</company>
</modules>
</translate>
</adminhtml>
</config>
Dann wird auf die meisten Werte entweder über XPath zugegriffen oder in eine assoziative Array-Struktur konvertiert.Diese Struktur wäre so etwas wie
'files' => array(
'default' => 'Company_Module1.csv',
'default' => 'Company_Module2.csv',
)
Ein Array kann jedoch nicht zweimal denselben Schlüssel haben, sodass es nur einen Wert enthält.
Lösung
Immer verwenden einzigartig bezeichner in Ihren Konfigurationsdateien, wo immer Sie sie selbst auswählen können.
Es sollte sein:
<config>
<adminhtml>
<translate>
<modules>
<company_module1>
<files>
<default>Company_Module1.csv</default>
</files>
</company>
</modules>
</translate>
</adminhtml>
</config>
und
<config>
<adminhtml>
<translate>
<modules>
<company_module2>
<files>
<default>Company_Module2.csv</default>
</files>
</company>
</modules>
</translate>
</adminhtml>
</config>
Auch im System.xml, Sie haben nicht angegeben, welches Modul verwendet werden soll.Dies kann zu unerwartetem Verhalten führen, wenn widersprüchliche Übersetzungen vorliegen.Verbessern:
<company translate="label" module="Company_Module1">
Dies hängt jedoch nicht mit Ihrem Problem zusammen