Avis sur une gestion multilingue en PHP - PHP - Programmation
Marsh Posté le 02-03-2006 à 12:06:14
ReplyMarsh Posté le 02-03-2006 à 12:11:05
bha meme si tu t en fout des constantes etc perso je trouve plus pratique de faire des
Code :
|
dans tes fichiers de langues
Et alors éventuellement faire un fichier genre french.php qui reprend les mot ou phrases utilisées à plusieurs endroit sur le site et ensuite un fichier de langue par fichier. Enfin se n'est justifiable que si tu as bcp de pages!
Marsh Posté le 02-03-2006 à 12:14:00
the big ben a écrit : bha meme si tu t en fout des constantes etc perso je trouve plus pratique de faire des
dans tes fichiers de langues |
Je trouve plus pratique de n'avoir qu'un fichier par langue mais ceci est bien pour un petit site
si c'est un gros site on pourrai tomber par 1 fichier par page et par langue (ca fait bocou)
ou bien un répertoire de langue et un fichier par page dans chaque rep de langue
Pour le moment c'est ma facon de tester la langue et les session qui est mise en avant.
Marsh Posté le 02-03-2006 à 12:22:41
moi j'aurais intuitivement fait un truc du même genre (peut etre surement moins propre ), par contre je ne connaissait pas session_name("languestruc" );, je ne comprend pas bien a quoi ca sert, c'est dans le ca ou les sessions passe par l'url ?
Marsh Posté le 02-03-2006 à 12:25:07
mechkurt a écrit : moi j'aurais intuitivement fait un truc du même genre ( |
une session ca na passe pas par l'url , mais c'est un jeu avec les cookies et autres blabla.
J'ai fait un session_name dans le cas ou tu as plusieurs application sur un même serveur web, du coup ma variable de session pourrait écraser celle d'une autre application.
Voili-voilou
Marsh Posté le 02-03-2006 à 12:31:18
gatsu35 a écrit : une session ca na passe pas par l'url , mais c'est un jeu avec les cookies et autres blabla. |
je crois que si, si l'utilisateur refuse les cookies et que le serveur est configuré pour (cf. le post avec le PB de sessionID indexe par un moteur de recherche)
gatsu35 a écrit : J'ai fait un session_name dans le cas ou tu as plusieurs application sur un même serveur web, du coup ma variable de session pourrait écraser celle d'une autre application. |
ah OK OK...
Marsh Posté le 02-03-2006 à 12:32:16
mechkurt a écrit : je crois que si, si l'utilisateur refuse les cookies et que le serveur est configuré pour (cf. le post avec le PB de sessionID indexe par un moteur de recherche) |
je plussois mais faire passer une session par URL c'est crade (cf sessionid)
Marsh Posté le 02-03-2006 à 12:34:34
justement je pensais que c'etais peut etre fait pour proprifier le truc mais en reflechissant je vois pas bien comment...
j'ai été induit en erreur par ca:
Citation : Le nom de session est utilisé comme nom de cookie ou nom de variable dans les URL |
autant pour moi
Marsh Posté le 02-03-2006 à 12:37:16
tu me feras 100 je vous salut Saint PHP et Sainte Session
Marsh Posté le 02-03-2006 à 18:40:39
Bon vous avez le droit de donner vos avis.
Ben si c'est comme ça, je reviendrai que quand j'aurai amélioré le truc et fait une détection multilingue à partir du navigateur avec adaptation à la langue la plus importante du navigateur qui est disponible sur un site.
ça fera un systeme qui poutre sa maman . même si je trouve celui là déjà bien
Marsh Posté le 02-03-2006 à 19:59:43
Au debut j'utilisais des variables dans des fichiers separes, mais le site devenant de plus en plus en gros, mon hebergeur m'a contacte : j'occupais trop de memoire, a stocker toutes ses variables ... J'ai donc opte pour un autre systeme :
J'utilise getText() et c'est bien pratique. Systeme GNU fait en python, tu crees autant de fichier que tu veux de langues.
Puis il suffit de faire :
Code :
|
Marsh Posté le 02-03-2006 à 20:20:27
Pour la gestion multilangue, j'avais pas mal hésité entre un truc comme toi, ou un command pattern : tu instancie la classe correspondant à la langue, ensuite tous les noms des méthodes sont les meme. (ça se rapproche de ce que propose fabs2b)
Marsh Posté le 02-03-2006 à 21:19:51
moi je fais un include $_SESSION['lang']/mapage.php
avec chacune de mes pages traduites. Enfin j'ai un tableau de conversion
$lang = array('coucou' => 'hello')
et sur mapage.php (la vraie pas la traduction) ben je fais un echo $lang['coucou'];
C'est juste une idée supplémentaire
Marsh Posté le 02-03-2006 à 21:23:08
hummmm en fait les gars moi je parlais plutot du travail en amont, c'est à dire, la detection de la langue la plus appropriée pour le visiteur du site.
En gros :
On verifie si le visiteur n'a pas déjà choisi une langue
On verifie si une langue n'existe pas en session
sinon on recupère la langue de preference du navigateur
puis on affiche, si la langue préférée par le user n'existe pas, on impose une langue par défaut (l'anglais de préférence)
Marsh Posté le 02-03-2006 à 21:26:38
bah, c'est-à-dire que le travail en amont est assez naturel
Marsh Posté le 02-03-2006 à 21:27:10
ben tu testes simplement ta session. Si il y en a une (cad choisie par l'utilisateur tu l'utilises) sinon par défaut tu pars sur l'anglais
Marsh Posté le 02-03-2006 à 21:28:28
ben je prefere aussi user de la langue de preference de l'utilisateur c'est un plus non negligeable, et je pense que le code que j'ai présenté et celui qui est le plus approprié, après pour l'utilisation de la langue c'est au choix de chacun, sans oublier qu'apres la detection de la langue il faut forcer la langue par defaut si la langue choisie n'existe pas
Marsh Posté le 03-03-2006 à 09:17:49
Via un javascript je pense qu'on doit pouvoir détecter la langue du navigateur (enfin au moins pour IE et FireFox) et si c'est un autre navigateur pour lequel on ne connais pas la langue on attribue une langue par défaut!
Marsh Posté le 03-03-2006 à 09:22:47
the big ben a écrit : Via un javascript je pense qu'on doit pouvoir détecter la langue du navigateur (enfin au moins pour IE et FireFox) et si c'est un autre navigateur pour lequel on ne connais pas la langue on attribue une langue par défaut! |
Toi tu ne dois pas avoir de notions web aussi avancées que les notres.
Via javascript, c'est vrai tu peux détecter la langue du navigateur, mais cela t'apporterai quoi ? Si le gars a désactivé le JS tu ne recupère rien du tout, rien ne se lance coté client.
Et puis c'est lors de la visite de l'utilisateur que l'on détecte la langue, donc via l'envoi d'informations venant du navigateur.
J'ai fait en sorte que le script detecte la premiere langue du navigateur, puis l'enregistre en session, après si l'utilisateur veut changer de langue, il le peut et cela n'affecte en rien la navigation dans le site.
dis toi bien qu'un site qui a besoin du JS pour être visité n'est pas un bon site
Marsh Posté le 15-11-2006 à 12:27:51
Important : la détection du domaine...
www.SuperSiteInutile.com --> EN.US
www.SuperSiteInutile.fr --> FR.FR
www.SuperSiteInutile.de --> AL.DE
www.SuperSiteInutile.co.uk --> EN.UK
www.SuperSiteInutile.eu --> EN.EU avec menu déroulant pour sélection d'une langue européenne...
Remarque : ton système fonctionne, clairement, mais reste très limité.
Une page US peut être complètement différente d'une même page FR (choix des images, communication, contenus texte, etc.).
Vaut mieux une détection à l'arrivée sur le site ($_SERVER['SERVER_NAME'] & $_SERVER['HTTP_ACCEPT_LANGUAGE']), un template en index.php à la racine tout pareil, pi inclusions de fichiers "localisés" bien rangés dans les répertoires de type EN-US/, EN-UK/, FR-FR/, FR-BE/... etc.
Important, la maîtrise de chaque code HTML pour chaque localisation linguistique...
++
Marsh Posté le 15-11-2006 à 13:13:41
pourquoi une session pour stocker une seule variable ? ça va créer un cookie avec le SID qui est déjà en lui même plus gros que le nom de la langue autant utiliser un cookie directement
pour ma part j'utilise du GET
Marsh Posté le 15-11-2006 à 13:27:21
tiens... drapal
Pour le moment je suis partis sur une gestion des langue par fichier XML (pour le contenu), et pour le choix de la langue, j'utilise ce que me retrouen le navigateur, avec par défaut le français, et directement une liste de choix contenant les autres langues.
EDIT : Et pis pour le passage des données, étant donné que je détecte déjà la résolution de l'écran, et que je passe déjà par session, et bien j'utilise les sessions pour le passage des langues.
Marsh Posté le 15-11-2006 à 17:44:22
gatsu35 a écrit : Donc je vous demande votre avis sur ma façon de faire. |
fabs2b a écrit : J'utilise getText() et c'est bien pratique. |
Idem, cela m'étonne de ne voir qu'un seul message à ce propos...
gettext est conçu pour ça, ça serait dommage de ne pas l'utiliser :
- c'est plus performant (fichiers de langue compilés),
- il y a une fonction pour mettre au pluriel,
- le code est plus lisible...
http://fr.php.net/gettext
http://www.gnu.org/software/gettex [...] ttext.html
gatsu35 a écrit : hummmm en fait les gars moi je parlais plutot du travail en amont, c'est à dire, la detection de la langue la plus appropriée pour le visiteur du site. |
rien à redire ^^
Marsh Posté le 19-12-2007 à 20:58:47
D'ailleurs, quelqu'un saurait comment faire pour que gettext fonctionne chez free ?
ça fonctionne chez moi (localhost) mais pas chez free. Je ne sais pas quoi modifier...
Aidez-moi.
merci
répertoire:
[racine]/lang/fr/messages.mo
[racine]/lang/fr/messages.po
Code :
|
Marsh Posté le 19-12-2007 à 21:00:06
ReplyMarsh Posté le 20-12-2007 à 14:42:00
moi j'utilise des define avec des fichiers de langue, tout bêtement. Vu qu'il y'a énormément de texte dans mon appli (forum ), j'ai fragmenté l'ensemble en plusieurs fichiers, fichiers stockés dans un dossier spécifique et paramétrable.
Marsh Posté le 20-12-2007 à 15:39:53
habituellement je passe par une bdd, ou un fichier xml.
de toute façon c'est collé en cache après le premier chargement, ça a l'avantage d'être aisément manageable depuis l'interface d'admin plutôt que de devoir trifouiller du code php à chaque modification d'un libellé/ajout d'une langue
Marsh Posté le 20-12-2007 à 16:16:14
FlorentG a écrit : Si free n'a pas l'extension gettext, point de salut |
Je viens de vérfiier avec phpinfo.
C'est bien activé chez Free. (GetText Support enabled).
Qulequ'un a-t-il réussi à le faire fonctionner chez Free?
Marsh Posté le 28-12-2007 à 11:44:52
Ca a été dit plus haut. Pour mon framework, j'ai un fichier de constantes.
Point barre. L'avantage c'est que c'est global, comme les traductions ne changent pas du jour au lendemain c'est donc bien constant. C'est un choix donc logique il me semble Pas besoin de fonction ou autre
Marsh Posté le 28-12-2007 à 12:15:51
Il vaut mieux avoir un système où on peut appeller des fonctions, car pour certaines langues, une simple constante ne suffit pas pour traduire certains trucs, notamment pour ce qui est des pluriels
Marsh Posté le 28-12-2007 à 12:26:32
Dans ce cas je fais plusieurs tags Après je suis sur qu'il y a des défauts et des avantages à chaque système.
Marsh Posté le 02-01-2008 à 00:03:34
des défauts et des avantages certes mais aussi et surtout des contextes d'utilisation, getText c'est bien mais franchement pas pour un petit site où l'exemple plus haut me semble parfait (tout comme l'utilisation d'un tableau) donc après tout ça dépend des besoins de chacun
getText a le mérite d'être évolutive et bien adaptée pour de gros sites.
Marsh Posté le 13-05-2009 à 14:43:32
super comme topic!!
je savais a peu près comment partir pour faire un site multilingue mais j'avais d'exemple concret ^^
je pense que je vais utiliser la méthode des DEFINE et du fichier de langue séparé.
Marsh Posté le 13-05-2009 à 14:52:06
J'utilise un framework pour pas avoir à me faire une soluce maison à la main : http://framework.zend.com/manual/f [...] slate.html
Marsh Posté le 02-03-2006 à 12:03:07
Yop les moules
Ya un pote qui m'avait demandé comment gérer plusieurs langues en PHP. Donc je lui ai répondu qu'il fallait utiliser les sessions et l'inclusion d'un fichier de langue contenant les variables ou un tableau, enfin c'est comme on veut.
de toute manière le but du jeu était de tout simplement inclure un fichier de langue.
le bordel se présente de la manière suivante :
Donc pour tout ce tralala je suis parti d'un algo tout con :
Donc pour faire fonctionner tout cela
pour chaque page du site il faut taper les 3 lignes suivantes
Voici ce que donne le code du fichier lang.php :
Un des fichiers de langue fr.php :
la page index.php pour tester :
la page page2.php pour tester :
Pour vous donner une idée les pages se trouvent ici :
http://gatsu.ftp.free.fr/langues/index.php
choisissez une langue a la page 1
puis aller à la page 2, vous verrez la page 2 dans la langue que vous aurez choisie.
puis retourner a la page 1 et la page 1 est toujours dans la même langue.
Donc je vous demande votre avis sur ma façon de faire.
Après chacun est libre de faire ce qu'il veut, une fois la variable $langue récupérée.
Bien sur il faut tester en tout dernier si la langue convoitée existe parmis les langues du site, sinon dans le cas contraire on affiche la langue par défaut du site.
Toutes les méthodes sont bonnes, après cela dépend naturellement de la taille du site ou de votre facon de faire.
Enfin vous pouvez critiquer cracher sur moi je m'en fous je vous ecouterai et améliorerai le bestiau.
PS : n'importe quel malin pourra remplacer lang=fr par lang=tamere dans le get, il pourra aller se faire voir ca ne marchera pas
PS2 : suite à un constat simple fait sous FF et IE, je récupère que les 2 Premiers caractères de la chaine retournée par le navigateur, car il existe plusieurs types de langue.
ex : on a l'anglais (en), mais aussi l'anglais sud africain (en-za) l'anglais autralien (en-au)
idem pour lespagnol, le francais, donc pour moi l'anglais c'est de l'anglais.
On va pas s'amuser à faire un site dans n'importe quelle langue du monde.
PS3 : Même si la première langue du navigateur ne correspond à aucune des langues que nous avons, de toute manière le site sera affiché dans la langue par défaut.
Améliorations possibles :
-Regarder si pour chaque langue fournie par le navigateur de l'utilisateur, si la premiere n'est pas dans nos langue alors la deuxième langue de l'utilisateur sera choisis et ainsi de suite
par exemple, si le user à les langues dans l'ordre suivant :
cz, ru, en, fr
et que nous possédons que le FR, alors on ira checker chaque langue jusqu'à trouver celle adequat.
je reformulerai tout ça après
Message édité par gatsu35 le 02-03-2006 à 12:23:35