PHP Snippet – Redirect bei mehrsprachigen Webseiten

Ein kurzer Schnipsel für eine HTTP-Weiterleitung mittels PHP am Beispiel einer mehrsprachigen Webseite.

Angenommen, wir haben eine mehrsprachige Webseite. Unter www.my-company.com ist der englische Inhalt zu finden und unter www.my-company.com/de/ der deutsche. Nun soll der Benutzer automatisch zur deutschen Seite weitergeleitet werden, wenn der Browser deutsch als bevorzugte Sprache mitsendet.

HTTP_ACCEPT_LANGUAGE

Diese Information ist in der Servervariable $_SERVER[‚HTTP_ACCEPT_LANGUAGE‘] gespeichert. Eine solche Liste der bevorzugten Sprachen, absteigend sortiert, könnte z.B. so aussehen:


["HTTP_ACCEPT_LANGUAGE"]=>"de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4"

Weiterleitung entsprechend der Länderkennung

Aus diesem String können wir nun mit PHP die Länderkennung auslesen und somit zur entsprechenden Sprachversion der Webseite weiterleiten.


if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){
  if(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) == "de") {
    header("location: http://www.my-company.com/de/");
  }
}

Setz dich. Nimm dir ’n Keks.

Jetzt wollen wir aber von der deutschen Seite auch wieder auf die englische Seite zurückwechseln können, z.B. über einen Link. Im Moment würden wir stets wieder zurück auf die deutsche Seite geleitet werden.

Um das zu verhindern, können wir z.B. ein Cookie setzen, über welches wir uns merken, dass die Weiterleitung bereits stattgefunden hat und dem Benutzer mit deutscher Länderkennung nun auch der Besuch der englischen Seite erlauben sein soll.


$cookieName = "redirected";
setcookie($cookieName, true, time() + (86400 * 30), "/"); // 1 Tag

Vorm Weiterleiten können wir nun prüfen, ob das Cookie bereits gesetzt wurde. Ist das nicht der Fall, soll es gesetzt werden und die Weiterleitung erfolgen.


if(!isset($_COOKIE[$cookieName])) {
  setcookie($cookieName, true, time() + (86400 * 30), "/"); // 1 Tag
  header("location: http://www.my-company.com/de/");
}

Alles zusammen

Zur Zusammenfassung noch mal der gesamte Codeschnipsel, wartend auf unsere Freunde Copy & Paste.

if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){
  if(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) == "de")) {
    $cookieName = "redirected";
    if(!isset($_COOKIE[$cookieName])) {
      setcookie($cookieName, true, time() + (86400 * 30), "/"); // 1 Tag
      header("location: http://www.my-company.com/de/");
    }
  }
}

Ich hoffe wie immer, diese erstbeste Lösung war hilfreich.

Ähnliche Beiträge

Schreibe einen Kommentar

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