Site mutilingue

01cod10 Messages postés 110 Date d'inscription mardi 30 août 2005 Statut Membre Dernière intervention 13 août 2007 - 12 juin 2006 à 17:59
xque19 Messages postés 47 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 19 novembre 2006 - 14 juin 2006 à 15:52
salut à tous,

Je viens de créer un site et j'aimerai l'avoir en français, anglais néerlandais. j'ai 14 fichiers actuellement. Mon idée est de refaire 14 fichiers en anglais et néerlandais. j'utilise des drapeaux comme lien pour passer d'une langue à l'autre. Est- ce une bonne méthode sinon comment faire.

bien à vous

10 réponses

wxccxw Messages postés 755 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 30 janvier 2011
12 juin 2006 à 19:02
c'est la meillieure methode d'apres moi, sinon tu peux passer par google mais le resultat ;)
si ton site n'est pas trop dynamique (News,Forum) sa passera !
0
WhiteDwarf Messages postés 510 Date d'inscription samedi 29 décembre 2001 Statut Membre Dernière intervention 23 mai 2008
12 juin 2006 à 19:13
Sinon ce que tu fais, c'est que tumets tous tes textes dans des variables, dans des fichiers langues, comme ca tu n'a plus qu'a modifier les fichiers langues et non pas les pages, et quand tu veux modifier le code d'une page php, tu n'a pas à le faire dans toutes les langues...

----------------------
La lumière étant plus rapide que le son, un homme peu paraître brillant avant qu'il se mette a parler
-----------------
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
13 juin 2006 à 06:54
Hello,

ouais, non, refaire les 14 fichiers n'est pas une bonne idée. Quand le site grandira, ce sera une plaie...
Alors oui, en effet : stocker les traductions dans des variables, et les variables dans des fichiers à part...ou dans une bdd...ou, ce que je fais personnellement, utiliser XML.
Exemple basique ici :
http://www.phpcs.com/codes/SITE-PLUSIEURS-LANGUES-EXEMPLE-SIMPLE-AVEC-XML_33564.aspx
0
WhiteDwarf Messages postés 510 Date d'inscription samedi 29 décembre 2001 Statut Membre Dernière intervention 23 mai 2008
13 juin 2006 à 07:11
Malalam et le XML... héhé

Tes fichiers XLM tu les craie dynamiquement ? Ou tu les craie à la main ?

----------------------
La lumière étant plus rapide que le son, un homme peu paraître brillant avant qu'il se mette a parler
-----------------
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
13 juin 2006 à 07:24
Comment tu veux créer ("tu les crées", hein...pas tu les "craies"...sauf si tu veux faire un jeu de mot avec une craie, la pierre blanche qu'à mon époque les profs utilisaient sur le tableau noir ;-) une traduction à la volée ? A part si tu veux une traduction à la google...burk.
Non, les fichiers de traductions sont créés à la main (ou avec un script dédié hein c'est pas le problème).
Mon seul code localisé, ici, est le suivant :
http://www.phpcs.com/codes/PHP5-CLASSE-DOCUMENTATION-CLASSES-FONCTIONS_35950.aspx

J'ai un répertoies 'locales'.
Dedans, autant de répertoires que de langues (français, anglais, allemand et si j'ai pas oublié de l'uploader, espagnol).
Et dans ces sous répertoires, plusieurs fichiers xml contenant les traductions pour divers "modules" de mon code : gui.xml, errors.xml, etc...

Ensuite, j'ai une classe de localisation, qui va récupérer la variable de session concernant la langue, et en fonction d'un type et d'un code message, va récupérer le bon. Par exemple :
$oLocale -> getLoc ('FILE_UPLOAD_FAILED', 'ERROR');
Et c'est tout.
Après, pour localiser l'appli, suffit de créer le répertoire adéquat (chais pas moi : ouzbeque), et les fichiers traduits. Et ajouter un bouton dans le formulaire de choix de la langue (seul code à modifier...bref, n'importe qui peut ajouter une langue très facilement, sans connaître une ligne de php). Ensuite, $oLocale -> getLoc ('FILE_UPLOAD_FAILED', 'ERROR'); ramènera la bonne traduction au bon endroit :-)
evidemment dans le fichier xml error.xml, j'ai :
<FILE_FAILED_UPLOAD>Failed to upload the file</FILE_FAILED_UPLOAD>
en anglais, et
<FILE_FAILED_UPLOAD>Echec à l'upload du fichier</FILE_FAILED_UPLOAD>
en français (par exemple encore).
Bref, la structure du XML est la même dans toutes les langues, les balises aussi, seul la valeur des éléments change.

Enfin, si ça t'intéresse, étudie ce code de documentation de classe, plutôt que le 1er code dont j'ai donné le lien : celui-ci est plus simple mais moins complet...la localisation de mon package de documentation est plus évolué, et on peut le voir tourner réellement, au moins.
0
WhiteDwarf Messages postés 510 Date d'inscription samedi 29 décembre 2001 Statut Membre Dernière intervention 23 mai 2008
13 juin 2006 à 09:15
Merci pour la correction orthographique (il m'arrive encore trop souvent à mon age de faires des fautes basiques de français, c'est bien que l'on me corrige), j'ai été trop de fois demin-orc lors de sessions de jeux de rôle et j'y ai un peu perdu la langue de Molière .

J'ai fais un peu la même chose que toi pour mon site, la même organisation en différents dossiers (enfin pour la version sur laquelle je travaille), mais pas en XML, en pages php avec des variables (peur d'essayer le XML ?)... Ce qui est intéressant dans mon script, c'est l'interopérabilité de deux variables langue :

$lang  et  $lang_consult

Je m'explique : Mon site à une architecture générale qui ne varie pas d'une page à l'autre, et selon la page demandée charge son contenu à l'interieur du design général, comme beaucoup de sites. Ayant beaucoup de contenu sur le site, et voulant permettre l'ajout facile de plusieurs langues, je prends en compte le fait qu'une page ne puisse pas exister dans une certaine langue. Au lieu de ne pas l'afficher, je propose à l'utilisateur de la consulter dans une autre langue. Bien sur pour ne pas le perturber, l'interface du site reste dans la langue d'origine, il y a juste le contenu lui même de la page qui s'affiche dans une autre langue (un article, une descripion, par exemple). Et donc lorsque l'utilisateur clique sur une autre page ensuite, il reviens dans la langue d'origine si la traduction existe.

C'est pas très compliqué à mettre en place, de mon côté cela fonctionne avec l'utilisation des is_file($lang . "/" . $page . ".php") et ensuite un include. Si la condition n'est pas vérifiée, on fais une boucle pour rechercher dans les autres dossiers la page en question.

PS pour toi malalam : Mon script détecte tout seul les nouvelles langues et donc pas besoin de rajouter une option dans le formulaire de choix de langue, c'est automatique...

Bon ici il est 4h15, alors je vais aler me coucher

Aller, @++
----------------------
La lumière étant plus rapide que le son, un homme peu paraître brillant avant qu'il se mette a parler
-----------------
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
13 juin 2006 à 09:34
Le problème de l'automatisme, c'est que la langue que tu détectes dans le browser n'est pas forcément celle que ton utilisateur veut lire. Et que, de plus, cette variable n'est pas forcément celle de la langue de ton utilisateur. Tu peux utiliser une version beta de firefox, uniquement dispo en anglais, et être français... ;-) Et puis, l'utilisateur est toujours roi. Il a le droit de choisir la langue qu'il veut. Par exemple, souvent, sur des sites étrangers qui proposent une traduction en français, j'opte pour l'anglais. Pourquoi ? Parce que les traductions ne sont pas toujours parfaites.
Quant à mon package, il documente des classes et des fonctions...et du coup, je laisse le loisir à son utilisateur de documenter son package dans n'importe quelle langue.
0
WhiteDwarf Messages postés 510 Date d'inscription samedi 29 décembre 2001 Statut Membre Dernière intervention 23 mai 2008
13 juin 2006 à 10:03
Héhé, je crois que je me suis mal exprimé, bien sur que l'utilisateur à le choix de la langue. En fait dans un premier lieu je le redirige suivant la langue du navigateur, ensuite, il peux changer de langue si il le souhaite, en dernier lieux, les pages qu'il consulte qui ne sont pas disponible dans la langue générale lui sont proposées dans une autre langue. :o)

Sinon, en parlant de ca, tu ne connaitrai pas un bon script pour la détection de la langue du navigateur ? J'ai fouillé sur google, j'en ai trouvé quelques un, mais mon problèmes réside dans le faits que suivant les navigateurs et leurs versions, les variables langues ne sont pas toujours pareil.Vu que je ne suis pas trop doué en regex...

----------------------
La lumière étant plus rapide que le son, un homme peu paraître brillant avant qu'il se mette a parler
-----------------
0
xque19 Messages postés 47 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 19 novembre 2006 1
14 juin 2006 à 15:46
Bonjour,

Perso, je préfère la methode basique au xml. avec plusieurs fichiers.
je crée un repertoire lang, et j'y met les 3 fichiers suivants:

fr.php
<?php


define("BONJOUR", "Bonjour");


//[...]


?>

en.php
<?php


define("BONJOUR", "Hello");
//[...]

?>

nl.php
<?php

define("BONJOUR", "je connais pas du tout le néerlandais");

//[...]

?>

et ensuite le fichier index.php:
<?php

//repertoire des fichiers de langues
$lang_dir = "./lang/";
$langues_dispo = array("en","fr","nl");

 

//on récupère la langue
//Soit passée en paramètre (.../index.php?lang=...), soit la langue par défaut.
if (isset($_GET['lang']))
{
   $lang=$_GET['lang'];
}
else
{
   $lang=$_SERVER["HTTP_ACCEPT_LANGUAGE"];
}

 

//on vérifie si la langue par défaut ou celle passée en paramètre
//existe bien, sinon on utilisera l'anglais comme langue pas défaut.
//(ou le français, çà dépend)
$trouve = false;
for($i=0;$i<count($langues_dispo);$i++)
{
   if ($langues_dispo[$i]==$lang)
   {
        $trouve=true;
    }
}
if($trouve==false)
{
    $lang=$langues_dispo[0];
}

 

include($lang_dir.$lang.".php");

 

?>

 

<html>

 

<head>
<title>Test multi-langue</title>
</head>

 

<center>

 

<?php print(BONJOUR); ?>

 

</center>

 

</html>
0
xque19 Messages postés 47 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 19 novembre 2006 1
14 juin 2006 à 15:52
C'est mieux de remplacer:

if($trouve= =false)
{
 $lang=$langues_dispo[0];
}

Par:

if($trouve ==false)
{
 header("location: ".$_SERVER['PHP_SELF']."?lang=".$langues_dispo[0]);
 exit;
}

comme çà on garde une url nikel.
0
Rejoignez-nous