8791 sujets
Bah le problème est plus simple que ça ^^
$lang, tu le configures pour qu'il soit en majuscule ( $lang = strtoupper(substr(chop($lang[0]),0,2)); // on ne sélectionne que la première langue renvoyée qu'on passe en lettre majuscule)
Or tu le testes sur des minuscules ($lang =="fr" ou $lang=="en").
Utilise plutôt strtolower($string) au lieu de strtoupper($string) ^^
Après ta ligne problématique a vue de nez était juste, mais n'a pas de sens. Ton code en Français donne :
- si ce n'est ni du Français, ni de l'Anglais, tu dis que c'est de l'anglais
- si c'est du Français, tu renvois vers le francophone
- si c'est de l'Anglais, tu renvois vers l'anglophone
- si c'est autre chose, tu revois vers l'anglophone.
A partir de là, ton premier if n'a pas d'intérêt, à part de forcer ton code à vérifier Deux fois de plus une variable, dans tous les cas ($lang!="fr' et $lang!='en'). Si tu as du 'en', tu vas faire 4 traitements de variables ($lang!='fr', $lang!='en', $lang=='fr', $lang=='en'); tu en fais 3 si tu as du français et 5 si tu as une autre langue (les 4 de l'anglophone + le changement de variables).
Alors que pour faire au plus simple :
- si c'est du Français, tu revois vers le Francophone
- sinon, tu renvois vers de l'anglophone.
Tu as 1 traitement pour un "fr", 2 pour l'anglophone ou les autres ^^
$lang, tu le configures pour qu'il soit en majuscule ( $lang = strtoupper(substr(chop($lang[0]),0,2)); // on ne sélectionne que la première langue renvoyée qu'on passe en lettre majuscule)
Or tu le testes sur des minuscules ($lang =="fr" ou $lang=="en").
Utilise plutôt strtolower($string) au lieu de strtoupper($string) ^^
Après ta ligne problématique a vue de nez était juste, mais n'a pas de sens. Ton code en Français donne :
- si ce n'est ni du Français, ni de l'Anglais, tu dis que c'est de l'anglais
- si c'est du Français, tu renvois vers le francophone
- si c'est de l'Anglais, tu renvois vers l'anglophone
- si c'est autre chose, tu revois vers l'anglophone.
A partir de là, ton premier if n'a pas d'intérêt, à part de forcer ton code à vérifier Deux fois de plus une variable, dans tous les cas ($lang!="fr' et $lang!='en'). Si tu as du 'en', tu vas faire 4 traitements de variables ($lang!='fr', $lang!='en', $lang=='fr', $lang=='en'); tu en fais 3 si tu as du français et 5 si tu as une autre langue (les 4 de l'anglophone + le changement de variables).
Alors que pour faire au plus simple :
- si c'est du Français, tu revois vers le Francophone
- sinon, tu renvois vers de l'anglophone.
Tu as 1 traitement pour un "fr", 2 pour l'anglophone ou les autres ^^
ok donc, je change "strtoupper" par "strtolower", j'enlève le premier if, puis le dernier else et je remplace le elseif par un else.
Le site s'affiche en en français, mais je ne suis pas sûr qu'il s'affiche en anglais si le navigateur est en anglais... J'ai changé mes paramètre mais ça ne semble pas faire de différence sur l'affichage du site.
Quelqu'un peu tester?
EDIT: J'avais mal setter mes paramètres
Bon ça semble fonctionner, mais j'aimerais d'abord un 2e avis avant de sauter de joie!
Modifié par juliesunset (12 Sep 2011 - 19:30)
Le site s'affiche en en français, mais je ne suis pas sûr qu'il s'affiche en anglais si le navigateur est en anglais... J'ai changé mes paramètre mais ça ne semble pas faire de différence sur l'affichage du site.
Quelqu'un peu tester?
EDIT: J'avais mal setter mes paramètres


Modifié par juliesunset (12 Sep 2011 - 19:30)
Merci du retour!
<?php
//Récupération de la langue ou définition par défaut
if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){ //si définie par header http
$lang = explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']); // on créé un tableau en séparant les données renvoyées se trouvant séparés par une virgule
$lang = strtolower(substr(chop($lang[0]),0,2)); // on ne sélectionne que la première langue renvoyée qu'on passe en lettre majuscule
}
else{ // si non définie par header http -> EN par défaut
$lang='en';
}
// Ici on redirige
if($lang == "fr"){
header('location:http://www.spypoint.com/FR');
}
else{
header('location:http://www.spypoint.com/EN');
}
?>
Tony Monast a écrit :
Laisse-moi deviner. Tu te rendais directement sur le /fr ou /en.![]()
Toutafé

Par contre y'a plein de trucs qui servent à rien dans ce code ; le explode, et chop... si on veut juste tester si la langue principale et fr il suffit de faire un substr. Et aussi il faut toujours mettre un exit() après une redirection au cas où la redirection foire.
<?php
// récupère la langue principale de l'utilisateur (en majuscule pour coller au format de l'url du site).
if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
$accepted_lang = strtoupper(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2));
}
// si on a trouvé une langue est qu'elle correspond à FR : on garde, sinon en met EN
$lang = isset($accepted_lang) && $accepted_lang === 'FR' ? $accepted_lang : 'EN';
// on redirige vers la langue
header('location:http://www.spypoint.com/' . $lang);
exit();
?>
Modifié par jb_gfx (12 Sep 2011 - 23:04)