Site web, PHP et gestion des langues ?

jeanmorelle Messages postés 14 Date d'inscription vendredi 14 août 2009 Statut Membre Dernière intervention 9 octobre 2009 - 21 août 2009 à 00:14
TheWeasel47 Messages postés 39 Date d'inscription mercredi 19 mars 2008 Statut Membre Dernière intervention 25 août 2009 - 25 août 2009 à 16:50
Salut,

J'ai un site internet rédigé en français comportant plusieurs pages. Sur la page d'accueil, j'ai insérer un drapeau anglais. Comment opérer avec le PHP pour que l'utilisateur qui clique sur le drapeau anglais, accède au même site, mais en anglais (ainsi que toutes les pages qu'il verra par la suite) ? Quelle est la démarche à suivre ? Quel script, code, langage ou logiciel utilisé ?

Merci de votre aide.

1 réponse

TheWeasel47 Messages postés 39 Date d'inscription mercredi 19 mars 2008 Statut Membre Dernière intervention 25 août 2009
25 août 2009 à 16:50
Salut !
Voila une petite solution rapide (mais longue à mettre en place) :

1) Les fichiers langues

Alors déja il te faut des fichiers de langues ! Aucun texte en brute dans tes pages PHP ou template (je ne sais pas comment tu travailles).
exemple : echo "coucou tout le monde"; est à bannir !!!
Il va te falloir réaliser des fichiers de langues (fichier php contenant un tableau ayant la traduction des textes) typiquement

Fichier francais : ./Lang/FRA/Principal.php
contiendra
$Langue=  array();
$Langue["Txt_Coucou"]='coucou tout le monde';


Fichier anglais : ./Lang/EN/Principal.php
contiendra
$Langue =array();
$Langue["Txt_Coucou"]=  'Hi everybody';


2) Mémorisation de la langue utilisateur
Pour ce qui est de la mémorisation de la langue de l'utilisateur j'ai plusieurs solutions :

Soit tu sauvegardes en session la langue saisie par l'utilisateur $_SESSION['lang'] ='EN'; ou $_SESSION['lang']= 'FRA'; (Dès qu'il clique sur un drapeau tu changes la valeur de la session)

Ou par l'URL rewriting (procédé avancé) avec dans ton fichier .htaccess :
RewriteRule    ^([A-Z]*)/([a-zA-Z0-9|_.\-]*)$  /$2?lang= $1


auquel cas tu récupère ta langue dans ta variable $_GET["lang"], mais cette méthode est incompatible avec l'ajout d'autre paramètre GET (à moins d'améliorer ton htaccess). Toutefois elle permet à l'utilisateur de distinguer deux sous-répertoires inexistant physiquement :
EN/ et FRA/ exemple concret : son fichier Principal.php deviendra FRA/Principal.php ou EN/Principal.php en fonction de la langue de l'utilisateur.

3) Récupérer tes fichiers langues automatiquement

Ce petit exemple de code te permettra d'aller chercher tes fichiers de langue automatiquement :
J'utilise la première méthode pour stocker la langue de l'utilisateur ($_SESSION)

Exemple :

//TEST SI LANGUE EST DEFINIS
if(!isset($_SESSION['lang'])){
    $_SESSION['lang']   ="FRA";
}

$chemin=dirname(__FILE__);
if (substr($chemin,-1)!=DIRECTORY_SEPARATOR){
    $chemin.=DIRECTORY_SEPARATOR;
}

//VERIFICATION QUE LE CHEMIN EXISTE
if(is_dir($chemin."Lang".DIRECTORY_SEPARATOR.$_SESSION["lang"].DIRECTORY_SEPARATOR)){
      $chemin.="Lang".DIRECTORY_SEPARATOR.$_SESSION["lang"].DIRECTORY_SEPARATOR;
}else{
      $chemin.="Lang".DIRECTORY_SEPARATOR.'FRA'.DIRECTORY_SEPARATOR;
}

//VERIFICATION FICHIER LANGUE EXISTE
$Langue=array();
if(file_exists($chemin.$_SERVER['PHP_SELF'])){
      include($chemin.$_SERVER['PHP_SELF']);
}else{
     //Erreur fichier inexistant
}


Il te suffira de mettre (pour afficher ton texte) :
echo $Langue["Txt_Coucou"];

Voila je n'ai pas testé ce script (je l'ai rédigé à la volé). Toutefois l'idée globale est la même.

Bon Courage à toi.
Cordialement
TheWeasel47
0
Rejoignez-nous