Sprache bei HTTP_USER_AGENT

Shooter2k

Erfahrenes Mitglied
Heidiho Forum,

ich bin gerade dabei mir einen counter zu schreiben. Es soll auch die Browsersprache ausgelesen werden.

Das mache ich in dieser Funktion:

function lang($lang){
if($lang==true){


$agent=$_SERVER['HTTP_USER_AGENT'];
$lang ="unknown";

if(strstr($agent, "de"))
$lang="Deutsch";

elseif (strstr($agent, "en"))

$lang="Englisch";
return $lang;


}



}

Kann mir jemand sagen wo ich die anderen sprach/ländercodes finde?
Dmait ich das hier fortführen kann :

if(strstr($agent, "de"))
// für japan vieleicht
if(strstr($agent, "jp"))

danke
gruß
henry
 
Hallo!

Kommt auf den User Agent an..... so gibt es z.b. de-DE und de-AT..... der 1. Wert steht für die Sprache, der 2. Wert für das Land.
Und dann ist da ja noch PHP..... PHP arbeitet Case-sensitiv.

Mit $_SERVER['HTTP_USER_AGENT'] erfährst Du den Browser/das Betriebssystem..... nicht aber unbedingt die Sprache.

Wenn Du nun aber mit $_SERVER[HTTP_ACCEPT_LANGUAGE'] fragen würdest:
PHP:
if($_SERVER['HTTP_ACCEPT_LANGUAGE'] == "de") {
echo "deutscher User";
} else {
echo "kein deutscher User";
}
dann müsste sowohl bei de-DE als auch de-AT "deutscher User" bei rauskommen (bedingt unabhängig vom Land/Browser/Betriebssystem).
Warum bedingt?
Nun, einerseits könnten mehrere Sprachen akzeptiert werden und andererseits könnte der User ein englischen Browser nutzen obwohl er kein Englisch kann.
Blöde wenn er dann die Seite in einer Sprache angezeigt bekommt die er nicht versteht, obwohl es auch eine Version in seiner Sprache gibt.

Tja, und dann gibt es ja noch Browser die den Header nicht mitsenden, bzw. sich der Header verfälschen/deaktivieren lässt.
Wenn Du dem User also deine Seite in meheren Sprachen anbieten willst, solltest Du ihm die Auswahl selbst überlassen (z.b. so wie man es auf einigen Seiten mit den Landesflaggen sieht..... oder einem Puldown Auswahlmenü).

Gruss Dr Dau
 
Shooter2k hat gesagt.:
Wird eigentlich groß und Kleinschreibung unterschieden ? also ist es egal ob DE oder de ?

gruß
henry

Dr Dau hat gesagt.:
Kommt auf den User Agent an..... so gibt es z.b. de-DE und de-AT..... der 1. Wert steht für die Sprache, der 2. Wert für das Land.
Und dann ist da ja noch PHP..... PHP arbeitet Case-sensitiv.

Also wenn du eh schon in PHP bist und das ganze GROß- und kleinschreiben umgehen willst nutz doch die funktion strtoupper(). Ich geb dir mal ne ganz dynamische Variante:

1. Erstelle eine Extradatei in der sich ALLE Sprachen befinden. Erst das Kürzel und dann die genaue Bezeichnung getrennt durch EIN Tabulator (das ding neben dem Q).

2. Merk dir wo du die Datei auf deinem Server hinlegst

3. Nimm mein Script hier:
PHP:
<?PHP
	function getLang() {
		$lines = file("pfadangabe_zu_deiner_datei.ext");
		for each ($lines as $line_num => $line) {
			$lang = explode(chr(9), $line)
			if (strtoupper($_SERVER['HTTP_ACCEPT_LANGUAGE']) == strtoupper($lang[0])) return $lang[1];
		}
	}
?>

Diese Funktion "getLang()" sollte die von dir angegebene Bezeichnung der Sprache aus der Datei Lesen und wiedergeben. (!) Wichtig: Gib den richtigen Pfad zur Sprachdatei an (!)
GROß- und kleinschreibung ist nun egal. Dasn bischen Serverlast weil immer wieder die Datei gelesen wird und so aber dafür hasset schön dynamisch wenn du mal mehr Sprachen unterscheiden möchtes ;)
Wenn net geht einfach mich anblubbern.

EDIT:
Ich hab mal eine passende mit n paar gängigen Sprachen angehängt.
 

Anhänge

Zuletzt bearbeitet:
Zurück