site multilingue

Eléphanteau du PHP | 24 Messages

30 janv. 2010, 17:30

Bonjour,

J'ai créé un site en php en français qui est presque terminé.
Malheureusement je n'avais pas prévu qu'il faudrait que je le fasse en anglais également.
Quelle est la méthode la plus simple ?

Les contraintes que j'ai :
- Il faut créer un compte pour accéder au site, mais il faut que le même pseudo puisse être utilisé en anglais et en français.
- Il y a de nombreux tableaux sur le site, dont les index de ligne sont stockés dans une base de donnée
- Et bien sur tous les textes pour l'instant écrit en html à traduire en anglais

Vaut-il mieux refaire un deuxième site avec d'autres bdd ou utiliser les même et rajouter une colonne dans chaque pour dire si c'est français ou anglais ? Ou est-ce qu'il y a plus simple ?

Eléphant du PHP | 453 Messages

30 janv. 2010, 21:41

Hello Ricou,

Logiquement, c'est une question qui devrait plutôt être postée dans « SQL & SGBDR ». Peux tu mettre sur le forum la structure de ta BDD ou du moins un aperçu ?

@+
La Tux attitude avec les kiw'z syou plait
Komodo Edit - Inkscape - Dia

ViPHP
ViPHP | 2291 Messages

30 janv. 2010, 22:15

ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Eléphant du PHP | 199 Messages

30 janv. 2010, 23:57

En fait ca dépend comme tu as codé ton site.
Si le contenu est généré dynamiquement c'est à dire qu'il est stocké dans une base de donnée et pour l'affichage tu l'appelles
de cette dernière, c'est juste un soucis de requête.
Par contre si le contenu est statique c'est à dire écrit entre les balises tu as beaucoup de boulots.

Eléphanteau du PHP | 24 Messages

31 janv. 2010, 02:42

Alors tout le texte est en dur, principalement en htlm, mais il n'y en n'a pas beaucoup, quelques paragraphes, quelques en-tete de tableaux et un formulaire.
Donc pour tout ça la solution de dunbar me semble adéquate.

Par contre le reste c'est les index des lignes de tableaux qui sont stockés dans une bdd. une bonne cinquantaine de noms différents.
Soit adapter la méthode de dunbar aussi, soit rajouter une colonne dans la table avec les noms anglais.

Par contre pour les pseudos qui peuvent être identique selon s'ils sont enregistrés avec la version anglaise ou la version française du site, vaut-il mieux créer 2 tables séparés avec les pseudos et mot de passe, ou tout mettre dans la meme avec une colonne pour différencier les anglais des français ?

Eléphant du PHP | 199 Messages

31 janv. 2010, 14:46

Dunbar on peut adapter ton script pour le faire avec de la BDD.
Ca pourraît marcher non?

ViPHP
AB
ViPHP | 5818 Messages

31 janv. 2010, 16:35

Alors tout le texte est en dur, principalement en htlm, mais il n'y en n'a pas beaucoup, quelques paragraphes, quelques en-tete de tableaux et un formulaire.
Donc pour tout ça la solution de dunbar me semble adéquate.

Par contre le reste c'est les index des lignes de tableaux qui sont stockés dans une bdd. une bonne cinquantaine de noms différents.
Soit adapter la méthode de dunbar aussi, soit rajouter une colonne dans la table avec les noms anglais.

Par contre pour les pseudos qui peuvent être identique selon s'ils sont enregistrés avec la version anglaise ou la version française du site, vaut-il mieux créer 2 tables séparés avec les pseudos et mot de passe, ou tout mettre dans la meme avec une colonne pour différencier les anglais des français ?
Perso si le site est alimenté par une base de donnée, toutes mes traductions sont alimentée par la base de données.
Sur le principe cela me fait donc une requête pour les libellés du site, éléments de navigation etc. et une seconde requête pour le contenu.

Les éléments de contenu sont vérifiés et si non traduits je fais une requête complémentaire sur la langue par défaut. On pourrait aussi récupérer la langue du visiteur en même temps que la langue par défaut mais cela utiliserait systématiquement le double de mémoire, alors qu'avec une requête sur la langue du visiteur suivie éventuellement par une seconde requête sur la langue par défaut, le système gagne automatiquement en performance à mesure que les traductions sont effectuées.

ViPHP
AB
ViPHP | 5818 Messages

31 janv. 2010, 16:42

Dunbar on peut adapter ton script pour le faire avec de la BDD.
Ca pourraît marcher non?
Sa solution est conçue pour fonctionner avec des tableaux. Si tu utilises une bdd, tu fais du code pour une bdd et je ne vois pas trop de points communs entre les deux, excepté la variable $_GET qui transmettra la langue.

Eléphanteau du PHP | 24 Messages

31 janv. 2010, 17:30

Dites voir, vous m'embrouillez un peu tous, là :mrgreen:

ce sera peut-être plus simple si je vous montre le site : http://citations.ovh.org/rol_rent/
C'est un site d'aide pour un jeu sur navigateur internet. Vous pouvez utilise le compte "test" avec le mot de passe "phpfrance". ;)

Donc tous les textes sont en html ou dans des commandes echo, sauf la première colonne de chaque tableau, où les noms sont stockés dans une table ayant cette structure :
id - objet_code (nom sans accent ni espace) - objet (nom de l'objet en français pour l'affichage dans les tableaux) - catégorie (pour différencier les tableaux) - cout - gain_att - gain_def (pour les nombres des tableaux)

Ce que je pense faire après avoir lu vos propositions :
Ecrire la page d'accueil avant de se connecter et la page d'inscription dans les 2 langues. Lors de l'inscription le joueur choisit si c'est un compte en français ou en anglais qu'il créé.
La table où sont enregistré les comptes a pour l'instant : "id - pseudo - mdp - date d'inscription - date de dernière visite" et je rajoute langue.
Ainsi il est possible d'avoir 2 pseudos avec une langue différente.

Par contre ça oblige de choisir la langue du compte à utiliser avant chaque connexion par la suite.

Et pour la traduction de tous les textes, j'utilise la méthode de dunbar avec une session créée à la connexion. Je peux mettre un switch (ou if même) dans chaque page séparément, vu le peu de texte par page. (La première ligne des tableaux sont toutes dans le même fichier en include)


L'autre solution serait de créer un deuxième site, avec des nouvelles bdd, ce serait plus simple mais chaque modification devra être faite en double, donc bof.


Est-ce que mon idée est réalisable et pas trop compliquée à mettre en œuvre ?


Par contre AB, je ne comprends pas cette phrase : "Les éléments de contenu sont vérifiés et si non traduits je fais une requête complémentaire sur la langue par défaut."

ViPHP
AB
ViPHP | 5818 Messages

31 janv. 2010, 18:50

Par contre ça oblige de choisir la langue du compte à utiliser avant chaque connexion par la suite.
Tu peux récupérer la langue du navigateur, et aussi envoyer un cookie pour mémoriser la langue choisie.

Par contre AB, je ne comprends pas cette phrase : "Les éléments de contenu sont vérifiés et si non traduits je fais une requête complémentaire sur la langue par défaut."
Oui car la traduction n'est pas systématiquement faite. Par exemple dans un site administrable, l'administrateur rentre un article mais s'il n'a pas le temps de traduire (ou faire traduire) dans les différentes langues proposées sur le site, il faut bien que le programme aille chercher la langue par défaut. Cette partie ne sera pas traduite mais au moins affichée dans la première langue utilisée par l'administrateur (généralement sa langue maternelle) pour rentrer son article.

Sinon ce n'était pas pour t'embrouiller mais pour te montrer les différentes méthodes. Cela dit il est vrai que puisque ton site est déjà fait, il faut aller au plus simple et choisir ce qui te demandera le moins de travail. Ma méthode de tout mettre en bdd si le site est alimenté par une bdd est surtout intéressante si le multi langue a été prévu dès le départ.
Dans ton cas mixer traduction en tableaux et traduction en bdd semble être le plus simple.

Eléphant du PHP | 199 Messages

31 janv. 2010, 19:03

En fait le principe est le même sauf que les données pour Dunbar proviennent d'un tableau et de ce que je dis d'une bdd.
En gros seule la provenance des données changent et de la manière de les traiter: la couche model.

Sinon je parlais du principe pas du script en lui même. Quand j'aurai un peu de temps j'essaierai de monter un script pour
illustrer mes propos.
Modifié en dernier par Superpilou le 31 janv. 2010, 22:59, modifié 1 fois.

ViPHP
AB
ViPHP | 5818 Messages

31 janv. 2010, 21:11

En fait le principe est le même sauf que les données pour Dunbar proviennent d'un tableau et de ce que je dis d'une bdd.
En gros seule la provenance des données chances et de la manière de les traiter, la couche model.

Sinon je parlais du principe pas du script en lui même. Quand j'aurai un peu de temps j'essaierai de monter un script pour
illustrer mes propos.
Ah ok... Ce que je voulais dire plus précisément c'est qu'à partir du moment où on utilise une bdd, il serait dommage (ou tout au moins couteux en mémoire) de ramener toutes les langues traduites pour ensuite utiliser un switch tel que dans l'exemple. La clause WHERE lang = de la requête devrait suffire pour obtenir la bonne langue en fonction de la variable $_GET passée dans l'URL :)