Les archives de FluxBB.fr
Vous n'êtes pas identifié(e).
Bonjour,
Je souhaite detecter la langue du visiteur (non enregistré) et que le forum se mette dans la bonne langue automatiquement. Suite à recherche sur le forum punbb fr, j'ai trouvé : http://www.punbb.fr/forums/viewtopic.php?id=5436
puis ce script :
http://wiki.punres.org/Detect_the_langu … mous_users
// use User-Agent language to determine language for guests
// arg is associative array, sets ['language'], uses ['g_id']
// Mod by Han-Kwang Nienhuys, 2006-2007
function set_guest_lang(&$pun_user)
{
if ($pun_user['g_id'] != PUN_GUEST)
return;
if (!isset($_SERVER['HTTP_ACCEPT_LANGUAGE']))
return;
$acclang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
$lang = $pun_user['language'];
if (preg_match('/sv.+nl/', $acclang)) { // prefer sv above nl
$lang = 'Svenska';
} else if (preg_match('/nl.+sv/', $acclang)) { // prefer nl above sv
$lang = 'Nederlands';
} else if (preg_match('/sv/', $acclang)) { // knows sv, not nl
$lang = 'Svenska';
} else if (preg_match('/nl/', $acclang)) { // knows nl, not sv
$lang = 'Nederlands';
}
$pun_user['language'] = $lang;
}Je l'ai transformé comme suit :
// use User-Agent language to determine language for guests
// arg is associative array, sets ['language'], uses ['g_id']
// Mod by Han-Kwang Nienhuys, 2006-2007
function set_guest_lang(&$pun_user)
{
if ($pun_user['g_id'] != PUN_GUEST)
return;
if (!isset($_SERVER['HTTP_ACCEPT_LANGUAGE']))
return;
$acclang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
$lang = $pun_user['language'];
if (preg_match('/en/', $acclang)) { // knows en, not fr
$lang = 'English';
} else if (preg_match('/fr/', $acclang)) { // knows fr
$lang = 'French';
} else if (preg_match('/it/', $acclang)) { // knows en
$lang = 'Italian';
} else if (preg_match('/de/', $acclang)) { // knows de
$lang = 'German';
} else if (preg_match('/sp/', $acclang)) { // knows sp
$lang = 'Spanish';
} else if (preg_match('/pe/', $acclang)) { // knows pe
$lang = 'Portuguese';
} else if (preg_match('/ru/', $acclang)) { // knows ru
$lang = 'Russian';
}
$pun_user['language'] = $lang;
}Mais ça ne fonctionne pas ... ( je suis pas très bon !)
Mon besoin est le suivant, si le 'HTTP_ACCEPT_LANGUAGE' est fr alors le forum est fr, si en alors anglais, si ...., sinon anglais
J'ai installé toutes les traductions disponibles.
D'avance merci.
Hors ligne
pas mal comme mod a voir avec un confirmé
Hors ligne
if (preg_match('/fr/', $acclang)) { // knows fr
$lang = 'French';
} else if (preg_match('/it/', $acclang)) { // knows en
$lang = 'Italian';
} else if (preg_match('/de/', $acclang)) { // knows de
$lang = 'German';
} else if (preg_match('/sp/', $acclang)) { // knows sp
$lang = 'Spanish';
} else if (preg_match('/pe/', $acclang)) { // knows pe
$lang = 'Portuguese';
} else if (preg_match('/ru/', $acclang)) { // knows ru
$lang = 'Russian';
} else { //default
$lang = 'English';
}Hors ligne
Merci Yemgi de t'être penché sur mon code. J'ai donc modifié include/functions.php avec le code suivant :
// use User-Agent language to determine language for guests
// arg is associative array, sets ['language'], uses ['g_id']
// Mod by Han-Kwang Nienhuys, 2006-2007
function set_guest_lang(&$pun_user)
{
if ($pun_user['g_id'] != PUN_GUEST)
return;
if (!isset($_SERVER['HTTP_ACCEPT_LANGUAGE']))
return;
$acclang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
$lang = $pun_user['language'];
if (preg_match('/fr/', $acclang)) { // knows fr
$lang = 'French';
} else if (preg_match('/it/', $acclang)) { // knows en
$lang = 'Italian';
} else if (preg_match('/de/', $acclang)) { // knows de
$lang = 'German';
} else if (preg_match('/sp/', $acclang)) { // knows sp
$lang = 'Spanish';
} else if (preg_match('/pe/', $acclang)) { // knows pe
$lang = 'Portuguese';
} else if (preg_match('/ru/', $acclang)) { // knows ru
$lang = 'Russian';
} else { //default
$lang = 'English';
}
$pun_user['language'] = $lang;
}et bien sûr dans le include/common.php :
après // Check/update/set cookie and fetch user info
$pun_user = array();
check_cookie($pun_user);
J'ai rajouté :
set_guest_lang($pun_user);
mais toujours rien ... 
Une idée sur ce que j'ai mal fait ?
D'avance merci.
Hors ligne
Quels sont les symptomes? Parce que "ca marche pas" c'est un peu vague 
Hors ligne
Merci pour ta patience yemgi. Le "sympthome", si
1°) tu mets langue DE ou SP comme étant préférentielle dans ton navigateur
2°) tu cliques sur ce lien http://www.charriau.fr/forum/viewforum.php?id=2
=> tout ce qui est en Français (hors topics et titre) devrait apparaitre soit en DE soit en SP. Non ?
Hors ligne
Mon PC et mon navigateur sont en Anglais et tout apparait en Anglais pour moi, mais effectivement dans FF quand je mets Espagnol ca reste affiché en Anglais
Hors ligne
Et moi je l'ai en français alors que IE 7 (oui je sais ...) est en Allemand !
Merci pour la verification, une idée alors ?
Dernière modification par tankl (30-10-2007 19:13:39)
Hors ligne
Pou info, la solution est la suivante :
// use User-Agent language to determine language for guests
// arg is associative array, sets ['language'], uses ['g_id']
// Mod by Han-Kwang Nienhuys, 2006-2007
function set_guest_lang(&$pun_user)
{
if ($pun_user['g_id'] != PUN_GUEST)
return;
if (!isset($_SERVER['HTTP_ACCEPT_LANGUAGE']))
return;
$acclang = substr(strtolower($_SERVER['HTTP_ACCEPT_LANGUAGE']),0,2);
$lang = $pun_user['language'];
if ($acclang == "fr") { // prefer fr
$lang = 'French';
} else if ($acclang == "en") { // prefer en
$lang = 'English';
} else if ($acclang == "de") { // prefer de
$lang = 'German';
} else if ($acclang == "es") { // prefer es
$lang = 'Spanish';
} else if ($acclang == "pt") { // prefer pt
$lang = 'Portuguese';
} else if ($acclang == "ru") { // prefer ru
$lang = 'Russian';
} else if ($acclang == "it") { // prefer it
$lang = 'Italian';
} else if ($acclang == "ro") { // prefer ro
$lang = 'Romanian';
} else if ($acclang == "pl") { // prefer pl
$lang = 'Polish';
} else if ($acclang == "tr") { // prefer tr
$lang = 'Turkish';
} else { //default
$lang = 'English';
}
$pun_user['language'] = $lang;
}Par contre je ne sais pas comment mettre résolu dans le titre du post !
Dernière modification par tankl (05-11-2007 10:17:38)
Hors ligne