Site multilangue

Signaler
Messages postés
163
Date d'inscription
jeudi 15 juillet 2004
Statut
Membre
Dernière intervention
27 janvier 2016
-
Messages postés
33164
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
1 août 2021
-
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

Messages postés
33164
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
1 août 2021
351
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...


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

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.
Messages postés
62
Date d'inscription
samedi 23 juin 2007
Statut
Membre
Dernière intervention
21 novembre 2015

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!
Messages postés
33164
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
1 août 2021
351
Montres nous le contenu de tes fichiers de langue
et le code que tu utilises pour les înclure.
Messages postés
33164
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
1 août 2021
351
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
Messages postés
163
Date d'inscription
jeudi 15 juillet 2004
Statut
Membre
Dernière intervention
27 janvier 2016

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
Messages postés
33164
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
1 août 2021
351
Ok..mais... c'est le code COMPLET de ta page qu'il nous faut !!
Messages postés
163
Date d'inscription
jeudi 15 juillet 2004
Statut
Membre
Dernière intervention
27 janvier 2016

Je viens juste de commencer le site !!!

Cette portion de code d'affichage ne fonctionne pas, je ne peux pas avancer :'(
Messages postés
33164
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
1 août 2021
351 >
Messages postés
163
Date d'inscription
jeudi 15 juillet 2004
Statut
Membre
Dernière intervention
27 janvier 2016

Je ne sais pas comment te le dire autrement... mais je vais essayer !

DONNES NOUS LE CODE DE LA PAGE QUI CONTIENT TON ECHO ( TOUT LE CODE !!! Y compris les INCLUDES de tes fichiers de langue !!!! )
Messages postés
163
Date d'inscription
jeudi 15 juillet 2004
Statut
Membre
Dernière intervention
27 janvier 2016

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 !
Messages postés
33164
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
1 août 2021
351
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 !";
}


?>

Messages postés
163
Date d'inscription
jeudi 15 juillet 2004
Statut
Membre
Dernière intervention
27 janvier 2016
>
Messages postés
33164
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
1 août 2021

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 !!!!!
Messages postés
33164
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
1 août 2021
351 >
Messages postés
163
Date d'inscription
jeudi 15 juillet 2004
Statut
Membre
Dernière intervention
27 janvier 2016

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"; 
?> 
Messages postés
163
Date d'inscription
jeudi 15 juillet 2004
Statut
Membre
Dernière intervention
27 janvier 2016
>
Messages postés
33164
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
1 août 2021

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à :(
Messages postés
33164
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
1 août 2021
351
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++).

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

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 !!!!
Messages postés
33164
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
1 août 2021
351 >
Messages postés
163
Date d'inscription
jeudi 15 juillet 2004
Statut
Membre
Dernière intervention
27 janvier 2016

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...???
Messages postés
163
Date d'inscription
jeudi 15 juillet 2004
Statut
Membre
Dernière intervention
27 janvier 2016
>
Messages postés
33164
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
1 août 2021

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 !!!
Messages postés
33164
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
1 août 2021
351 >
Messages postés
163
Date d'inscription
jeudi 15 juillet 2004
Statut
Membre
Dernière intervention
27 janvier 2016

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 ?