Lost in Translation
Nachdem es immer wieder Probleme mit den Magento Übersetzungsdateien gibt, haben wir uns vorgenommen, in diesem Artikel das Konzept der Übersetzungen zu erklären. Ein Blick in die Core-Klasse Mage_Core_Model_Translate offenbart folgenden Code:
- foreach ($this->getModulesConfig() as $moduleName=>$info) {
- $info = $info->asArray();
- /* loads the translation file configured in modules config.xml */
- $this->_loadModuleTranslation($moduleName, $info['files'], $forceReload);
- }
- /* loads the themes translation file translate.csv */
- $this->_loadThemeTranslation($forceReload);
- /* loads the inline translation from database */
- $this->_loadDbTranslation($forceReload);
Zur Erklärung:
Alle drei Methoden befüllen ein und dasselbe Array mit ihren jeweiligen Übersetzungen. Ein Eintrag aus einer CSV-Datei z.B. “Product Name”, “Produkt Name” wird zu:
Nachdem ein Schlüssel in einem assoziativen Array nur einmal vorhanden sein darf, überschreiben sich die Übersetzungen. D.h. die Übersetzungen aus dem Theme (translate.csv) überschreiben die modulspezifische Übersetzung (siehe config.xml <translate>), die Übersetzungen aus der DB (Inline Translations) überschreiben wiederum die Übersetzungen aus dem Theme. Das bedeutet also nichts anderes, als dass eine DB-Inline-Translation Priorität vor der Theme translate.csv hat, die translate.csv eine höhere Priorität als die CSV-Datei eines Moduls hat.
Funktioniert das Übersetzen immer noch nicht, sollte dringend de Developer Mode ausgeschaltet werden, denn folgender Code verhindert die korrekte Funktion der Übersetzungen. Ziemlich fies so klangheimlich…
- /**
- * Not allow use translation not related to module
- */
- if (Mage::getIsDeveloperMode()) {
- }