[TYPO3-german] Extension mehrsprachigkeit?!

Christian Ducrot ducrot at online.de
Fri Apr 28 10:56:57 CEST 2006


Andreas Heller schrieb:
> Wie erhalte ich in der Ausgabe einer selbstprogrammierten Extension, die 
> mehrsprachigkeit? Bisher werden alle Datensätze angezeigt. Über "if else 
> Abfrage" sollte dies doch möglich sein oder?


Hallo Andy,

hier ein paar Codebeispiele die man in Extensions für die Mehrsprachigkeit gebrauchen kann. Ist aus der tt_news entliehen.

In der Extension-Klasse 2 Variablen deklaieren:
var $langArr;
var $sys_language_mode;

Im Bereich main():
// Die im Backend definierten Sprachen laden und
// die Handhabung für Übersetzungen ermitteln.
$lres = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', 'sys_language', '1=1' . $this->cObj->enableFields('sys_language'));
$this->langArr = array();
while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($lres)) {
    $this->langArr[$row['uid']] = $row;
}
$this->sys_language_mode = $this->conf['sys_language_mode']?$this->conf['sys_language_mode']:$GLOBALS['TSFE']->sys_language_mode;


Für den WHERE Teil einer SQL-Listenabfrage:
if ($this->sys_language_mode == 'strict' && $GLOBALS['TSFE']->sys_language_content) {
    // mode == 'strict': If a certain language is requested, select only records from the default language which have a translation.
    $tmpres = $this->cObj->exec_getQuery('user_extension_table', array('selectFields' => 'user_extension_table.l18n_parent', 'where' => 'user_extension_table.sys_language_uid = '.$GLOBALS['TSFE']->sys_language_content.$this->enableFields, 'pidInList' => $this->conf['pidList']));
    $strictUids = array();
    while ($tmprow = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($tmpres)) {
        $strictUids[] = $tmprow['l18n_parent'];
    }
    $strStrictUids = implode(',', $strictUids);
    $where .= ' AND (user_extension_table.uid IN (' . ($strStrictUids?$strStrictUids:0) . ') OR user_extension_table.sys_language_uid=-1)';
} else {
    // mode != 'strict': If a certain language is requested, select only records in the default language. The translated articles (if they exist) will be overlayed later in the list or single function.
    $where .= ' AND user_extension_table.sys_language_uid IN (0,-1)';
}


Und dann noch einen Datensatz übersetzen:
$this->internal["currentRow"] = $this->pi_getRecord("user_extension_tabelle",$uid);
// get the translated record if the content language is not the default language
if ($GLOBALS['TSFE']->sys_language_content) {
   $OLmode = ($this->sys_language_mode == 'strict'?'hideNonTranslated':'');
   $this->internal["currentRow"] = $GLOBALS['TSFE']->sys_page->getRecordOverlay('user_extension_tabelle', $this->internal["currentRow"], $GLOBALS['TSFE']->sys_language_content, $OLmode);
}


Viele Grüße
Christian Ducrot



More information about the TYPO3-german mailing list