NEU!

hier eine Methode, die flexibler und einfacher ist, keine BackEnd-Klassen benutzt, und einfacher zu implementieren ist.

Es wirden nämlich nur eine Methode definiert, die die Orginal-Method überlagern (sie dabei aber auch noch aufruft):

 

 

function pi_loadLL()	{
        parent::pi_loadLL();
        
        if (!$this->additional_locallang_include) {
		$basePath = t3lib_extMgm::extPath($this->extKey).'locallang_db.php';
		$tempLOCAL_LANG = t3lib_div::readLLfile($basePath,$this->LLkey);
		//array_merge with new array first, so a value in locallang (or typoscript) can overwrite values from ../locallang_db
		$this->LOCAL_LANG = array_merge_recursive($tempLOCAL_LANG,is_array($this->LOCAL_LANG) ? $this->LOCAL_LANG : array());
		if ($this->altLLkey)	{
			$tempLOCAL_LANG = t3lib_div::readLLfile($basePath,$this->altLLkey);
			$this->LOCAL_LANG=array_merge_recursive($tempLOCAL_LANG,is_array($this->LOCAL_LANG) ? $this->LOCAL_LANG : array());
		}
		$this->additional_locallang_include=true;
	}	
}

 

Erläuterung:

Zuerst wird die Orginal-Methode aufgerufen.

Dann prüfen wir erstmal ob die zusätzliche Sprachdatei schon geladen ist, ansonsten kann durch mehrfache Aufrufe der Methode (Mehrfachinitialisierung passiert!) aus dem Array mit Strings ein Array mit Arrays mit String entstehen.

Danach wird der Pfad auf die Extension-globale locallang.php/.xml aufgebaut. Die Dateierweiterung wird sowieso entfernt und dann wird versucht eine *.xml- oder eine *.php-datei zu laden.

Die Sprachdatei wird mit der default-Sprache (LLkey) geladen. Damit die locallang-Einträge des Plugins (bzw. auch die über Typoscript definierten Werte) Vorrang haben, wird das neue Sprach-Array als Basis genommen und durch das schon geladene überlagert.

Das Ganze dann auch noch mit der Alternativ-Sprache (altLLkey).

Zum Schluß den Merker setzen dass die Spracherweiterung schon geladen wurde.

Zusatz:

Möchte ich mich um Übersetzungen noch nicht kümmern, bzw. mir von der Extension auch noch helfen lassen die zugehörige locallang.xml aufzubauen benutze ich folgende Überlagerung:

 

function pi_getLL($key,$alt='',$hsc=FALSE) {
	$retval=parent::pi_getLL($key,$alt,$hsc);
	if (!$retval) {
		$retval='['.$s.']';
		if ($_GET['lang']=='debug') {
			$fh=fopen(PATH_site.t3lib_extMgm::extPath($this->extKey).dirname($this->$scriptRelPath). '/locallang.txt','a+');
			if ($fh) {
				fputs($fh,"\t\t".'<label index=\"'.$s.'"></label>'."\n");
				fclose($fh);
			}
		}
	}
	return $retval;
}

 

Erläuterung:

Zuerst wird die Orginal-Methode aufgerufen. Liefert sie kein Ergebnis wird der String in eckigen Klammern als Rückgabewert benutzt (das ist dann schon mal im FrontEnd erkennbar). danach wird aber noch, sofern die passenden URL-Paramter gesetzt sind (?lang=debug) auch noch ein Eintrag in die Datei locallang.txt (im Plugin-Verzeichnis) gemacht, die als Vorlage für die locallang.xml benutzt werden kann.

Veraltet:

Es wird eine Backend-Klasse eingebunden und benutzt (1).

Es sind diverse Initalisierungen notwendig (2,3,4), um am Ende die Überlagerungs-Funktion (5) lauffähig zu haben und ganz normal aufrufen zu können (6).

 

 

1. require_once(t3lib_extMgm::extPath('lang').'lang.php')

class tx_... extends tslib_pibase {

2. var $LL;		//array with locallang-values
   var $LANG;		// object to access $LL ('global $LANG' should be enough, but failed 

function main($content,$conf) {

3. $this->LL = $this->includeLocalLang();	// load external locallang
   $this->LANG = t3lib_dev::makeInstance('language');	// create language-object
   $LLkey='default';
   if ($GLOBALS['TSFE']->config['config']['language'])	{
	$LLkey = $GLOBALS['TSFE']->config['config']['language'];
   }
   $this->LANG->init($LLkey);	// initalize language-object with actual language


6.	$text = $this->pi_getLL('key');

}

4. function includeLocalLang() {
	include(t3lib_dev::extPath($extkey).'locallang_DB.php');   // get path to desired locallang
	return $LOCAL_LANG;
   }

5. function pi_getLL($k,$alt='',$hsc=true) {
	$retval=parent::pi_getLL($k,'',$hsc);
	if (!$retval) $retval = $this->LANG->getLLL($k,$this->LL,$hsc);
	if (!$retval) $retval=$alt;
	return $retval;
   }

}

 

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Etwas einfacher (Punkte 2-4 entfallen). Es wird aber weiterhin eine BackEnd-Klasse im FrontEnd benötigt (1).

 

function pi_getLL($k,$alt='',$hsc=true) {
	$retval=parent::pi_getLL($k,'',$hsc);
	if (!$retval) $retval = $GLOBALS['TSFE']->sL('LLL:EXT:'.$this->extKey.'/locallang_db.php:label_key');
	if (!$retval) $retval=$alt;
	return $retval;
}
 
Ihre aktuelle Seitenauswahl:  
>>>