PHP/gestion multi langues avec cookie
Résolu/Fermé
A voir également:
- PHP/gestion multi langues avec cookie
- Easy php - Télécharger - Divers Web & Internet
- Logiciel gestion photo gratuit - Guide
- Comment récupérer mon jeu cookie jam - Forum jeux en ligne
- Supprimer cookie - Guide
- Multi exp pokemon diamant ✓ - Forum Jeux vidéo
9 réponses
mon probleme est résolu. merci pour les différents coups de mains qui m'ont aiguillé vers la résolution de ce problème! Mon erreur se situait dans les boucles if-else et dans les appellations des variables.
voici la solution:
étape 1: DETECTION (1ères lignes de index.php)
étape 2: CREATION DU COOKIE (les lignes qui suivent)
etape 3: CHOIX DE LA LANGUE A AFFICHER (script dans le BODY)
étape 4: LIENS <A HREF="">
Merci pour votre aide, j'espère que ça aidera d'autres personnes.
voici la solution:
étape 1: DETECTION (1ères lignes de index.php)
<?php // si langue déclarée par cookie et qu'il ny a pas de requete // pour le choix de la langue alors on choisit le cookie if (isset ($_COOKIE['CHOIXlang']) && $_GET['langue'] != 'fr' && $_GET['langue'] != 'en') { $langue = $_COOKIE['CHOIXlang']; } // le choix de la langue est déclaré par url else if ($_GET['langue'] == 'en' || $_GET['langue'] == 'fr') { $langue = $_GET['langue']; set_cookie($langue); } // si aucune langue n'est déclarée on tente de reconnaitre // la langue par défaut du navigateur else { $langue = substr($HTTP_SERVER_VARS['HTTP_ACCEPT_LANGUAGE'],0,2); set_cookie($langue); } ?>
étape 2: CREATION DU COOKIE (les lignes qui suivent)
<?php function set_cookie($langue) { //définition de la durée du cookie (1 an) $expire = 365*24*3600; //enregistrement du cookie au nom de CHOIXlang + détection si erreur if (setcookie("CHOIXlang", $langue, time() + $expire) != TRUE) { // echo 'Le cookie na pas marché<br />'; } else { setcookie("CHOIXlang", $langue, time() + $expire); // echo 'Le cookie a marché<br />'; } } ?>
etape 3: CHOIX DE LA LANGUE A AFFICHER (script dans le BODY)
<?php // affichage de la bonne langue // si le cookie vaut 'fr' ou si la requete vaut 'fr', // on inclut le fichier fr-lang.php if ($_GET['langue'] == "fr" || $langue == "fr") { include('lang/fr-lang.php'); } // affichage de la bonne langue // si le cookie vaut 'en' ou si la requete vaut 'en', // on inclut le fichier fr-lang.php elseif ($_GET['langue'] == "en" || $langue == "en") { include('lang/en-lang.php'); } ?>
étape 4: LIENS <A HREF="">
<a href="?langue=fr" ><img src="images/FR.png" height=25 width=32 /></a>
Merci pour votre aide, j'espère que ça aidera d'autres personnes.
merci pour l'aide,
mais ça ne résoud pas mon probleme.
la variable $lang, ne se modifie jamais avec mon lien...
j'ai mis des 'echo' un peu partout pour trouver le probleme...
je me rends compte que:
-le cookie est créé
-la détection de langue par défaut fonctionne
-le cookie ne change jamais de valeur après sa création, seulement au premier load de la page, par exemple si je lance ma page comme ça: http://www.monsite.com?lang=en, le site est bien en anglais.
voila le code complet de ma page:
mais ça ne résoud pas mon probleme.
la variable $lang, ne se modifie jamais avec mon lien...
j'ai mis des 'echo' un peu partout pour trouver le probleme...
je me rends compte que:
-le cookie est créé
-la détection de langue par défaut fonctionne
-le cookie ne change jamais de valeur après sa création, seulement au premier load de la page, par exemple si je lance ma page comme ça: http://www.monsite.com?lang=en, le site est bien en anglais.
voila le code complet de ma page:
<?php if(isset($_COOKIE['lang']) && $_REQUEST['lang'] == '') { // langue déclarée par cookie $lang = $_COOKIE['lang']; $test=1; } elseif (isset($_REQUEST['lang']) && $_REQUEST['lang'] != '') { // langue déclarée par request (http link) $lang = $_REQUEST['lang']; set_cookie($lang); $test=2; } else { // si aucune langue n'est déclarée on tente de reconnaitre la langue par défaut du navigateur $lang = substr($HTTP_SERVER_VARS['HTTP_ACCEPT_LANGUAGE'],0,2); set_cookie($lang); $test=3; } //tableau pour le choix des pages $tablo_pages = array( "home.php" => "home.php", "cinema.php" => "cinema.php", "docu.php" => "docu.php"); if( isset( $_GET['page'] ) && array_key_exists( $_GET['page'], $tablo_pages ) ) { $page = $tablo_pages[$_GET['page']]; } else { $page = $tablo_pages["home.php"]; } function set_cookie($lang) { //définition de la durée du cookie (1 an) $expire = 365*24*3600; //enregistrement du cookie au nom de lang + détection si erreur if (setcookie("lang", $lang, time() + $expire) != TRUE) { echo 'Le cookie na pas marché<br />'; } } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title> mon site </title> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <link rel="stylesheet" href="style.css" type="text/css" /> <script type="text/javascript" src="script.js"></script> <script type="text/javascript" src="sb/build/adapter/shadowbox-base.js"></script> <script type="text/javascript" src="sb/build/shadowbox.js"></script> <script type="text/javascript"> Shadowbox.loadSkin('classic', 'sb/src/skin'); Shadowbox.loadLanguage('fr', 'sb/build/lang'); Shadowbox.loadPlayer(['flv', 'html', 'iframe', 'img', 'qt', 'swf', 'wmp'], 'sb/build/player'); window.onload = function(){ Shadowbox.init(); /** * Note: The following function call is not necessary in your own project. * It is only used here to set up the demonstrations on this page. */ initDemos(); }; </script> </head> <body> <div class="PageBackgroundGlare"> <div class="PageBackgroundGlareImage"></div> </div> <div class="Main"> <div class="Sheet"> <div class="Sheet-body"> <div class="Header"> <div> <table class="logo"> <tr><td class="logo-name"><a href="#"></a></td></tr> <tr><td class="logo-text"></td></tr> </table> </div> </div> <?php // affichage de la bonne langue if ($lang == "fr") { // si la langue est 'fr' (français) on inclut le fichier fr-lang.php include('lang/fr-lang.php'); $final=1; } elseif ($lang == "en") { // si la langue est 'en' (anglais) on inclut le fichier en-lang.php include('lang/en-lang.php'); $final=2; } // test pour les erreurs echo "$ lang vaut " ; echo $lang; echo ' '; echo "$ _COOKIE vaut (" ; echo $_COOKIE['lang']; echo ")"; echo ' '; echo "$ test vaut "; echo $test; echo ' '; echo "$ final vaut "; echo $final; ?> <div class="nav"> <ul class="menu"> <li><a href="?page=home.php" class=" active"><span><span><?php echo TXT_BOUT_1; ?> </span></span></a></li> <li><a href="?page=cinema.php"><span><span><?php echo TXT_BOUT_2; ?> </span></span></a></li> <li><a href="?page=docu.php"><span><span><?php echo TXT_BOUT_3; ?> </span></span></a></li> <li><a href="?page=<?php echo $page;?>&?lang=fr" ><span><span><img src="images/FR.png" height=25 width=32 /></span></span></a></li> <li><a href="?page=<?php echo $page;?>&?lang=en" ><span><span><img src="images/EN.png" height=25 width=32 /></span></span></a></li> </ul> <div class="l"></div> <div class="r"><div></div></div> </div> <?php include ($page); ?>
zzzrod
Messages postés
28
Date d'inscription
samedi 20 septembre 2008
Statut
Membre
Dernière intervention
13 novembre 2011
3
26 sept. 2008 à 19:55
26 sept. 2008 à 19:55
Essayez avec ça:
<?php
if(isset($_COOKIE['lang']) && $_REQUEST['lang'] == '') {
// langue déclarée par cookie
$lang = $_COOKIE['lang'];
} elseif (isset($_REQUEST['lang']) && $_REQUEST['lang'] != '') {
// langue déclarée par request (http link)
$lang = $_REQUEST['lang'];
set_cookie($lang);
} else {
// si aucune langue n'est déclarée on tente de reconnaitre la langue par défaut du navigateur
$lang = substr($HTTP_SERVER_VARS['HTTP_ACCEPT_LANGUAGE'],0,2);
set_cookie($lang);
}
function set_cookie($lang) {
//définition de la durée du cookie (1 an)
$expire = 365*24*3600;
//enregistrement du cookie au nom de lang
setcookie("lang", $lang, time() + $expire);
}
if ($_COOKIE['lang'] == 'fr') { // si la langue est 'fr' (français) on inclut le fichier fr-lang.php
include('lang/fr-lang.php');
} elseif ($_COOKIE['lang'] == 'en') { // si la langue est 'en' (anglais) on inclut le fichier en-lang.php
include('lang/en-lang.php');
}
?>
<html>
<head>blabla</head>
<body>blabla</body>
</html>
<?php
if(isset($_COOKIE['lang']) && $_REQUEST['lang'] == '') {
// langue déclarée par cookie
$lang = $_COOKIE['lang'];
} elseif (isset($_REQUEST['lang']) && $_REQUEST['lang'] != '') {
// langue déclarée par request (http link)
$lang = $_REQUEST['lang'];
set_cookie($lang);
} else {
// si aucune langue n'est déclarée on tente de reconnaitre la langue par défaut du navigateur
$lang = substr($HTTP_SERVER_VARS['HTTP_ACCEPT_LANGUAGE'],0,2);
set_cookie($lang);
}
function set_cookie($lang) {
//définition de la durée du cookie (1 an)
$expire = 365*24*3600;
//enregistrement du cookie au nom de lang
setcookie("lang", $lang, time() + $expire);
}
if ($_COOKIE['lang'] == 'fr') { // si la langue est 'fr' (français) on inclut le fichier fr-lang.php
include('lang/fr-lang.php');
} elseif ($_COOKIE['lang'] == 'en') { // si la langue est 'en' (anglais) on inclut le fichier en-lang.php
include('lang/en-lang.php');
}
?>
<html>
<head>blabla</head>
<body>blabla</body>
</html>
donuts08
Messages postés
519
Date d'inscription
dimanche 13 novembre 2005
Statut
Membre
Dernière intervention
15 octobre 2008
39
27 sept. 2008 à 20:40
27 sept. 2008 à 20:40
bonjour,
je vois ça et je crois que tu as mis un point d'interrogation en trop...
<li><a href="?page=<?php echo $page;?>&?lang=fr" ><span><span><img src="images/FR.png" height=25 width=32 /></span></span></a></li>
ce qui te génère: ?page=home&?lang=fr
alors que tu devrais avoir: ?page=home& lang=fr
je vois ça et je crois que tu as mis un point d'interrogation en trop...
<li><a href="?page=<?php echo $page;?>&?lang=fr" ><span><span><img src="images/FR.png" height=25 width=32 /></span></span></a></li>
ce qui te génère: ?page=home&?lang=fr
alors que tu devrais avoir: ?page=home& lang=fr
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
merci pour le coup d'oeil, j'ai réglé cet élément mais ça n'avance pas. toujours les mm pb.
j'explore, je teste...là vous pouvez voir les 1ères lignes de index.php
avec ma petite variable $test je suis sur que :
ça fonctionne très bien, le cookie est lu comme il faut quand il faut, les requetes par url sont bien interprétées et sinon le choix de la langue est juste.
le choix de l'include est juste, $final se comporte comme il faut.
mais $lang ne change jamais quand je clic sur mon lien:
frustration....
j'explore, je teste...là vous pouvez voir les 1ères lignes de index.php
<?php if (isset ($_COOKIE['lang'])) // si langue déclarée par cookie, on l'utilise { $lang = $_COOKIE['lang']; $test=1; } else if ($_REQUEST['lang'] == 'en' || $_REQUEST['lang'] == 'fr')// langue déclarée par request (http link) { $lang = $_REQUEST['lang']; set_cookie($lang); $test=2; } else // si aucune langue n'est déclarée on tente de reconnaitre la langue par défaut du navigateur { $lang = substr($HTTP_SERVER_VARS['HTTP_ACCEPT_LANGUAGE'],0,2); set_cookie($lang); $test=3; } function set_cookie($lang) { //définition de la durée du cookie (1 an) $expire = 365*24*3600; //enregistrement du cookie au nom de lang + détection si erreur if (setcookie("lang", $lang, time() + $expire) != TRUE) { echo 'Le cookie na pas marché<br />'; } else { setcookie("lang", $lang, time() + $expire); echo 'Le cookie a marché<br />'; } } ?>
avec ma petite variable $test je suis sur que :
ça fonctionne très bien, le cookie est lu comme il faut quand il faut, les requetes par url sont bien interprétées et sinon le choix de la langue est juste.
<?php // affichage de la bonne langue if ($lang == "fr") // si la langue est 'fr' (français) on inclut le fichier fr-lang.php { include('lang/fr-lang.php'); $final=1; } elseif ($lang == "en") // si la langue est 'en' (anglais) on inclut le fichier en-lang.php { include('lang/en-lang.php'); $final=2; } // test pour les erreurs echo "$ lang vaut $lang . " ; echo "$ _COOKIE vaut "; echo $_COOKIE['lang']; echo "."; echo "$ test vaut $test . "; echo "$ final vaut $final ."; ?>
le choix de l'include est juste, $final se comporte comme il faut.
mais $lang ne change jamais quand je clic sur mon lien:
<a href="?lang=en&page=<?php echo $page;?>" ></a> <a href="?lang=fr&page=<?php echo $page;?>" ></a>
frustration....
donuts08
Messages postés
519
Date d'inscription
dimanche 13 novembre 2005
Statut
Membre
Dernière intervention
15 octobre 2008
39
28 sept. 2008 à 14:44
28 sept. 2008 à 14:44
regarde ici:
https://www.developpez.net/forums/d89723/php/langage/_request-vs-_get-_post/#post593174
donc en résumé changes le nom de ton cookie et ça marchera... OU tu mets $_GET à la place de $_REQUEST
https://www.developpez.net/forums/d89723/php/langage/_request-vs-_get-_post/#post593174
donc en résumé changes le nom de ton cookie et ça marchera... OU tu mets $_GET à la place de $_REQUEST
donuts08
Messages postés
519
Date d'inscription
dimanche 13 novembre 2005
Statut
Membre
Dernière intervention
15 octobre 2008
39
29 sept. 2008 à 19:48
29 sept. 2008 à 19:48
regardes en haut de ta première question =)
http://php-dream.com/fre/portions/portion3ca5.html?id=53
Gestion site Français et Anglais
Permet de détecter la langue du butineur, tout en laissant à l'utilisateur la possibilité de changer de langue.
De plus la langue de l'utilisateur est stockée dans un cookie, ce qui permet aussi de se souvenir de sa langue à son retour.
Dans cette portion de script si l'utilisateur n'est pas francophone, on suppose alors qu'il est anglophone.
<?php
define('COOKIE_TIME', 86400 * 365);
// Gestion de la langue
if(isset($_REQUEST['lang'])) {
// Changement de langue
$lang = ('fr' == $_REQUEST['lang']) ? 'fr' : 'en';
} else {
// Langue du Cookie
if(!empty($COOKIE['cookie_lang'])) {
$lang = ('fr' == $COOKIE['cookie_lang']) ? 'fr' : 'en';
} else {
// Langue du Navigateur
$lang = ('fr' == substr($SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2)) ? 'fr' : 'en';
}
}
setcookie('cookie_lang', $lang, time() + COOKIE_TIME);
?>
Gestion site Français et Anglais
Permet de détecter la langue du butineur, tout en laissant à l'utilisateur la possibilité de changer de langue.
De plus la langue de l'utilisateur est stockée dans un cookie, ce qui permet aussi de se souvenir de sa langue à son retour.
Dans cette portion de script si l'utilisateur n'est pas francophone, on suppose alors qu'il est anglophone.
<?php
define('COOKIE_TIME', 86400 * 365);
// Gestion de la langue
if(isset($_REQUEST['lang'])) {
// Changement de langue
$lang = ('fr' == $_REQUEST['lang']) ? 'fr' : 'en';
} else {
// Langue du Cookie
if(!empty($COOKIE['cookie_lang'])) {
$lang = ('fr' == $COOKIE['cookie_lang']) ? 'fr' : 'en';
} else {
// Langue du Navigateur
$lang = ('fr' == substr($SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2)) ? 'fr' : 'en';
}
}
setcookie('cookie_lang', $lang, time() + COOKIE_TIME);
?>
29 sept. 2008 à 19:34
10 mai 2010 à 15:00
je developpe une site web en multi langue, pour le moment je l'ai crée en langue français et je voulais le traduire en englais, j'ai utilisé la même méthode j'avais la même problème: le variable langue est toujours n'ai pas défini, j'ai utilisé la solution de jiboom mais toujours la meme problème.
par contre dans mon code je voulais lit ce variable à partir d'une menu déroulante voici mon code HTML
<tr>
<td><div align="right" class="user">
<div align="right">LANGUAGE :</div></td> <form>
<td> <div align="left"> <input type=hidden name="langue" id="langue">
<select>
<option value="fr">Francais(Fr)</option>
<option value="en">English(En)</option>
</select>
</form>
</tr></div></td>
et j'ai utiliser la démarche de jiboom pour le codage en php.
j'attend votre aide,
cdlt.
27 oct. 2010 à 00:36
22 avril 2012 à 17:42
déclaré en premier la function "set_cookie"
mettres une condition sur la variable "$_GET['langue']" pour eviter les erreurs au cas où elle n'est pas déclarée.
-----------------------------
<?php
function set_cookie($langue)
{
$expire = 365*24*3600;
if (setcookie("CHOIXlang", $langue, time() + $expire) != TRUE)
{
}
else
{
setcookie("CHOIXlang", $langue, time() + $expire);
}
}
?>
<?php
$GETlangue = isset($_GET['langue']) ? $_GET['langue']:'';
if (isset ($_COOKIE['CHOIXlang']) && $GETlangue != 'fr' && $GETlangue != 'en')
{
$langue = $_COOKIE['CHOIXlang'];
}
else if ($GETlangue == 'en' || $GETlangue == 'fr')
{
$langue = $GETlangue;
set_cookie($langue);
}
else
{
$langue = explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']);
$langue = strtolower(substr(chop($langue[0]),0,2));
set_cookie($langue);
}
?>
<a href="?langue=fr" >FR</a> | <a href="?langue=en" >EN</a>
<br />
<br />
<?php
if ($GETlangue == "fr" || $langue == "fr")
{
echo "fr";
}
elseif ($GETlangue == "en" || $langue == "en")
{
echo "en";
}
?>