Aufbau einer multilingualen Website

Angeregt durch eine Anfrage eines Users im Forum von ABAKUS und da ich mich mit diesem Thema im Rahmen meiner eigenen php-CMS-Tools selbst schon beschäftigt habe, stelle ich hiermit meine persönlichen Überlegungen und Anregungen online, wie man sinnvoll an die Erstellung einer multilingualen Website herangehen könnte. Das Konjuktiv ist mit Absicht gewählt, den sicherlich gibt es noch Dutzende von anderen Herangehensweisen, die man wählen könnte. Ob diese besser oder schlechter sind, muss jeder für sich beantworten.

Grundsätzliches

Worum geht es bei einer multilingualen Website? Fast jeder, der sich schoneinmal in einem Forum angemeldet hat, kennt es sicherlich: die Option, eine Sprache auszuwählen, in der er Feldbezeichungen, Hinweistexte etc. angezeigt bekommt. Damit ermöglicht man Besuchern, die aus einem anderen Sprachraum als der Standardsprache des Forums kommen, dieses benutzen zu können. Und genauso kann es sein, dass eine Website nicht nur z.B. für Besucher aus dem deutschsprachigen Raum erstellt wird, sondern parallel die Inhalte auch in einer oder mehreren anderen Sprachen wie z.B. Englisch und / oder Französisch angezeigt werden sollen.

Einfache Variante

Der einfachste Weg, der sicherlich bei kleinen Websites mit wenigen Unterseiten genutzt wird, ist die Erstellung des Inhalts in sprachbezogenen HTML-Dateien, also z.B.:

  • index.html – deutsche Startseite
  • index-englisch.html – englische Startseite
  • index-franz.html – französische Startseite

Parallel legt man dann für jede Sprache eine separate Navigation fest und der User hat auf jeder Seite die Option, sich die jeweilige Seite auch in einer anderen Sprache anzeigen zu lassen.

Vorteile

  • Einfache Handhabung
  • bei kleinen Websites schnell zu erstellen
  • Grundkenntnisse in (x)html reichen aus

Nachteile

  • hoher Organisationsaufwand bei grösseren Websites
  • hoher manueller Pflegeaufwand
  • Übersichtlichkeit der Dateistruktur geht schnell verloren

Da dieses Modell als selbsterklärend bezeichnet werden kann, habe ich auch Beispieldateien verzichtet.

Der bessere Weg: Nutzung von PHP

Für diejenigen, die bisher ausschliesslich mit klassischen (x)html ihre Websites erstellt haben: PHP ist eine Scriptsprache mit der dynamische Websites erstellt werden können. Eine sehr gute Beschreibung findet sich – wie in vielen Fällen – bei Wikipedia. Die Erstellung einfacher Anwendungen kannr echt schnell erlernt werden und vor allem ist die direkte Einbindung des (x)html-Codes unproblematisch möglich. Daher eignet sich PHP auch hervorragend für die Umsetzung einer multilingualen Website.

Für das Grundgerüst werden folgende Dateien benötigt:

  • index.php – Startdatei
  • constants.php – Festlegung der Grunddaten
  • language/deutsch.php – Deutsche Sprachdatei
  • language/englisch.php – Englische Sprachdatei

Es steht parallel eine Demo-Version 1 sowie ein Download-Paket 1 zur Verfügung.

Aus Gründen der Nachvollziehbarkeit fange ich bei der Darstellung der Dateien von hinten an:

Sprachdateien

Ich nehme als Beispiel die deutsche Sprachdatei:

  1. <?php
  2. if ( !defined('IN_TOOL') )
  3. { die("<strong>Fehlerhafter Aufruf</strong>"); }
  4. $language['hinweis'] = "Deutsche Sprachauswahl";
  5. $language['sprachauswahlfehler'] = "Die von Ihnen gewünschte Sprache steht leider nicht zur Verfügung";
  6. $language['text'] = "Hier steht dann der gewünschte Text in deutsch.";
  7. ?>

Den Hintergrund der Zeilen 2-3 erläutere ich am Ende dieses Artikels unter Exkurs

Die Sprachdateien sind vom Grundsatz her ganz einfach aufgebaut. Es wird ein Array namens $language genutzt, in den die einzelnen Ausgabetexte eingetragen werden. Die anderen Sprachdateien sind genauso aufgebaut, nur dass der Inhalt der Variablen dann in der jeweiligen Sprache definiert werden.

constants.php

  1. <?php
  2. if ( !defined('IN_TOOL') )
  3. { die("<strong>Fehlerhafter Aufruf</strong>"); }
  4. $lang_array = array("deutsch","englisch");
  5. define('LANG_STANDARD', "deutsch");
  6. ?>

In der Zeile 4 wird zunächst in einem Array festgelegt, welche Sprachen unterstützt werden. Das ist sinnvoll, damit fehlerhafte Aufrufe angefangen werden können, also wenn Besucher manuell eine andere Sprache aufrufen wollen. In der Zeile 5 wird dann festgelegt, welche Sprache als Standard festgelegt wird.

index.php

So, und nun zur Hauptdatei:

  1. <?php
  2. define('IN_TOOL', 1);
  3. include("constants.php");
  4. $lang = (trim($_GET['lang']) != "") ? $_GET['lang'] : LANG_STANDARD;
  5. if (in_array($lang, $lang_array))
  6. {
  7. include("language/" . $lang . ".php");
  8. $hinweis_text = $language['hinweis'];
  9. }
  10. else
  11. {
  12. include("language/" . LANG_STANDARD . ".php");
  13. $hinweis_text = $language['sprachauswahlfehler'];
  14. }
  15. ?>
  16. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  17. <html xmlns="http://www.w3.org/1999/xhtml">
  18. <head>
  19. <title>f-thies.de - Aufbau einer multilingualen Website - Demo 1</title>
  20. <body>
  21. <div>
  22. <h1>Aufbau einer multilingualen Website - Demo 1</h1>
  23. <p>Sprachauswahl | <a href="http://www.f-thies.de/">Deutsch</a> | <a href="http://www.f-thies.de/dateiname.php?lang=englisch">Englisch</a> | <a href="http://www.f-thies.de/dateiname.php?lang=franz">Französisch</a> |</p>
  24. <p>Hinweis: <?php echo $hinweis_text;?></p>
  25. <p>Text:<br /><?php echo $language['text'];?></p>
  26. </div>
  27. </body>
  28. </html>

In der Zeile 3 wird als erstes die constants.php mit den Grunddaten eingelesen.
In der Zeile 4 wird nun geprüft, ob beim Aufruf die Variable lang mit einer Sprachanfrage übergeben wurde (index.php?lang=xxxxx) oder nicht. Wenn ja, wird der Inhalt übernommen, wenn nein, wird die Standardsprache verwendet.
In der Zeile 5 wird dann geprüft, ob die übergebene Sprache überhaupt vorhanden ist (Prüfung anhand des Arrays in der constants.php). Wenn ja, wird diese weiter genutzt, wenn nein, wird doch die Standardsprache genutzt. Und es wird jeweils die entsprechende Sprachdatei im Verzeichnis language eingelesen.
In den folgenden Zeilen kommt dann der HTML-Part mit der Ausgabe der entsprechende Inhalte.

Vorteile

  • übersichtliche Dateistruktur
  • Zusätzliche Sprachen lassen sich durch Übersetzungen der Sprachdateien schnell und einfach einrichten

Nachteile

  • hoher manueller Pflegeaufwand bei grösseren Websites
  • php-Grundkenntnisse notwendig
  • Keine klassische Linkstruktur

Der Aufruf der Sprachseiten mittels index.php?lang=xxxxx ist sicherlich nicht optimal und wird nicht von allen Suchmaschinen verstanden. Daher gibt es auch eine Option zur weiteren Optimierung:

Nutzung von PHP und mod_rewrite

mod_rewrite ist ein Modul für Apache, den am häufigsten verwendeten Webserver im Internet, und dient der Manipulation von URLs, wobei Manipulation hier nicht negativ gemeint ist. Mit diesem Modul kann eine URL anhand von Regeln umgeschrieben (engl. to rewrite) werden, so dass man als eine Anwendungsmöglichkeit einen dynamischen Link nach aussen hin wie einen statischen Link verwenden kann.

Anstelle von …../index.php?lang=englisch nutzt der Besucher z.B. folgenden Link: ……/englisch/. Das ist für den Besucher nicht nur einfacher nachzuvollziehen, sondern auch für Suchmaschinen einfacher zu verarbeiten. Eine hervorragende Seite, um sich mit diesem Thema zu beschäftigen, ist modrewrite.de

Sofern der Webserver mod_rewrite nutzt, muss im Root-Verzeichnis eine Datei namens .htaccess mit folgendem Inhalt angelegt werden:

  1. RewriteEngine On
  2. Options +FollowSymlinks
  3. RewriteBase /demo/multilingual2/
  4. RewriteRule ^(.*)/(.*)\.html$ $2.php?lang=$1 [L]
  5. RewriteRule ^(.*)/$ index.php?lang=$1 [L]
  6. RewriteRule ^(.*)\.html$ $1.php [L]

Auch hierfür gibt es eine Demo-Version 2 sowie ein Download-Paket 2.

In den Zeilen 1+2 wird die RewriteEngine aktiviert.

In der Zeile 3 wird das Standardverzeichnis für die nachfolgenden Regeln festgelegt, i.d.R. steht hier einfach ein / für das Rootverzeichnis.

Mit den Zeilen 4-6 werden dann die Linkaufruf so umgeschrieben, dass die entsprechenden php-Dateien aufgerufen werden.

Vorteile

  • übersichtliche Dateistruktur
  • Zusätzliche Sprachen lassen sich durch Übersetzungen der Sprachdateien schnell und einfach einrichten
  • Einfache, nachvollziehbare und Suchmaschinenfreundliche URLs

Nachteile

  • hoher manueller Pflegeaufwand bei grösseren Websites
  • php-Grundkenntnisse notwendig
  • mod_rewrite-Kenntnisse notwendig

Ergebnis

Durch die Nutzung von PHP und ggf. unter Einbindung von mod_rewrite können multilinguale Websites deutlich einfacher und effektiver erstellt werden, als mit klassischen HTML-Dateien.

Natürlich sind hierbei weitere Optimierungen angeraten und sinnvoll, insbesondere wenn man umfangreichere Websites erstellen möchte:

  • Das Erfassen des Contents in Sprachdateien ist wenig effizient und sehr aufwendig in der Anpassung. Besser wäre es, den Content über eine Datenbank-Lösung zu pflegen.
  • Anstelle die optionalen Sprachen manuell in ein Array einzutragen, könnte man auch die vorhandenen Sprachdateien im Verzeichnis language auslesen und das Array dynamisch anlegen.

Exkurs: Konstante IN_TOOL

Warum definiere ich in der index.php eine Konstante IN_TOOL und frage diese in den anderen Dateien ab?

Hierbei handelt es sich um einen kleinen Trick, um den direkten Aufruf von PHP-Dateien zu verhindern, die nur von anderen PHP-Dateien eingelesen werden sollen. Nur wenn diese Konstante definiert ist, werden die anderen Dateien auch ausgeführt – bei einem direkten Aufruf, wird dieser unterbunden. Damit ist es nicht möglich, von aussen diese Dateien zum Ausnutzen von möglicherweise vorhandenen Sicherheitslücken zu missbrauchen.

Buchempfehlungen

Ein Gedanke zu „Aufbau einer multilingualen Website“

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.