Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2741 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Solution traduction

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Solution traduction

n°1245227
fabs2b
Posté le 14-11-2005 à 14:47:34  profilanswer
 

Bonjour, je gere un site avec deux langues, a savoir le francais et l'anglais pour le moment.
Je voudrais savoir quelle est le meilleur moyen de gerer cela.  
 
- 1ere solution :
Faire un autre site en anglais ( je suis contre, lors d'une modif, faut refaire sur l'autre site)
 
- 2e solution :
Tout stoker dans une BDD (pb du nombre de requete et de la taille de la BDD)
 
- 3e solution :
Creer des fichiers par langue (pb acces disque)
 
Qu'en pensez vous ?
Une autre solution ?
Merci

mood
Publicité
Posté le 14-11-2005 à 14:47:34  profilanswer
 

n°1245236
soju
One shot !
Posté le 14-11-2005 à 14:51:22  profilanswer
 

http://fr.php.net/gettext (correspond à ta 3ème solution)

n°1245353
fabs2b
Posté le 14-11-2005 à 15:56:06  profilanswer
 

soju a écrit :

http://fr.php.net/gettext (correspond à ta 3ème solution)


 
Ok merci pour la reponse, cela semble ideal.
Cependant si j'ai bien compris il faut que le package gettext soit installe et compile chez mon hebergeur, non ?

n°1245389
Orission
Posté le 14-11-2005 à 16:31:39  profilanswer
 

tiens :
 
http://phpdebutant.org/article107.php
 
lit sa c'est bien sa :)


---------------
“ Un avis d’un homme non avisé ne doit jamais être pris en compte par un homme avisé. ” Jean Plancher, en 1810, « Chez Bonaparte »
n°1245399
fabs2b
Posté le 14-11-2005 à 16:39:07  profilanswer
 


 
Merci pour ton aide, mon site fonctionne actuellement comme ca.
Le probleme c'est qu'il y a trop de variables ou constantes declarees et cela sature la memoire du serveur.  :(  

n°1245431
TheRom_S
Posté le 14-11-2005 à 17:12:19  profilanswer
 

je me repette mais XML et XSL, ça marche très bien
un fichier xml par langue : ca evite de faire des constantes
des bouts de codes xsl générés par le script php pour aller chercher le bon élément dans le xml et le mettre en place


---------------
The Rom's, à votre service
n°1245523
Berceker U​nited
PSN : berceker_united
Posté le 14-11-2005 à 19:25:36  profilanswer
 

Moi j'ai le même mais un peut différent. Moi je dois faire un site ou les données inséré est issu d'un champ de formulaire. Pas le choix de passer par un table traduction. Pour info c'est une application de musique en ligne.  
La solution. le champs 'nom' est 'description' sont souvent répété dans la version monolanguage. C'est deux champs sont de longueure différente donc j'ai créé une table traduction avec pour champs  
id,idlangue,nom,description,compresse.
ceci à pour effet que toute les traductions sont géré par une table, la maintenance est plus simple de plus je peux gérer la compression des informations (description) si celui-ci est rentable.  
si la chaine compressé < à la chaine normal = j'enregistre la version compressé.  
sinon je laisse la version normal.
ceci est une methode lorsque les données inséré sont variable.
Dans ton cas l'idée lancé par Therom's me parait plus legé et plus gérable.

n°1245536
fabs2b
Posté le 14-11-2005 à 19:36:00  profilanswer
 

Oui en effet, le fait de passer par xml me semble la meilleur idee.
Le probleme c'est que je suis assez novice en xml. Je comprend le concept, aidez moi si je me trompe :
 
- Etape 1 : creation du fichier de langue en xml avec a l'interieur un truc du genre :
<fr>
  <bienvenue>Bonjour et bienvenue</bienvenue>
  <bye>Au revoir</bye>
  ...
</fr>
 
- Etape 2 : creation du parser xml
 
- Etape 3 : xsl ( c'est pour la presentation ?)

n°1245550
Berceker U​nited
PSN : berceker_united
Posté le 14-11-2005 à 19:59:55  profilanswer
 

En gros oui, tu n'es pas obligé de mettre un <fr>... car la langue sera par le chargement du fichier xml. ex loadxml('fr.xml') ou loadxml('en.xml')

n°1245568
TheRom_S
Posté le 14-11-2005 à 20:16:36  profilanswer
 

en fait tu peux faire un fichier xml par langue ou un avec toutes les langues
ensuite dans ton script php, tu utilise une seule variable pour déterminer la langue
donc soit pour cibler le fichier xml, soit pour cibler la partie du fichier correspondant à la bonne langue
 
le xsl est déja un parseur xml qui te permet d'appliquer une transformation à ton fichier xml (XSL = Xml Stylesheet Language si je me plante pas cad un peu le css du xml, mais au sens construction de la structure du document plutot que construction de son layout)
 
par exemple, tu pourrais écrire une page xml :

Code :
  1. <? xml ...>
  2. <tree>
  3.     <titre>yop</titre>
  4.     <paragraphe>plein de trucs</paragraphe>
  5. </tree>

et le transformer grace à xsl-t en pseudo-fichier html

Code :
  1. <// code xsl-t du template de l'élément "tree">
  2. //applique le template :
  3. <html>
  4. <head>
  5. <// code xsl-t qui insère template pour "titre" />
  6. </head>
  7. <body>
  8. <// code xsl-t qui insère template pour "paragraphe" />
  9. </body>
  10. </html>
  11. <// fin du template>
  12. <// code xsl-t du template de l'élément "titre">
  13. <title><// code xsl-t qui insère la valeur de "titre" /></title>
  14. <// fin du template>
  15. <// code xsl-t du template de l'élément "paragraphe">
  16. <p><// code xsl-t qui insère la valeur de "paragraphe" /></p>
  17. <// fin du template>

c'est ton navigateur (pas le serveur) qui recoit le fichier xsl et qui applique les templates pour obtenir l'équivalent d'un fichier html
 
tu peux faire un peu le même genre de chose, uniquement pour la gestion de la langue
ce code xsl est généré par php, suivant ta variable de langue et peut aussi contenir du html simple, comme dans une utilisation habituelle
 
finalement le problème peut venir des navigateurs incompatibles (et je sais pas desquels il s'agit) (IE récent fonctionne)
 
voila, en espérant avoir été suffisement clair
 
ps : faire un site web en xml/xsl au lieu de html-seulement est une mauvaise idée


---------------
The Rom's, à votre service
mood
Publicité
Posté le 14-11-2005 à 20:16:36  profilanswer
 

n°1245603
fabs2b
Posté le 14-11-2005 à 20:59:09  profilanswer
 

Ok merci pour toutes ces infos.
Je vais a present me renseigner sur xml/xsl, comprendre comment ca fonctionne pour regler mon pb de la maniere la plus propre possible
 
 :hello:

n°1245609
Berceker U​nited
PSN : berceker_united
Posté le 14-11-2005 à 21:03:31  profilanswer
 

TheRom_S a écrit :

en fait tu peux faire un fichier xml par langue ou un avec toutes les langues
...
ps : faire un site web en xml/xsl au lieu de html-seulement est une mauvaise idée


Je suis un peut nul dans le couple xml xsl mais peux tu approfondire ce point de vu. stp ?
merci

n°1245657
fabs2b
Posté le 14-11-2005 à 22:02:57  profilanswer
 

Donc une fois mon xml cree :
 

<traduction>
  <bonjour>hello</bonjour>
</traduction>

 
J'insere dans mon html :
 

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<xsl:value-of select="traduction/bonjour"/>
</xsl:template>
</xsl:stylesheet>

 
et cela va afficher hello.
Suis je sur la bonne voie ?  :)  
 

n°1245660
masklinn
í dag viðrar vel til loftárása
Posté le 14-11-2005 à 22:05:06  profilanswer
 

Au lieu de s'emmerder à créer des moteurs de template à partir de XML/XSLT, il peut aussi utiliser des moteurs de templates existants (type smarty).


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1245665
Berceker U​nited
PSN : berceker_united
Posté le 14-11-2005 à 22:14:26  profilanswer
 

j'crois que smarty est balour :/

n°1245667
masklinn
í dag viðrar vel til loftárása
Posté le 14-11-2005 à 22:16:11  profilanswer
 

Berceker United a écrit :

j'crois que smarty est balour :/


Par rapport à XML/XSLT, pas spécialement, et c'est largement plus lisible [:pingouino]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1245749
TheRom_S
Posté le 15-11-2005 à 04:45:47  profilanswer
 

oui en fait la source xsl (le fichier php) doit etre specifié dans le fichier xml ce qui demande que le xml recoivent un fichier php traité
bref c lourd à faire, compliqué à mettre en place et il doit déja exister des solutions pretes à l'emploi toutes simples autres que xml/xsl
 
et générer du xml (via php) pour rajouter juste la langue, comme un entete (via readfile() par exemple) pour le resortir (tout le doc) via xsl (.xsl normal)
est une mauvaise idée, je pense [:spamafote]  
 
désolé de t'avoir induit en erreur :hello:


Message édité par TheRom_S le 15-11-2005 à 04:49:37

---------------
The Rom's, à votre service
n°1245760
Roane
Pingouino's fan
Posté le 15-11-2005 à 08:18:53  profilanswer
 

Et puis smarty, il génère du cache pas trop lent, hein [:roane]


---------------
http://www.alsacreations.com, http://www.openweb.eu.org. Mon CV : http://cv.roane-irkana.net. A ne surtout pas prendre en exemple : http://www.worldinternet.be
n°1246003
fabs2b
Posté le 15-11-2005 à 14:20:32  profilanswer
 

J'aime pas trop les scripts prets a l'emploi, qui font tout un tas de trucs que je maitrise pas et qui ne m'interesse pas forcemment.
Je prefere tout faire moi meme, c'est pourquoi j'ai cree mon fichier de langue XML, puis j'ai fais une classe "Parser" avec les methodes php adaptees :
 

- xml_parser_create();
- xml_set_element_handler($xmlparser,'startElement','endElement');
- xml_set_character_data_handler($xmlparser,'characterData');
- xml_parser_set_option($xmlparser,XML_OPTION_CASE_FOLDING,false);
- xml_parser_set_option($xmlparser,XML_OPTION_SKIP_WHITE,true);
- xml_parse($xmlparser,$data));

 
....
 
Je vais tester au point de vue des performances pour voir ...

n°1246037
masklinn
í dag viðrar vel til loftárása
Posté le 15-11-2005 à 14:49:35  profilanswer
 

Roane a écrit :

Et puis smarty, il génère du cache pas trop lent, hein [:roane]


smarty il gère un cache, déjà, le moteur de templates fait à la main avant qu'il gère un cache ça risque d'être long [:pingouino]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1246416
TheRom_S
Posté le 15-11-2005 à 22:35:16  profilanswer
 

bon finalement le PHP/XML/XSL fonctionne
voici un exemple :
 
version FR : php-xml-xsl/lang/fr/lang.xml (pas de balise du style <?xml version="1.0"?> qui sera ajoutée après)
seulement ce code

Code :
  1. <trad>
  2.     <site>Exemple</site>
  3.     <hello>Bonjour</hello>
  4.     <bye>Au revoir</bye>
  5.     <welcome>Bienvenue sur</welcome>
  6. </trad>

version ENG : php-xml-xsl/lang/eng/lang.xml

Code :
  1. <trad>
  2.     <site>Example</site>
  3.     <hello>Hello</hello>
  4.     <bye>Bye</bye>
  5.     <welcome>Welcome on</welcome>
  6. </trad>

Point d'entrée : php-xml-xsl/index.php

Code :
  1. <?php
  2.     header('Content-type: text/xml');
  3.     $lang_uri='http://localhost/php-xml-xsl/lang/fr';
  4.     if (isset($_GET['lang'])) {
  5.         if ($_GET['lang']=='eng') {
  6.             $lang_uri='http://localhost/php-xml-xsl/lang/eng';
  7.         }
  8.     }
  9.     echo '<?xml version="1.0"?>';
  10.     if (isset($_GET['name'])) {
  11.         // ici le type mime est bien text/xsl qui fonctionne avec IE et FF
  12.         // text/xml fonctionne sous FF mais affiche uniquement le fichier xml sous IE
  13.         echo '<?xml-stylesheet type="text/xsl"
  14.                // le gros problème se trouve ici puisque le signe & est interdit en XSL
  15.                // qui l'utilise pour autre chose. On ne peut donc passer qu'un seul argument
  16.                href="http://localhost/php-xml-xsl/xsl.php?name='.$_GET['name'].'"?>';
  17.     }
  18.     else {
  19.         echo '<?xml-stylesheet type="text/xsl" href="http://localhost/php-xml-xsl/xsl.php"?>';
  20.     }
  21.     readfile($lang_uri.'/lang.xml');
  22. ?>

Mise en forme XSL : php-xml-xsl/xsl.php

Code :
  1. <?php
  2.     // ici le type mime est bien text/xml qui fonctionne avec IE et FF
  3.     // text/xsl fonctionne sous IE mais pas sous FF
  4.     header('Content-type: text/xml');
  5.     // à garder dans une instruction echo pour que php ne confonde pas les balises <? ... ?>
  6.     echo '<?xml version="1.0"?>';
  7. ?>
  8. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  9. <xsl:template match="trad">
  10.     <html>
  11.         <head>
  12.             <title><xsl:value-of select="site"/></title>
  13.         </head>
  14.         <body>
  15.             <p>
  16.                 <h2>
  17.                     <xsl:value-of select="hello"/>
  18.                     <?php if (isset($_GET['name'])) { echo ' '.$_GET['name']; } ?>
  19.                 </h2>
  20.             </p>
  21.             <p><xsl:value-of select="welcome"/> localhost</p>
  22.             <p>
  23.                 <form action="http://localhost" method="POST">
  24.                     <xsl:apply-templates select="bye"/>
  25.                 </form>
  26.             </p>
  27.         </body>
  28.     </html>
  29. </xsl:template>
  30. <xsl:template match="bye">
  31.     <input type="submit" value="{text()}"/>
  32. </xsl:template>
  33. </xsl:stylesheet>

Voila,
à essayer avec  
FR : http: //localhost/php-xml-xsl/index.php?lang=fr&name=abruti
ENG : http: //localhost/php-xml-xsl/index.php?lang=eng&name=stupid%20guy


---------------
The Rom's, à votre service
n°1246500
TheRom_S
Posté le 16-11-2005 à 03:00:30  profilanswer
 

TheRom_S a écrit :

...

Code :
  1. // le gros problème se trouve ici puisque le signe & est interdit en XSL
  2. // qui l'utilise pour autre chose. On ne peut donc passer qu'un seul argument

...

il suffit de mettre &amp; cad le code pour &


---------------
The Rom's, à votre service
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Solution traduction

 

Sujets relatifs
Problème traduction avec ressource hackerparsing xml, est ce une bonne solution ? (design)
à propos de cadres.. ou recherche d'une autre solution[SQL] ALTER TABLE sur table liée ?? ou solution de contournement plz ?
Traduction de scriplets en JSTL/ELCSS : quelle solution pour conserver mise en page avec layout ?
Comment utiliser un fichier se trouvant dans l'explorateur de solutionrechch solution de forum desesperemment
[AWK] Traduction date GMTUn script qui s'execute plus d'une fois a chaque appel -> solution...
Plus de sujets relatifs à : Solution traduction


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR