Zum Inhalt springen

Mehrsprachigkeit mit getLL ?

Erstellt am 19. Januar 2006 · 16 Antworten · letzte Antwort am 2. Februar 2006

Tags: PHP, Frage

dfluess ·

Hallo

Sorry für das Doppelposting, aber das gehört wohl hier rein ;-)

Ich möchte verschiedene Ausgaben mehrspachenfähig über die locallang.php ausgeben lassen.
Dazu habe ich folgendes probiert: (Code auf das wesentliche gekürzt)

funktion ausgabe() {
global $LANG;
[...]

//versuch
if ($recipRow["tx_dfdmailer_gender"]=="1") {
$tempContent_HTML = str_replace("###USER_tx_gender###", $LANG->getLL('dmailer_gender_male'), $tempContent_HTML);
}

//original
if ($recipRow["tx_dfdmailer_gender"]=="1") {
$tempContent_HTML = str_replace("###USER_tx_gender###", "Sehr geehrter Herr ", $tempContent_HTML);
}

Der Versuch funktioniert so leider nicht. Hat jemand eine Idee wie das gehen könnte?

DANKE

dfluess ·

hatte ich auch erst versucht,

dann wird aber ein Fehler ausgegeben, das pi_getLL nicht definiert sei.
//
Fatal error: Call to undefined function: pi_getll() in /html/typo3conf/ext/df_dmailer/class.ux_t3lib_dmailer.php on line 70
//

Habe dann gelesen das durch "global $LANG;" automatich die aktuelle locallang.php verwendet wird. Oder irre ich??

Wenn "$this->pi_getLL('Text')" richtig ist, dann genügt das sicher nicht allein. Wo/wie wird diese Variable dann definiert??

grübel

dfluess ·

Ich werd verrückt.. wieso geht das nicht?? 😢

Kann denn niemand helfen?

//
Fatal error: Call to undefined function: pi_getll() in /html/typo3conf/ext/df_dmailer/class.ux_t3lib_dmailer.php on line 70
//

Stoneage ·

Hallo,

da steht:

//
Fatal error: Call to undefined function: pi_getll() in /html/typo3conf/ext/df_dmailer/class.ux_t3lib_dmailer.php on line 70
//

pi_getLL ist eine Funktion der Klasse pi_base (oder so ähnlich). Diese Klasse ist mit Sicherheit nicht in einer t3lib Klasse inkludiert!

Gruß,

T.

dfluess ·

Hmm guter Einwand, aber hast Du auch eine Lösung?

Ich frage mich, ob das in Verbindung mit "str_replace" überhaupt funktioniert.

Oder siehst Du das anders?
Würde mich über eine Anregung sehr freuen. 😉

Stoneage ·

Nein, hab leider auch keine elegantere Lösung. Du kannst ja immer noch die Sprachen in deiner XCLASS hartcodieren.

dfluess ·

alles Hardcodieren? :o ...Eine Möglichkeit .. obwohl ich auch jetzt nicht weiss, wie am geschicktesten. Denn die Anrede wird auch über das BE im TCA gesetzt.

Am liebsten würde ich es gleich richtig über die locallang machen.

Vielleicht hat noch jemand eine andere Idee?

Norman2k ·

Als erstes musst du natürlich sagen das du die locallang.php nutzen willst, die lädst du mit "$this->pi_loadLL();". Wenn du die Extension mit dem Kickstarter gebastelt hast und dort mehrere Sprachen definiert hast müsste das eigentlich schon in deiner main-Funktion mit drin stehen.

Wenn du einen Marker damit ersetzen willst müsste das doch ungefähr so aussehen:

$markerArray['###MARKER###'] = $this->pi_getLL('Bezeichnung');

Norman

dfluess ·

Hmm, wo muss denn "$this->pi_loadLL();" genau stehen? Ich habe es in meiner XCLASS am Anfang der betreffenden Funktion gesetzt, habe trotzdem dann diesen Fehler "...Call to undefined function: pi_loadll()..."

In meiner XCLASS soll diese Zeile funktionieren

$tempContent = str_replace("###MARKER###", $this->pi_getLL("dmailer_gender_male"), $tempContent);

Der Marker wird also nicht direkt angesprochen sondern über "str_replace" in den Content gesetzt..

Würde das trotzdem funktionieren?

verzweifel..

Stoneage ·

pi_getLL() ist eine Funktion der Klasse pi_base.

pi_getLL ist eine Funktion der Klasse pi_base. Diese Klasse ist mit Sicherheit nicht in einer t3lib Klasse inkludiert!

Also auch nicht in einer XCLASS -> die ja nur eine Kind-Klasse von einer t3lib Klasse ist.

dfluess ·

hmm, ich muss zugeben, dass ich zwar den Kickstarter zum erstellen eines neuen Datenfeldes verwendet, aber die XCLASS dann manuell eingebaut habe.

Meine Extension erweitert tt_address um die Anrede, die Direct-Mailer Kategorien und dem HTML Ja/nein -Feld. Die XCLASS erzeugt dann in Abhängigkeit des eingegebenen Geschlechts die passende Anrede im Newsletter.

Weiterhin ermöglicht diese Extension eine abweichende Sender-URL (einzutragen in der Direct-Mailer Konfiguration). Dies war notwendig, da ich in einer Typo3-Installation gleich mehrere URL mit unterschiedlichen Newsletter versende.

Da ich die Einträge in der ext_localconf.php und somit das einbinden der XCLASS manuell vorgenommen habe, funktioniert das mit der Mehrsprachigkeit sicher nicht.

Ich kenne mich aber mit dem Kickstarter noch nicht so gut aus und wüsste gern, wie man seine XCLASS damit einbindet und somit die Mehrsprachigkeit automatisch berücksichtigt. Vielleicht kannst Du mal über meine Extension schauen. Im Moment ist die Anrede auf deutsch hardcodiert begrenzt.

Du findest diese Extension unter dem Namen "Direct Mail Address with Gender" (df_dmailer) im Extension Manager.

Viele Grüße

dfluess ·

Danke, ich habe es selbst hinbekommen...

Wenn jemand Bedarf an der Lösung hat, bitte nochmal melden..

Viele Grüße

Norman2k ·

Ich glaube hier haben viele den Bedarf nach Lösungen und irgendwann wahrscheinlich auch jemand nach genau dieser. Poste doch einfach mal wie du es hin bekommen hast!

Norman

dfluess ·

Hi,

da ich den Kickstarten nur in einem sehr frühen Stadium einsetzte, fehlten natürlich Routinen die automatisch für ein Modul eingesetzt werden.

Ich habe im meine XCLASS nur in der entsprechenden Funktion dies eingetragen:

	global $LANG;			
	$savedGlobal = array();
	$savedGlobal = $GLOBALS['LOCAL_LANG'];
	include (t3lib_extMgm::extPath('df_dmailer').'pi1/locallang.php');
	$GLOBALS['LOCAL_LANG'] = t3lib_div::array_merge_recursive_overrule($savedGlobal,$LOCAL_LANG);

Das ganze Ergebnis ist in der Extension df_dmailer zu finden.

D.

Stoneage ·

Das kann man auch kürzer schreiben:

include (t3lib_extMgm::extPath('df_dmailer').'pi1/locallang.php');
$GLOBALS['LOCAL_LANG'] = t3lib_div::array_merge_recursive_overrule($GLOBALS['LOCAL_LANG'],$LOCAL_LANG);
dfluess ·
Tetramatrix schrieb

Das kann man auch kürzer schreiben:

include (t3lib_extMgm::extPath('df_dmailer').'pi1/locallang.php');
$GLOBALS['LOCAL_LANG'] = t3lib_div::array_merge_recursive_overrule($GLOBALS['LOCAL_LANG'],$LOCAL_LANG);

Jau, Du hast Recht!

D.