Prob avec site multilangue avec cookies

Résolu/Fermé
martial_zero Messages postés 59 Date d'inscription jeudi 30 octobre 2008 Statut Membre Dernière intervention 2 mai 2011 - 10 août 2009 à 23:07
martial_zero Messages postés 59 Date d'inscription jeudi 30 octobre 2008 Statut Membre Dernière intervention 2 mai 2011 - 15 août 2009 à 15:31
Bonjour tout le monde
je vous poste mon problème
je suis entrain de chercher quelle sont les voie plus pratique pour un site multilingue
je teste des script en local et ca marche sans prob vue la non complexité du script et sa varieté sur le web mais une fois que j introduit les cookies j ai ce type de prob
d après mes recherches je sait que certainement c est à cause d un echo qui ne doit pas être la
mais la je ne sait pas ou je doit modifier le script
voilà le message d erreur
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\siteml\choix.htm:4) in C:\xampp\htdocs\siteml\decide-lang.php on line 22

voiilà mon script tout simplement il se deroule de cette facon
une page index qui afffiche le contenu
puis un requiers choix.htm qui contient qui donnent la possibilités de choisir la langue
puis une autre requiers decide-lang.php qui agit selon ces étapes

1-assigner une langue si elle existe dans une cookie
2-si elle n est pas existante prendre la langue par defaut du navigateur
3-si non choisir une langue soit francais ou anglaise
fixer la cookies à un ans
voilà ma page index.php
1-// ma page index
<?php require("choix.htm");?>
<?php require("decide-lang.php");?>
<html>
<body>
<?php echo TXT_ACCUEIL_INDEX; ?>
<br>
Meteo du jour : <?php echo TXT_METEO; ?>
<br>
Conseil du jour : <?php echo TXT_CONSEIL_INDEX; ?>
</body>
</html>
2-ma page choix.htm
<table>
<tr><td valign="top" colspan="3" height="71px"> <a href="index.php?lang=fr" title="langue francaise">langue francaise</a></td></tr>
<tr><td valign="top" colspan="3" height="71px"> <a href="index.php?lang=en" title="langugue anglaise">langue anglaie </a></td></tr>
</table>
3-ma page decide-lang.php
<?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);
}

//script d'origine
if ($lang=='fr') { // si la langue est 'fr' (français) on inclut le fichier fr-lang.php
include('fr-lang.php');
} elseif ($lang=='en') { // si la langue est 'en' (anglais) on inclut le fichier en-lang.php
include('en-lang.php');
}
//fin du script d'origine

//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);

?>
je compte sur vous .
A voir également:

12 réponses

jjsteing Messages postés 1670 Date d'inscription vendredi 11 mai 2007 Statut Contributeur Dernière intervention 21 mai 2012 181
11 août 2009 à 08:08
bonjour,

je pense que ton soucis viens du fait que tu inclu ton choix.htm juste avant le <HTML> et le body.. hors tu as des balises <table> avec du texte... qui se retrouve donc 'hors' de ta page..

donc moi je ferais :

//je supose que TXT_xxx sont des des constantes avec un define ( 'TXT_xxx', 'Mon texte xxx');
//sinon, variables .. dans ce cas ca serait plutot $TXT_
<?php

$Html="<html><body>"

include("choix.htm");
include("decide-lang.php");
//ici tu charge le texte TXT_xxx en fonction de la langue inscrit dans le cookie

$Html.=TXT_ACCUEIL_INDEX."<br>";
$Html.="Meteo du jour :".TXT_METEO."<br>";
$Html.="Conseil du jour : ".TXT_CONSEIL_INDEX;
$Html.="</body></html>";
echo $Html;

2-ma page choix.htm
$Html.='<table><tr><td valign="top" colspan="3" height="71px"> <a href="index.php?lang=fr" title="langue francaise">langue francaise</a></td></tr>
<tr><td valign="top" colspan="3" height="71px"> <a href="index.php?lang=en" title="langugue anglaise">langue anglaie </a></td></tr>
</table>';

3-ma page decide-lang.php
<?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);
}

//script d'origine
if ($lang=='fr') { // si la langue est 'fr' (français) on inclut le fichier fr-lang.php
include('fr-lang.php');
} elseif ($lang=='en') { // si la langue est 'en' (anglais) on inclut le fichier en-lang.php
include('en-lang.php');
}
//fin du script d'origine

//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);

?>

ps : je supose que tu voudrais faire un peu comme moi sur mon site : jjsteing.u7n.org ;)
0
martial_zero Messages postés 59 Date d'inscription jeudi 30 octobre 2008 Statut Membre Dernière intervention 2 mai 2011 5
11 août 2009 à 21:32
merci infiniment jjsteing je vais
suivre ton conseil et te donner un feedback
0
martial_zero Messages postés 59 Date d'inscription jeudi 30 octobre 2008 Statut Membre Dernière intervention 2 mai 2011 5
12 août 2009 à 00:05
salut j ai suivie tes conseil je vois que le message d " erreur a disparu
mais lorsque je clique pour changer de langue sur

$Html.='<table><tr><td valign="top" colspan="3" height="71px"> <a href="index.php?lang=fr" title="langue francaise">langue francaise</a></td></tr>
<tr><td valign="top" colspan="3" height="71px"> <a href="index.php?lang=en" title="langugue anglaise">langue anglaie </a></td></tr>
</table>';

la langue reste bloqué sur celle francaise
donc on réussit à bloquer le message d erreur mais le switch entre les langue désormais ne fonctionne pas.
0
jjsteing Messages postés 1670 Date d'inscription vendredi 11 mai 2007 Statut Contributeur Dernière intervention 21 mai 2012 181
12 août 2009 à 07:50
re :)

if ($lang=='fr') { // si la langue est 'fr' (français) on inclut le fichier fr-lang.php
include('fr-lang.php');
} else{ // si la langue est 'en' (anglais) on inclut le fichier en-lang.php
include('en-lang.php');
}

pas elseif.. si c'est pas fr, alors anglais..

de plus, vérifie bien que $lang prenne bien la valeur de 'fr' ou 'en' (ou autre en fait)
tient moi au jus ;)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
martial_zero Messages postés 59 Date d'inscription jeudi 30 octobre 2008 Statut Membre Dernière intervention 2 mai 2011 5
12 août 2009 à 22:14
mon ami je te remercie énormément
je t explique exactement les fautes que j ai fait comme ça on rigole ensemble
:
1-il n y avait pas de $_GET[] dans decide-lang.php
et c est normale que ca bloque dans la langue francaise vue que j ai demandé dans
f(isset($HTTP_COOKIE_VARS['lang'])) {
$lang = $HTTP_COOKIE_VARS['lang']
que si jamais il n ya rien dans la variable lang $lang prend par defaut la langue du navigateur par defaut
:-))))))))))))))))))))))))))) c ' est normale mon firefox est en francais .
2-je fesait des test avec une variable lang alors que je les declarés dans mon fichier choix.php en étant lan
3-j ai suprimé les espace dans mon fichier en-lang.php cat ca fesait sortir le message Warning: Cannot modify header information - headers already sent by ect ect
ca roule parfaitement
Merci énormément pour le fait que tu m aider à me faire les bonne question.
je vais mettre cette discussion comme étant résolu grâce à toi
stp est ce que tu vois ce petit effort est bien pour un débutant ?.
0
jjsteing Messages postés 1670 Date d'inscription vendredi 11 mai 2007 Statut Contributeur Dernière intervention 21 mai 2012 181
12 août 2009 à 22:26
re:)

tres bien.. et pourvu que ca dure ;)

Si tu as d autres soucis, hesite pas ;)

courage pour la suite de ton site, c est normale de bloquer des fois, meme moi, sans dire que je suis un expert, je bloque.. sur des conneries en plus !! :p.. donc, n'ai pas paur de poser des questions ;)

@++
0
martial_zero Messages postés 59 Date d'inscription jeudi 30 octobre 2008 Statut Membre Dernière intervention 2 mai 2011 5
12 août 2009 à 22:33
ah juste instant avant de dire c est fait :pppppp
je ne reussit pas à enregistrer valeur de la cookie
il fait le switch des langue mais je ne réussit pas a conserver les valeurs des cookie lorsque je réouvre la page
voilà ma soufrance.
<?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);

}

//script d'origine
if ((isset($_GET['lang'])) && ($_GET['lang']=='fr')) { // si la langue est 'fr' (français) on inclut le fichier fr-lang.php
include('fr-lang.php');
} elseif ((isset($_GET['lang'])) && ($_GET['lang']=='en')) { // si la langue est 'en' (anglais) on inclut le fichier en-lang.php

include('en-lang.php');
}
//fin du script d'origine

//définition de la durée du cookie (1 an)
$expire = 365*24*3600;

//enregistrement du cookie au nom de lang

setcookie("lang", $_GET['lang'], time() + $expire);
?>
0
martial_zero Messages postés 59 Date d'inscription jeudi 30 octobre 2008 Statut Membre Dernière intervention 2 mai 2011 5
13 août 2009 à 00:16
desolé jjsteing
mais je ne sait pour la cookie n as pas enregsitré aucune valeur.
0
jjsteing Messages postés 1670 Date d'inscription vendredi 11 mai 2007 Statut Contributeur Dernière intervention 21 mai 2012 181
13 août 2009 à 07:49
re :)
Sous firefox ou ie ou les deux ?
0
martial_zero Messages postés 59 Date d'inscription jeudi 30 octobre 2008 Statut Membre Dernière intervention 2 mai 2011 5
13 août 2009 à 18:44
sous les deux j ai verfié aussi que firefox et IE donner la permission
au cookie jusqu leur expiration
peut etre j aurai due fait une faute en mettant directement $_GET['lang']
setccokie("lang",$_GET['lang'],time()+$expire);
0
martial_zero Messages postés 59 Date d'inscription jeudi 30 octobre 2008 Statut Membre Dernière intervention 2 mai 2011 5
13 août 2009 à 21:58
je suis entrain de modifier mon script
de cette facon : mais rien ne change .
<?php

$lang_traduites = array(0 => 'fr', 1 => 'en');
$langue_defaut = $lang_traduites[0];

$lang_navig = explode(",",$_SERVER['HTTP_ACCEPT_LANGUAGE']);
$lang_navig = strtolower(substr(rtrim($lang_navig[0]),0,2));

$lang = !empty($_COOKIE['lang'])? $_COOKIE['lang'] : 0;
$lang = !empty($_GET['lang'])? $_GET['lang'] : $lang;
$lang = !empty($lang)? $lang : $lang_navig ;
$lang = in_array($lang,$lang_traduites)? $lang : $langue_defaut;

//script d'origine
if ((isset($_GET['lang'])) && ($_GET['lang']=='fr')) { // si la langue est 'fr' (français) on inclut le fichier fr-lang.php
include('fr-lang.php');
} elseif ((isset($_GET['lang'])) && ($_GET['lang']=='en')) { // si la langue est 'en' (anglais) on inclut le fichier en-lang.php

include('en-lang.php');
}
//fin du script d'origine

//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);

?>
0
martial_zero Messages postés 59 Date d'inscription jeudi 30 octobre 2008 Statut Membre Dernière intervention 2 mai 2011 5
15 août 2009 à 15:31
madames et messieurs voilà
merci pour tout le monde qui m ad aidé je vous poste le script finale qui fonctionne correctement
merci infiniment pour jjsteing
le changement été fait de cette manière
$lang_traduites = array(0 => 'fr', 1 => 'en');
$langue_defaut = $lang_traduites[0];

$lang_navig = explode(",",$_SERVER['HTTP_ACCEPT_LANGUAGE']);
$lang_navig = strtolower(substr(rtrim($lang_navig[0]),0,2));

$lang = !empty($_COOKIE['lang'])? $_COOKIE['lang'] : 0;
$lang = !empty($_GET['lang'])? $_GET['lang'] : $lang;
$lang = !empty($lang)? $lang : $lang_navig ;
$lang = in_array($lang,$lang_traduites)? $lang : $langue_defaut;
include($lang.'-lang.php');

//script d'origine

//fin du script d'origine

//définition de la durée du cookie (1 an)
if ((!empty($_GET['lang']) && in_array($_GET['lang'],$lang_traduites)) && (empty($_COOKIE['lang']) || (isset($_COOKIE['lang']) && $_COOKIE['lang'] != $_GET['lang']))) setcookie('lang', $_GET['lang'], time() + 3600 * 24 * 365);

?>
0