Sprache des Benutzers oder Browsers erkennen (PHP)

Es gibt eine Menge Scripts im Web, die die Brwosersprache mithilfe von PHP erkennen lassen wollen. Die meisten davon sind recht zweckmäßig, allerdings vernachlässigen sie einige Fälle. Zum Beispiel gehen diese Scripts oft davon aus, dass die erste übermittelte Sprache in den Accept-Headers auch die bevorzugte Sprache ist. Das muss aber nicht zwingend sein. Zudem werden auch Gewichtungen oft nicht beachtet.

Mit der unten stehenden Funktion ermitteln Sie zuverlässig die bevorzugte Sprache des Nutzers, sofern der Accept-Language-Header gesetzt ist. Die Funktion beachtet die Gewichtung (sofern nicht vorhanden wird sie gemäß RFC 2616 auf 1.0 gesetzt) und die Reihenfolge spielt keine Rolle.

Die Funktion gibt immer die beiden Buchstaben zurück, die die Sprache bestimmen. Also beispielsweise „de“ wenn der Accept-Language-Header „de-de“ oder auch „de“ als höchste Gewichtung gesetzt hat. Wenn Sie die volle Bezeichnung wünschen, entfernen Sie einfach die Substr-Funktion in Zeile 16.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
 * Detect Browser Language
 */
function getPreferredLanguage(){
 
	$acceptedLanguages = @explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	$preferredLanguage = null;
	$maxWeight = 0.0;
 
	foreach((array)$acceptedLanguages as $acceptedLanguage){
 
		$weight = (float)@substr(explode(';', $acceptedLanguage)[1], 2);
		if(!$weight){$weight = 1.0;}
 
		if($weight > $maxWeight){
			$preferredLanguage =  substr($acceptedLanguage, 0, 2);
			$maxWeight = $weight;
		}
	}
 
	return $preferredLanguage;
}
  1. Hallo Martin, danke dafür. Ich habe nicht ganz verstanden, wie gebe ich die Sprache aus. Ich habe versucht mit echo $preferredLanguage, hat aber Fehler angezeigt.
    Habe ich richtig verstanden, dass die Benutzer Sprache in die variable
    $preferredLanguage gespeichert wird? Wenn ja wie gebe ich das aus? Ich möchte z.B. wenn die Sprache „de“ ist dass die Benutzer auf eine Seite umgeleitete werden, und wenn „en“ ist auf einer andere….Vielen Dank!

    Ach ich bin doof 🙂 ich habs gelöst -> die sprache rufe ich mit echo getPreferredLanguage();

  2. Bei mir hat das Skript nicht funktioniert (nur weiße Fläche im Browser).
    Ich glaube, in Zeile 12 muss „[1]“ entfernt werden

Einen Kommentar hinterlassen

css.php