Sites multilangues

Sites multilangues - PHP - Programmation

Marsh Posté le 28-08-2006 à 11:41:26    

Salut à tous,
 
J'aimerais mettre en place un site perso accessible en plusieurs langues.
Je pensais donc à faire ça en Php/MySql où une table contiendrait tous les textes et selon le choix du user je switch de langue.
 
Auriez-vous une meilleure de conception?
Merci

Reply

Marsh Posté le 28-08-2006 à 11:41:26   

Reply

Marsh Posté le 28-08-2006 à 11:54:51    

Perso, une fois j'avais fait ca en utilisant du php et un tableau à N Dimensions et ca marchait bien, maintenant coté performances j'ai pas teste la methode avec bdd ...

Reply

Marsh Posté le 28-08-2006 à 12:47:11    

moi, j'utilise un fichier par langue dans lequel je mets des constantes contenant les traductions.

Reply

Marsh Posté le 28-08-2006 à 14:52:39    

rufo a écrit :

moi, j'utilise un fichier par langue dans lequel je mets des constantes contenant les traductions.


pareil, et c'est le plus light que j'ai trouvé :)
 

Message cité 1 fois
Message édité par chezwam le 28-08-2006 à 14:54:45
Reply

Marsh Posté le 28-08-2006 à 16:00:35    

un simple fichier texte ?

Reply

Marsh Posté le 28-08-2006 à 16:27:34    

chezwam a écrit :

pareil, et c'est le plus light que j'ai trouvé :)


 
Pareil :) sauf que moi c'est pas des constantes, c'est un Array que je rappelle plus loin dans une fonction qui redistribue. (l'appel au fichier ne se fait qu'une fois).
 
En plus j'ai fait un script qui permet d'avoir une interface qui permet d'ajouter / supprimer des langues, ajouter des phrases (avec commentaires) et faire les traductions..
 
c'est pas mal fonctionnel tout ça

Reply

Marsh Posté le 28-08-2006 à 16:49:10    

Pareil pour le fichier, sauf que ce n'est ni un tableau ni des constantes mais de l'XML :D

Reply

Marsh Posté le 28-08-2006 à 17:00:09    

Je vois que la BDD n'est pas très répandue pour ce genre d'appli. l'idée du fichier en XML me plait assez.

Reply

Marsh Posté le 28-08-2006 à 17:00:55    

ça se parse facilement en php un XML?
désolé je suis un vrai newbie en PHP

Reply

Marsh Posté le 28-08-2006 à 17:12:11    

Pour moi le XML est moins intéressant car on est obligés de le parser et que je ne vois pas l'utilité d'un fichier interopérable pour notre cas pré-cité.
 
Le XML est fait pour des utilisations multiples alors que dans notre cas elle est unique... (dans mon cas, il n'y a qu'une fonction pour récupérer les données et les redistribuer...)

Reply

Marsh Posté le 28-08-2006 à 17:12:11   

Reply

Marsh Posté le 28-08-2006 à 17:16:27    

en +, parser a un coût en temps, ce qui n'est pas le cas avec un fichier texte ou un tableau.
 
Perso, j'ai un peu optimisé le coup du fichier texte. Dans le cas d'une "grosse" appli, je me retrouve avec plus de 1000 lignes de traduction. Or, sur une page, je n'ai pas besoin de toutes les traductions. Je fais donc maintenant plusieurs fichiers et mon MVC n'appelle que ceux dont la vue a besoin...;)


Message édité par rufo le 28-08-2006 à 17:16:49
Reply

Marsh Posté le 28-08-2006 à 17:19:31    

rufo => pareil, un fichier par langue et un fichier central qui dit quelles langues sont actives, quelle est celle par défaut et qui décrit tous les champs dans le cas où l'on administre la chose
 
au niveau perf, ça me semble le mieux

Reply

Marsh Posté le 28-08-2006 à 17:21:33    

Ce sujet à déja été traité maintes fois

Reply

Marsh Posté le 28-08-2006 à 17:23:58    

pas très utile comme réponse => soit prévenir un modo pour fermer le topic et donner la réf à notre ami, soit donner la réf aux sujets de toutes façons.. soit donner son avis (une fois de plus, tant pis, les mentalités évoluent)

Reply

Marsh Posté le 28-08-2006 à 17:25:41    

Pourquoi ne pas utiliser un bdd (surtout si elle existe déjà pour une autre utilisation ?)

Reply

Marsh Posté le 28-08-2006 à 17:31:58    

BDD=> lourd si on doit faire un appel à chaque fois pour aller chercher une phrase / moins rapide si c'est pour le récup sous la forme d'un tableau que l'on se propose d'avoir dès le début

Reply

Marsh Posté le 28-08-2006 à 17:32:29    

romainboyer a écrit :

En plus j'ai fait un script qui permet d'avoir une interface qui permet d'ajouter / supprimer des langues, ajouter des phrases (avec commentaires) et faire les traductions...


Tu pourrais me passer quelques captures d'écran de ton interface ? Si ca ne t'ennui pas.
 
 
Sinon j'ai une petite question : Ca se passe comment avec un site dynamique qui gère des news par exemple ? C'est stocké dans une base de données je suppose ?

Reply

Marsh Posté le 28-08-2006 à 17:40:25    

AlphaZone a écrit :

Tu pourrais me passer quelques captures d'écran de ton interface ? Si ca ne t'ennui pas.
 
 
Sinon j'ai une petite question : Ca se passe comment avec un site dynamique qui gère des news par exemple ? C'est stocké dans une base de données je suppose ?


 
ok, as soon I am at home ;)
 
pour les news, oui, tout le monde est d'accord la dessus, les bdd c'est cool, mais le XML c'est mieux là par contre (et oui, le XML est facile à parser car des scriptsexistent déjà)

Reply

Marsh Posté le 28-08-2006 à 17:40:59    

romainboyer a écrit :

BDD=> lourd si on doit faire un appel à chaque fois pour aller chercher une phrase / moins rapide si c'est pour le récup sous la forme d'un tableau que l'on se propose d'avoir dès le début


 
Ba sinon une combinaison des deux techniques...
 
mettre dans une table les langues, et dans une autre toutes les traductions. Quand tu choisis une langue tu charge la partie du tableau qui t'interesse, et aprés dans celle ci tu va soit chercher via un N° de ligne soit via un index.
 
Quand à la vitesse d'éxécution... et bien, je ne suis pas sur que d'aller ouvrir un fichier y lire la ligne dont on a besoin et le fermer, prenne moins de temps.

Reply

Marsh Posté le 28-08-2006 à 17:47:55    

pour ma part je charge le fichier selon la langue une seule fois en include et il va me chercher la ligne indéxée dans un Array, j'ai pas trouvé d'accès plus rapide aux données.

Reply

Marsh Posté le 28-08-2006 à 17:53:42    

Pour trouver les références en question je clic sur rechercher puis je tape multilangue et ooohh miracle je trouve
http://forum.hardware.fr/hardwaref [...] 3876-1.htm
http://forum.hardware.fr/hardwaref [...] 8139-1.htm
 :pfff:  
 
Mais bon ca tout le monde sait le faire....
 
Mais mon but n'est pas d'embeter l'auteur du topic mais de l'inciter à faire un mini recherche  :ange:


Message édité par the big ben le 28-08-2006 à 17:54:51
Reply

Marsh Posté le 28-08-2006 à 17:53:46    

ok... je le note :D.. et je m'en félicite :D
 
bon sérieusement. La mise à jour n'est pas trop délicate ? (manipuler un fichier texte n'est pas forcément des plus évident surtout quand tu as plusieurs centaines de pages)

Reply

Marsh Posté le 28-08-2006 à 17:59:28    

Ben a priori, c'est des bouts de phrase que tu as dedans, il doit pas y en avoir autant que de pages, c'est surtout des bouts de phrases redondants, le restant étant stocké en bdd. Pour moi, pour le site que je suis en train de convertir, j'ai une vingtaine de "phrases" utilisées par page en plus des contenus dynamiques (menu et page en cours de visu)

Reply

Marsh Posté le 28-08-2006 à 19:38:45    

personnellement, j'utilise des classes basées sur la même interface. Une classe Anglais, une classe Francais, toutes deux basées sur l'interface Langue.
Ca permet d'être sur que tu n'oublieras pas une traduction en rajoutant une langue.

Reply

Marsh Posté le 29-08-2006 à 02:40:23    

la solution la plus rapide que j ai trouve pour l instant est de:
 
- lancer le script qui contient les mots
- stocker les mots dans un fichier texte
- transformer les mots en htlm puis en php puis en xslt.
- une fois xslt tu fais calcule le determinant de matrice
- si la matrice est d'ordre n-1 alors il faut faire un tableau
- sinon tu decompile en ARJ l enonce de la cle de dimension n-1 de ta structure en arbre binaire
- une fois que tu recois la source tu fais un getimagesize($translation)
- si la taille de l'image est supérieur ou egale a 5 ko il faut revenir a l'etape 1 et sauter l'etape 3-4 ( negligé l 'etape 6 pour les illuminés )
- mission accomplie
 

Reply

Marsh Posté le 29-08-2006 à 09:20:27    

Pour ma part la solution de OSCommerce me parraissait pas mal:
 
Par exemple pour la page maPage.php, je crée un fchier \languages\french\maPage.php
contenant une série de  

Code :
  1. define('TEXT', 'texte');
  2. define('HEADLINE', 'titre');


Pour les variables communes a toutes les pages, on crée également un fichier \languages\french.php.
 
Ensuite reste ensuite, il ne reste plus qu'a charger le page de traduction correspondant lors de chaque chargement de chaque page...

Reply

Marsh Posté le 29-08-2006 à 09:21:54    

constantes donc...

Reply

Marsh Posté le 29-08-2006 à 09:45:16    

Moi j'ai utilisé un fichier php (lang/fr/index.php), dans lequel sont mises les variables de langue sous cette forme :
 
$lang['INDICE_DU_TEXTE'] = "Indice du texte";
 
Ensuite, dans mes pages j'inclus le fichier de langue en fonction de la langue choisie. Mon script comporte donc un énorme array $lang;
 
Ensuite j'utilise une fonction, pour appeler la variable. Et là je renvoie la variable formatée en HTML (htmlentities), et si la variable n'existe pas, je la retourne en CAPS, de manière à pouvoir la rajouter simplement dans le fichier langue.
 
Exemple :

Code :
  1. function lang($code) {
  2.   global lang;
  3.   if (isset($lang[$code])) return htmlentities($lang[$code]);
  4.   else return $code;
  5. }

Reply

Marsh Posté le 30-08-2006 à 11:15:36    

Alors voici mon configurateur de fichier de langues :
 
http://www.ergonomie-web.com/visu_config.jpg
 
Code de fr.lang.php :

Code :
  1. <?php
  2. $lang_this="fr";
  3. $lang_contents = Array(
  4. 'ini'=>'ini-fr',
  5. 'test'=>'test fr',
  6. );
  7. ?>


Fichier lang.config.php

Code :
  1. <?php
  2. $activ_langs=Array('fr','es');
  3. $fields_descriptions=Array(
  4.  'ini'=>'Champs d\'initialisation, ne pas supprimer',
  5.  'test'=>'test');
  6. ?>


 
Fonction qui récupère tout ça :
 

Code :
  1. require LANG.".lang.php";
  2. function dico($mot) {
  3. global $lang_contents;
  4. return $lang_contents[$mot];
  5. }


 
Voilà, plus de secret.. fin si, mon pti script d'admin :p

Reply

Marsh Posté le 30-08-2006 à 14:21:43    

YA LE MOT DE PASSE DANS TON CODE !!!!!!!!!!
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Joke bien sur  :D


Message édité par supermofo le 30-08-2006 à 14:22:23
Reply

Marsh Posté le 30-08-2006 à 14:25:43    

hum j'ai scrollé trois fois et là je me suis dit j'suis con, je mets pas mes mots de passe dans le code.. bravo la joke, et ton avis sinon ?

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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