Prob avec site multilangue avec cookies
Résolu
martial_zero
Messages postés
59
Date d'inscription
Statut
Membre
Dernière intervention
-
martial_zero Messages postés 59 Date d'inscription Statut Membre Dernière intervention -
martial_zero Messages postés 59 Date d'inscription Statut Membre Dernière intervention -
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 .
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:
- Prob avec site multilangue avec cookies
- Site comme coco - Accueil - Réseaux sociaux
- Site de telechargement - Accueil - Outils
- Quel site remplace coco - Accueil - Réseaux sociaux
- Site x - Guide
- Site pour vendre des objets d'occasion - Guide
12 réponses
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 ;)
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 ;)
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.
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.
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 ;)
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 ;)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 ?.
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 ?.
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 ;)
@++
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 ;)
@++
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);
?>
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);
?>
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);
au cookie jusqu leur expiration
peut etre j aurai due fait une faute en mettant directement $_GET['lang']
setccokie("lang",$_GET['lang'],time()+$expire);
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);
?>
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);
?>
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);
?>
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);
?>