Zum Inhalt springen

Locallang in eigener Ext - Marker werden nicht ersetzt

Erstellt am 23. Oktober 2009 · 6 Antworten · letzte Antwort am 25. Oktober 2009

Tags: PHP, TYPO3 4, Frage

puce ·

Guten Abend zusammen.
Ich habe nun schon wirklich viel gesucht, und bin verzweifelt, dass ich anscheinend "falsch" suche. Ist denk ich so selbstverständlich, dass es noch nie gefragt wurde 🙂 ich hoffe ihr lest den langen Post!

Ich bin eben Anfänger in T3, arbeite aber an einem größeren Projekt in Typo3 4.2.6

Es gibt da eine eigen geschriebene Ext (extends tslib_pibase) namens "shirt_designer".

In der Klasse wird in main() bevor der content zurückgegeben wird $this->pi_loadLL() aufgerufen. Sollte er nicht jetzt automatisch alle Marker von XML ins PHP Array umwandeln und im Template ersetzen?

Ich will lediglich, dass er die Marker aus locallang.xml in der jeweiligen Sprache im Frontend Template einsetzt.

Könnt ihr mir ein Tutorial von A-Z schicken, wo beschrieben steht wie man das macht. dann wär ich auch glücklich.

Wenn man die Seite im Firefox öffnet ist ###SHIRT_INFO### nicht ersetzt sondern steht genau so im Text. Obwohl im locallang.xml das steht:

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<t3locallang>
    <meta type="array" />
      <description>Shirt Designer</description>
      <type></type>
      <csh_table></csh_table>
      <labelcontext type="array">
      </labelcontext>
    </meta>
    <data type="array">
      <languagekey index="default" type="array">
  	    <label index="SHIRT_INFO">Shirt Info</label>
      </languagekey>
      <languagekey index="de" type="array">
  	    <label index="SHIRT_INFO">Shirt Information</label>
      </languagekey>
      <languagekey index="en" type="array">
  	    <label index="SHIRT_INFO">Shirt Info</label>
      </languagekey>
    </data>
</t3locallang>

Ich habs auch probiert im Typoscript (im Setup vom Root-Template) so festzulegen:

plugin.tx_shirt_designer_pi1._LOCAL_LANG.de.SHIRT_INFO = Shirt Information 
plugin.tx_shirt_designer_pi1._LOCAL_LANG.en.SHIRT_INFO = Shirt Info

Wie muss ein Marker im Template gekennzeichnet sein, wenn er im locallang.xml "SHIRT_INFO" heißt?

Ich hab auch probiert die locallang.xml extra einzubinden wie hier beschrieben: http://www.pi-phi.de/secondlocallang.html

Muss man die Marker selbst mit substituteMarkerArrayCached überschreiben (oder wie es hier beschrieben wird: http://typo3blogger.de/dynamische-typoscript-marker/) ?

Wir verwenden auch die Extensions Smarty Template Engine und Template Auto-parser. Kann es sein, dass die diese locallang Ersetzung blockieren?

In der Template Datei sind oft Angaben wie "{if $name}..." Das ist der Fluid Template Syntax oder? Gibts da auch Möglichkeiten für Language Dateien?

Vielen Dank euch allen.
Gute Nacht und lieber Gruß, Flo

just2b ·

Hallo,

nur weils in der locallang.xml definiert ist, heißt das nicht dass da irgendwas wo ausgegeben wird!

du musst selbst einen marker generieren!

zB

$markerArray['###SHIRT###'] = $this->pi->getLL('shirt');

wie das mit smarty läuft weiß ich nicht. die syntax ist eher von dort als von fluid, außer du setzt wirklich extbase und fluid ein

georg

puce ·

Ich hab nun in der Klasse class.tx_nakeddesigner_pi1.php folgende Zeile unter pi_loadLL hinzugefügt

$this->pi_loadLL();
$markerArray['###SHIRT_INFO###'] = $this->pi_getLL('SHIRT_INFO');

Er ersetzt noch immer nichts - im Template steht einfach "###SHIRT_INFO###" nachwievor.

Wie wird Mehrsprachigkeit im Frontend umgesetzt?

Im locallang alles definieren und dann nocheinmal in der Klasse alle Marker händisch hardcodiert mit pi_getLL setzen? Kann ich mir nicht vorstellen!
Freundlicher Gruß, Flo

just2b ·

naja übergibst du denn $markerArray einer Funktion wie $content.= $this->cObj->substituteMarkerArrayCached($template['total'], $markerArray, $subpartArray);??

wenn eine andere sprache ausgewählt wird, werden natürlich aus dem locallang die übersetzten begriffe genommen

puce ·

Das heißt um Mehrsprachigkeit im Frontend-Template hinzubekommen muss man

1) locallang.xml erstellen und dort alle Marker für alle Sprachen definieren

2) wo muss locallang.xml jetzt liegen? im ext/extkey ordner oder im pi-unterordner? ist da egal ob das alte php-Format oder xml? weil beim php gibts ja auch locallang_db.php

3) in der Klasse mit pi_loadLL die Datei laden

4) in der Klasse alle marker einzelnt nocheinmal hardcodiert ins markerArray mit pi_getLL holen

5) im content mit substituteMarkerArrayCached alle Marker ersetzen. die Marker sollen im Template mit ###markername### stehen?

Stimmt das wirklich? was macht das pi_loadLL dann eigentlich? nur xml parsen? Danke im Voraus. Gibts kein Manual oder Tutorial für sowas? Hoffnungsvoller Gruß, Flo

just2b ·

1) locallang.xml erstellen und dort alle Marker für alle Sprachen definieren

naja marker müssen das da nicht sein, halt die keys, die du dann bei der fkt angibst

2) wo muss locallang.xml jetzt liegen? im ext/extkey ordner oder im pi-unterordner? ist da egal ob das alte php-Format oder xml? weil beim php gibts ja auch locallang_db.php

aktuell ist das xml format und für das plugin im pi1 ordner

4) in der Klasse alle marker einzelnt nocheinmal hardcodiert ins markerArray mit pi_getLL holen

du kannst das auch sauber über eine schleife machen, dann ists ein 4-zeiler

5) im content mit substituteMarkerArrayCached alle Marker ersetzen. die Marker sollen im Template mit ###markername### stehen?

die marker heißen so wie du es nennst, ist dir überlassen

was macht das pi_loadLL dann eigentlich? nur xml parsen?

und den fallback definieren, dh wenn du nicht alles übersetzt in der locallang, dass dann das von der default-sprache zieht. überschreiben via TS möglich machen. das reicht doch 😉

puce ·

dankeschön 🙂 hast mir sehr geholfen, da durchzublicken.

Gibt es irgendwo eine Spezifikation über pi_getLL oder so? Ich habe irgendwie noch nicht herausgefunden wo man für Typo3 sucht oder kann man sich das alles nur aus Forum-Posts zusammenklauben?

Könntest du mir bei dem 4-Zeiler vielleicht weiterhelfen? Ich kann ja keine Schleife über getLL legen... und bei loadLL krieg ich auch nichts zurück. oder muss ich jetzt den default-Teil von der XML zeilenweise durchgehen?

Danke! Lg Flo