Site multilangue : les methodes. [PHP] - PHP - Programmation
Marsh Posté le 30-07-2002 à 18:11:56
précise que tu parles de PHP
en java(jsp/servlets), on peut stocker des objets dans le servletContext, moi (enfin, moi...) j'y stocke (je ne rentre pas ds les details) les éléments "traduits", comme ça on ne le charge (à partir d'un fichier) qu'une fois par "application", et rien à inclure dans mes "pages".
Je ne pense pas qu'on puisse faire ce genre de choses avec php malheureusement.
Marsh Posté le 30-07-2002 à 18:14:37
c'est vrai que je fais du PHP, donc une reponse orientée php m'arangerais mais c'est aussi valable pour l'asp je pense.
Marsh Posté le 30-07-2002 à 18:16:29
Y a bcp de méthodes.
1. La DB: C'est lentissime
2. Les templates: C'est pas mal mais ca ajoute pas mal de redondance
3. Un tableau: Mouais, rapide, mais chiant a utiliser ($lang[][])
4. Des constantes: ca c'est pas trop mal encore, du genre:
define("TEST", "POLOM polom" );
tu inclus le bon fichier de langue et tu fais juste
echo(TEST); (sans $ sans rien)
Sinon y a aussi un truc avec l'extension gettext mais je m'en rapelle pas comme ca
Marsh Posté le 30-07-2002 à 18:19:44
4 -> ?
là j'ai pas trop compris le coup des constantes, pkoi c'est mieux que le tableau ?
Marsh Posté le 30-07-2002 à 18:21:15
Snipe Foo a écrit a écrit : 4 -> ? là j'ai pas trop compris le coup des constantes, pkoi c'est mieux que le tableau ? |
parce qu'il est plus facile de taper dans tes pages
$text_monbidule
que $text["monbidule"]
c tout
enfin je crois
Marsh Posté le 30-07-2002 à 18:23:09
mais une requete sur une bdd c'est si lent que ça ? c'est juste un select where...
Marsh Posté le 30-07-2002 à 18:24:36
Snipe Foo a écrit a écrit : mais une requete sur une bdd c'est si lent que ça ? c'est juste un select where... |
essaie, tu verras
surtout qu'en general t'as plus d'un mot à afficher sur ta page
Marsh Posté le 30-07-2002 à 18:24:57
moi je ferais du genre
-- texte.php --
<? |
-- index.php --
<? include("texte.php" ); ?> |
fichier index.php appelé avec index.php?id_l=1
1 pr francais
2 pour anglais dans l exemple
Marsh Posté le 30-07-2002 à 18:25:43
--greg-- a écrit a écrit : parce qu'il est plus facile de taper dans tes pages $text_monbidule que $text["monbidule"] c tout enfin je crois |
C'est un peu plus rapide aussi, mais oui c'est clair que c plus facile à écrire surtout
Pour ton select, compte que ca prends 10ms pour un mot, tu fous 50 elements sur une page, ca fait 0.5s rien que pour la traduction
Marsh Posté le 30-07-2002 à 18:26:19
J-'-R a écrit a écrit : moi je ferais du genre -- texte.php --
|
ça me parait pas évident a maintenir ce genre de choses
je prefere la solution include $langue.php avec $langue qui vaut english, francais et donc un fichier par langue.
Marsh Posté le 30-07-2002 à 18:26:32
J-'-R a écrit a écrit : moi je ferais du genre [...] |
Déjà cité
De plus, la solution avec les constantes est de loin plus simple à écrire.
Marsh Posté le 30-07-2002 à 18:26:37
j'ai plus d'un mot, mais je ne fais qu'une seule requete par page (je récupere tous les textes d'un coup).
Marsh Posté le 30-07-2002 à 18:28:09
Snipe Foo a écrit a écrit : j'ai plus d'un mot, mais je ne fais qu'une seule requete par page (je récupere tous les textes d'un coup). |
ben, rend toi bien compte que tout ça transite sur une cnx reseau au lieu de transiter sur une nappe IDE
Marsh Posté le 30-07-2002 à 18:32:32
--greg-- a écrit a écrit : ben, rend toi bien compte que tout ça transite sur une cnx reseau au lieu de transiter sur une nappe IDE |
je sais bien que l'echange de données est plus rapide entre le disque et l'appli qu'entre l'appli et une base.
mais le truc qui me gene c'est de charger autant de truc en memoire a chaque appel de la page, combien y'a t'il de caractere dans un site complet (plus les caractere servants à la déclaration)?
Marsh Posté le 30-07-2002 à 18:33:57
Snipe Foo a écrit a écrit : je sais bien que l'echange de données est plus rapide entre le disque et l'appli qu'entre l'appli et une base. mais le truc qui me gene c'est de charger autant de truc en memoire a chaque appel de la page, combien y'a t'il de caractere dans un site complet (plus les caractere servants à la déclaration)? |
C'est vrai qu'il vaux mieux gaspiller les resources du serveur SQL plutot que de perde 2-3k en mémoire
Marsh Posté le 30-07-2002 à 18:37:36
Snipe Foo a écrit a écrit : je sais bien que l'echange de données est plus rapide entre le disque et l'appli qu'entre l'appli et une base. mais le truc qui me gene c'est de charger autant de truc en memoire a chaque appel de la page, combien y'a t'il de caractere dans un site complet (plus les caractere servants à la déclaration)? |
ben tu les charges quand meme à chaque appel de page vec ta methode, nan!?
Marsh Posté le 30-07-2002 à 18:40:48
"gaspiller les ressources d'un serveur sql", je veux bien, mais un serveur sql c'est fait pour ça, et puis un select, je pense pas que ça aille chercher bien loin niveau ressources.
de plus 3000 caracteres pour un site c'est un peu peu, pour peu que tu ais des news, une faq etc... moi je dirais plutot 50Ko fois le nombre de pages simultanées...
Marsh Posté le 30-07-2002 à 19:20:17
je suis parti dans l'optique stockage dans une bd, mais uniquement pour les messages d'erreurs (ce qui limite à une query en cas d'erreur).
J'utilise aussi les templates pour les graphismes. Et là je dois dire que c'est assez embêtant... pour chaque langue d'un même thème je dois recopier toute les pages templates (dans /EN/ par ex) et modifier le texte contenu à la main
(ça donne pas envie )
Si je passais à une version qui rendrait plus facile la création d'une nouvelle langue pour un thème, j'opterais pour les constantes ou les tableaux...
Marsh Posté le 30-07-2002 à 19:34:24
Snipe Foo a écrit a écrit : "gaspiller les ressources d'un serveur sql", je veux bien, mais un serveur sql c'est fait pour ça, et puis un select, je pense pas que ça aille chercher bien loin niveau ressources. de plus 3000 caracteres pour un site c'est un peu peu, pour peu que tu ais des news, une faq etc... moi je dirais plutot 50Ko fois le nombre de pages simultanées... |
Eh benh fait un include que de ce que tu as besoin tiens, sépares tes fichiers de traduction.
Enfin, je vois pas pourquoi je me casse le cul, tu demandes les méthodes, on te dit de prendre un truc parce que ta BD va ramer, et tu veux rien savoir.
Allez, bon amusement qd même, j'abandonne
Marsh Posté le 30-07-2002 à 19:37:35
Perso ce que je fais (mais je ne dis pas que c'est une bonne méthode, c'est juste qu'on en a pas parlé) :
Code :
|
Marsh Posté le 30-07-2002 à 19:39:41
zion : ok, j'ai pas pris ta methode en disant "wouha merci c'est la meilleure alors" mais c'est pas une raison pour te vexer, je veux connaitre les différences entre les différente methode et je ne comprend pas les arguments que tu avance, j'éssaie de discuter pour faire avancer les choses, j'ai jamais dis que la methode de la bdd était la mieux...
Marsh Posté le 30-07-2002 à 19:49:26
Snipe Foo a écrit a écrit : j'ai jamais dis que la methode de la bdd était la mieux... |
Citation : "gaspiller les ressources d'un serveur sql", je veux bien, mais un serveur sql c'est fait pour ça, et puis un select, je pense pas que ça aille chercher bien loin niveau ressources. |
Sur ce, je me casse pour la soirée de toute facon
Marsh Posté le 30-07-2002 à 19:57:51
comme je te l'ai déjà dit sur un autre topic, j'utilise la méthode des tableaux dans des fichiers "francais.php","english.php" et bientôt "deutsch.php"...
Plusieurs raisons :
- rapidité
- simplicité
la simplicité et d'autant plus important que je veux que les utilisateurs de mon appli (PhpWebGallery, voir signature...) puissent éditer eux-même le fichier de langue, sans pour autant maîtriser SQL ou PHP...
Et je vois pas l'intérêt de stocker des données en base lorsqu'elles ne changent jamais...
Marsh Posté le 30-07-2002 à 23:10:28
z0rglub a écrit a écrit : Et je vois pas l'intérêt de stocker des données en base lorsqu'elles ne changent jamais... |
Voila l'argument que je cherchais
Marsh Posté le 31-07-2002 à 08:38:31
Mo je fais
include ("pages/$Langue/mapage.php" );
et après des switch.
pour tout ce qui est requête SQL (recherche etc..), je nomme les champs nom_fr et nom_us et dans la requête je fais un
SELECT ... Nom_$Langue ..
histoire de pas charger inutilement les deux langues
Marsh Posté le 31-07-2002 à 08:48:01
Zion va etre content... Je pense etre convaincu...
Mais en ce qui concerne la maintenance du site, pour ceux qui utilisent la methode du include, avez vous fait une page php pour gerer les traduction? Ou alors simplement vous éditez vos fichiers à la main ?
Marsh Posté le 31-07-2002 à 08:53:06
je place tout ce qui est commun au deux langues (requêtes, opérations math, param etc.. dans un répertoire à part)
dès qu'il y a du texte, c'est dans le répertoire de la langue et les pages portent le même nom dans des rép séparés
pour la maintenance je trouve ça assez simple, quand tu veux ajouter une langue, tu ajoute une entrée dans un tableau, tu recopie le rep FR et tu traduis le texte rien de plus.
Marsh Posté le 31-07-2002 à 08:57:32
le mieux, je pense, c'est de découper chaque document en fichier xml, le xml étant structuré comme ça (je simplifie):
Code :
|
du coup, c'est très souple et lisible... tu peux traduire ou ne pas traduire, mais quand tu traduis, tu peux t'appuyer sur ta DTD pour mettre cote à cote tes différents langages et traduire plus facilement l'ensemble de ton site.
Marsh Posté le 31-07-2002 à 09:01:57
après, tu fais un XSL en passant le paramètre langue au xsl : affiche.xsl?lng=fr, le xsl contenant une ligne du type :
Code :
|
afin de transmettre le paramètre $lng au template s'occuppant de l'affichage du contenu...
Marsh Posté le 31-07-2002 à 09:26:02
là je suis largué : xml je connais pas du tout
Marsh Posté le 31-07-2002 à 09:38:40
là je te garantit que XML, pour ce qui est de ton problème, ça défonce tout le reste en terme de souplesse et de simplicité !
Par, exemple, si tu décides un jour de rajouter une nouvelle langue, y a plus qu'a la rajouter à ta DTD et tu auras :
Code :
|
Marsh Posté le 31-07-2002 à 09:51:10
oui mais dtd c koi
Marsh Posté le 31-07-2002 à 09:54:32
Snipe Foo a écrit a écrit : oui mais dtd c koi |
dtd ou xsd, c'est le "modèle" sur lequel se crée ton xml... compares le à un schéma entité-association par exemple
pour en savoir plus :
http://forum.hardware.fr/forum2.ph [...] subcat=385
php possède des librairies permettant de traiter le XML...
Marsh Posté le 31-07-2002 à 10:05:26
merci
Marsh Posté le 31-07-2002 à 15:12:26
chocoboy a écrit a écrit : là je te garantit que XML, pour ce qui est de ton problème, ça défonce tout le reste en terme de souplesse et de simplicité ! |
C'est pas plus souple que de faire un fichier avec un include de la langue, tu dois même rien changer en php pour supporter une nouvelle langue
Je suis aussi un gros mordu du XML, d'ailleurs je l'utilise pour bcp de mes traductions (même en php ... erhm), mais dans son cas, c'est peut être pas conseillé non plus hein, vive les performances et la non compatibilité avec un paquet de browsers... Ah ouai, j'oubliais, tu vas lui dire d'installer cocoon et qu'il va génerer de l'html... puis un BD XML...
Allez, soyons sérieux
Marsh Posté le 31-07-2002 à 15:20:08
Zion a écrit a écrit : C'est pas plus souple que de faire un fichier avec un include de la langue, tu dois même rien changer en php pour supporter une nouvelle langue Je suis aussi un gros mordu du XML, d'ailleurs je l'utilise pour bcp de mes traductions (même en php ... erhm), mais dans son cas, c'est peut être pas conseillé non plus hein, vive les performances et la non compatibilité avec un paquet de browsers... Ah ouai, j'oubliais, tu vas lui dire d'installer cocoon et qu'il va génerer de l'html... puis un BD XML... Allez, soyons sérieux |
ben oui, comment t'as deviné ???
Marsh Posté le 31-07-2002 à 15:23:13
sinon, sérieusement, le coup des include, c'est vraiment pas top !
Marsh Posté le 31-07-2002 à 15:30:47
chocoboy a écrit a écrit : sinon, sérieusement, le coup des include, c'est vraiment pas top ! |
Tu rigoles ou quoi?
Un include("translations/$langue.php" );
C'est nickel.
Le monde n'est pas prèt pour le tout XML, trop lent encore
Marsh Posté le 30-07-2002 à 18:03:35
J'étais parti sur la methode BDD : une table langage avec une colone par langue, et une requete en début de page qui créé un tableau contenant les différents textes de la page...
Mais j'hésite avec une autre methode : un fichier (un par langage) contenant la description d'un tableau, chaque ligne correspondant à un texte, puis un include du fichier au debut de page.
Existe t'il d'autre methode ? Quelle est la mieux ?
Message édité par Snipe Foo le 30-07-2002 à 18:15:13