Site multilangue

Zebra1928
Messages postés
163
Date d'inscription
jeudi 15 juillet 2004
Statut
Membre
Dernière intervention
27 janvier 2016
- Modifié par Zebra1928 le 10/11/2015 à 15:19
jordane45
Messages postés
36038
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 août 2022
- 16 nov. 2015 à 14:06
Slt,

je cree un site multilangue, j'ai eu l'idee de creer un seul site et de passer en paramètre les fichiers des mots comme:

include("de.php");
include('fr.php");
include("en.php");


il s'agit d'une variable de session "langue" dans la page d'accueil qui retour fr pour la français, de pour l'allemand et EN pour l'anglais.

si $langue est à 1 donc français, à 2 donc anglais à 3 donc allemand.

les fichiers comportent les mots invariables en commun comme login, déconnexion, username, password, les mois, les jours, les menus, les messages de confirmation, .... mon probleme c'est que j'ai un message d'erreur à chaque fois que je fais appel à un texte de ces fichiers.

comme par exemple:

echo " <td width=\"45%\" align=\"center\">[ <a href=index.php><u>".$lng["mn_quitter"]."</u></a> ]</td>\n"; or que j'ai un message d'erreur Notice: Undefined variable: lng in principale.php on line 47.

ligne 47 veut dire la ligne plus haut en gras.

ou si je met simplement echo $lng["mn_quitter"]; j'aurai une erreur.

Merci pour vos reponses !

@ -:)

Zebra

4 réponses

jordane45
Messages postés
36038
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 août 2022
358
10 nov. 2015 à 18:22
Bonjour,

Il existe de multiples façons de faire du multi-langues...
La plus commune est de passer par des "constantes"

 // dans mon fichier langue FR
define("LNG_BONJOUR","Bonjour");


 // dans mon fichier langue EN
define("LNG_BONJOUR","Hello");


Dans le code de ma page :

$variable_langue = 'fr'; // ou  $variable_langue = $_SESSION['langue'] ? $_SESSION['langue']: 'fr';
include $variable_langue.'.php';

echo LNG_BONJOUR;


Une autre méthode (plus ou moins sur le même principe) est d'utiliser, à la place des "fichiers de langue" .... un table dans ta Base de données avec comme colonnes :


Variable_langue | FR | EN | ...
LNG_CNX | Connexion | Login | ...

et ensuite, tu charges les données de la colonne correspondante à la langue choisie par l'utilisateur...


0
Zebra1928
Messages postés
163
Date d'inscription
jeudi 15 juillet 2004
Statut
Membre
Dernière intervention
27 janvier 2016

11 nov. 2015 à 10:37
Merci jordane45, la methode est claire pour moi, c'est bien la deuxième que vous avez cité ( variable langue en session.

Mon problème c'est lorsque je fais appel à ces textes dans le fichier langue_de.php ou langue_en.php , j'ai un message d'erreur.
0
zn415
Messages postés
62
Date d'inscription
samedi 23 juin 2007
Statut
Membre
Dernière intervention
21 novembre 2015

11 nov. 2015 à 10:49
J'ai déja fais ce genre de chose, tu fais surement une erreur en definissant tes variables, essai de faire ça avec tout dans une seule page ensuite lorsque ça marchera tu met tes variables dans ton fichier include.
Je voispas se qu'il y a de difficile mais tu fais probablement des erreurs en nomant tes variables ou en incluant ton fichiers. fait par étape!
0
jordane45
Messages postés
36038
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 août 2022
358
11 nov. 2015 à 10:57
Montres nous le contenu de tes fichiers de langue
et le code que tu utilises pour les înclure.
0
Zebra1928
Messages postés
163
Date d'inscription
jeudi 15 juillet 2004
Statut
Membre
Dernière intervention
27 janvier 2016

11 nov. 2015 à 14:00
FR.php

<?php

$langue_fr["nom"] = "Nom";
$langue_fr["prenom"] = "Prénom";
$langue_fr["tel"] = "Tél.";
$langue_fr["fax"] = "Fax";
$langue_fr["mail"] = "E-mail";
?>



EN.php

<?php

$langue_en["nom"] = "Family Name";
$langue_en["prenom"] = "first Name";
$langue_en["tel"] = "Phone";
$langue_en["fax"] = "Fax";
$langue_en["mail"] = "E-mail";

?>


Je passe en paramètre session dasn la page d'accueil la variable $lng $_SESSION['lng'] = $lng; ( qui est "en" "fr" ou "de").

jusque là tout est bon !

Mais dans mes pages si je met <?=$langue_en["nom"];?> j'ai l'affichage correct mais si au milieu d'une page je met echo $langue_en["nom"]; j'ai un message d'erreur !!!

C'est ce que je n'arrive pas à comprendre !!!
0
jordane45
Messages postés
36038
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 août 2022
358
11 nov. 2015 à 14:47
1- merci de bien vouloir utiliser les balises de code pour poster ton code

2- merci de montrer le reste de ton code (avec l'include de tes fichiers de langue
0
Zebra1928
Messages postés
163
Date d'inscription
jeudi 15 juillet 2004
Statut
Membre
Dernière intervention
27 janvier 2016

11 nov. 2015 à 15:42
FR.php
<?php 

$langue_fr["nom"] = "Nom";
$langue_fr["prenom"] = "Prénom";
$langue_fr["tel"] = "Tél.";
$langue_fr["fax"] = "Fax";
$langue_fr["mail"] = "E-mail";
?>



EN.php
<?php 

$langue_en["nom"] = "Family Name";
$langue_en["prenom"] = "first Name";
$langue_en["tel"] = "Phone";
$langue_en["fax"] = "Fax";
$langue_en["mail"] = "E-mail";

?>


Cette ligne affiche erreur
 echo $langue_en["nom"]; 


parcontre celle ci
   <?=$langue_en["nom"];?> 
s'affiche normalement
0
jordane45
Messages postés
36038
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 août 2022
358
11 nov. 2015 à 20:07
Ok..mais... c'est le code COMPLET de ta page qu'il nous faut !!
0
Zebra1928
Messages postés
163
Date d'inscription
jeudi 15 juillet 2004
Statut
Membre
Dernière intervention
27 janvier 2016

12 nov. 2015 à 10:22
Je viens juste de commencer le site !!!

Cette portion de code d'affichage ne fonctionne pas, je ne peux pas avancer :'(
0
Zebra1928
Messages postés
163
Date d'inscription
jeudi 15 juillet 2004
Statut
Membre
Dernière intervention
27 janvier 2016

12 nov. 2015 à 15:49
Merci jordane, t'es un ange.

page FR.php


<?php

$langue_fr["nom"] = "Nom";
$langue_fr["prenom"] = "Prénom";
$langue_fr["tel"] = "Tél.";
$langue_fr["fax"] = "Fax";
$langue_fr["mail"] = "E-mail";
?>


page index.php




<?php
include ("connexion.php");
include("FR.php");

echo $langue_fr["nom"];
?>


Résultat:

Notice: Undefined variable: langue_fr in index.php on line 5


<?php
include ("connexion.php");
include("FR.php");
?>
<?=$langue_fr["nom"]; ?>



Résultat s'affiche correctement comme suit:

Nom


La toute petite portion de programme de départ ne fonctionne pas !
0
jordane45
Messages postés
36038
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 août 2022
358
12 nov. 2015 à 17:34
Dans ta page index.php , peux tu essayer ceci :

<?php
// activation de l'affichage des erreurs PHP
error_reporting(E_ALL)

//Include des fichiers :
require_once "connexion.php";
require_once "FR.php";

//Récupération de l'array de Langue (via écriture ternaire)
$array_langues = isset($langue_fr) ? $langue_fr : NULL;

//Si l'array de langue existe :
if($array_langues){
 //Le temps des tests :
  echo " La tableau de langues contient :<br>";
  print_r($array_langues);

 echo $array_langues['nom'];
 
}else{
 echo "<br> L'array de langue n'existe pas !";
}


?>

0
Zebra1928
Messages postés
163
Date d'inscription
jeudi 15 juillet 2004
Statut
Membre
Dernière intervention
27 janvier 2016
> jordane45
Messages postés
36038
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 août 2022

15 nov. 2015 à 17:05
L'array de langue n'existe pas !


Voilà ce que j'ai eu !!!

Mon exemple plus haut est plus simple et ne marche pas !!! sans variable de session, je veux juste afficher les valeurs du fichier

fr.php

<?php 

$langue_fr["nom"] = "Nom";
$langue_fr["prenom"] = "Prénom";
$langue_fr["tel"] = "Tél.";
$langue_fr["fax"] = "Fax";
$langue_fr["mail"] = "E-mail";
?>


En faisant appel avec ceci

index.php



include("fr.php");

echo $langue_fr["nom"];
echo $langue_fr["prenom"];
echo $langue_fr["fax"];
echo $langue_fr["tel"] ;
echo $langue_fr["email"] ;


C tres simple mais ça ne marche pas chez moi !!!!!
0
jordane45
Messages postés
36038
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 août 2022
358 > Zebra1928
Messages postés
163
Date d'inscription
jeudi 15 juillet 2004
Statut
Membre
Dernière intervention
27 janvier 2016

15 nov. 2015 à 17:51
Tu pourrais simplement te contenter de mettre le code que je t'ai donné ???
Le code que je t'ai filé est fait de telle sorte qu'il devrait t'afficher des éventuelles erreurs Php ... comme par exemple le fait qu'il ne trouve pas ton fichier de langue via ton include !!!

et puis aussi, au passage ... pense à initialiser ton array de langue avant de le compléter...

<?php 
$langue_fr =  array();
$langue_fr["nom"] = "Nom"; 
$langue_fr["prenom"] = "Prénom"; 
$langue_fr["tel"] = "Tél."; 
$langue_fr["fax"] = "Fax"; 
$langue_fr["mail"] = "E-mail"; 
?> 
0
Zebra1928
Messages postés
163
Date d'inscription
jeudi 15 juillet 2004
Statut
Membre
Dernière intervention
27 janvier 2016
> jordane45
Messages postés
36038
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 août 2022

16 nov. 2015 à 09:38
Merci Jordane, t'es un ange !

Je l'ai deja mentionné à la première ligne de mon precedant message.

L'array de langue n'existe pas !
voilà ce que j'ai eu comme message.

Pour l'exemple que vous venez de poster, j'ai eu le même message que sur mes pages.



<?php
$langue_fr = array();
$langue_fr["nom"] = "Nom";
$langue_fr["prenom"] = "Prénom";
$langue_fr["tel"] = "Tél.";
$langue_fr["fax"] = "Fax";
$langue_fr["mail"] = "E-mail";
?>



index.php



<?php
include "langue_fr.php";
echo $langue_fr["nom"];
?>

<?=$langue_fr["prenom"];?>



J'ai eu ceci:



Notice: Undefined variable: langue_fr in index.php on line 3
Prénom



Donc le prénom s'affiche correctement mais le nom affiche erreur !!

Voilà :(
0
jordane45
Messages postés
36038
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 août 2022
358
16 nov. 2015 à 10:16
Ton fichier INDEX.PHP n'est pas celui que je t'ai donné !!!

Merci de mettre ce code là à la place et de le tester !

<?php
// activation de l'affichage des erreurs PHP
error_reporting(E_ALL)

require_once "langue_fr.php";

//Récupération de l'array de Langue (via écriture ternaire)
$array_langues = isset($langue_fr) ? $langue_fr : NULL;

//--------------------------------------//
//le temps des tests :
echo "<br>langue_fr:<br>";
print_r($langue_fr);

echo "<br>array_langues:<br>";
print_r($array_langues);
//--------------------------------------//


echo "Nom :" . $langue_fr["nom"];
?>



Penses également à vérifier l'encodage de tes fichiers ( de préférence en UTF8 sans BOM)
=> Tu peux le vérifier via ton éditeur (comme notepad++).

0
Zebra1928
Messages postés
163
Date d'inscription
jeudi 15 juillet 2004
Statut
Membre
Dernière intervention
27 janvier 2016

16 nov. 2015 à 12:47
J'ai eu ceci :


langue_fr:
Array ( $langue_fr["nom"] => "Nom" $langue_fr["prenom"] => "Prénom" $langue_fr["tel"] => "Tél." $langue_fr["fax"] => "Fax" $langue_fr["mail"] => "E-mail" )

array_langues:
Array ( $langue_fr["nom"] => "Nom" $langue_fr["prenom"] => "Prénom" $langue_fr["tel"] => "Tél." $langue_fr["fax"] => "Fax" $langue_fr["mail"] => "E-mail" )

Notice: Undefined variable: langue_fr in index.php on line 3
Nom :



Voilà donc je reviens à mon problème initial
echo  $langue_fr["nom"]; 
affiche erreur !!!!
0
jordane45
Messages postés
36038
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 août 2022
358 > Zebra1928
Messages postés
163
Date d'inscription
jeudi 15 juillet 2004
Statut
Membre
Dernière intervention
27 janvier 2016

16 nov. 2015 à 12:54
Y'a un truc pas net ...
Dans les print de tes variables ... le "$langue_fr" apparait à chaque item...

Normalement tu devrais obtenir ceci :

langue_fr:
Array ( [nom] => Nom [prenom] => Prénom [tel] => Tél. [fax] => Fax [mail] => E-mail )
array_langues:
Array ( [nom] => Nom [prenom] => Prénom [tel] => Tél. [fax] => Fax [mail] => E-mail )


Peux tu nous recopier l'intégralité de ton fichier de langue ??
N'aurais tu pas mis un array d'array...???
0
Zebra1928
Messages postés
163
Date d'inscription
jeudi 15 juillet 2004
Statut
Membre
Dernière intervention
27 janvier 2016
> jordane45
Messages postés
36038
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 août 2022

16 nov. 2015 à 14:02
fr.php


<?php
$langue_fr = array();
$langue_fr["nom"] = "Nom";
$langue_fr["prenom"] = "Prénom";
$langue_fr["tel"] = "Tél.";
$langue_fr["fax"] = "Fax";
$langue_fr["mail"] = "E-mail";
?>


Je ne sais pas si tu lis la totalité de mes posts !!

je précise encore

<?php
include "fr.php";

echo $langue_fr["Nom"];
echo $langue_fr["Prenom"];
echo $langue_fr["Fax"];
?>


Affiche erreur

mais si je mets ceci

<?php
include "fr.php";
?>

<?=$langue_fr["Nom"];?>
<?=$langue_fr["Prenom"];?>
<?=$langue_fr["Fax"];?>


ça marche nickel !!!
0
jordane45
Messages postés
36038
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 août 2022
358 > Zebra1928
Messages postés
163
Date d'inscription
jeudi 15 juillet 2004
Statut
Membre
Dernière intervention
27 janvier 2016

16 nov. 2015 à 14:06
Alors là ... aucune idée.
Le code que je t'ai donné fonctionne parfaite chez moi.

Il reste peut être à regarder la configuration de ton serveur apache...
Mais ce qui m'étonne encore.. c'est la façon dont s'affiche les données issues de tes PRINT_R

De plus.. je ne sais pas si toi également tu as lu la totalité de mes posts... mais..... qu'en est il de l'encodage de tes fichiers ?
0