Philipp Guttmann, LL. B.

Tutorial: Einführung zur Erstellung einer bilingualen Website

Tutorial und Anleitung für die Erstellung einer bilingualen Website mit PHP und MySQL als erste Einführung mit Grundlagen, Hilfen und Tipps

Mit einer kleinen Website für das Computerspiel Avorion (Steam) habe ich mein erstes kleines bilinguales Webprojekt fertiggestellt. Hierfür war es erforderlich, sowohl in der Datenbank als auch im Programmiercode eine Umgebung zu schaffen, in der die (unabhängig von der Sprache) gleichen Seiten unterschiedliche Textausgaben erhalten. Zudem muss ein reibungsloser Wechsel zwischen den Sprachversionen stattfinden können und auch die sprachtypischen Besonderheiten in der Schreibweise von Zahlen, Daten und Uhrzeiten müssen beachtet werden. Im Folgenden möchte ich in Ansätzen als Einführung zeigen, wie man ein bilinguales Projekt auf Basis von PHP und MySQL beginnen kann.

Aufbau der MySQL-Tabellen

Zunächst einmal müssen wir uns über den Aufbau der MySQL-Tabellen klar werden. Neben der bekannten ID, die wir fortlaufend vergeben, kommen bei multilingualen Seiten zwei weitere Spalten hinzu: Site_ID und Lang, also die ID für die Seite und die zugehörigen Sprachvarianten.

Möchten wir beispielsweise ein Impressum anlegen, vergeben wir dafür die Site_ID "1". Wir legen uns für die deutsche und englische Variante jeweils Datenbankeinträge an, einmal mit Lang "de" und einmal mit "en". Nun können wir für beide Einträge separat Titel, Beschreibung, Seiteninhalt sowie die Bezeichnung als URL (falls abweichend vom Titel) in der Datenbank abspeichern.

Vorbereitungen und sprachtypische Einstellungen

Am Anfang müssen einige wichtige Vorbereitungen getroffen werden:

Abfrage der Subdomain und Festlegung der Sprache

Machen wir in erster Linie eine deutschsprachige Seite, werden wir andere Sprachen als Subdomains mit Ländercode anlegen. Hierfür überprüfen wir, ob es eine Subdomain gibt, anderenfalls wählen wir unsere Standardsprache:

if (explode('.', $_SERVER['HTTP_HOST'])[0] == 'en') {define('LANGUAGE', 'en');} else {define('LANGUAGE', 'de');}

Die Sprache kommt dann auch gleich in den html-Tag am Anfang unserer Seite:

<html lang="'.LANGUAGE.'">

Schreibweise von Zahlen

Nachdem wir die Sprache als Konstante LANGUAGE festgelegt haben, legen wir davon ausgehend die Schreibweise der Zahlen fest:

if (LANGUAGE == 'en') { $dec_point = '.'; $thousands_sep = ','; } else { $dec_point = ','; $thousands_sep = '.'; }

Diese Variablen brauchen wir, sofern wir Zahlen auf der Website anzeigen lassen und diese mit number_format() bearbeiten.

Schreibweise eines Datums

Auch abhängig von LANGUAGE legen wir die Schreibweise eines Datums fest. Das könnte dann so geschehen:

if (LANGUAGE == 'en') { $date_format = 'd F Y H:i:s a'; } else { $date_format = 'd.m.Y H:i:s'; }

Diese Variable brauchen wir nun, wenn wir ein Datum von der allgemeinen W3C-Schreibweise in deutsche oder englische Schreibweise umwandeln:

$date = new DateTime($date); $date->format($date_format);

Texte außerhalb der MySQL-Datenbank

Nicht alle Texte müssen in eine Datenbank. Teilweise hat man nur einzelne Wörter, die in unterschiedlichen Sprachversionen erscheinen sollen. Dafür bietet es sich an, ein Array in PHP anzulegen, beispielsweise um das Wort "Kontakt" im Englischen als "Contact" darstellen zu lassen:

$Texts = array('de' => array('Kontakt'), 'en' => array('Contact'));

Abfrage der aufgerufenen Seite

Wird eine Seite durch GET aufgerufen, vergleichen wir den dann als Variable $GET_URL bezeichneten Text mit den in der Datenbank hinterlegten Text für URL und erhalten so unsere Site_ID als Variable $Current_Site_ID und weitere Elemente für die aktuelle Seite:

SELECT Site_ID, Title FROM Sites WHERE URL = '$GET_URL' AND Lang = {LANGUAGE}

Nun können wir im zweiten Schritt erfahren, wie die URL der anderen Sprachversionen lauten und uns eine Liste dieser zurückgeben lassen:

SELECT URL, Lang FROM Sites WHERE Site_ID = '$Current_Site_ID'

Mithilfe dieser Liste können wir nun ein Array erstellen, das abhängig von LANGUAGE die alternativen URLs beinhaltet. Dabei haben wir unsere Subdomain bereits festgelegt. Das Array könnte beispielsweise dann so aussehen:

$URLS = array('de' => 'Impressum', 'en' => 'Imprint');

Jetzt haben wir die Möglichkeit, die Buttons mit der Auswahl der Sprachversionen mit den passenden URLs zu bestücken.

SEO: Verknüpfung der Seiten im HTML-head

Damit Suchmaschinen die unterschiedlichen Sprachversionen der Seite nicht fälschlicherweise als jeweils eigene Seite betrachten, müssen wir im head von HTML die verschiedenen Sprachversionen mit der zugehörigen URL aufführen. Hierfür nehmen wir uns unser Array $URLS zu Hilfe:

foreach ($URLS as $Key => $URL) { $Link = 'https://'.($Key != 'de'?$Key.'.':NULL).'meinedomain.de/'.$URL; $hreflangs .= '<link rel="alternate" hreflang="'.$Key.'" href="'.$Link.'" />'; }

Die nun erzeugte Variable $hreflangs können wir im HTML-head unterbringen.

Weitergehende Fragen

Dieser Artikel hat nicht den Anspruch, alle Fragen zu beantworten, sondern soll eine erste Einführung in das Thema geben. Wenn Sie selbst eine bilinguale Seite auf Basis von PHP und MySQL entwickeln, können Sie mir aber bei Fragen gerne eine E-Mail an ed.nnamttug-ppilihp@liam schreiben und ich versuche mein Bestes, um zu helfen! :)