Map.php für eigenes Modul

Hallo Zusammen,

ich habe ein Modul geschrieben und möchte darin eine eigene map.php nutzen.

Dazu habe ich diese Datei erstellt meinmodulpfad/out/lang/de/map.php

[B]Darin steht:[/B]


$aMap = array(
      'FIRST_NAME' => 'BLA',
);

[B]Mein Smarty Template:[/B]


[{ oxmultilang ident="BLA" }]

[B]Meine Ausgabe:[/B]
BLA

[B]Mein Wunsch:[/B]
Hier sollte [B]Vorname[/B] stehen.

Weiß jemand warum das Mapping nicht funktioniert?
Hab ich ein falsches Verzeichnis oder muss ich etwas in die metadata eintragen?

geht das mit map.php überhaupt? Imho gehts nur über <meinmodul>_lang.php in /out/azure/de/ bzw ab 4.7.0 in /application/views/azure/de und die muss dann so aussehen:


$sLangName  = "Deutsch";
$aLang = array(
'charset' => 'ISO-8859-15',
'FIRST_NAME' => 'Vorname'
);

bei der 4.7.0 gibts aber glaub ich auch die möglichkeit die File in /application/translations/de/ abzulegen, aber bei mir läd Oxid die iwie nicht.

Ich dachte das die map.php genau dafür gedacht sein sollte…?

Direkt in mein Template oder in application wollte ich nichts schreiben, da es ja zu meinem Modul gehört und nicht zum Template oder zu Oxid selber.

aber welchen Sinn soll es haben eine lang mapping Datei und dann noch eine lang Datei anzulegen, wenn man mit nur einer lang Datei komplett bedient sein kann?

Zum einen, weil ich das logisch trennen möchte und zum anderen, weil es für mich nur so Sinn macht.

Die Reihenfolge wie die Sprachdateien ja angesprochen werden ist folgende:

custom language file -> theme language file -> subshop language file -> general language file

Im “general language file” macht es aufgrund von Updates keinen Sinn.

Im “subshop language file” macht es keinen Sinn, weil ich das Modul auch in anderen Subshops nutzen möchte.

Im “theme language file” macht es keinen Sinn, da ich mehr als ein Themes nutzen möchte.

Im “custom language file” macht es für mich auch keinen Sinn, da ich dann doppelten Pflegeaufwand bei der Übersetzung hätte.

und welchen Vorteil bringt dir language mapping? Du musst die Keys ja immer noch irgendwo unterbringen

Habe ich doch gerade geschrieben.

[B]Beispiel ohne Mapping:[/B]
Ich habe in meiner custom_lang.php (im Modul für z.B. für ein Formular) das stehen.

'FORM_Modul_FIRSTNAME' => 'Vorname',

Da mein Shop Mehrsprachig ist, bräuchte ich jetzt für jede Sprache eine eigene cust_lang also:
modul/out/lang/de

'FORM_Modul_FIRSTNAME' => 'Vorname',

modul/out/lang/en

'FORM_Modul_FIRSTNAME' => 'übersetzung',

modul/out/lang/nl

'FORM_Modul_FIRSTNAME' => 'übersetzung',

modul/out/lang/usw.

'FORM_Modul_FIRSTNAME' => 'übersetzung',

Es gibt das Feld FIRST_NAME aber schon von Oxid selber. In dem auch
out/lang/de

'FIRST_NAME' => 'Vorname',

out/lang/en

'FIRST_NAME' => 'übersetzung',

out/lang/nl

'FIRST_NAME' => 'übersetzung',

out/lang/usw.

'FIRST_NAME' => 'übersetzung',

Ich müsste also in diesem Beipsiel ein Wort 6x eintragen und habe damit doppelt soviel Pflegeaufwand und jede Übersetzung gibt es doppelt.

[B]Beispiel mit Mapping:[/B]
Der Übersetzungsaufwand auf der Shop Seite bleibt zwar bestehen. Aber ich muss die übersetzungen nicht noch einmal hier eintragen:
out/lang/de

'FIRST_NAME' => 'Vorname',

out/lang/en

'FIRST_NAME' => 'übersetzung',

out/lang/nl

'FIRST_NAME' => 'übersetzung',

out/lang/usw.

'FIRST_NAME' => 'übersetzung',

modul/out/lang/de

'FIRST_NAME' => 'FORM_Modul_FIRSTNAME',

modul/out/lang/en

'FIRST_NAME' => 'FORM_Modul_FIRSTNAME',

modul/out/lang/nl

'FIRST_NAME' => 'FORM_Modul_FIRSTNAME',

modul/out/lang/usw.

'FIRST_NAME' => 'FORM_Modul_FIRSTNAME',

Jetzt stellt dir vor du hast nicht 1 Wort sondern 200 und nicht eine Sprache sondern 15.

Also 200 Wörter * 15 Sprachen * 2 für doppelte Übersetzung = 6000
oder 200 Wörter * 15 Sprachen = 3000

Du hast zwar den selben Programmiertechnischen Aufwand. Musst aber keine Übersetzungen doppelt Pflegen lassen.

Ich kapier zwar was Du meinst, aber welchen Sinn macht in Deinem Fall eine Redundanz?
Wenn es FIRST_NAME doch schon gibt, dann mach ich doch nicht noch einen Platzhalter für die genau gleiche Information, dann verwende ich in meinem Modul gleich das vorhandene FIRST_NAME?

Hallo Yoda danke für die Antwort,

[B]Noch ein Bespiel am Kontaktformular:[/B]
Hier steht FIRST_NAME für Vorname In DE soll es so bleiben. AT möchte aber das im Kontaktformular “Ihr Vorname” steht.

Würde man jetzt für AT FIRST_NAME/Vorname in FIRST_NAME/Ihr Vorname ändern. Würde überall in AT, wo Vorname steht jetzt Ihr Vorname stehen.

Ich möchte aber das nur in AT und nur im Kontaktformular statt “Vorname” “Ihr Vorname” steht, wenn ich einen eigenen Sprachflag anlege der z.B. YOUR_FIRST_NAME heißt müsste ich diesen wieder für alle anderen Sprachen auch übersetzen.

Bei einem mapping musste ich das nicht.

Heureka! Jemand der das Feature verstanden hat und auch nutzt! :-)))
Allerdings bin ich mir jetzt gar nicht sicher, ob das tatsächlich auch für eigene Module funktioniert oder doch eher Theme- und Shop-bezogen eingesetzt werden kann.

Gruß

so kann man oxlang überlagern, damit in jedem aktiven Modul unter translations nach einer map.php Datei gesucht wird:


class mylang extends mylang_parent
{
    protected function _getLanguageMap( $iLang, $blAdmin = null )
    {
        $this->_aLangMap = parent::_getLanguageMap($iLang, $blAdmin);

        $oConfig             = $this->getConfig();
        $sLang               = oxRegistry::getLang()->getLanguageAbbr( $iLang );
        $aActiveModuleInfo   = $this->_getActiveModuleInfo();

        //modules language mapper
        if ( is_array( $aActiveModuleInfo ) ) {
            foreach ( $aActiveModuleInfo as $sPath ) {
                $sMapFile = $oConfig->getModulesDir() . $sPath . '/translations/' . $sLang . '/map.php';

                if ( file_exists( $sMapFile ) && is_readable( $sMapFile ) ) {
                    include $sMapFile;
                    $this->_aLangMap = array_merge($this->_aLangMap, $aMap);
                }
            }
        }

        return $this->_aLangMap;
    }
}

Hallo,

ich hab das versucht einzubinden. Leider wird mir [{oxmultilang ident=“MEIN_NEUER_VORNAME”}] in meinem eigenen Template nicht angezeigt.

Meine View sieht so aus:


class meineigeneseite extends oxUBase {

	protected $_sThisTemplate = 'meintemplate.tpl';

	public function __construct()
	{
		$myConfig = $this->getConfig();
		$this->init( "meineigeneseite" );

		parent::__construct();
	}

	public function init()
	{
		parent::init();
	}


	public function render()
	{
		$ret = parent::render();

		return $ret;
	}

Ansonsten funktioniert eigentlich alles. Was mache ich hier noch falsch?