j'ai créé un site en php avec affichage sur page unique. je veux mettre 2 images clickable, avec 2 petits drapeaux permettant de choisir la langue d'affichage.
j'ai procéder en créant 2 fichiers: fr-lang.php et en-lang.php. Ils contiennent les memes variables, avec des valeurs différentes selon la langue.
ex: pour fr-lang.php
<?php
//---------------------------------------------------------
// menu de index.php
//---------------------------------------------------------
define('TXT_BOUTON_1', 'HOME');
define('TXT_BOUTON_2', 'bonjour');
define('TXT_BOUTON_3', 'au revoir');
?>
ex: pour en-lang.php
<?php
//---------------------------------------------------------
// menu de index.php
//---------------------------------------------------------
define('TXT_BOUTON_1', 'HOME');
define('TXT_BOUTON_2', 'hello');
define('TXT_BOUTON_3', 'good bye');
?>
jusque là ça roule. je veux créer une cookie sur ma 1ère page (index.php) comme ça:
<?php
if(isset($HTTP_COOKIE_VARS['lang'])) {
$lang = $HTTP_COOKIE_VARS['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);
}
if ($lang=='fr') { // si la langue est 'fr' (français) on inclut le fichier fr-lang.php
include('lang/fr-lang.php');
} elseif ($lang=='en') { // si la langue est 'en' (anglais) on inclut le fichier en-lang.php
include('lang/en-lang.php');
}
//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);
?>
<html>
<head>blabla</head>
<body>blabla</body>
</html>
j'ai donc testé l'existence de mon cookie, et selon le cas redirigé vers la bonne langue, ou sinon celle du navigateur.
Maintenant la ou j'ai un probleme, c'est que ma variable $lang ne change jamais. elle est sensé etre modifiée sur ce lien:
<a href="?page=<?php echo "$page";?>?lang=fr" ><span><span><img src="images/FR.png" height=25 width=32 /></span></span></a>
remarque:je passe une autre variable qui fonctionne très bien, $page, mais si j'enlève le code php lié à cette variable dans cette balise, le problème ne change pas.
Sous FF ou IE, le pb est le même. Si je vais voir le cookie dans mes doosiers, il est biuen là, mais la valeur lang est toujours 'fr', jamais 'en'...
J'espère avoir été le plus clair.
Après trop d'heures à tourner en rond, je m'en remets à vous!
Merci d'avance.

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.
// Déterminer dans quelle langue les URLs seront traduites // 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['lang']) && !isset ($_GET['langue'])) { $langue = $_COOKIE['lang']; } // le choix de la langue est déclaré par url else if (isset($_GET['langue'])) { $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($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2); // on peut rajouter ici un script pour les langues autorisées set_cookie($langue); } //fonction de création du cookie de la langue function set_cookie($langue) { $expire = 365*24*3600; //enregistrement du cookie au nom de lang + détection si erreur if (setcookie("lang", $langue, time() + $expire) != TRUE) { //echo 'Le cookie n\'a pas marché<br />'.$_COOKIE['lang']; } else { setcookie("lang", $langue, time() + $expire); //echo 'Le cookie a marché<br />'.$_COOKIE['lang']; } }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";
}
?>