Bak Posté 7 Juin 2006 Posté 7 Juin 2006 Bjr, Petit souci avec un code qui devrait permettre une redirection vers la page adéquate en fonction de la langue du navigateur : <?phpif (!isset($Langue)) { if(isset($HTTP_ACCEPT_LANGUAGE)){ $Langue = explode(",",$HTTP_ACCEPT_LANGUAGE); $Langue = strtolower(substr(chop($Langue[0]),0,2)); }else $Langue="fr";}include ( "index-$Langue.php" );?> Rien à faire, je suis invariablement redirigé vers la page par défaut en cas de non reconnaissance de la langue (ici "fr"). J'ai testé çà avec des navigateurs anglophones situés aux USA, ils sont également redirigés vers la page française...là, je sèche grave A ce sujet, est-ce qu'il y a une différence entre "en" et "us" ? Merci d'avance
captain_torche Posté 7 Juin 2006 Posté 7 Juin 2006 As-tu tenté d'afficher ton $Langue avec un echo, avant de l'attribuer par défaut ? Sinon, je pense que tu devrais utiliser $_SERVER['HTTP_ACCEPT_LANGUAGE'], il y a plus de chances que ça fonctionne.
Bak Posté 7 Juin 2006 Auteur Posté 7 Juin 2006 Salut Cap'tain As-tu tenté d'afficher ton $Langue avec un echo, avant de l'attribuer par défaut ? Excuse moi, je ne comprends pas bien l'intérêt ? Merci de ta réponse en tous les cas...
Bak Posté 7 Juin 2006 Auteur Posté 7 Juin 2006 Effectivement, çà fonctionne mieux avec : <?phpif (!isset($Langue)) { if(isset($_SERVER["HTTP_ACCEPT_LANGUAGE"])){ $Langue = explode(",",$_SERVER["HTTP_ACCEPT_LANGUAGE"]); $Langue = strtolower(substr(chop($Langue[0]),0,2)); }else $Langue="en";}include ( "index-$Langue.php" );?> Merci
captain_torche Posté 7 Juin 2006 Posté 7 Juin 2006 Petit cours de debug: Juste avant la fin de ta boucle if(isset($HTTP_ACCEPT_LANGUAGE)){, tu fais : echo 'test - '.$Langue; Ensuite, plusieurs résultats sont possibles : - Rien ne s'affiche : le script ne rentre pas dans la boucle, le $HTTP_ACCEPT_LANGUAGE n'est pas défini => Essaye avec $_SERVER['HTTP_ACCEPT_LANGUAGE'] - Seul 'test -' s'affiche : le script rentre dans la boucle, mais le traitement que tu fais n'est pas correct; corrige le. - test -en apparaît (par exemple) : tout va bien, le script fonctionne.
TheRec Posté 7 Juin 2006 Posté 7 Juin 2006 Bonjour, Loin de moi l'idée de vous interrompre Mais la syntaxe du premier "else" n'est pas correcte ... il manque une accolade ouvrante ({) après "else". Indente correctement ton code, ce genre d'erreur apparaît tout de suite après. J'aurais écrit cela ainsi : if (!isset($Langue)) { if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){ $Langue = explode(",",$_SERVER['HTTP_ACCEPT_LANGUAGE']); $Langue = strtolower(substr(chop($Langue[0]),0,2)); } else { $Langue = "fr"; // Langue par défaut, des fois que l'en-tête n'aie pas été initialisée } } else { $Langue="fr"; } include ( "index-$Langue.php" ); A noter que j'ai rajouté un "else" car il faut toujours une solution de repli (fallback) pour une gestion de langue efficace...sinon il peut arriver qu'un utilisateur ne satisfasse aucune des conditions et il aura certainement une erreur. Finalement, à ce stade tu prends les 2 premières lettres de n'importe quelle langue...cela fonctionne, mais si par hasard tu n'a pas de fichier "index-it.php" (pour les italiens) le include retournera une erreur...alors il vaudrait mieux limiter aux langages que tu souhaites et si la langue souhaitée par l'utilisateur (par son navigateur) n'existe pas, tu lui présente la langue dans une langue par défaut...
Bak Posté 7 Juin 2006 Auteur Posté 7 Juin 2006 (modifié) "Webmaster-hub, et tout devient clair" Merci à vous 2 Modifié 7 Juin 2006 par Bak
captain_torche Posté 7 Juin 2006 Posté 7 Juin 2006 Si je ne m'abuse (et je crois être dans le vrai, tellement je l'utilise), une condition sur une ligne, peut être exemptée d'accolades ouvrante et fermante. Par contre, je suis bien d'accord sur le fallback indispensable.
TheRec Posté 7 Juin 2006 Posté 7 Juin 2006 Oui c'est juste, j'ai mal lu... sur la ligne précédente il ferme le deuxième "if" et non le premier... my bad
captain_torche Posté 7 Juin 2006 Posté 7 Juin 2006 Mais sinon, je suis comme toi; j'ouvre et ferme les accolades au même niveau d'indentation, plutôt qu'en fin de ligne: c'est plus facile à repérer par la suite.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant