March 9, 200619 yr Bonjour à tous Je souhaites faire de mon site un site multi-lingues avec une gestion de cookie, avec le code suivant j'arrive a gerer les 2 langues: <?php if(isset($HTTP_COOKIE_VARS['lang'])) { $lang = $HTTP_COOKIE_VARS['lang']; } else { $lang = substr($HTTP_SERVER_VARS['HTTP_ACCEPT_LANGUAGE'],0,2); } if ($lang=='fr') { include('fr/fr-lang.php'); } elseif ($lang=='en') { include('en/en-lang.php'); } $expire = 365*24*3600; setcookie("lang", $lang, time() + $expire); ?> Maintenant je veux rajouter 2 petits drapeaux un FR/ un EN que l'utilisateur peut cliquer pour que sa change de langue et que le cookie sauvegarde son choix. Pour l'instant mon code ressemble à ca: <?php if( isset($HTTP_GET_VARS['lang'])) { $lang = $HTTP_GET_VARS['lang']; } else { if(isset($HTTP_COOKIE_VARS['lang'])) { $lang = $HTTP_COOKIE_VARS['lang']; } else { $lang = substr($HTTP_SERVER_VARS['HTTP_ACCEPT_LANGUAGE'],0,2); } } if ($lang=='fr') { include('fr/fr-lang.php'); } elseif ($lang=='en') { include('en/en-lang.php'); } $expire = 365*24*3600; setcookie("lang", $lang, time() + $expire); ?> </head> <body> <div> <a href ="index.php?$lang=='fr'"><img src="Image/fra.gif"></a> <a href ="index.php?$lang=='en'"><img src="Image/eng.gif"></a> </div> Malheuresement ca ne marche pas, mais ca fait pas d'erreur c'est déja ca Si quelqu'un peut m'aider à me sortir de ce labyrinthe ce serait cool Edited March 9, 200619 yr by Ocaeph
March 9, 200619 yr A cause de tes urls je dirais :) a href ="index.php?$lang=='fr'"><img src="Image/fra.gif"></a> <a href ="index.php?$lang=='en'"><img src="Image/eng.gif"></a> c'est pas "$lang==" mais lang= ce qui n'est pas pareil. $HTTP_GET_VARS['lang'] Si tu es en php4.3, utilise $_GET. Et si tu ne l'as pas, utilise ça $_GET = &$HTTP_GET_VARS; ça t'éviteras des problèmes dans le futur (register_long_arrays à off) Dernière chose : le accept language c'est différent de ce que tu fais. Normalement ce sont les préférences de l'utilisateur. Si j'ai : de-DE,fr-FR;q=0.5,en-EN;q=0.6 Tu dois logiquement me donner le français parce que tu ne supporte pas l'allemand, mais parmi les candidats potentiels l'anglais m'intéresse plus. Ca fonctionne ainsi (si je ne me trompe pas (une chance sur 3), à savoir donc Edited March 9, 200619 yr by Baldurien
March 9, 200619 yr Author Je me doutais que c'était un truc trop simple Ca y est ca marche maintenant j'ai des erreures en fait il cherche mes variables dans la page où est le code (ici index.php) et non pas en-lang.php que je lui indique avec include Ce que je veux faire c'est: regarder s'il y a deja un cookie regarder la langue du navigateur regarder si l'utilisateur a selectionner une langue le code en cours: <?php if(isset($HTTP_COOKIE_VARS['lang'])) { $lang = $HTTP_COOKIE_VARS['lang']; } else { $lang = substr($HTTP_SERVER_VARS['HTTP_ACCEPT_LANGUAGE'],0,2); } if( isset($GET['lang'])) { $lang = $GET['lang']; } if ($lang=='fr') { include('fr/fr-lang.php'); } elseif ($lang=='en') { include('en/en-lang.php'); } $expire = 365*24*3600; setcookie("lang", $lang, time() + $expire); ?> En tout cas merci de ton aide Edit: J'ai trouver, meme erreur il faut: if ($lang='fr') { au lieu de if ($lang=='fr') { Edited March 9, 200619 yr by Ocaeph
March 9, 200619 yr Honnêtement, abandonne les HTTP_x_VARS :) remplaces les par $_x ($_COOKIE, $_GET, $_POST) Au moins ton script tournera ailleurs que sur les vieilles versions (et au pire, ces nouveautés peuvent facilement se faire dans les anciennes conf, modulo la "super globalité")
March 9, 200619 yr Author Ca y est j'ai enlever les HTTP_x_VARS. Par contre petit problème, il ne voit que le premier include, donc ca affiche que dans une langue, je comprends pas pourquoi <?php $expire = 365*24*3600; if ( isset($_GET['lang'])) { $lang = $_GET['lang']; setcookie("lang", $lang, time() + $expire); } elseif(isset($_COOKIE['lang'])) { $lang = $_COOKIE['lang']; } else { $lang = substr($_SERVER['_ACCEPT'],0,2); } if ($lang='fr') { include('fr/fr-lang.php'); } elseif ($lang='en') { include('en/en-lang.php'); } ?>
March 9, 200619 yr if ($lang='fr') { include('fr/fr-lang.php'); } elseif ($lang='en') { include('en/en-lang.php'); } Deux choses : 1. $lang == 'fr' (oui l'opérateur d'égalité, c'est pas '=' qui est l'opérateur d'affectation). Pareil pour en dessous ($lang == 'en') 2. include c'est instruction : inutile de parenthèser ! include 'en/en-lang.php';
March 9, 200619 yr Author Ok j'ai fait les modifs mais il va chercher mes variables dans la page que je suis en train de modifier et non celle où j'ai mis mes variable avec include ... Notice: Use of undefined constant slogan - assumed 'slogan' in c:\program files\easyphp1-7\www\tempv2\index.php on line 220slogan alors qu'il devrait allez les chercher dans c:\program files\easyphp1-7\www\tempv2\fr\fr-lang.php Edit: Ca fait la meme erreur sur toutes les pages alors qu'elles marchaient avant, ce serais pas easyphp qui deconne?
March 9, 200619 yr Notice: Use of undefined constant slogan - assumed 'slogan' in c:\program files\easyphp1-7\www\tempv2\index.php on line 220 Tu y fais quoi? Et tu déclare comment slogan?
March 9, 200619 yr Author Ca fait le meme probleme pour toutes mes variables en faites je stocke la variable dans un autre fichier où il y a tous le texte et je l'appel dans ma page par <?php echo slogan;?> Mais je pense avoir trouver le problème lorsque je suis sur mes autres pages la valeur du cookie créés est: en ou fr (suivant le cas) sauf que pour la page où j'insère les drapeaux la valeur du cookie est: %27fr%27 lorsque je cliques sur une des images Ca doit etre dans cette ligne là qu'il manque quelquechose ou qu'il y a un truc en trop: <a href ="index.php?$lang='fr'"><img src="Image/fra.gif"> </a> EDIT: Le ' était en trop ca donne donc: <a href ="index.php?$lang=fr"><img src="Image/fra.gif"> Ca y est ca marche à la perfection Un grand merci pour ton aide Edited March 9, 200619 yr by Ocaeph
March 9, 200619 yr Alors ce ne sont pas des variables mas des constantes tout cela:) (variables == truc avec $)
Archived
This topic is now archived and is closed to further replies.