<?php
// ------------------------------------------------------------------------- //
// Script montrant comment gérer la langue d'affichage d'une page par détec- //
// automatique via les infos envoyées par le navigateur. //
// Un cookie est ensuite utilisé pour véhiculer cette information. //
// ------------------------------------------------------------------------- //
// Auteur: J-Pierre DEZELUS //
// Email: jpdezelus@phpinfo.net //
// Web: http://www.phpinfo.net/ //
// ------------------------------------------------------------------------- //
$cfg_lang_defaut = 'en';
$cfg_langues = Array(
'fr' => Array('langue' => 'Français', 'regex' => 'fr([-_][[:alpha:]]{2})?|french'),
'en' => Array('langue' => 'English', 'regex' => 'en([-_][[:alpha:]]{2})?|english'),
'es' => Array('langue' => 'Español', 'regex' => 'es([-_][[:alpha:]]{2})?|spanish')
);
function ana_accept_language($accept_language, $cfg_langues)
{
$t_accept_language = explode(',', $accept_language);
for ($cpt = 0; $cpt < sizeof($t_accept_language); $cpt++)
{
reset($cfg_langues);
while (list($lg, $valeurs) = each($cfg_langues))
{
if (eregi('^('.$valeurs['regex'].')', $t_accept_language[$cpt]))
return($lg);
}
}
return('');
}
function ana_user_agent($user_agent, $cfg_langues)
{
reset($cfg_langues);
while (list($lg, $valeurs) = each($cfg_langues))
{
if (eregi('(\(|\[|;[[:space:]])('.$valeurs['regex'].')(;|\]|\))', $user_agent))
return($lg);
}
return('');
}
// lecture cookie
if ($HTTP_COOKIE_VARS['lang'] != '')
$lang = $HTTP_COOKIE_VARS['lang'];
// variables GET/POST
if ($HTTP_GET_VARS['lang'] != '')
$lang = $HTTP_GET_VARS['lang'];
elseif ($HTTP_POST_VARS['lang'] != '')
$lang = $HTTP_POST_VARS['lang'];
if ($lang == '')
{
// http-accept-language
if ($HTTP_SERVER_VARS['HTTP_ACCEPT_LANGUAGE'] != '')
$lang = ana_accept_language($HTTP_SERVER_VARS['HTTP_ACCEPT_LANGUAGE'], $cfg_langues);
// http-user-agent
if ($lang == '' && $HTTP_SERVER_VARS['HTTP_USER_AGENT'] != '')
$lang = ana_user_agent($HTTP_SERVER_VARS['HTTP_USER_AGENT'], $cfg_langues);
}
// langue par défaut
if ($lang == '')
$lang = $cfg_lang_defaut;
// sauvegarde de l'info par cookie
setcookie('lang', $lang, 86400*365);
// Interface de test
echo "Langue: <B>".$lang."</B> [";
reset($cfg_langues);
while (list($lg, $valeurs) = each($cfg_langues))
{
if ($lg != $lang)
echo " <A HREF='".basename($SCRIPT_NAME)."?lang=".$lg."'>".$valeurs['langue']."</A>";
}
echo " ] ";
// debug
echo '<BR>---------------------------------------------<BR>';
echo "HTTP_COOKIE_VARS['lang']= <B>".$HTTP_COOKIE_VARS['lang']."</B><BR><BR>\n";
echo "HTTP_GET_VARS['lang'] = <B>".$HTTP_GET_VARS['lang']."</B><BR>\n";
echo "HTTP_POST_VARS['lang'] = <B>".$HTTP_POST_VARS['lang']."</B><BR><BR>\n";
echo "HTTP_ACCEPT_LANGUAGE = <B>".$HTTP_SERVER_VARS['HTTP_ACCEPT_LANGUAGE'];
echo "</B><BR>\n";
echo "=> lang = <B>";
echo ana_accept_language($HTTP_SERVER_VARS['HTTP_ACCEPT_LANGUAGE'], $cfg_langues);
echo "</B><BR><BR>\n";
echo "HTTP_USER_AGENT = <B>".$HTTP_SERVER_VARS['HTTP_USER_AGENT']."</B><BR>\n";
echo "=> lang = <B>";
echo ana_user_agent($HTTP_SERVER_VARS['HTTP_USER_AGENT'], $cfg_langues);
echo "</B><BR>\n";
echo '---------------------------------------------<BR>';
echo "<B>»</B> <A HREF='".basename($SCRIPT_NAME)."'>Home</A>";
?>