<?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>&raquo;</B> <A HREF='".basename($SCRIPT_NAME)."'>Home</A>";

?>