jimmplan
Messages postés9Date d'inscriptionmardi 20 novembre 2007StatutMembreDernière intervention22 novembre 2007
-
20 nov. 2007 à 15:52
jimmplan
Messages postés9Date d'inscriptionmardi 20 novembre 2007StatutMembreDernière intervention22 novembre 2007
-
22 nov. 2007 à 02:29
Bonjour,
j'aimerais avoir de l'aide PHP à propos du site que je suis en train de construire multilingues, multidevises.
Par défaut mon site est en français avec la devise $CAN. Mon problème est lorsque je clique sur Anglais et que je change ma devise. Mon site redevient en français. et vice versa c'est-à-dire lorsque je sélectionne un autre devise et que je clique sur Anglais ma devise revient à $CAN.
Voici comment je procède (le site pour que vous puissez voir est le suviant : www.gimypro.com/maximeplante ) :
Pour changer ma langue : Dans ma page html: <td>Français</td>
<td>Anglais</td>
Et lors du chargement de ma page :
if(!isset($_GET['lang']))
{$_SESSION['lang'] = 'fr.php';}
else
{
if ($_GET['lang'] != '')
{$_SESSION['lang'] = ($_GET['lang'].'.php');}
}
include $_SESSION['lang'];
Maintenant pour changer ma devise :
Dans ma page html:
<form action ="index.php" method= "POST" >
<select name="currency" class="texteZoneD" style="width: 100px;" onchange="submit()">
<option value="CAD" <?php if ( isset($_POST['currency']) AND !empty($_POST['currency']) ){if(($_POST['currency'])=='CAD'){echo 'selected';}} ?>> $ Canadien</option>
<option value="USD" <?php if ( isset($_POST['currency']) AND !empty($_POST['currency']) ){if(($_POST['currency'])=='USD'){echo 'selected';}} ?>> $ Americain</option>
<option value="EUR" <?php if ( isset($_POST['currency']) AND !empty($_POST['currency']) ){if(($_POST['currency'])=='EUR'){echo 'selected';}} ?>> Euro</option>
</select>
</form>
lors du chargement de ma page :
if ( isset($_POST['currency']) AND !empty($_POST['currency']) )
{$_SESSION['curr'] = $_POST['currency'];}
else
{ $_SESSION['curr'] = 'CAD';}
et la conversion des prix :
<?php
$x = new CurrencyConverter('localhost','user','pass','convertisseurDeDevises','devises');
echo $x->convert(2.50,'CAD',$_SESSION['curr']);
echo $_SESSION['curr'];
?>
Qu'est-ce qui ne marche pas? Je sais que lors du changement de devise je perd ma variable lang dans mon url, comment le garder? ou comment procéder?
neigedhiver
Messages postés2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 201118 20 nov. 2007 à 16:42
Ok...
if (isset($_GET['lang']))
{
if ($_GET['lang'] != '')
Tu peux alléger en mettant ça :
if (isset($_GET['lang']) && !empty($_GET['lang']))
{
C'est aussi performant et plus clair. Le deuxième test (!empty() ) n'est effectué que si le premier est vrai. Ca fait un bloc en moins... (c'est juste du pinaillage, mais bon)
Bon... Y'a un truc que je comprends pas dans tes tests. J'ai l'impression que tu fais pas tout dans le bon ordre.
Si je comprends bien, la présence dans l'url de lang permet de forcer à changer.
Donc il faut commencer par là. Pas avec le test sur la variable de session.
Tu peux essayer ça ?
$default_lang = 'fr';
// Langue spécifiée dans l'url
if (isset($_GET['lang']) && !empty($_GET['lang'])) {
// Il serait de bon ton, quand même, de vérifier que la langue est autorisée : fr ou en, pas autre chose... Sinon, on met la langue par défaut de force.
$_SESSION['lang'] = $_GET['lang'] . '.php';
}
// Pas de langue dans l'url
else {
// La variable de session n'existe pas ou est vide. On force à la valeur par défaut
if (!isset($_SESSION['lang']) || empty($_SESSION['lang'])) {
$_SESSION['lang'] = $default_lang . '.php';
}
}
// Ici, la variable de session est forcément définie et pleine.
include($_SESSION['lang']);
Je garantie pas que c'est correct, mais c'est déjà une piste.
neigedhiver
Messages postés2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 201118 20 nov. 2007 à 16:06
Salut,
Si tu stockes la langue dans une variable de session et qu'au chargement de la page tu ne vérifies que dans la variable GET, forcément, ça peut pas marcher...
Il faudrait AUSSI vérifier si la langue est dans $_SESSION (puisque tu l'y mets), avant de forcer la langue en français ;)
jimmplan
Messages postés9Date d'inscriptionmardi 20 novembre 2007StatutMembreDernière intervention22 novembre 2007 20 nov. 2007 à 16:15
Si tu vas sur www.gimypro.com/maximeplante
tu va voir au tout début en haut a gauche fr.php -> ce qui est correct
par la suite si tu clique sur anglais tu vera en.php -> ce qui est correct
Si tu change la devise, tu va voir encore en.php -> ce qui est correct car c ma variable session mais mon site redevient en francais ?
merci
jimmy p
Vous n’avez pas trouvé la réponse que vous recherchez ?
jimmplan
Messages postés9Date d'inscriptionmardi 20 novembre 2007StatutMembreDernière intervention22 novembre 2007 20 nov. 2007 à 17:03
Merci pour ton code, c'est vrai qu'il est plus clair et plus logique... cependant le tout ne marche pas encore.
Je t'ai mis à jour sur le site le code que tu ma proposé et des traces en haut de la page les commentaires en echo, tu pourra peut-être mieux voir comment réagis le site....
c'est bizarre la variable session est correctement rempli mais mon site n'inclut comme pas le bon fichier fr.php ou en.php
jimmplan
Messages postés9Date d'inscriptionmardi 20 novembre 2007StatutMembreDernière intervention22 novembre 2007 20 nov. 2007 à 22:13
En fin de compte j'ai réussi à avoir accès à mon ftp voici le code complet de ma page.... pt que ca va mal se lire, si tu veux le .php voici mon msn jimmyplante@gmail.com...
merci encore
<?
session_start();
//Includes
include('CurrencyConverter.php');
$default_lang = 'fr';
// Langue spécifiée dans l'url
if (isset($_GET['lang']) && !empty($_GET['lang'])) {
echo ' ** Langue spécifiée dans lurl ** ';
// Il serait de bon ton, quand même, de vérifier que la langue est autorisée : fr ou en, pas autre chose... Sinon, on met la langue par défaut de force.
$_SESSION['lang'] = $_GET['lang'] . '.php';
}
// Pas de langue dans l'url
else {
echo ' ** pas de langue dans lurl ** ';
// La variable de session n'existe pas ou est vide. On force à la valeur par défaut
if (!isset($_SESSION['lang']) || empty($_SESSION['lang'])) {
echo 'variable session existe pas ou est vide, on force a la valeur par defaut ';
$_SESSION['lang'] = $default_lang . '.php';
}
}
// Ici, la variable de session est forcément définie et pleine.
echo ' ** Contenu de la variable SESSION : ';
echo $_SESSION['lang'];
echo ' ** ';
echo ' ** Ici, la variable de session est forcément définie et pleine ** ';
include($_SESSION['lang']);
neigedhiver
Messages postés2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 201118 20 nov. 2007 à 22:43
Encore une question...
Je vois dans ton code que le titre de la page html est défini comme ça :
<title><?php echo $l['titleModele']; ?></title>
Faut-il en déduire que les variables de langue sont définies dans l'array $l ?
Autrement dit, si je comprends bien, le fichier en.php contient :
$l['titleModele'] = 'ModeleEN';
et fr.php contient :
$l['titleModele'] = 'ModeleFR';
???
J'ai bon ?
Parce que si c'est bien le cas, pourquoi est-ce que le titre de la page anglaise est bien en anglais, tout le temps ?
neigedhiver
Messages postés2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 201118 20 nov. 2007 à 22:46
Etrangement, si je prends ton script tel quel en ne supprimant que les lignes qui incluent des fichiers que je n'ai pas, il fonctionne...
J'ai mis un fichier fr.php et un en.php avec la définition de $l['titleModele'] et le bon fichier est inclus, et le titre est bien en anglais quand il faut, et en français quand il faut.
Ce qui m'étonne, c'est que sur ton site, il n'est en anglais que quand la langue est passée dans l'url... Ca montre bien que le fichier contient les bonnes définitions, qu'il existe, qu'il est trouvé par le script et correctement inclus quand il le veut bien...
jimmplan
Messages postés9Date d'inscriptionmardi 20 novembre 2007StatutMembreDernière intervention22 novembre 2007 21 nov. 2007 à 04:44
Oui effectivement la variable 'titleModele' est definit dans l'array $l.... les autres comme le menu sont dans l'array $menu, $footer, etc...
Tu me fais remarquer une chose importante qui va m'aider à débugguer demain, la variable titleModele agit correctement, ce qui est bizarre comme tu as dit...
demain j'essayerai des mettre les variables du menu dans l'array $l voir s'il y a changement...
AaaaaaaaaaaaAAAhhH je crois que je vien d'allumer, imbécile que je suis, en t'écrivant !!!!!!!!!!!!!!!!!!
MON CODE PHP au début de ma page index.php n'est pas répété dans menu.php et footer.php !!!!!! je suis sure que c'est ça !!!!