solution pour page web multilangage - PHP - Programmation
Marsh Posté le 08-07-2004 à 13:48:41
travailler tes liens
page.php?lang=fr&rub=13 que tu peux remplacer par page/fr/13/ ou page-fr-13.php|htm avec de l'url rewriting pour faire plus propre
Marsh Posté le 12-07-2004 à 13:22:44
Moi, je fais plutôt un include du bon fichier de langue suivant la langue de l'utilisateur (dans mon cas, profil stocké dans une BD). Comem ça, tu peut rajouter autant de langue que tu veux, t'as pas à dupliquer tes pages web (donc ton code) à chaque fois que tu rajoutes une langue... C'est plus facile à maintenir
Marsh Posté le 13-07-2004 à 11:03:27
Le mieux (à mon avis) c'est de sortir tout le contenu de tes pages dans des fichier xml. Tu gères ensuite la mise en page à l'aide de xsl(t).
Ensuite grâce à PHP tu selectiones le fichier xml à utiliser pour ton visiteur.
Pour savoir de page en page quel est la langue de ton visiteur (une fois que tu l'as trouvée), c'est quand même mieux d'utiliser un cookie ou un session, au pire, fais passer ta variable dans ton url...
Reste la possibilité de retrouver à chaque page la langue parlée par le visiteur, mais je ne vois pas l'interet. Tu peux trouver des infos sur la localisation d'un internaute grâce à son ip, (ce genre de truc est utilisé pour faire de la pub selon les pays !).
Marsh Posté le 13-07-2004 à 11:15:28
rufo a écrit : Moi, je fais plutôt un include du bon fichier de langue suivant la langue de l'utilisateur (dans mon cas, profil stocké dans une BD). Comem ça, tu peut rajouter autant de langue que tu veux, t'as pas à dupliquer tes pages web (donc ton code) à chaque fois que tu rajoutes une langue... C'est plus facile à maintenir |
je faisais ca
un array genre
$language[0]="bienvenu"
$language[0]="welcome"
et ensuite sur la page
include ($langue_user."php" );
echo ^$language[0]
Marsh Posté le 13-07-2004 à 11:42:21
je préfère les DEFINE dans un fichier externe. pourquoi utiliser des variables alors que les valeurs sont constantes...
Marsh Posté le 13-07-2004 à 13:37:32
chacal_one333 a écrit : je faisais ca |
oui, mais sans le tableau : c'est pas très explicite dans le code ce que contient $Tab[0] Donc, j'utilise des variables (des defines seraient mieux, c'est vrai) en majuscules pour voir que ce sont des constantes et un fichier par langue. Ex :
Francais.lang.php
$LANG_WELCOME_PAGE_INDEX = "Bonjour";
...
English.lang.php
$LANG_WELCOME_PAGE_INDEX = "Welcome";
Comem ça, je sais que cette variable via d'un fichier langue et que le message est le message de bienvenue de la page index.php
Marsh Posté le 13-07-2004 à 13:40:23
et mes http://fr.php.net/DEFINE alors ?
Marsh Posté le 13-07-2004 à 14:39:05
et du coté de gettext? http://www.gnu.org/software/gettext/
c'est pas spécialisé pour ca ?
Marsh Posté le 13-07-2004 à 17:08:47
Si le site est pour une personne que tu n'aimes pas, utilise "Reverso"...
http://traduction.france3.fr/url/default.asp
Marsh Posté le 13-07-2004 à 17:46:30
un script qui pourrai t'etre utile
http://rv.web-heaven.com/scripts.php
Marsh Posté le 15-07-2004 à 08:38:02
sub1 a écrit : et du coté de gettext? http://www.gnu.org/software/gettext/ |
si, mais c'est un peu lourd
Marsh Posté le 16-07-2004 à 20:47:20
bon au final j'ai utilisé les sessions comme ca entre chaque changement de page je conserve bien la langue.
Marsh Posté le 16-07-2004 à 23:55:03
tomtom41 a écrit : bon au final j'ai utilisé les sessions comme ca entre chaque changement de page je conserve bien la langue. |
benh y'a une différence entre savoir quelle langue utilise le visiteur (utiliser les sessions en l'occurence) et gérer les différentes langues du site...
Perso, j'y vais à coup de fichiers (un par langue) avec des variables... j'avoue ne pas avoir pensé au define et je pense que c'est surement la meilleure solution (sans passer par un fichier xml qui pourrait être aussi gérable facilement).
Marsh Posté le 17-07-2004 à 00:32:10
Perso, je fous tout dans une table de la base (codelabel + codelangue)
Et je fais une fonction getLabel(codelabel, codelangue)
Avantage :
1) Si a un moment je décide de changer la façon de stocker/retrouver les libellés, j'ai juste la fonction a modifier, aucune ligne de code à toucher.
2) Dans la fonction, je peux utiliser une langue par défaut si le libellé en question n'est pas traduit dans la langue de l'utilisateur
3) La fonction ramène le code label si aucune traduction n'est trouvée (ni la langue de l'utilisateur, ni la langue par défaut). Comme ça l'utilisateur se trouve face a une page moche, mais si les codes ne sont pas trop nuls, il peut toujours continuer sa navigation.
4) Grace a ce système, je peux ajouter des langues au site sans toucher une ligne de code.
5) Si pour une raison ou pour une autre je veux afficher un libellé dans une langue précise, il suffit qu'au lieu de passer mon cookie en paramètre à la fonction, je passe une langue en dur (ou issue d'un autre endroit). Je conserve alors dans la table des libellés une cohérence de la langue et j'évite les doublons inutiles.
6) Les appels a la fonction contenant à la fois le code du libellé et de la langue, le code est tout a fait lisible, et on sait exactement ce qui va s'afficher sans surprise possible.
Marsh Posté le 17-07-2004 à 00:34:00
Le seul inconvénient à mon système pourrait etre la rapidité du code, mais je n'ai jamais remarqué de ralentissement notable lié à ce système.
Marsh Posté le 17-07-2004 à 00:35:13
Arjuna a écrit : Perso, je fous tout dans une table de la base (codelabel + codelangue) |
ta fonstion getLabel fait un accés à la base à chaque fois ? à partir d'un moment ça devient pas un peu lourd (en ressources) ? Enfin, je dit ca comme ça, ça doit être jouable pour certains types de site
Edit: t'as répondu avant que je donne ma question
Marsh Posté le 17-07-2004 à 00:38:25
Chose notable aussi... Avec une interface toute simple, je laisse la possibilité au client de mettre à jour lui-même les textes de son site, sans nécessiter la moindre connaissance informatique. Ceci n'est possible qu'avec le XML, et encore, ça nécessite une code plus compliqué, et il y a un nombre incalculable de limitations par rapport a mon système (points 1, 2, 3, 5 et même le 6). Sans parler des performances, le parsing d'un fichier XML est une horreur comparé à la lecture d'une table indexée, surtout si le volume des textes devient important.
Marsh Posté le 17-07-2004 à 00:40:47
RiderCrazy a écrit : ta fonstion getLabel fait un accés à la base à chaque fois ? à partir d'un moment ça devient pas un peu lourd (en ressources) ? Enfin, je dit ca comme ça, ça doit être jouable pour certains types de site |
Bah au départ, quand un collègue a commencé à faire ça, j'ai été horrifié. Pourtant, on n'a jamais remarqué le moindre problème avec ce système. Je bosse en ASP avec généralement SQL Server et une connection OLEDB. Ce type de connection est réputé très rapide, mais comparé à PHP/MySQL je ne sais pas ce que ça vaut, je doute que ce soit meilleur. Deplus, on n'utilise aucune optimisation stype chargement de la table en mémoire comme c'est possible avec MySQL.
Marsh Posté le 19-07-2004 à 20:53:32
DjMerguez a écrit : Il y a le Accept-Language en HTTP, aussi. |
Moi mon PC il dit que je parle en anglais, donc c'est une solution que ne marche pas toujours.
Notamment en entreprise, on utilise souvent des softs américains codés avec les pieds qui partent du principe qu'on est configuré en américain sinon ça plante.
Du coup je passe systématiquement les paramètres de Windows en américain, et ça comprends la langue. Là où je bosse c'est encore plus simple, tous les softs utilisés sont en versions américaines et on ne peux pas changer les paramètres.
Bref, faire une détecter sur le acceted_language du HTTP n'est pas forcément très heureux.
Marsh Posté le 19-07-2004 à 20:59:22
Arjuna a écrit : Moi mon PC il dit que je parle en anglais, donc c'est une solution que ne marche pas toujours. |
en l'occurence le serveur web il s'en fout que ton pécé parle anglais ... ce qui l'intéresse c'est de savoir quelle langue parle ton navigateur web !
Marsh Posté le 20-07-2004 à 11:18:37
[IQS]Krusty a écrit : Gettext, une fois que t'as compris ca va tout seul |
ben en choisissant gettext on perd en portabilité aussi ( car tt les hebergeurs ne le propose pas il me semble )
Marsh Posté le 20-07-2004 à 20:43:41
simogeo a écrit : en l'occurence le serveur web il s'en fout que ton pécé parle anglais ... ce qui l'intéresse c'est de savoir quelle langue parle ton navigateur web ! |
Généralement le navigateur utilise la langue du PC, ce qui est le paramètre le plus probable...
Y'a peut-être 1% des utilisateurs d'internet qui savent que leur navigateur a ce paramètre, et à tout casser le double qui savent que l'OS aussi a ce paramètre. Faut pas compter la dessus pour avoir des informations fiables.
Parceque même si la majeure partie des gens utilisent des OS/Navigateur dédiés à leur pays (donc qui parlent leur langue) une grande partie travaille tout de même avec des systèmes étrangers.
Sans parler du roumain qui va venir sur ton site... Quand t'as un code langue = RO tu fais quoi ? Je doute que ton site prenne en charge le roumain. A ce moment t'es obligé de passer par le système classique de personalisation avec une langue par défaut.
Idem pour les pays multi-lingues... Un belge aura pas défaut son navigateur qui acceptera le flamand et le français. Comment choisir lequel afficher ?
Marsh Posté le 20-07-2004 à 21:12:47
Si c'est pour identifier le pays du visiteur, il y a la base ip-to-country. Ensuite, il faut gérer les pays avec plusieurs langues officielles (Belgique, Suisse, ...) et les exceptions.
En y ajoutant les paramètres de langue du navigateur, il y a moyen de faire quelque chose de correct. De toutes les façon, il y aura toujours un cas particulier qui ne fonctionnera pas => config par défaut
Marsh Posté le 20-07-2004 à 21:31:54
T509 a écrit : Si c'est pour identifier le pays du visiteur, il y a la base ip-to-country. Ensuite, il faut gérer les pays avec plusieurs langues officielles (Belgique, Suisse, ...) et les exceptions. |
Dans ce cas, config par défaut pour tous, et l'utilisateur choisi sa langue via une interface directement dispo depuis la HP.
Exemple basique :
L'an dernier, je suis allé au Japon. Là-bas, je suis souvent allé dans un cyber-café coréen... Donc une machine coréenne située au japon, j'imagine même pas ce que va me ressortir ton système.
Une chose est sûr, quand je suis allé sur hotmail pour lire mes mails, j'étais ravi de voir qu'il était en anglais.
Marsh Posté le 20-07-2004 à 21:44:41
C'est bien ce que je dis, si la langue n'est pas supportée, on utilise la config par défaut. Cela peut être le français, l'anglais ou autre selon ce que l'on veut.
Marsh Posté le 21-07-2004 à 09:47:20
T509 a écrit : Si c'est pour identifier le pays du visiteur, il y a la base ip-to-country. Ensuite, il faut gérer les pays avec plusieurs langues officielles (Belgique, Suisse, ...) et les exceptions. |
+1. de plus, tout les grand sites de compagnies internationales font ainsi. une simple combo qui redirige vers le site en question.
Marsh Posté le 21-07-2004 à 11:47:04
Arjuna a écrit : |
Ben c'est quand même pas compliqué, moi qui fais des sites helvètes qui doivent donc souvent gérer nos chères 3 langues nationales, je pratique la détection de la langue du http_accept_language parce que ça me paraît un (tout) petit plus pour les utilisateurs, et si langue!=en ou fr ou it ben je mets la langue par défaut qui est le français parce que j'en ai décidé ainsi...
Brèfles, on s'adapte à ses besoins, pas de solution unique pour le multilangue !
Marsh Posté le 21-07-2004 à 14:09:14
en Suisse il y a 4 langues nationales
Marsh Posté le 21-07-2004 à 15:53:13
JagStang a écrit : en Suisse il y a 4 langues nationales |
La quatrième langue, le romanche, ne concerne que des gens habitants dans un canton reculé et montagnard où les ordinateurs ne sont pas encore arrivés.
Marsh Posté le 21-07-2004 à 16:00:52
deliriumtremens a écrit : La quatrième langue, le romanche, ne concerne que des gens habitants dans un canton reculé et montagnard où les ordinateurs ne sont pas encore arrivés. |
fais gaffe je viens aussi de ce genre de canton
Marsh Posté le 21-07-2004 à 16:17:15
Pour moi le choix est simple : C du zope accouplé a un plone ou autre. Les products sont deja i8niser
Marsh Posté le 21-07-2004 à 16:42:14
deliriumtremens a écrit : Yapadehonte |
au contraire c'est une fierté
Marsh Posté le 21-07-2004 à 16:49:57
Arjuna a écrit : |
En général on a soit fr-be/fr soit nl-be/nl, mais je n'ai pas encore rencontré le cas où les deux sont configrés.
En plus dans les sociétés en Belgique la plupart du temps Windows et tous les softs sont en anglais, configuré pour la Belgique, mais il arrive que ce soit belgium-dutch pour un francophone ou l'inverse.
Marsh Posté le 21-07-2004 à 21:42:56
JagStang a écrit : +1. de plus, tout les grand sites de compagnies internationales font ainsi. une simple combo qui redirige vers le site en question. |
ha bon ?
http://www.ge.com
Pourtant... Y'a pas forcément besoin de présenter la plus grosse société au monde
Ceci-dit, en effet, on trouve ce système sur les principaux sites grand public
Marsh Posté le 21-07-2004 à 21:44:15
On doit voir quoi sur ce site ? J'ai le site en anglais alors que mes préférences sont, dans l'ordre : fr-be, fr, en.
Marsh Posté le 08-07-2004 à 13:42:20
quel est selon vous la meilleur méthode pour gérer des pages webs multilangage ?
j'utilise php comme langage.
j'ai déjà pensé aux cookies et aux sessions mais j'aimerais quelquechose de plus léger...
merci pou votre aide
Message édité par tomtom41 le 08-07-2004 à 13:42:58