Re: _SERVER["HTTP_ACCEPT_LANGUAGE"] en-us

From: Date: Wed, 18 Oct 2006 07:55:28 +0000
Subject: Re: _SERVER["HTTP_ACCEPT_LANGUAGE"] en-us
References: 1 2  Groups: php.general 
Request: Send a blank email to php-general+get-243273@lists.php.net to get a copy of this message
On Tue, 17 Oct 2006 08:18:47 +0100, Stut wrote: > John Taylor-Johnston wrote: >> >> This is what http_accept_language gives me depending on which browser. >> Depending on the visitor in my region, it will either be French or >> English. >> >> _SERVER["HTTP_ACCEPT_LANGUAGE"] en-us,en;q=0.8,fr;q=0.5,fr-ca;q=0.3 >> _SERVER["HTTP_ACCEPT_LANGUAGE"] fr-ca,en-us;q=0.5 >> >> >> Is this a reasonable approach? >> >> if(stristr($_SERVER["HTTP_HOST"],"fr")) >> { include("french.htm");}else{ include("english.htm");} > > No it's not unless you want to ignore the users preferred language. The > order is important in that header - the first language is the preferred > language. So in the first example you should serve english.htm and > french.htm in the second. If you only have english and french, your best > bet is to do the following... > > if (substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) == 'fr') > { > include('french.htm'); > } > else > { > include('english.htm'); > } Not to annoy you, but this will fail if a user has the preferred languages in the order Dutch, French, English (which would be very likely for a Belgian user). If you really want to deal with it while totally respecting the user's wishes, you'd want to explode() the string using ',', and analyze the given array in the right order: // Available languages & user preferences. $aLang = array('fr' => 'french.htm', 'en' => 'english.htm'); $aSett = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']); // Make sure that if no languages match, English is picked. $aSett[] = 'en'; // Loop the user preference. foreach ($aSett as $sLang) { $sLang = substr($sLang, 0, 2); if (array_key_exists($sLang, $aLang)) { // Language found. include $aLang[$sLang]; break; } } HTH, Ivo

« previous php.general (#243273) next »