Sprachumschalter themen (mit URL Alias)

Immer wieder benötige ich einen flexiblen und anpassbaren Sprachumschalter (language switcher) für Drupal 6. Zum Beispiel auch für diese Webseite:

Leider lässt die Implementation des Sprachschalters im i18n Module zu wünschen übrig. Der Sprachumschalter des i18n-Modules ist nicht frei konfigurierbar, z.B. nur Flaggen anzeigen etc. Auch sonst hat meine Erfahrung gezeigt, dass das i18n-Modul mit Vorsicht zu geniessen ist. Es gibt viele Stolpersteine und Bugs.

Wie habe ich die Sprachflaggen realisiert?

Es gibt insgesamt 2 Module, die mehr oder weniger das gleiche bieten. Das erstere ist jedoch ungeeignet:

Consistent Language Interface

http://drupal.org/project/languageinterface

Dieses Modul kann zwar Flaggen darstellen und auch die Reihenfolge der Sprache idt auswählbar. Für eine Seite mit URL Aliases ist aber von diesem Modul abzuraten. Der Entwickler generiert die Links nicht mit der l()-Funktion von Drupal. Aus diesem Grund ist das Modul nicht in der Lage, URL Aliase anzuzeigen. Die Adressen werden immer im Format /node/<langprefix>/<nodeid>/<remaining-params> ausgegeben. 

Dies ist definitiv nicht suchmaschinenfreundlich. Google würde jede Webseite automatisch bestrafen, weil alle Inhalt doppel erreichbar wären. Und zwar:

  1. unter dem URL Alias und
  2. unter der erwähnten URL des Sprachschalters.

Aus diesem Grund ist das Modul ungeeignet.

Language Icons

http://drupal.org/project/languageicons

Dieses Modul wurde vom i18n-Entwickler erstellt und ergänzt die Sprachlinks mit Flaggen. Es ist jedoch nicht möglich über eine Theming-Funktion zu erreichen, das beispielsweise NUR Flaggen angezeigt werden. Auch die Reihenfolge der Flaggen kann nicht definiert werden. Aus diesem Grund genügt auch dieses Modul meinen Anforderungen nicht.

Eigene Theming Funktion

Die maximale Flexibilität bietet eine eigene Theming-Funktion, die in die template.php Datei des eigenen Themes eingefügt werden kann. Damit das nachfolgende Beispiel mit Flaggen funktioniert, müssen vorgängig folgende Module installiert aktiviert werden:

Code

page.tpl.php
...
<div id="language-switch" class="clearfix floatbox">
  <?php print language_switcher() ?>
</div>
...
template.php
<?php
function language_switcher() {
  $languages = language_list('enabled');
  $links = array();
  foreach ($languages[1] as $language) {
    if ($language->language != $current) {
      $links[$language->language] = array(
        'href'       => $_GET['q'],
        'title'      => '',//$language->native, Optional Sprachnamen anzeigen
        'language'   => $language,
        'attributes' => array('class' => 'language-link'),
      );
    }
  }

  //URL Alias Unterstützung
  translation_translation_link_alter($links, $_GET['q']);


  i18n_translation_link_alter($links, $_GET['q']);

  // Flagge zum Sprachlink hinzufügen
  if (function_exists('languageicons_translation_link_alter'))
    languageicons_translation_link_alter($links, $_GET['q']); 

  // Link anpassen, Z.B. das Bild im Link Themen.
  if ($icon = theme('languageicons_icon', $language, NULL)) {
     $links[$language->language]['title'] = theme('languageicons_place', $link['title'], $icon);
     $links[$language->language]['html'] = TRUE;          
  }

	//Falls die aktuelle Sprache ausgeblendet werden soll,
	//die nachfolgenden Zeilen auskommentieren
  //$current = i18n_get_lang();
  //unset($links[$current]);

 
  //Sprachschalter nur anzeigen, falls die Inhalte auch übersetzt wurden
  if($node = menu_get_object()) {
    if(!$node->tnid) {
      return;
    }
  }
  
  return theme('links', $links, array());
}
?>