Sprachabhängige Inhalte in Templates bereitstellen

Bei mehrsprachigen Projekten ist es oft notwendig, abhängig von der Sprache, unterschiedliche Inhalte auszugeben. In Contao gibt er hier mehrere Möglichkeiten.

Wenn der Besucher je nach Browsersprache unterschiedliche Inhalte sehen soll, musst du zunächst für jede Sprache komplett eigene Seitenbäume anlegen und die Einstellung bei den Startpunkten der Seite konfigurieren.

In den folgenden Beispielen gehen wir von einer Tabelle aus, die sprachabhängige Spaltenüberschriften erhalten soll.

Sprache per Inserttag festlegen

Contao stellt das Inserttag {{iflng}} zur Verfügung. Die Insertags funktionieren in Contao 3 und Contao 4.

Über die Ergänzung durch ein Sprachkürzel funktioniert das beispielsweise so:

{{iflng::de}}Hallo Welt!{{iflng::en}}Hello World!{{iflng}}

Wenn die Sprache nun Englisch ist, wird nur „Hello World!“ ausgeben, bei Deutsch entsprechend „Hallo Welt!“.

Auf die Tabelle bezogen sieht das etwa so aus:

<table>
<thead>
<tr>
<th>{{iflng::en}}Heading 1{{iflng}}{{iflng::de}}Überschrift 1{{iflng}}</th>
<th>{{iflng::en}}Heading 2{{iflng}}{{iflng::de}}Überschrift 2{{iflng}}</th>
</tr>
…

Logik im Template

Für umfangreichere sprachabhängige Bereiche kann das Inserttag ungünstig sein. In diesem Fall ist reines PHP vielleicht geschickter.

Wenn du mit if und else, oder break und case arbeiten möchtest, kannst du im Template auch so auf die Sprache zugreifen:

<?php echo $GLOBALS['TL_LANGUAGE']; ?>

Auf die Tabelle bezogen könnte das so aussehen:

<table>
<thead>
<tr>
<?php if($GLOBALS['TL_LANGUAGE'] == 'en'): ?>
<th>Heading 1</th>
<th>Heading 2</th>
<?php elseif($GLOBALS['TL_LANGUAGE'] == 'de'): ?>
<th>Überschrift 1</th>
<th>Überschrift 2</th>
<?php endif; ?>
</tr>
…

Globale Labels definieren

Manchmal bietet es sich an, die sprachabhängigen Inhalte auch auszulagern, damit sie global verfügbar sind. Außerdem wird damit das Template nicht zu voll und macht den Code im Template lesbarer.

Dafür gibt es in Contao 3 die Datei: system/config/langconfig.php.

Genauso wie bei anderen Systemdateien (localconfig.php und dcaconfig.php) wird die langconfig.php bei Updates nicht überschrieben und kann somit sicher angepasst werden. In dieser Datei kann für jede Sprache eine „Beschriftung“ definiert werden, die im Template ausgelesen wird.

Eine solchermaßen angepasste Datei könnte so aussehen:

if ($GLOBALS['TL_LANGUAGE'] == 'de')
{
	$GLOBALS['TL_LANG']['meinetabelle']['spalte1'] = 'Deutsches Label';
}
elseif ($GLOBALS['TL_LANGUAGE'] == 'en')
{
	$GLOBALS['TL_LANG']['meinetabelle']['spalte1'] = 'Englisches Label';
}
else
{
	$GLOBALS['TL_LANG']['meinetabelle']['spalte1'] = 'Fallback-Label';
}

In jedem beliebigen Template kann nun auf das Label zugegriffen werden. Was tatsächlich ausgegeben wird, entscheidet dann die Einstellung der langconfig.php.

<table>
<thead>
<tr>
<th><?php echo $GLOBALS['TL_LANG']['meinetabelle']['spalte1']; ?></th>
…

Dabei kann die Bezeichnung dieses Labels frei vergeben werden („meinetaballe“ und „spalte1“).

Verwende am besten statt „meinetabelle“ möglichst eine projektbezogene Bezeichnung, um Namenskonflikte mit installierten Modulen oder ähnlichem zu verhindern.

Hinweis: Unter Contao 4 sollte die langconfig.php nicht mehr verwendet werden. Hier werden die Sprachdateien unter '/app/Resources/contao/languages' definiert. Eine eigene Anleitung folgt.

Tutorial getestet mit Contao:
  • 3.5
  • 4.3
  • 4.4
  • 4.5
Hat dir dieser Artikel gefallen?

Willst du in Zukunft keinen Artikel verpassen?
Dann trage hier deine E-Mailadresse ein und klicke auf "Abonnieren". Du erhältst regelmäßig aktuelle Infos über Contao und die Contao-Academy.

Wir geben deine Daten niemals an Dritte weiter! Du kannst deine E-Mailadresse jederzeit mit nur 1 Klick wieder aus unserem System löschen. Datenschutzhinweis

Über den Autor
Christian Feneberg (Gründer Fenepedia)

Christian Feneberg ist der Gründer der Contao-Academy und nutzt seit 2010 Contao. Neben Contao begeistert er sich für Online-Marketing und SEO.

Folge Christian jetzt auf Twitter, Facebook oder Xing.

Einen Kommentar schreiben