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;
}