Aller au contenu

Problème site multi-langue


Sujets conseillés

Posté

Bonjour,

Voila j'ai suivit correctement le tutorial de php debutant sur un "Site multi-langues". Sans cookies cela marche très bien mais avec j'ai une erreur....

http://phpdebutant.org/article106.php

Je ne crois pas avoir fait d erreurs dans le code alors je ne sais pas trop....Voici l erreur que j'obtiens

Warning: Cannot modify header information - headers already sent by (output started at /home/adnpc.net/perso/dll/index.php:1) in /home/adnpc.net/perso/dll/includes/decide-lang.php on line 24

La ligne 24 dans mon code correspond a ceci :

setcookie("lang", $lang, time() + $expire);

Sinon j'ai également une question lorsque je suis sur l'index avec le texte en anglais

...../index.php?lang=en

lorsque je clique sur un lien (présent sur l'index), la partie ?lang=en disparait ce qui est logique et ça repasse en français...comment remédier à ce problème ?

Merci beaucoup

Posté

Bonjour,

Pour ton premier problème, tu dois avoir quelque chose qui s'affiche avant la ligne 24.

Pour le second problème, j'ai pas tout compris. :(

Portekoi

Posté


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

?>

en fait j'ai ça comme code

Je suis en train de lire un tuto sur cette erreur (http://www.phpdebutant.org/article145.php) mais je ne comprends pas trop pour l instant...

Posté

Dans le fichier fr-lang.php ou en-lang.php, tu n'affiches rien?

Parfois, il suffit d'un saut de ligne tout bête...

Essaie en mettant les deux lignes d'inclusion en commentaire pour voir...

Posté

si j'affiche des choses

<?php

//---------------------------------------------------------

// ELEMENTS COMMUNS

//---------------------------------------------------------

define('TXT_1_STRUCT', 'Home');

define('TXT_2_STRUCT', 'Partners');

define('TXT_3_STRUCT', 'Contact');

define('TXT_4_STRUCT', 'About');

define('TXT_5_STRUCT', 'Copyright © blablabla 2006. Propriété de leurs auteurs respectifs. Page générée en .....');

//---------------------------------------------------------

// index.php

//---------------------------------------------------------

define('TXT_1_INDEX', 'cdddccd');

define('TXT_2_INDEX', 'Nom du fichier recherché :');

define('TXT_3_INDEX', '(exemple : <font color="#FF0000"><hihihi</strong></font>)');

define('TXT_4_INDEX', 'ralala');

//---------------------------------------------------------

// propos.php

//---------------------------------------------------------

define('TXT_1_PROPOS', 'txt1');

define('TXT_2_PROPOS', 'txt2');

?>

ça marche d'ailleurs puisque sans cookies j'arrive à le faire marcher

Posté

Bonjour,

en fait j'ai ça comme code

Je suis en train de lire un tuto sur cette erreur (http://www.phpdebutant.org/article145.php) mais je ne comprends pas trop pour l instant...

<{POST_SNAPBACK}>

Regarde ton code... avant le "<?php" tu as une ligne vide. C'est elle qui fout la m***.

En effet, il faut absolument que les cookies et autres variables de sessions soient définie avant que les données a afficher soient envoyées au navigateur. Or la ligne vide est interprétée comme une donnée a afficher.

Supprime-la, ca devrait aller mieux :)

Posté
Bonjour,

Regarde ton code... avant le "<?php" tu as une ligne vide. C'est elle qui fout la m***.

En effet, il faut absolument que les cookies et autres variables de sessions soient définie avant que les données a afficher soient envoyées au navigateur. Or la ligne vide est interprétée comme une donnée a afficher.

Supprime-la, ca devrait aller mieux :)

<{POST_SNAPBACK}>

dans mon code il n'y a pas de ligne vide, c est juste sur le forum :)

Posté (modifié)

Si c'est pas une ligne, tu dois envoyer quelque chose au navigateur avant le setcookie(), c'est clair... Il faut que tu cherche de ce coté là.

Il y a quoi dans les includes fr-lang.php et en-lang.php ??

Modifié par NorSeb
Posté

Bonjour,

Après un bref echange de mail il s'est avéré que c'est (encore) Portekoi qui avait raison... Il y avait plein de choses affichées avant le setcookie.

Normalement, ca devrait aller :fete:

Posté

je viens de le mettre au tout début de la page mais c est pareil :D

<?php 
 require("includes/decide-lang.php");
 Require("includes/fonctions.php");
?>
<? echo "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>"; ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
 <head>
....

Posté

Juste avant d'envoyer le cookies, tu affiches un tiret, et une grande ligne, ainsi :

die("-<hr>");

Tu verras bien si quelque chose s'affiche avant le tiret, et avant la ligne ;)

  • 3 months later...
Posté

Bonjour,

j'ai actuellement le même problème sur ce tutorial, j'ai essayé la commande

die("-<hr>");

Le résultat de la page index.html est :

"); require("./pages/lang.php"); ?>

Choix de langue

* Francais

* Anglais

Code de la page index.html :

<?php 
die("-<hr>");
require("./pages/lang.php");  
?>
<html>
<head>
<title>Index</title>
</head>
<body>
</body>
<h1>Choix de langue</h1>
<ul>
<li><a href="./pages/accueil.php?lang=fr">Francais</a></li>
<li><a href="./pages/accueil.php?lang=en">Anglais</a></li>
</ul>

Au passage le code du cookie:

<?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('../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');
}
//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);
?>

Cependant quand j'essayé sur ma page accueil.php, j'ai un tiret ainsi qu'une barre qui s'affiche. Pourtant le code est le même que celui de l'index

J'ai essayé de chercher pourquoi il m'affichait le code php sur la page index, je pensais a une balise fermant le code mal placé mais j'ai pas trouvé que ce soit ds l'index ou le cookie.

Posté

Attends :

regle ton problème de cookie, tu verras que l'autre problème disparaitra de lui même.

Tu as un problème de langue parce que justement tu ne peux pas envoyer de cookie.

Pour régler ton problème de cookie, tu prends la première ligne du fichier en question (celui qui est appelé par l'url), et tu descend ton code comme ca, à la recherche de la ligne blanche ;)

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...