Les Allergies
Alimentaires
Posez votre question Signaler

Prob avec site multilangue avec cookies [Résolu]

martial_zero 58Messages postés 30 octobre 2008Date d'inscription 2 mai 2011Dernière intervention - Dernière réponse le 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 .
Lire la suite 

Prob avec site multilangue avec cookies »

12 réponses
Réponse
+0
moins plus
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 ;)
Ajouter un commentaire
Réponse
+0
moins plus
merci infiniment jjsteing je vais
suivre ton conseil et te donner un feedback
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
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 ;)
Ajouter un commentaire
Réponse
+0
moins plus
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 ?.
Ajouter un commentaire
Réponse
+0
moins plus
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 ;)

@++
Ajouter un commentaire
Réponse
+0
moins plus
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);
?>
Ajouter un commentaire
Réponse
+0
moins plus
desolé jjsteing
mais je ne sait pour la cookie n as pas enregsitré aucune valeur.
Ajouter un commentaire
Réponse
+0
moins plus
re :)
Sous firefox ou ie ou les deux ?
Ajouter un commentaire
Réponse
+0
moins plus
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);
Ajouter un commentaire
Réponse
+0
moins plus
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);

?>
Ajouter un commentaire
Réponse
+0
moins plus
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);

?>
Ajouter un commentaire
Ce document intitulé « prob avec site multilangue avec cookies » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?