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

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] Site multilangue : les methodes.

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

[PHP] Site multilangue : les methodes.

n°186425
Snipe Foo
Head Shot !!!
Posté le 30-07-2002 à 18:03:35  profilanswer
 

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
mood
Publicité
Posté le 30-07-2002 à 18:03:35  profilanswer
 

n°186430
--greg--
Posté le 30-07-2002 à 18:11:56  profilanswer
 

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.

n°186434
Snipe Foo
Head Shot !!!
Posté le 30-07-2002 à 18:14:37  profilanswer
 

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.

n°186437
zion
Plop
Posté le 30-07-2002 à 18:16:29  profilanswer
 

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  ;)  
 


---------------
Informaticien.be - Lancez des défis à vos amis
n°186440
Snipe Foo
Head Shot !!!
Posté le 30-07-2002 à 18:19:44  profilanswer
 

4 -> ?
 
là j'ai pas trop compris le coup des constantes, pkoi c'est mieux que le tableau ?

n°186444
--greg--
Posté le 30-07-2002 à 18:21:15  profilanswer
 

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

n°186449
Snipe Foo
Head Shot !!!
Posté le 30-07-2002 à 18:23:09  profilanswer
 

mais une requete sur une bdd c'est si lent que ça ? c'est juste un select where...

n°186452
--greg--
Posté le 30-07-2002 à 18:24:36  profilanswer
 

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:)

n°186454
j-'-r
Sans horraires fixe
Posté le 30-07-2002 à 18:24:57  profilanswer
 

moi je ferais du genre
 
-- texte.php --

<?
$intro[1]="c'est l'intro en francais";
$intro[2]="this is the intro in english";
$sommaire[1]="le sommaire";
$sommaire[2]="the menu";
?>


 
-- index.php --

<? include("texte.php" ); ?>
<html><table><ect...><?=$intro[$id_l]?></table><...>
<?=$sommaire[$id_l]?>...<.../html>


 
fichier index.php appelé avec index.php?id_l=1
1 pr francais
2 pour anglais dans l exemple

n°186456
zion
Plop
Posté le 30-07-2002 à 18:25:43  profilanswer
 

--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  :pt1cable:


---------------
Informaticien.be - Lancez des défis à vos amis
mood
Publicité
Posté le 30-07-2002 à 18:25:43  profilanswer
 

n°186458
--greg--
Posté le 30-07-2002 à 18:26:19  profilanswer
 

J-'-R a écrit a écrit :

moi je ferais du genre
 
-- texte.php --

<?
$intro[1]="c'est l'intro en francais";
$intro[2]="this is the intro in english";
$sommaire[1]="le sommaire";
$sommaire[2]="the menu";
?>


 
-- index.php --

<? include("texte.php" ); ?>
<html><table><ect...><?=$intro[$id_l]?></table><...>
<?=$sommaire[$id_l]?>...<.../html>


 
fichier index.php appelé avec index.php?id_l=1
1 pr francais
2 pour anglais dans l exemple



ç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.

n°186460
zion
Plop
Posté le 30-07-2002 à 18:26:32  profilanswer
 

J-'-R a écrit a écrit :

moi je ferais du genre
 
[...]




 
Déjà cité  :p  
De plus, la solution avec les constantes est de loin plus simple à écrire.


---------------
Informaticien.be - Lancez des défis à vos amis
n°186461
Snipe Foo
Head Shot !!!
Posté le 30-07-2002 à 18:26:37  profilanswer
 

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).

n°186465
--greg--
Posté le 30-07-2002 à 18:28:09  profilanswer
 

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 :)

n°186472
Snipe Foo
Head Shot !!!
Posté le 30-07-2002 à 18:32:32  profilanswer
 

--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)?

n°186474
zion
Plop
Posté le 30-07-2002 à 18:33:57  profilanswer
 

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)?




 
 :heink:  
 
C'est vrai qu'il vaux mieux gaspiller les resources du serveur SQL plutot que de perde 2-3k en mémoire  :pt1cable:


---------------
Informaticien.be - Lancez des défis à vos amis
n°186480
--greg--
Posté le 30-07-2002 à 18:37:36  profilanswer
 

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!? :heink:

n°186482
Snipe Foo
Head Shot !!!
Posté le 30-07-2002 à 18:40:48  profilanswer
 

"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...

n°186486
Snipe Foo
Head Shot !!!
Posté le 30-07-2002 à 18:41:26  profilanswer
 

je charge que les textes présents dans ma page.

n°186500
ethernal
Chercheur de vérité...
Posté le 30-07-2002 à 19:20:17  profilanswer
 

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...


---------------
...oups kernel error...
n°186505
zion
Plop
Posté le 30-07-2002 à 19:34:24  profilanswer
 

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  
 :hello:


---------------
Informaticien.be - Lancez des défis à vos amis
n°186509
antp
Super Administrateur
Champion des excuses bidons
Posté le 30-07-2002 à 19:37:35  profilanswer
 

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 :
  1. switch($language) {
  2.     case "fr":
  3.       ici je definis toutes des variables contenant les chaines FR
  4.       break;
  5.     case "uk":
  6.       ici je definis des variables ayant les mêmes noms mais contenant les chaines UK
  7.       break;
  8.   }


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°186511
Snipe Foo
Head Shot !!!
Posté le 30-07-2002 à 19:39:41  profilanswer
 

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...


Message édité par Snipe Foo le 30-07-2002 à 19:40:17
n°186516
zion
Plop
Posté le 30-07-2002 à 19:49:26  profilanswer
 

Snipe Foo a écrit a écrit :

 j'ai jamais dis que la methode de la bdd était la mieux...




 
 :non:  
 

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  :na:


---------------
Informaticien.be - Lancez des défis à vos amis
n°186519
z0rglub
Posté le 30-07-2002 à 19:57:51  profilanswer
 

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...


---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
n°186618
zion
Plop
Posté le 30-07-2002 à 23:10:28  profilanswer
 

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...




 
 :jap:  
 
Voila l'argument que je cherchais  :D


---------------
Informaticien.be - Lancez des défis à vos amis
n°186735
Sh@rdar
Ex-PhPéteur
Posté le 31-07-2002 à 08:38:31  profilanswer
 

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


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
n°186744
Snipe Foo
Head Shot !!!
Posté le 31-07-2002 à 08:48:01  profilanswer
 

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 ?


---------------
Ma réflexion sur cette affaire vient de connaître une avancée déterminante.
n°186745
Sh@rdar
Ex-PhPéteur
Posté le 31-07-2002 à 08:53:06  profilanswer
 

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.


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
n°186747
chocoboy
Posté le 31-07-2002 à 08:57:32  profilanswer
 

le mieux, je pense, c'est de découper chaque document en fichier xml, le xml étant structuré comme ça (je simplifie):

Code :
  1. <document>
  2.   <content lng="fr">Bonjour, comment ça va ?</content>
  3.   <content lng="uk">Hello, how are you ?</content>
  4.   <content lng="de">Gutten Tag, wie gets ?</content>
  5. </document>


 
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.


Message édité par chocoboy le 31-07-2002 à 08:58:18
n°186748
chocoboy
Posté le 31-07-2002 à 09:01:57  profilanswer
 

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 :
  1. <xsl:apply-templates select="content">
  2.   <xsl:with-param name="lng" select="$lng">
  3. </xsl:apply-templates>


 
afin de transmettre le paramètre $lng au template s'occuppant de l'affichage du contenu...


Message édité par chocoboy le 31-07-2002 à 10:10:58
n°186757
Snipe Foo
Head Shot !!!
Posté le 31-07-2002 à 09:26:02  profilanswer
 

:ouch: là je suis largué : xml je connais pas du tout :(


---------------
Ma réflexion sur cette affaire vient de connaître une avancée déterminante.
n°186771
chocoboy
Posté le 31-07-2002 à 09:38:40  profilanswer
 

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 :
  1. <content lng:nouvelleLangue>...</content>

n°186792
Snipe Foo
Head Shot !!!
Posté le 31-07-2002 à 09:51:10  profilanswer
 

oui mais dtd c koi :??:


---------------
Ma réflexion sur cette affaire vient de connaître une avancée déterminante.
n°186800
chocoboy
Posté le 31-07-2002 à 09:54:32  profilanswer
 

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...

n°186807
Snipe Foo
Head Shot !!!
Posté le 31-07-2002 à 10:05:26  profilanswer
 

:jap: merci


---------------
Ma réflexion sur cette affaire vient de connaître une avancée déterminante.
n°187215
zion
Plop
Posté le 31-07-2002 à 15:12:26  profilanswer
 

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é !




 
 :non:  
 
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  :p  
 
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  :D


---------------
Informaticien.be - Lancez des défis à vos amis
n°187234
chocoboy
Posté le 31-07-2002 à 15:20:08  profilanswer
 

Zion a écrit a écrit :

 
 
 :non:  
 
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  :p  
 
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  :D  




ben oui, comment t'as deviné ???  :D

n°187243
chocoboy
Posté le 31-07-2002 à 15:23:13  profilanswer
 

sinon, sérieusement, le coup des include, c'est vraiment pas top !

n°187252
zion
Plop
Posté le 31-07-2002 à 15:30:47  profilanswer
 

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  :p


---------------
Informaticien.be - Lancez des défis à vos amis
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

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

  [PHP] Site multilangue : les methodes.

 

Sujets relatifs
[PHP] Peut être une question con ;) mettre les liens en variable ???[PHP / MYSQL ] Comment qu on fait avec ce type de requetes ? [RESOLU]
PHP : problème pour upload de fichierJ'aimerais gérer une compétition grace a un site web ?
[PHP] Athentification sur un site[PHP] array null
[PHP] ... les meilleurs guides sur le netVotre avis sur mon appli de galerie d'image en PHP
[PHP] Installation de php.... 
Plus de sujets relatifs à : [PHP] Site multilangue : les methodes.


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