Tutorial - Mehrsprachige Webseiten

Aus DynPG-Wiki
Wechseln zu: Navigation, Suche


Einleitung

In diesem Tutorial wollen wir uns mit der Mehrsprachigkeit von Webseiten beschäftigen. Wir wollen unsere Seite so ändern, dass sie in verschiedenen Sprachen angezeigt werden kann. Dabei soll der Sprachwechsel schnell und einfach durch einen Klick möglich sein.

Multilanguage Website Frontend.png

Um das zu erreichen, müssen wir drei Dinge tun:

  1. die Gruppenstruktur im Backend anlegen oder anpassen
  2. die Unterstützung für Mehrsprachigkeit im Frontend integrieren
  3. und ggf. Änderungen am Frontend von DynPG machen um bestimmte Sprachen vollständig zu unterstützen.

Beispiel-Code

Begleitend zu diesem Tutorial gibt es Beispiel-Code an dem sie die Integration der Mehrsprachigkeit nachvollziehen können. Bevor dieser bei Ihnen funktioniert müssen Sie neben den Änderungen im Backend, die in diesem Tutorial beschrieben werden, auch noch die Konfigurationsdatei (config.php) des Beispiels ändern. Weitere Hinweise finden Sie an den entsprechenden Stellen im Tutorial.

Beispiel-Code: Download

Gruppenstruktur im Backend anlegen

Wenn man eine mehrsprachige Webseite erstellen möchte, legt man im Backend zuerst Gruppen für alle Sprachen an, die unterstützt werden sollen. Die Namen sollten sinnvollerweise an der jeweiligen Sprache orientiert sein. Jeder dieser Gruppen wird anschließend die Gruppenstruktur zugwiesen, wie sie später auf der Webseite erscheinen soll. Das bedeutet, wenn wir eine feste Struktur haben (z.B. Punkte für Home, News, Kontakt etc.) legen wir diese für jede Gruppe einmal an und verwenden dabei die enstprechenden Namen in der Sprache (z.B. News in Englisch und Aktuell in Deutsch). Die Gruppenstruktur könnte dann z.B. aussehen, wie folgt:

Multilanguage Website Backend.png

Mehrsprachigkeit in die Webseite integrieren

In der Webseite brauchen wir nun noch Links für die jeweilige Sprache und ein angepasstes dynamisches Navigationsmenü.

Sprach-Buttons

Zuerst wollen wir uns um die Umstellung der Sprache kümmern. Die Sprache der Webseite wird üblicherweise über einen GET-Parameter, wie z.B: lang, bestimmt und geändert. Daher verwenden wir für jede Sprache diesen Parameter und weisen ihm als Wert einen Bezeichner für die aktuelle Sprache zu. In unserem Beispiel wollen wir Deutsch und Englisch unterstützen, wobei Deutsch die standardmäßig eingestellte Sprache ist. Für die Sprach-Buttons können wir zum Beispiel den folgenden Code verwenden, den wir an einer beliebigen Stelle einfügen können:

<a href="index.php"><img src="img/de.jpg" alt="German" border="0"></a>
<a href="index.php?lang=en"><img src="img/en.jpg" alt="English" border="0"></a>

Hier werden zwei Bilder mit entsprechenden Links für die beiden Sprachen angelegt. Bei einem Klick auf die englische Flagge wird der GET-Parameter lang=en übergeben. Dies kann so auch für alle weiteren Sprachen übernommen werden (z.B. lang=es für Spanisch). Für Deutsch brauchen wir an dieser Stelle keinen Parameter, da diese Sprache immer dann verwendet werden soll, wenn kein gültiger Wert für lang existiert.

Anpassung des dynamischen Menüs

Im zweiten Schritt müssen wir nun im Navigationsmenü die zur Sprache gehörigen Navigationspunkte einblenden. Dazu expandieren wir einfach den zugehörigen Gruppen-Baum, den wir im vorher im Backend angelegt haben und blenden alle anderen Punkte aus. Genauer gesagt tun wir dies umgekehrt. Wir blenden von Anfang an die in der Hierarchie am höchsten liegenden Gruppen aus (d.h. im Beispiel die Gruppen mit den Namen de, en, usw.) und expandieren den entsprechenden Sprach-Baum der ausgewählten Sprache, welcher dann als einziger sichtbar ist.

Im Code sieht dies wie folgt aus:


navigation.php

  1. <?php
  2. // DynPG menu settings
  3. $DynPG->SetParam_PlugIn_Template('DPGdynmenu', 'intelligent');
  4. $DynPG->SetParam_PlugIn_Param('DPGdynmenu', 'real_expand', TRUE);
  5. $DynPG->SetParam_PlugIn_Param('DPGdynmenu', 'order', Array('INDEX'));
  6. $DynPG->SetParam_PlugIn_Param('DPGdynmenu', 'sort', Array('ASC'));
  7.  
  8. // language settings
  9. $DynPG->SetParam_PlugIn_Param('DPGdynmenu', 'min_depth', 1); // hide top level groups
  10. // set the corresponding tree for the language
  11. if (isset($_GET['lang']) && $_GET['lang'] == 'en') {
  12. $DynPG->SetParam_PlugIn_Param('DPGdynmenu', 'expand_subtree', Array($enGroupID));
  13. $DynPG->setupLanguage('en');
  14. } else {
  15. $DynPG->SetParam_PlugIn_Param('DPGdynmenu', 'expand_subtree', Array($deGroupID));
  16. $DynPG->setupLanguage('de');
  17. }
  18.  
  19. $DynPG->SetupTemplate('uneditable');
  20. $DynPG->SetParam_A_Anytime(TRUE); // always show navigation
  21. $DynPG->SetParam_A_CategoryNavigation(FALSE); // no breadcrumb navigation
  22. $DynPG->SetParam_A_PrintNavigation(FALSE); // no print button
  23. $DynPG->SetParam_A_ArticleHeader(FALSE); // no article header
  24. $DynPG->SetParam_A_Article($navigationArticleID); // set article which contains the dynamic menu
  25.  
  26. $DynPG->Write_Article();
  27. $DynPG->SetupTemplate('default'); // always set template back to default if you changed it before
  28. ?>


Interessant sind die Zeilen 9 - 17. Hier werden zuerst die höchsten Gruppen ausgeblendet, indem die minimalie Tiefe für anzuzeigende Gruppen auf 1 gesetzt wird. Anschließend wird der GET-Parameter ausgewertet und der entsprechende Unterbaum expandiert. $enGroupID und $deGroupID stehen dabei für die IDs der jeweiligen Sprachgruppen im Backend. Diese müssen sie ggf. ersetzen oder sofern sie das Code-Beispiel benutzen, in der config.php abändern. Die IDs für die Gruppen finden Sie in der Gruppenübersicht des Backends in der ersten Spalte.

Spracheinstellung des Frontends

Wenn wir uns den obigen Code nocheinmal genauer anschauen, finden wir dort zwei Anweisungen der Form $DynPG->setupLanguage(XX):


navigation.php

<?php
    // language settings
    $DynPG->SetParam_PlugIn_Param('DPGdynmenu', 'min_depth', 1);  // hide top level groups
    // set the corresponding tree for the language
    if (isset($_GET['lang']) && $_GET['lang'] == 'en') {
        $DynPG->SetParam_PlugIn_Param('DPGdynmenu', 'expand_subtree', Array($enGroupID));
        $DynPG->setupLanguage('en');
    } else {
        $DynPG->SetParam_PlugIn_Param('DPGdynmenu', 'expand_subtree', Array($deGroupID));
        $DynPG->setupLanguage('de');	
    }
?>


Diese bewirken, dass das Frontend von DynPG auf die jeweilige Sprache umgestellt wird. So werden z.B. die weiterführenden Links bei Artikelübersichten von "mehr" auf "more" abgeändert. DynPG besitzt Sprachanpassungen an Deutsch, Englisch, Spanisch, Italienisch und Französisch, welche sich in jeweils separaten Dateien befinden. Im CMS-Ordner finden Sie diese Dateien unter "/localised/" und können sie ggf. dort ändern und anpassen.

Möchten Sie nun noch weitere Sprachen unterstützen, dann legen Sie einfach eine weitere Datei dieser Art an und passen Sie die Übersetzungen an die Sprache an. Machen Sie dazu eine Kopie von einer der vorhandenen Dateien und benennen Sie diese um. Hierbei ist die Struktur des Dateinamens von Bedeutung, da z.B. ein Befehl der Form $DynPG->setupLanguage('en'); das Laden der Datei "en.lang.php" auslöst. Möchten Sie nun also beispielsweise Italienisch als zusätzliche Sprache unterstützen, dann legen sie eine Datei "it.lang.php" an und passen Sie diese an. Anschließend können Sie die Sprache mit dem Befehl $DynPG->setupLanguage('it'); laden. Ein Befehl der Form $DynPG->setupLanguage(XX); wird also immer in das Laden der Datei "XX.lang.php" im localised-Ordner von DynPG umgesetzt.