---
title: "Mehrsprachigkeit programmieren?! Variable?"
url: "https://www.typo3.net/d/42167-mehrsprachigkeit-programmieren-variable"
source: "typo3.net"
tags: ["Extensions","Entwicklung","Frage"]
created: "2006-04-27"
last_reply: "2008-03-15"
replies: 20
solved: true
page: 1
pages: 1
lang: "de"
---

# Mehrsprachigkeit programmieren?! Variable?

Extensions › Entwicklung · 20 Antworten · gelöst · gestartet 2006-04-27

## Frage

**Unbekannter Benutzer** · 2006-04-27 · [Beitrag #1](https://www.typo3.net/d/42167-mehrsprachigkeit-programmieren-variable/1)

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?

Welche Variable wird gebraucht? "sys_language_uid" ist bereits im Datenbank Schema der Extension angelegt und wird auch richtig zugeordnet - "L" als Sprachvariable in Typo bereits konfiguriert....

Kann mir jemand auf die Sprünge helfen...

Gruß
Andy

## Beste Antwort

**FalkWalter** · 2006-05-01 · [Beitrag #13](https://www.typo3.net/d/42167-mehrsprachigkeit-programmieren-variable/13)

Hallo, Andy,

binde die Berechnung Deines Outputs mal in die if-Schleife der Sprachwahl ein:

```php
                                                                                                                       <?
/**
*AUSGABE
*/
function makeListItem() {

  // 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('tx_cdcstaff', $this->internal['currentRow'], $GLOBALS['TSFE']->sys_language_content, $OLmode);

    $out='<p>'.$this->getFieldContent('name').' '.$this->getFieldContent('vorname').'</p>';
  }

  return $out;
}
?>
```

Ich habe selbst die Sprachwahl innerhalb der makelist()-Funktion, a la:

```php
function makelist($res)  {
  $items=Array();
    // Make list table rows
  while($this->internal['currentRow'] = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))  {

    // Gets the translated record if the content language is not the default language
    if ($GLOBALS['TSFE']->sys_language_content == $this->internal['currentRow']['sys_language_uid']) {
     $OLmode = ($this->sys_language_mode == 'strict'?'hideNonTranslated':'');
     $this->internal['currentRow'] = $GLOBALS['TSFE']->sys_page->getRecordOverlay('user_methodologiesinnovations_items', $this->internal['currentRow'], $GLOBALS['TSFE']->sys_language_content, $OLmode);

      // if item is a methodology, first calls the methodology list item, then calls all associated innovation list items
      if ($this->internal['currentRow']['methodology'] == '' || $this->internal['currentRow']['methodology'] == 0) {
        $isMethodology = true;
        $items[]=$this->makeListItem();
    }
  $out = '<div'.$this->pi_classParam('listrow').'>'.implode(chr(10),$items).'</div>';
  return $out;
}
```

Grüßle
Falk

## Antworten

### [#2](https://www.typo3.net/d/42167-mehrsprachigkeit-programmieren-variable/2) · steffenk · 2006-04-27

aber klar doch

```php
$GLOBALS["TSFE"]->sys_language_uid
```

gibt Dir die eingestellte Sprache zurück

Und so liest Du den richtigen Datensatz aus:

```php
<?php
while($temp = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
	// 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':'');
		$temp = $GLOBALS['TSFE']->sys_page->getRecordOverlay('tx_extension', $temp, $GLOBALS['TSFE']->sys_language_content, $OLmode);
	}
	$data[] = $temp;
	}
}
?>
```

### [#3](https://www.typo3.net/d/42167-mehrsprachigkeit-programmieren-variable/3) · Unbekannter Benutzer · 2006-04-30

Ich stehe auf dem Schlauch.... :0

Hier erfolgt das erstellen...

```php
<? 
/**
	 * Liste erstellen
	 */
	function makelist($res)	{
		$items=Array();
		
	//	$GLOBALS["TSFE"]->sys_language_uid
		

			// Sprache auslesen
			
			while($temp = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
        // 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':'');
                $temp = $GLOBALS['TSFE']->sys_page->getRecordOverlay('tx_extension', $temp, $GLOBALS['TSFE']->sys_language_content, $OLmode);
        }
        $data[] = $temp;
        }


        
			// Liste erstellen
		while($this->internal['currentRow'] = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))	{
			$items[]=$this->makeListItem();
		}
	
			// Ausgabe
				
		$out = '<div'.$this->pi_classParam('listrow').'>
			'.implode(chr(10),$items).'
			</div>';

 
		return $out;
	}
?>
```

### [#4](https://www.typo3.net/d/42167-mehrsprachigkeit-programmieren-variable/4) · steffenk · 2006-04-30

Du kombinierst 2 Methoden der Datensatzauslese - das kann nicht klappen.

### [#5](https://www.typo3.net/d/42167-mehrsprachigkeit-programmieren-variable/5) · Unbekannter Benutzer · 2006-04-30

Sollte ich nach der Funktion "makelist" eine funktion "sprache" erstellen und dort die while abfrage reinbauen...?! alles als out ausgaben und danach die liste bauen?!

### [#6](https://www.typo3.net/d/42167-mehrsprachigkeit-programmieren-variable/6) · steffenk · 2006-04-30

nimm den Schnipsel von mir wieder raus und mach die Unterscheidung der Sprache in der Funktion makeListItem.

### [#7](https://www.typo3.net/d/42167-mehrsprachigkeit-programmieren-variable/7) · Unbekannter Benutzer · 2006-04-30

Hey danke für die Hilfe - aber irgendwie klemmt es immer noch... (ich denke meine PHP-Erfahrung ist zu gering)

```php
<? /**
	 *AUSGABE
	 */
	function makeListItem()	{
		
		while($out = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
        // 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':'');
                $out = $GLOBALS['TSFE']->sys_page->getRecordOverlay('tx_cdcstaff', $out, $GLOBALS['TSFE']->sys_language_content, $OLmode);
        }
        }
		
		$out='<p>.$this->getFieldContent('name').</p>'&nbsp;'<p>.$this->getFieldContent('vorname').</p>';
		return $out;
	}?>
```

Danke

### [#8](https://www.typo3.net/d/42167-mehrsprachigkeit-programmieren-variable/8) · steffenk · 2006-04-30

m.E. müsste das so aussehen:

```php
<? 
/**
*AUSGABE
*/
function makeListItem() {

	// 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('tx_cdcstaff', $this->internal['currentRow'], $GLOBALS['TSFE']->sys_language_content, $OLmode);
	}
	
	$out='<p>'.$this->getFieldContent('name').' '.$this->getFieldContent('vorname').'</p>';
return $out;
}
?>
```

ohne gewähr

### [#9](https://www.typo3.net/d/42167-mehrsprachigkeit-programmieren-variable/9) · Unbekannter Benutzer · 2006-04-30

Jetzt habe ich verstanden! Allerdings geht es (immer) noch nicht... Ich denke mir fehlt die verknüpfung....

Ich überlege mal und werden dann nochmals posten!!
Gruß und Vielen Dank - ich melde mich...
:-)

MELDE MICH NOCHMAL!!! HIER DIE MELDUNG....

```php
<?
function makeListItem() {
 
        // get the translated record if the content language is not the default language
        if ($GLOBALS['TSFE']->sys_language_content) {
                $OLmode = ($this->sys_language_uid == 'strict'?'hideNonTranslated':'');
                $this->internal['currentRow'] = $GLOBALS['TSFE']->sys_page->getRecordOverlay('tx_cdcstaff_cdc_staff', $this->internal['currentRow'], $GLOBALS['TSFE']->sys_language_content, $OLmode);
        }
        
        $out= $this->getFieldContent('vorname');
				return $out;
} ?>
```

Erzeugt keinen Fehler, gibt allerdings auch alle Datensätze aus - obwohl "L=0" ist....

Sind denn alle Variablen bzw. Datenbankfelder abgefragt...

**sys_language_content als echo ergibt bei DE 0,0,0,0
sys_language_uid ergibt als echo bei DE "1,0,1,0" dies stimmt auch überein mit den Datenfelder der Datenbank.**

Die Datenbankfelder müssten doch nun nur noch mir der aktullen "L" Variable verglichen werden... dies scheint aber nicht zu gehen....

RATLOS?!

### [#10](https://www.typo3.net/d/42167-mehrsprachigkeit-programmieren-variable/10) · Unbekannter Benutzer · 2006-05-01

```php
<? $out= $this->getFieldContent('sys_language_uid'); ?>
```

ergibt bei 4 Datensätzen in 2 Sprachen 0,1,1,0

Dies stimmt, da der erste und letzte Deutsch, die anderen Spanisch sind!

### [#11](https://www.typo3.net/d/42167-mehrsprachigkeit-programmieren-variable/11) · steffenk · 2006-05-01

Die Ausgabe wird hier nicht beschränkt, sondern es wird aus der Overlay-Tabelle die richtige Sprache ausgelesen.

Wenn Du die Sprache eingrenzen willst, also nur die aktuelle Sprache ausgeben willst, so muss das in der Where-Klausel der SQL-Abfrage geschehen.

### [#12](https://www.typo3.net/d/42167-mehrsprachigkeit-programmieren-variable/12) · Unbekannter Benutzer · 2006-05-01

Ja, okay... verstanden und ich denke auch am sinnigsten... Allerdings stellt sich für mich die Frage "Wo wird die Datenbankabfrage gemacht...?", alle Datenbankfelder werden ja "zur Verfügung gestellt". Gibt es hier eine Klasse in Typo, welche included wird? Oder erfolgt der Zugriff weil bereits ein Connect besteht?

Danke und Gruß

### [#13](https://www.typo3.net/d/42167-mehrsprachigkeit-programmieren-variable/13) · FalkWalter · 2006-05-01 · Beste Antwort

(Text siehe oben unter „Beste Antwort“.)

### [#14](https://www.typo3.net/d/42167-mehrsprachigkeit-programmieren-variable/14) · Unbekannter Benutzer · 2006-05-01

Bei mir erscheinen bei L=1 alle Datensätze, bei L=0 gar keine...

Irgendwas scheint hier nicht zu stimmen!

### [#15](https://www.typo3.net/d/42167-mehrsprachigkeit-programmieren-variable/15) · FalkWalter · 2006-05-01

Hallo, Andy,

was ich noch vergessen hatte zu erwähnen...

in der if-Abfrage für die Sprachwahl des ZWEITEN php-Abschnitts findest Du:

```php
(GLOBALS['TSFE']->sys_language_content == $this->internal['currentRow']['sys_language_uid'])
```

füge das mal in Deinen Code ein...

Deine Datensätze "übersetzt" hast aber schon, denke ich?

Grüßle
Falk

### [#16](https://www.typo3.net/d/42167-mehrsprachigkeit-programmieren-variable/16) · Unbekannter Benutzer · 2006-05-01

Ahha,, ich denke ich bin ein wenig weiter... Allerdings wird jetzt nur ein Record in der richtigen Sprache ausgegeben.

```php
<?
function makelist($res)	{
		$items=Array();
					// Liste erstellen
		while($this->internal['currentRow'] = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))	{
			
			// Gets the translated record if the content language is not the default language
    if ($GLOBALS['TSFE']->sys_language_content == $this->internal['currentRow']['sys_language_uid']) {
     $OLmode = ($this->sys_language_mode == 'strict'?'hideNonTranslated':'');
     $this->internal['currentRow'] = $GLOBALS['TSFE']->sys_page->getRecordOverlay('tx_cdcstaff_cdc_staff', $this->internal['currentRow'], $GLOBALS['TSFE']->sys_language_content, $OLmode);
	
			$items[]=$this->makeListItem();
	}
			// Ausgabe
				
		$out = '<div'.$this->pi_classParam('listrow').'>
			'.implode(chr(10),$items).'
			</div>'; 
		return $out;
	}
}
?>
```

### [#17](https://www.typo3.net/d/42167-mehrsprachigkeit-programmieren-variable/17) · FalkWalter · 2006-05-01

Hallo, Andy,

wahrscheinlich ist der Aufruf der makeListItem()-Funktion nicht mehr in der while-Schleife enthalten?

Grüßle
Falk

neue Version:

```php
function makelist($res) {
                $items=Array();
                                        // Liste erstellen
                while($this->internal['currentRow'] = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))      {
                       
                        // Gets the translated record if the content language is not the default language
    if ($GLOBALS['TSFE']->sys_language_content == $this->internal['currentRow']['sys_language_uid']) {
     $OLmode = ($this->sys_language_mode == 'strict'?'hideNonTranslated':'');
     $this->internal['currentRow'] = $GLOBALS['TSFE']->sys_page->getRecordOverlay('tx_cdcstaff_cdc_staff', $this->internal['currentRow'], $GLOBALS['TSFE']->sys_language_content, $OLmode);
       
                        $items[]=$this->makeListItem();
        }
     } //und hier die Klammer wieder rein
                        // Ausgabe
                               
                $out = '<div'.$this->pi_classParam('listrow').'>
                        '.implode(chr(10),$items).'
                        </div>';
                return $out;
        // } hier die Klammer raus
}
?>
```

### [#18](https://www.typo3.net/d/42167-mehrsprachigkeit-programmieren-variable/18) · Unbekannter Benutzer · 2006-05-01

Hi,
doch ist noch enthalten - die Formatierung bzw. Augabe ist per CSS nur in der makeListItem Funktion. Momentan wird nur der erste Datensatz angezeigt. :-o

### [#19](https://www.typo3.net/d/42167-mehrsprachigkeit-programmieren-variable/19) · Unbekannter Benutzer · 2006-05-01

Es geht!!! Hey, es lag an einer Klammer innerhalb der MakeListItem Funktion.... :-((

Vielen Dank für Eure Hilfe!!! Spitzenmäßig[/u]

### [#20](https://www.typo3.net/d/42167-mehrsprachigkeit-programmieren-variable/20) · FalkWalter · 2006-05-01

Hallo, Andy,

schön, dass es nun auch klappt. Kannst Du den Thread noch als gelöst markieren?

Danke und bis denne,
Falk

### [#21](https://www.typo3.net/d/42167-mehrsprachigkeit-programmieren-variable/21) · timinafrica · 2008-03-15

Ich hab auch noch nen Hinweis zu diesem Thema, der anderen vielleicht hilfreich sein könnte:

Ich hatte den Code korrekt eingebaut und getRecordOverlay() hat trotzdem keine Datensätze durch die passenden der anderen Sprache ersetzt. Es wurden einfach die originaldatensätze durchgeschleift.

Ich habe die ganze getRecordOverlay() auseinandergenommen bis ich auf folgendes Problem kam: Meine $row, die ich in die Funktion hineingab, kam aus folgendem Select:

$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('uid,title', 'tx_mytable', 'sys_language_uid IN (-1,0)', '', 'title');

Man beachte den ersten Paramter: 'uid,title'

Die Funktion getRecordOverlay() prüft aber auch ab, ob der Datensatz in der selben pid liegt wie der Originaldatensatz. Da in meinem Resultset $row['pid'] nicht vorkam (weil ich nur die Felder uid und title im SELECT hatte), wurde kein entsprechender übersetzter Datensatz gefunden.

Herzliche grüße,

Tim

<http://www-typo3-webdesign.biz>

---

Quelle: „Mehrsprachigkeit programmieren?! Variable?“, typo3.net, https://www.typo3.net/d/42167-mehrsprachigkeit-programmieren-variable
Beiträge von Mitgliedern des Forums. Bitte mit Link auf die Diskussion zitieren.
