Wie d_spaete schreibt, ist der Ansatz ganz ok, aber so noch unbrauchbar.
Lies mal ein wenig über die Variable, dann siehst du, wie sie aufgebaut ist.
Generell nach dem Schema:
Sprachkürzel[;Gewichtung],Sprachkürzel[;Gewichtung]
D.h. du musst den String am besten per explode in ein Array laden und es dann sortieren. Ich bin mir gerade nicht sicher, ob die Reihenfolge der Gewichtung entsprechen muss, daher würde ich eine Sortierung vornehmen. Wenn keine Gewichtung vorhanden ist, beträgt sie 1, ansonsten irgendwas kleiner gleich 1.
Bei mir ist es folgender String:
de,en;q=0.5
Also bevorzuge ich die Sprache deutsch, akzeptiere aber auch englisch.
Ganz grob und ungetestet runtergetippt:
<?php
$vorhandeneSprachen = array (
\'de\'=>\'/deu/\',
\'de-CH\',\'/sui/\',
\'de-AT\'=>\'/aut/\',
\'fr\'=>\'/fra/\'
);
$akzeptierteSprachen = explode(\',\',$_SERVER[\'HTTP_ACCEPT_LANGUAGE\']);
$sortierteSprachen=array();
foreach($akzeptierteSprachen as $sprache) {
list($kuerzel,$gewichtung) = array_pad(explode(\';\', $sprache, 2), 2, null);
if (empty($gewichtung)) {
$gewichtung=1;
}
else {
$gewichtung=str_replace(\'q=\',\'\',$gewichtung);
}
$sortierteSprachen[$kuerzel]=$gewichtung;
}
arsort($sortierteSprachen);
foreach($sortierteSprachen as $key => $value) {
if (in_array($key,array_keys($vorhandeneSprachen))) {
header(\'Location: www.example.com\'.$vorhandeneSprachen[$key]);
die;
}
}
//default
header(\'Location: www.example.com/\');
die;
?>
Du musst aber mehrere Punkte beachten.
Wenn jemand direkt auf example.com/sprachvariante/ surft, sollte das als Entscheidung für eine Sprache gewertet werden und keine Weiterleitung erfolgen. Sonst könnten auch Bots die Sprachvarianten nicht crawlen.
D.h. diese Abfrage der Benutzersprache erfolgt eigentlich nur ein einziges Mal, nämlich wenn jemand frisch auf deine Startseite kommt.
Das musst du auch bei der Struktur der Seite berücksichtigen. Wenn der Standard example.com/ wäre, muss z.B. eine Überprüfung über Sessions dazu, damit erkannt wird, ob der Benutzer nun frisch auf example.com zugreift, oder sich dafür entschieden hat, die Standardsprache zu verwenden.
Auf Flaggen oder eine andere Variante zur Sprachauswahl würde ich nicht verzichten, man kann nicht immer davon ausgehen, dass der HTTP_ACCEPT_LANGUAGE korrekt ist. Außerdem soll der Benutzer selbst entscheiden können, was er sehen will.
Und nicht zuletzt müssen dann auch Sitemaps korrekt erstellt und den Suchmaschinen präsentiert werden. Eine Notierung wie <link rel="alternate" hreflang="xy" href="andereSprachVariante"> für jede Sprache ist auch nicht verkehrt. Bläht den Quellcode etwas auf, dürfte aber förderlich sein.
[Edit 23.09, 16:21 - Wort ergänzt, Satz ergab wenig Sinn.
]
Make Seitenreport great again!
Beitrag erstellen
EinloggenKostenlos registrieren