Posté(e) le 9 mars 200619 a 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 Modifié le 9 mars 200619 a par Ocaeph
Posté(e) le 9 mars 200619 a 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 Modifié le 9 mars 200619 a par Baldurien
Posté(e) le 9 mars 200619 a Auteur 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') { Modifié le 9 mars 200619 a par Ocaeph
Posté(e) le 9 mars 200619 a 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é")
Posté(e) le 9 mars 200619 a Auteur 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'); } ?>
Posté(e) le 9 mars 200619 a 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';
Posté(e) le 9 mars 200619 a Auteur 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?
Posté(e) le 9 mars 200619 a 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?
Posté(e) le 9 mars 200619 a Auteur 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 Modifié le 9 mars 200619 a par Ocaeph
Posté(e) le 9 mars 200619 a Alors ce ne sont pas des variables mas des constantes tout cela:) (variables == truc avec $)
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.