Sprachdateien für Module im Backend

Hey,

ich habe ein Modul entwickelt, welches sich oxid-konform an Sprachdateien orientiert. Das ganze läuft auch auf Oxid 4.9.x

Jetzt habe ich das ganze auf 4.7.x getestet, und da werden die Konstanten nicht aufgelöst bzw. ersetzt. Ich weiß, dass es dafür einen anderen “Ablageplatz” gibt, damit diese korrekt angezeigt werden können, aber:

Wie schaffe ich es nun, dass ich nur eine Sprachdatei habe (die gepflegt / erweitert) werden muss?

Ich könnte natürlich eine zweite Sprachdatei anlegen, aber das ist wohl nicht im Sinne des Erfinders.

Für die Version 4.9.x habe ich die Übersetzungen hier:
[B]/modules/myModule/application/views/admin/de/my_lang.php[/B]

Klappt, wie gesagt, aber nur bei 4.9.
Eine Idee?

Danke

include( “Pfad/zu-der-anderen/Datei_lang.php” );

[QUOTE=vanilla thunder;179385]include( “Pfad/zu-der-anderen/Datei_lang.php” );[/QUOTE]

Ich meine das ich das schon versucht habe … Aber ich probiers gerne nochmal. Trotzdem ne unschöne lösung : [

Was wäre denn deiner Meinung nach eine schöne Lösung?

[QUOTE=vanilla thunder;179387]Was wäre denn deiner Meinung nach eine schöne Lösung?[/QUOTE]

Einen zentralen Pfad zu haben, der sich nicht ändert?

wieso im Backend unter “views/admin/de”, fürs frontend dann in “application/translation” oder in anderen Versionen out/admin/de bzw. “/translations”?

Klar, hinterher kann man es natürlich nicht mehr ändern, aber wieso die Sprachdateien für Front- und Backend an verschiedenen Punkten liegen müssen, ist mir schleierhaft.

Ebenfalls: Wenn ich einen Ordner “/translations/de/myfile_lang.php” sehe, dann gehe ich davon aus, dass dort eine Sprachdatei liegt, nicht ein include zu einer Datei, die aus legacy-Gründen woanders liegt bzw. liegen muss.

auch in 4.9er Shops kann man die Lang Files in views/admin/ bzw translations/ ablegen, du hast dich aber dafür entschieden, sie in application/views/admin/ bzw application/translations/ abzulegen.

Warum OXID verschiedene Pfade anbietet, weiß ich nicht. Ich glaube aber, dass es an die Ordnerstruktur des Shops angelehnt sein wollte.

[QUOTE=vanilla thunder;179390]auch in 4.9er Shops kann man die Lang Files in views/admin/ bzw translations/ ablegen, du hast dich aber dafür entschieden, sie in application/views/admin/ bzw application/translations/ abzulegen.

Warum OXID verschiedene Pfade anbietet, weiß ich nicht. Ich glaube aber, dass es an die Ordnerstruktur des Shops angelehnt sein wollte.[/QUOTE]

Okay. Ich hatte offenbar bei dem include nen Fehler. Habe es gestern nochmal in ruhe getestet und damit klappt es. Danke für die Hilfe, Vanilla :slight_smile:

[QUOTE=vanilla thunder;179390]auch in 4.9er Shops kann man die Lang Files in views/admin/ bzw translations/ ablegen[/QUOTE]
Genau, seit 4.7 sind die Ordner views/admin/ (Backend) und translations/ (Frontend). Neu in 4.9 ist dass zusätzlich auch geht: application/views/admin/ (Backend) und application/translations/ (Frontend). Aber lt. einem Developer sollte man kein application-Verzeichhnis in Modulen verwenden: “in module, you do not need application dir at all. in module we just extend models, controllers, core etc. files.”

Dass es verschiedene Pfade für Frontend/Backend gibt ist unschön, aber folgt einer gewissen Logik, weil “admin” ähnlich wie ein Theme behandelt wird, und die theme-Sprachdateien liegen beim Theme. Also views/azure/de und eben views/admin/de.

out/lang/

geht übrigens auch in 4.8x und 4.9x…

out/lang/ ist seit 4.7 deprecated und geht nicht in 4.9.

Immer diese Ungläubigen. Probiers doch einfach aus :slight_smile:

Schalte doch einfach mal das Themeswitcher-Modul ab. :wink:

Irgendwie hat hier jeder Recht und auch nicht. Ich habbe es getestet: application/translations/ geht ohne ThemeSwitcher, out/lang/ geht mit, aber nur 4.96 translations im Modulroot geht hier,. bei unserem Tetsshop 4.92 geht das aber wiederum nicht. Da geht out/lang mit Switcher und application/translations/ oder translations/ mit Switch, die beiden aber nicht ohne. Und ja, TMP immer geleert.

/translations und /views/admin gehen immer, von 4.7 bis 4.9 und mit und ohne Themeswitcher.

Jetzt habe ich die Ordner nicht nur umbenannt, sondern gelöscht. Wenn damit modulname/translations/de gemeint ist, dann definitiv NEIN. Die Modulübersetzung fehlt je nach Template-Switch. Kann das jemand anders auch mal in 4.92 prüfen?

Schau mal in den Code von oethemeswitcherlang.php:


        // Modules language files
        if (is_array($aModuleInfo)) {
            foreach ($aModuleInfo as $sPath) {
                $sFullPath = $oConfig->getModulesDir() . $sPath . '/translations/' . $sLang;
                // for < 4.6 modules, since 4.7/5.0 translation files should be in modules/modulepath/translations/ dir
                if (!is_dir($sFullPath)) {
                    $sFullPath = $oConfig->getModulesDir() . $sPath . '/out/lang/' . $sLang;
                }
                $aLangFiles = $this->_appendLangFile($aLangFiles, $sFullPath);
            }
        }

modulname/translations wird also auch im Templateswitcher von 4.9.2 geladen. Wenn das bei dir nicht funktioniert, solltest du mal schauen woran das liegt.

1 Like

Doch, das funktioniert, aber ohne Aktivierung von [B]OXID eShop theme switch[/B] wird die Übersetzung in modulroot/translations/de nicht gefunden. Dann nur in den anderen Ordnern, wie oben beschrieben. Und es liegt auch nicht an anderen Modulen oder Änderungen. Den Shop (4.92) habe ich gerade neu installiert und 2 verschiedene Module ausprobiert. Bei beiden wird, wenn [B]OXID eShop theme switch [/B] deaktiviert ist, die Übersetzung nicht gefunden.

[QUOTE=adamweber;179426]aber ohne Aktivierung von [B]OXID eShop theme switch[/B] wird die Übersetzung in modulroot/translations/de nicht gefunden[/QUOTE]
Doch das wird sie :wink:

Schau mal in den Quellcode, core/oxlang 4.9.2:

    protected function _appendModuleLangFiles($aLangFiles, $aModulePaths, $sLang, $blForAdmin = false)
    {
        if (is_array($aModulePaths)) {
            $oConfig = $this->getConfig();
            foreach ($aModulePaths as $sPath) {
                $sFullPath = $oConfig->getModulesDir() . $sPath;
                if (file_exists($sFullPath . '/application/')) {
                    $sFullPath .= '/application';
                }
                $sFullPath .= ($blForAdmin) ? '/views/admin/' : '/translations/';
                $sFullPath .= $sLang;
                $aLangFiles = $this->_appendLangFile($aLangFiles, $sFullPath);
                //load admin modules options lang files
                if ($blForAdmin) {
                    $aLangFiles[] = $sFullPath . '/module_options.php';
                }
            }
        }

        return $aLangFiles;
    }

/views/admin für BE und /translations für FE.
Also wie gesagt wenn es bei dir nicht funktioniert solltes du schauen woran das liegt.