Solution traduction - PHP - Programmation
Marsh Posté le 14-11-2005 à 14:51:22
ReplyMarsh Posté le 14-11-2005 à 15:56:06
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 ?
Marsh Posté le 14-11-2005 à 16:31:39
tiens :
http://phpdebutant.org/article107.php
lit sa c'est bien sa
Marsh Posté le 14-11-2005 à 16:39:07
Orission a écrit : tiens : |
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.
Marsh Posté le 14-11-2005 à 17:12:19
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
Marsh Posté le 14-11-2005 à 19:25:36
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.
Marsh Posté le 14-11-2005 à 19:36:00
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 ?)
Marsh Posté le 14-11-2005 à 19:59:55
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')
Marsh Posté le 14-11-2005 à 20:16:36
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 :
|
et le transformer grace à xsl-t en pseudo-fichier html
Code :
|
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
Marsh Posté le 14-11-2005 à 20:59:09
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
Marsh Posté le 14-11-2005 à 21:03:31
TheRom_S a écrit : en fait tu peux faire un fichier xml par langue ou un avec toutes les langues |
Je suis un peut nul dans le couple xml xsl mais peux tu approfondire ce point de vu. stp ?
merci
Marsh Posté le 14-11-2005 à 22:02:57
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 ?
Marsh Posté le 14-11-2005 à 22:05:06
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).
Marsh Posté le 14-11-2005 à 22:16:11
Berceker United a écrit : j'crois que smarty est balour |
Par rapport à XML/XSLT, pas spécialement, et c'est largement plus lisible
Marsh Posté le 15-11-2005 à 04:45:47
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
désolé de t'avoir induit en erreur
Marsh Posté le 15-11-2005 à 08:18:53
Et puis smarty, il génère du cache pas trop lent, hein
Marsh Posté le 15-11-2005 à 14:20:32
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 ...
Marsh Posté le 15-11-2005 à 14:49:35
Roane a écrit : Et puis smarty, il génère du cache pas trop lent, hein |
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
Marsh Posté le 15-11-2005 à 22:35:16
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 :
|
version ENG : php-xml-xsl/lang/eng/lang.xml
Code :
|
Point d'entrée : php-xml-xsl/index.php
Code :
|
Mise en forme XSL : php-xml-xsl/xsl.php
Code :
|
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
Marsh Posté le 16-11-2005 à 03:00:30
TheRom_S a écrit : ...
... |
il suffit de mettre & cad le code pour &
Marsh Posté le 14-11-2005 à 14:47:34
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