Tutorial: Einführung zur Erstellung einer bilingualen Website
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! :)