un petit coup de main pour une erreur de code

Eléphanteau du PHP | 25 Messages

12 nov. 2007, 15:41

desolé je ne comprend pas bien ce que tu me dis.

comment faire pour que ça fonctionne ?

merci pour le coup de main

Mammouth du PHP | 19672 Messages

12 nov. 2007, 15:41

Ok, alors petit ménage : tu utilisais le même fichier pour l'anglais ou l'espagnol et ensuite la structure en if/elseif/else est un peu lourde dans ce cas de figure. Un switch me semble plus approprié.

Exemple :
<?php
/* On récupère la lange avec un ternaire... */
$lang = (isset($_COOKIE['lang'])) ? $_COOKIE['lang'] : substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
/* On définit la langue du fichier à utiliser */
switch ($lang)
{
    case 'en':
        $fichier = 'en';
        break;
    case 'es':
        $fichier = 'esp';
        break;
    case 'fr':
    default:
        $fichier = 'fr';
        break;
}
/* Inclusion du fichier de langue */
include_once('lang/'. $fichier .'-lang.php');

/* Enregistrement dun cookie pour conserver la langue choisie */
//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);
?>
Teste ça et reviens avec le résultat.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 25 Messages

12 nov. 2007, 15:46

j'ai modifié le code par copier collé de ce que tu as repondu et aucune erreur sauf que ça ne change toujours pas les textes de meteo du jour et conseil du jour ça reste tjours en francais.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

12 nov. 2007, 15:47

beuh.. son problème restera le même :)

L'idée est la suivante :
- 1. Si l'utilisateur spécifie une lange, on la stocke dans un cookie, on la récupère et on l'utilise.
- 2. Sinon, si l'utilisateur ne sépcifie pas de langue, on regarde si le cookie contient une langue, si oui on l'utilise
- 3. Sinon on défini une valeur par défaut et on l'utilise
if (isSet($_GET['lang'])) { // 1
  $lang = $_GET['lang'];
  setCookie(...);
}
else if (isSet(($_COOKIE['lang'])) { // 2
  $lang = $_COOKIE['lang'];
}
else { // 3
  $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
}
...
include (...);
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 19672 Messages

12 nov. 2007, 15:50

Ça veut donc dire que la variable de départ reste coincée sur le français, ce qui tendrait à me faire penser que le problème est situé au niveau du cookie qui ne s'enregistrerait pas or comme tu ne dois pas avoir modifié la configuration de ton navigateur, c'est la variable d'environnement qui est donc récupérée et donc... "fr". À vérifier... :-k
Tu peux commencer avec :
<?php
/* On récupère la lange avec un ternaire... */
$lang = (isset($_COOKIE['lang'])) ? $_COOKIE['lang'] : substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);

/* une petite ligne de débogage : */
echo("Langue trouvée : ". $lang);

/* On définit la langue du fichier à utiliser */
switch ($lang)
//... etc...
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 25 Messages

12 nov. 2007, 15:54

voila j'ai testé et voici le resultat.


Langue trouvée : fr

Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\multilangues\lang\decide-lang.php:6) in c:\program files\easyphp1-8\www\multilangues\lang\decide-lang.php on line 29

Bienvenue sur PHP Débutant !
Meteo du jour : Il fait un soleil radieux !
Conseil du jour : Faites du PHP !

Mammouth du PHP | 19672 Messages

12 nov. 2007, 15:56

As-tu essayé plusieurs fois en changeant de langue ? Et le cas échéant, trouves-tu toujours la même valeur ?

PS: ne t'inquiètes pas de l'erreur affichée à cause du header, elle disparaitra dès que tu désactiveras le message de débogage
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 25 Messages

12 nov. 2007, 15:57

quand je change de langue toujours la meme erreur.

Mammouth du PHP | 19672 Messages

12 nov. 2007, 15:58

:shock: Bon attends, qu'on se comprenne bien : je te parle de "la même valeur" pas de la même erreur. (lis complètement le message que j'ai mis précédemment)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 25 Messages

12 nov. 2007, 16:01

voila le message en mettant en par defaut

Langue trouvée : fr

Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\multilangues\lang\decide-lang.php:6) in c:\program files\easyphp1-8\www\multilangues\lang\decide-lang.php on line 29

Welcome on PHP Débutant !
Meteo du jour : The sun is shining !
Conseil du jour : Lets do some PHP !

Mammouth du PHP | 19672 Messages

12 nov. 2007, 16:07

Logique, je viens de réaliser un truc : même en changeant de langue, par défaut, ce sera celle trouvée dans le cookie s'il existe.

Modifie la première ligne avec ceci :
$lang = (isset($_GET['lang']) ? $_GET['lang'] : (isset($_COOKIE['lang'])) ? $_COOKIE['lang'] : substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2));
En cl;air, si un paramètre de langue est passé en url, alors ce sera la langue sélectionnée, sinon, si on trouve un cookie, on récupère la langue enregistrée, et en dernier recours, on prendra la langue par défaut du navigateur.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

12 nov. 2007, 16:07

hmm... je m'interroge... dois-je utiliser mon invisibilité pour faire le mal ou bien pour combattre le crime ? :-k
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 19672 Messages

12 nov. 2007, 16:08

hmm... je m'interroge... dois-je utiliser mon invisibilité pour faire le mal ou bien pour combattre le crime ? :-k
Essaye le crime :mrgreen:
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 25 Messages

12 nov. 2007, 16:12

je viens de faire le test.

toujours la meme chose.

Langue trouvée : fr

Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\multilangues\lang\decide-lang.php:7) in c:\program files\easyphp1-8\www\multilangues\lang\decide-lang.php on line 30

Welcome on PHP Débutant !
Meteo du jour : The sun is shining !
Conseil du jour : Lets do some PHP !

en cliquant sur les drapeaux rien ne change. :cry:

c'est vraiment tres sympat de t'occuper de mon probleme, pareil pour les autres.

Mammouth du PHP | 19672 Messages

12 nov. 2007, 16:19

J'avais une boulette dans mon ternaire. J'ai repris et voici ce que j'ai fait, ce bout de fichier est autonome pour te permettre de voir ce que ça donne. Adapte ensuite à ton code :
<?php
/* On récupère la lange avec un ternaire... */
$lang = (isset($_GET['lang'])) ? $_GET['lang'] : ((isset($_COOKIE['lang'])) ? $_COOKIE['lang'] : substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2));
/* une petite ligne de débogage : */
echo("Langue trouvée : ". $lang);

/* On définit la langue du fichier à utiliser */
switch ($lang)
{
    case 'en':
        $fichier = 'en';
        break;
    case 'es':
        $fichier = 'esp';
        break;
    case 'fr':
    default:
        $fichier = 'fr';
        break;
}
/* Inclusion du fichier de langue */
$fichierlangue = 'lang/'. $fichier .'-lang.php';
echo("<p>Fichier à inclure : ". $fichierlangue ."</p>");
// include_once($fichierlangue);

/* Enregistrement dun cookie pour conserver la langue choisie */
//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);
?>
<p><a href="./choixlangue.php?lang=fr" title="">En français</a></p>
<p><a href="./choixlangue.php?lang=en" title="">En anglais</a></p>
<p><a href="./choixlangue.php?lang=es" title="">En espagnol</a></p>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: