Méthodologie pour faire un site bilingue ?

Méthodologie pour faire un site bilingue ? - PHP - Programmation

Marsh Posté le 11-07-2005 à 22:15:38    

Bonjour à tous !
 
Je travaille pour un site internet de jeu et nous voudrions rendre le site bilingue (Français/Anglais).
 
Personnellement, je pensais mettre les pages actuelles du site (en Français) dans un dossier "fr" et ensuite traduire page par page et les stocker dans un dossier "en". Ensuite, j'utiliserais une variable de session pour stocker la langue à utiliser et rediriger vers le dossier concerné.
 
Avez-vous une méthode plus simple/efficace pour réaliser ceci ?

Reply

Marsh Posté le 11-07-2005 à 22:15:38   

Reply

Marsh Posté le 11-07-2005 à 22:36:57    

ne pas utiliser de texte dans le code ...
creer 2 fichiers de traductions contenant les expressions, dans des variables globale, et, en fonction de ta variable de session, faire un include du fichier de langue concerner ...
 
exemple :
francais.php
define("TEXTE_BIENVENUE" , "Bienvenue blablabla" );
 
anglais.php
define("TEXTE_BIENVENUE" , "Welcome blablabla" );
 
et pour l'affichage :
 
echo "<div>".TEXTE_BIENVENUE."</div>";
 
voilà !
 
@+
 
ps: ya pleins d'autre facon de faire, celle là permet entre autre se separer completement les textes du code ... et de pouvoir facilement ajouter de nouvelle langue


---------------
:Moultiplayers:.:Quatuor Chevalier:.:Admin G15-france.com:.:Wiki -G15-france:.:-Papa-:.
Reply

Marsh Posté le 12-07-2005 à 01:25:01    

C'est la méthode la plus connue, mais à force on se perd dans son code j'pense...

Reply

Marsh Posté le 12-07-2005 à 03:41:06    

Au début je fesais aussi comme ca.
Mais par la suite j'ai eu le besoin d'utiliser le systeme des templates pour séparer code et affichage (afin de faciliter la coopération avec designer) donc j'ai agit ainsi:
(C'est un template fait maison hein, amuse toi bien si tu veux modifier un truc style smarty, enfin bref)
Dans mon template j'ai l'affichage donc

Code :
  1. <body><p>[txt=fr:Bienvenue][txt=en:Welcome] !</p></body>


Et lorsque je parse mon template, grace a ma variable de session langue, je vire tout les [txt=etc qui sont pas du type [txt=fr:etc (dans le cas ou la langue choisie est FR). L'avantage c'est que tu peux ajouter pas mal de langue, mais ca alourdit pas mal les pages. Cependant je trouve ca mieu que d'avoir un dossier fr/ pour les templates et un autre en/ et un autre es/ Et que lorsqu'on veut modifier un ptit truc de la structure xhtml il faille modifier la page dans les trois dossiers :s
 
Bon ptet ca t'aidera pas lol mais ptet a d'autres si... Je fesais rien la donc bon, j'ai tapé la discut.
D'ailleurs si quelqu'un a une autre méthode pour gérer le multilingue avec des templates ce serai cool :p

Reply

Marsh Posté le 12-07-2005 à 04:17:07    

bl@p_psx a écrit :

ne pas utiliser de texte dans le code ...
creer 2 fichiers de traductions contenant les expressions, dans des variables globale, et, en fonction de ta variable de session, faire un include du fichier de langue concerner ...


 
+1
 
voici un petit bout de script que j'ai sous la main. A corriger avec $_GET c'est un vieux fichier. Ainsi tu n'es pas obligé de passer dans chaque lien la langue
 
lang.php

Code :
  1. <?
  2. session_start();
  3. if (!isset($l))
  4. {
  5. if (!isset($_SESSION["lang"]))
  6.  $_SESSION["lang"] = "fr" ;
  7. }
  8. else
  9. $_SESSION["lang"] = $l ;
  10. switch($_SESSION["lang"])
  11. {
  12. case "fr" :
  13. $_SESSION["lang"] = "fr";
  14. include ("francais.php" ) ;
  15. break ;
  16. case "de" :
  17. $_SESSION["lang"] = "de";
  18. include ("deutsch.php" ) ;
  19. break ;
  20. case "it" :
  21. $_SESSION["lang"] = "it";
  22. include ("italiano.php" ) ;
  23. break ;
  24. default :
  25. $_SESSION["lang"] = "fr";
  26. include ("francais.php" ) ;
  27. }
  28. ?>


 
italiano.php

Code :
  1. <?
  2. DEFINE('TITRE',"Benvenuto", true) ;
  3. ?>


Message édité par jagstang le 12-07-2005 à 04:19:36

---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 12-07-2005 à 08:26:28    

jagstang a écrit :


Code :
  1. switch($_SESSION["lang"])
  2. {
  3. case "fr" :
  4. $_SESSION["lang"] = "fr";



 
 [:figti]


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 12-07-2005 à 09:15:47    

Un ptit peu redondant en effet :p

Reply

Marsh Posté le 12-07-2005 à 09:33:58    

Merci Jagstang pour ton exemple, ça m'a bien aidé :jap:
Je commence ça et je vous tiens au courant ;)

Reply

Marsh Posté le 12-07-2005 à 11:06:33    

smarty est bien pour ca, car tu peux faire plusieurs version de tes templates. Et lors de l'appel, preciser celle que tu veux par parametre. Il suffit à la racine du script de definir  la langue, et d'appeler les templates avec ce parametre.
Ensuite, il suffit de dupliquer les templates pour chaque langue.


---------------
MZP est de retour
Reply

Marsh Posté le 12-07-2005 à 11:30:26    

J'ai pas trop compris [:paysan]  
Je vais paraitre idiot, mais c'est quoi que vous appelez des templates ?

Reply

Marsh Posté le 12-07-2005 à 11:30:26   

Reply

Marsh Posté le 12-07-2005 à 11:39:41    

En gros, tu vas separer ton code PHP de ton code HTML. le template est un moule/modele HTML (pour l'exemple) dans lequel tu as des zones de variables. Ces zones peuvent etre substituée par une valeur/contenu.  
 
Dans ton code PHP, tu vas uniquement preparer les données qui vont substituer les zones variables du template. Puis faire un appel de celui-ci.
 
Par l'exemple:
 

Code :
  1. <?php
  2. // indique au moteur que la variable toto sera substituée par le contenu coucou
  3. $montemplate->assign('toto', 'coucou');
  4. $montemplate->Draw('template.tpl');
  5. ?>
  6. {* Le code du template *}
  7. <p>
  8. <b>Hello {$toto}</b>
  9. </p>
  10. {* fin du template *}
  11. Et dans le HTML généré tu auras
  12. <p>
  13. <b>Hello coucou</b>
  14. </p>


Message édité par cinocks le 12-07-2005 à 11:43:40

---------------
MZP est de retour
Reply

Marsh Posté le 12-07-2005 à 11:41:15    

Citation :


Code :
  1. <body><p>[txt=fr:Bienvenue][txt=en:Welcome] !</p></body>




Peu pratique si le texte devient un peu plus long et si on dépasse 2 langues.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 12-07-2005 à 12:09:37    

cinocks a écrit :

En gros, tu vas separer ton code PHP de ton code HTML. le template est un moule/modele HTML (pour l'exemple) dans lequel tu as des zones de variables. Ces zones peuvent etre substituée par une valeur/contenu.  
 
Dans ton code PHP, tu vas uniquement preparer les données qui vont substituer les zones variables du template. Puis faire un appel de celui-ci.
 
Par l'exemple:
 

Code :
  1. [...]



Ok, Merci beaucoup pour l'explication :jap:
 
Sinon, j'ai testé ceci :
 
un fichier "francais.php" :

Code :
  1. <?
  2. define(LIVREDOR,"Livre d'or",false);
  3. ?>


 
Puis dans index.php :

Code :
  1. <?
  2. .
  3. include("francais.php" );
  4. .
  5. .
  6. .
  7. echo LIVREDOR;
  8. .
  9. .
  10. .
  11. ?>


 
Quand je charge la page, voilà ce que j'obtiens :

Citation :

Notice: Use of undefined constant LIVREDOR - assumed 'LIVREDOR' in c:\program files\easyphp1-8\www\monchval\francais.php on line 2


Ca veut dire quoi au juste ?


Message édité par nero27 le 12-07-2005 à 12:10:13
Reply

Marsh Posté le 12-07-2005 à 12:10:57    

define('POUET', 'tagada');


T'as oublié les quotes ;)

Reply

Marsh Posté le 12-07-2005 à 12:11:43    

nero27 a écrit :

Ok, Merci beaucoup pour l'explication :jap:
 
Sinon, j'ai testé ceci :
 
un fichier "francais.php" :

Code :
  1. <?
  2. define(LIVREDOR,"Livre d'or",false);
  3. ?>


 
Puis dans index.php :

Code :
  1. <?
  2. .
  3. include("francais.php" );
  4. .
  5. .
  6. .
  7. echo LIVREDOR;
  8. .
  9. .
  10. .
  11. ?>


 
Quand je charge la page, voilà ce que j'obtiens :

Citation :

Notice: Use of undefined constant LIVREDOR - assumed 'LIVREDOR' in c:\program files\easyphp1-8\www\monchval\francais.php on line 2


Ca veut dire quoi au juste ?


 
'LIVREDOR' et pas LIVREDOR je pense.


---------------
MZP est de retour
Reply

Marsh Posté le 12-07-2005 à 12:12:31    

Ah ok, merci :)

Reply

Marsh Posté le 12-07-2005 à 12:42:00    

Reply

Marsh Posté le 12-07-2005 à 13:39:02    

J'avais vu la doc, mais j'avais oublié les quote ;)

Reply

Marsh Posté le 13-07-2005 à 17:15:26    

Juste pour info, dans le cas de gros blocs de textes (articles, etc), qu'est ce qu'il y a de mal a utiliser une solution comme ce qui suit ?  
 

include("ma_racine/".$_SESSION["lang"]."/mapage.php" );


(exemple simpliste pour illustrer mon propos, pas de test ni de securite toussa toussa)


Message édité par Gonzoide le 13-07-2005 à 17:16:24
Reply

Marsh Posté le 13-07-2005 à 17:23:48    

sircam a écrit :

Citation :


Code :
  1. <body><p>[txt=fr:Bienvenue][txt=en:Welcome] !</p></body>




Peu pratique si le texte devient un peu plus long et si on dépasse 2 langues.


Quelle solution proposerais tu ? Hormis de dupliquer les templates et de les faires en chaque langue, bonjour apres pour modifier :s
Ma solution est tres lourde et peu esthétique c'est sur ;)

Reply

Marsh Posté le 13-07-2005 à 17:26:18    

bein si c'est des articles, il vraudrais mieux que ce soit en BD, je suis pas pour le dedoublement des pages.
 
Pour moi, le mieux, c'est de separer completement les texte du reste ( completement hein ^^ ).
 
je serais plus pour :
 

Code :
  1. include("ma_racine/mapage".$_SESSION["lang"].".php" );


celle-ci contenant seulement du texte, et tres peu de code HTML ... ni meme PHP.
 
m'enfin, c'est que ma facon de voir les choses ...


Message édité par bl@p_psx le 13-07-2005 à 17:26:40

---------------
:Moultiplayers:.:Quatuor Chevalier:.:Admin G15-france.com:.:Wiki -G15-france:.:-Papa-:.
Reply

Marsh Posté le 13-07-2005 à 17:45:25    

Le problème de ce système, c'est que si tu modifie une page, tu es obligé de la modifier dans toutes les langues :/ (je parle d'une modification PHP, pas d'un changement du texte ;))

Reply

Marsh Posté le 13-07-2005 à 17:47:47    

non non, mois je mettrais que du texte dans la page php !!!
 
pas du tout de code, ni meme de mise en forme ( aller, peux être un <br /> ou 2 )
 
dans tout les cas, je mettrais tout en bd .... separer contenu / contenant, que ce soit pour le site en lui meme ( XHTML / CSS ) ou pour le code ( PHP / Template / include ... )


Message édité par bl@p_psx le 13-07-2005 à 17:49:31

---------------
:Moultiplayers:.:Quatuor Chevalier:.:Admin G15-france.com:.:Wiki -G15-france:.:-Papa-:.
Reply

Marsh Posté le 19-07-2005 à 17:21:30    

de façon régulière j'ai a réaliser et surtout entretenir des sites en 2 ou 3 langues de volumes variables de disons pour faire vite 50 a 300 pages/langues.
En qq années les methode ca a été du htlm bête multiplié par le nombre de langue, à du tout dynamique avec séparation quasi totale fond/forme le contenu etant eclaté soit en include soit en base.
 
Il s'agit de sites institutionnels marque, présentation produit, mise à dispo de documents en B2B, liste client, fournisseurs, agent, salons, ...
(pas du e-commerce ni du site coopératif quoi ça a sont importance).
Et au final il s'avère que jamais à l'entretien les différentes langue n'évoluent en même temps, ni ne disposent des même documents (encore moins en même temps) et qu'une tétrachier de traitement ou mise en pages particulieres fonction des langues sont nécessaires ou demandées ensuite à l'usage. Et que donc le truc le plus adaptatif ça a finalement été de dupliquer tt les pages en autant de langues avec l'identifiant de la langue dans le nom de page. De regrouper tt les contenus transversaux et prédictifs dans des bases de données ou fichiers xml, de regrouper au maximum les contenus pouvant l'être le tt mis en page dans des pages adaptées mais unitaire (en asp ou php).
On garde une totale liberté de présentation à la page, sans s'interdir de mettre en place des traitements générique quand c'est possible (include, etc les solutions ne manquent pas).
Le chg de langue se fait n'importe quand sans saut dans l'arborescence juste en changeant l'identifiant de langue dans le nom de fichier de l'url, idem si bien structurées tt les données de sessions suivent directement aussi.
 
Bref tt ça pour dire attention la séparation complète fond/forme est un concept ultra séduisant coté développeur. Mais que le cout (la difficulté voir l'impossibilité ensuite de traiter des cas particuliers) et la rigidité que cela induit est loin d'être nul. Et que si dans des cas de sites coopératifs ou a trés fort partage de contenus c'est indispensable dans beaucoup d'autre cas une voie moins extrême sera finalement plus optimale en terme de temps à passer aussi bien à la conception/fabrication qu'a l'entretien derrière. La difficulté étant d'arriver à jauger à l'avance de besoins réels d'un site et de la façon dont il évoluera.

Reply

Marsh Posté le 19-07-2005 à 17:45:35    

c'est bien pour ca que j'ajoute la notion de template ... ( a la maniere d'un phpbb par exemple ) Dans ce template, tu definis exactement l'espace necessaire dans les champs pour l'allemand par exemple ( bien plus long que l'anglais ) ...
 
++


---------------
:Moultiplayers:.:Quatuor Chevalier:.:Admin G15-france.com:.:Wiki -G15-france:.:-Papa-:.
Reply

Marsh Posté le 19-07-2005 à 21:33:49    

[mode gros sabots]
Struts :o
[/mode gros sabots]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed