Site bilingue

Site bilingue - PHP - Programmation

Marsh Posté le 30-01-2007 à 09:44:46    

Bonjour,
il y a quelques mois j'ai terminé un site en lague française. Mon client me recontacte afin de refondre le même site mais en anglais.
Le site sera donc bilingue.
 
Après de nombreuses recherches, je ne trouve pas la meilleure technique à suivre.
Dois-je creer une redirection automatique en utilisant la var php: $_SERVER["HTTP_ACCEPT_LANGUAGE"]
ou alors du javascript avec le risque que cela ne fonctionne pas si le javascritp est désactivé.
De plus, je ne suis pas fort chaud pour une page d'accueil nue avec comme seule option le choix de la langue.
Voici donc ce que je pensais:
dans la page index, au début se trouverait un script php detectant la langue du navigateur. En fonction de la valeur retournée, la page s'affichera en fonction de la langue.
Mais là où je me pose des questions, c'est quant à mes meta tags.
Puisque les mots clés differeront en fonction de la langue.
 
Toutes les pages seront bien entendu stockées dans une BD Mysql.
 
Voilà, j'aimerais vos avis ou suggestions quant à la technique des sites multilingues.
Je n'utilise pas SPIP, ni Xoops, ni autre. Mes codes sont fait avec BBEdit.
 
Merci bien.


---------------
Un forum étant un lieu d'échange, j'accepte les MP uniquement pour les rendez-vous coquins - Imac PPC G3 350Mhz Mac OS X 10.3.9
Reply

Marsh Posté le 30-01-2007 à 09:44:46   

Reply

Marsh Posté le 30-01-2007 à 09:47:40    

Tu as une traduction des deux sites ?
 
Tu stockes toutes les traductions en Base (contenu, meta, title, etc)
Ensuite sur ton index tu detectes la langue de l'internaute, tu poses un cookie $lang et tu selectionnes le texte et tu selectionnes dans la BDD le texte que tu dois afficher en fonction de la langue $lang

Reply

Marsh Posté le 30-01-2007 à 09:53:31    

nycius a écrit :

Tu as une traduction des deux sites ?
 
Tu stockes toutes les traductions en Base (contenu, meta, title, etc)
Ensuite sur ton index tu detectes la langue de l'internaute, tu poses un cookie $lang et tu selectionnes le texte et tu selectionnes dans la BDD le texte que tu dois afficher en fonction de la langue $lang


OK merci bien.
J'ai effectivement les traductions.
Parce que certains utilisent des sessions etc... et je me sentais un peu perdu surtout apres avoir lu ceci
 
Je vais donc me lancer dans ta technique à la quelle j'avais pensé.
L'url se presentera donc:
www.lesite.com/fr/index.php?page=page1
 
Si d'autres avis, je suis prenant.
 
Merci


---------------
Un forum étant un lieu d'échange, j'accepte les MP uniquement pour les rendez-vous coquins - Imac PPC G3 350Mhz Mac OS X 10.3.9
Reply

Marsh Posté le 30-01-2007 à 09:55:40    

Tu n'es pas obligé d'avoir www.lesite.com/fr/index.php?page=page1  
 
Tu peux tres bien avoir www.lesite.com/index.php?page=page1  
POur ca justement tu stockes le "fr" en cookie ou session dès l'arrivée de l'internaute
ensuite tu regardes en fonction de ce cookie et pas du FR dans l'url
 
tu vois ?

Reply

Marsh Posté le 30-01-2007 à 09:58:38    

YES! :bounce:  
je viens de comprendre.
Ca va m'aider à comprendre le lien que j'ai placé dans le post précedent.
Effectivement, j'avais oublié ces fameux cookies.
 
Merci bien à toi  :hello:


---------------
Un forum étant un lieu d'échange, j'accepte les MP uniquement pour les rendez-vous coquins - Imac PPC G3 350Mhz Mac OS X 10.3.9
Reply

Marsh Posté le 30-01-2007 à 10:03:28    

Reply

Marsh Posté le 30-01-2007 à 15:38:25    

Hic  :pt1cable:  
Après avoir reverifier la hierarchie du site (que je n'avais plus touché depuis longtemps), je me suis rendu compte que le site était hierarchisé de la manière suivante:
 
-index.php
              -dossier pages
              -dossier images
              -dossier admin
              -etc
 
La page index est en français dans le sens où celle ci comportant des paragraphes avec titre e <hn> écrit dans le fichier et non géré via BD.
Si je dois me taper à tout remettre dans une BD avec titres compris, cela va me faire perdre du temps dans le va et vient inutile serveur/client.
 
Alors, puis-je mettre par défaut ma page index en fr et sauter directement dans le dossier en si le navigateur n'est pas en français. Car je n'ai d'autres choix que de créer un dossier en et un dossier fr. A l'époque, je n'avais pas tenu compte (on ne me 'avait pas dit) que le site serait bilingue.
 
Une idée?
 
Merci
 
 


---------------
Un forum étant un lieu d'échange, j'accepte les MP uniquement pour les rendez-vous coquins - Imac PPC G3 350Mhz Mac OS X 10.3.9
Reply

Marsh Posté le 30-01-2007 à 15:58:02    

oualad > Rajoute un "dossier langue" avec un sous dossier ou un fichier par langue (en fonction des besoins du site)
Ca t'éviteras de faire bosser la base de donnée pour ça.

Reply

Marsh Posté le 31-01-2007 à 11:37:32    

+1 fais ca en fichier texte
tu crées un lang_fr.txt, lang_uk.txt, etc
 
ensuite dedans tu fais  
$LANG25 = 'qsdqsfqfqs';
 
et tu appeles celui ci  dans la page que tu veux
 
 
mais quoiqu'il arrive tu devras forcémen,t repasser sur tes pages etc pour faire la chasse aux textes en dur
 
ps : si tu veux par la suite controler si il te reste des textes en durs, tu supprimes le fichier lang_fr.txt de ton dossier et tu surfes sur ton site, si tu vois des phrases etc c'est que ca cloche :)

Reply

Marsh Posté le 31-01-2007 à 15:10:12    

plutôt utiliser l'extension php pour les fichiers langues, non?

Reply

Marsh Posté le 31-01-2007 à 15:10:12   

Reply

Marsh Posté le 31-01-2007 à 15:20:19    

rufo > C'est quoi son petit nom? C'est une extension en C (donc risque de ne pas être installé chez tout le monde) ou en simple php?

Reply

Marsh Posté le 31-01-2007 à 15:27:01    

omega2 a écrit :

rufo > C'est quoi son petit nom? C'est une extension en C (donc risque de ne pas être installé chez tout le monde) ou en simple php?

je pense qu'il voulait dire .php au lieux de .txt
 
sinon pour la gestion l18n, gettext est fait pour ça, on l'oublie souvent

Reply

Marsh Posté le 31-01-2007 à 16:29:12    

soju a écrit :

je pense qu'il voulait dire .php au lieux de .txt
 
sinon pour la gestion l18n, gettext est fait pour ça, on l'oublie souvent


 
oui, je parlais de .php. Mais il est aussi vrai que gettext est une bonne extension (au sens module ou lib) de PHP pour le multi-langue (bien que je ne l'ai jamais utilisé)...

Reply

Marsh Posté le 31-01-2007 à 17:41:08    

Je n'ai pas confiance en un systéme qui stocke des traductions directement dans un fichier .php qui sera exécuté. C'est une porte ouverte à de l'injection de code si jamais une des traductions vient de l'extérieur sans avoir été vérifié à la loupe.

Reply

Marsh Posté le 31-01-2007 à 17:54:28    

omega2 a écrit :

Je n'ai pas confiance en un systéme qui stocke des traductions directement dans un fichier .php qui sera exécuté. C'est une porte ouverte à de l'injection de code si jamais une des traductions vient de l'extérieur sans avoir été vérifié à la loupe.


 :heink:  
Tu penses à quoi?
 
Perso, moi, mes fichiers de langues, ça ressemble à ça :

Code :
  1. <?php
  2. ...
  3. $LANG_NOMPAGEWEB_ID_TRADUCTION = "...";
  4. ..
  5. ?>

Message cité 1 fois
Message édité par rufo le 31-01-2007 à 17:54:45
Reply

Marsh Posté le 31-01-2007 à 18:18:57    

rufo a écrit :

:heink:  
Tu penses à quoi?
 
Perso, moi, mes fichiers de langues, ça ressemble à ça :

Code :
  1. <?php
  2. ...
  3. $LANG_NOMPAGEWEB_ID_TRADUCTION = "...";
  4. ..
  5. ?>


Et donc si quelqu'un t'envoie par exemple une traduction chinoise ... qui contient un bout de code contenant des requettes SQL et des conections à un serveur distant afin de récupérer les mots de passes et autres informations confidentielles? Il se passerait quoi? Moi j'appelle ça une faille de sécurité potentielle.  
 
Avec un simple fichier texte, il n'y aurait aucun risque vu que de toute maniére ca passerait comme étant des lignes mal formaté et non pas comme du code php valide et qui doit être exécuté.
 
EDIT : D'ailleur avec ton systéme même sans faire de requettes sql ou de conection à un serveur distant, il pourrait changer la valeur de certaines variables et tu pourrais trés bien te retrouver à te conecter à une base à lui et non pas à la tienne en fonction du moment où ce fichier est chargé et exécuté. En fait, avec ce genre de solution, on permet au traducteur de faire tout ce qu'il veut dans les limites du langage (donc généralement avec peu de limites) si on ne relit pas l'intégralité du fichier à chaque nouvelle version de la traduction.


Message édité par omega2 le 31-01-2007 à 18:23:09
Reply

Marsh Posté le 31-01-2007 à 18:39:54    

avec mon système, j'ai aucune traduction qui vient d'une BD, hein! Juste des $NomVariable = "Valeur";
Alors pour hacker ça, je demande à voir...
 
ps : si j'avais vraiment voulu être rigoureux, j'aurais dû avoir des define('NomConstante', "Valeur" );

Reply

Marsh Posté le 31-01-2007 à 19:15:01    

rufo > je parle pas du contenu normal d'un fichier de traduction mais de tout ce qui peut être rajouté dans un fichier php en plus de la traduction.
Avec un systéme de traduction comme le tiens, un traducteur externe peut faire ce qu'il veut de ton site.
 
Par exemple si je t'envois un fichier qui contient  

Code :
  1. <?php
  2. $LANG_NOMPAGEWEB_ID_TRADUCTION = "...";
  3. echo "j'ai une grosse faille dans le systéme";
  4. ?>

Tu véras bien qu'il s'affichera une certaine phrase dans ton navigateur en plus du contenu normal du site. ;)
 
C'est bien ça le risque le fait de permettre l'exécution sans controle de code php qui n'a rien à voir avec la traduction. Evidement, si tu relis tous les fichiers de traductions que tu reçois, tu ne devrait pas être emmerdé, mais un utilisateur lambda qui utilise le même systéme sur son site se fera avoir à coup sur s'il récupére un fichier de langue sur un autre site.

Reply

Marsh Posté le 31-01-2007 à 23:18:02    

de toutes façons avec votre système, l'extension du fichier ne changera rien vu que le fichier est interprété, donc .php ou .txt c'est pareil
=> require('lang.txt') = require('lang.php')  
 
donc gettext ou parse_ini_file  :)  

Reply

Marsh Posté le 01-02-2007 à 11:09:10    

soju a écrit :

de toutes façons avec votre système, l'extension du fichier ne changera rien vu que le fichier est interprété, donc .php ou .txt c'est pareil
=> require('lang.txt') = require('lang.php')  
 
donc gettext ou parse_ini_file  :)


 
par défaut, un fichier txt n'est pas interprété par php...
 
Pour revenir sur "la faille" :
1) les traductions de mon appli, c'est moi qui les fais
2) Si pour une langue, je fais appel à une autre personne, la moindre des choses c'est de vérifier que le fichier php est correct. C'est pas dans mes habitudes d'inclure dans une appli du code source que je n'aurais pas relu ni même testé. Faudrait être malade pour faire ça... :o  

Reply

Marsh Posté le 01-02-2007 à 11:15:27    

rufo a écrit :

par défaut, un fichier txt n'est pas interprété par php...

avec un require ou include si, fais le test tu verras

Reply

Marsh Posté le 01-02-2007 à 11:17:58    

rufo > Tous les fichiers inclus grace à "include", "require", "include_once" et "require_once" sont interprété quelque soit leur extension.
Sinon, d'aprés ton critaire 90% de la polutation est malade vu que 90% de la population est du genre à rajouter des fichiers de langues à un logiciel sans en lire le contenu. Même si je suis comme toi, je ne peux ni oublier ces 90% de la population ni oublier le fait qu'une erreur est vite arrivé et qu'il est des situations qui sont source de grande inatention (grosse fatigue, lendemain de soirée trop arrosé, accouchement de sa femme ...)

Reply

Marsh Posté le 01-02-2007 à 11:56:17    

omega2 a écrit :

rufo > Tous les fichiers inclus grace à "include", "require", "include_once" et "require_once" sont interprété quelque soit leur extension.
Sinon, d'aprés ton critaire 90% de la polutation est malade vu que 90% de la population est du genre à rajouter des fichiers de langues à un logiciel sans en lire le contenu. Même si je suis comme toi, je ne peux ni oublier ces 90% de la population ni oublier le fait qu'une erreur est vite arrivé et qu'il est des situations qui sont source de grande inatention (grosse fatigue, lendemain de soirée trop arrosé, accouchement de sa femme ...)


 
Pour le include, je ne savais pas. Merci de l'info :jap:
 
Tu codes après l'accouchement de ta femme, toi?  :whistle:  

Reply

Marsh Posté le 01-02-2007 à 12:45:49    

rufo a écrit :

Tu codes après l'accouchement de ta femme, toi?  :whistle:

C'est pas encore arrivé, mais je ne pense pas que j'arriverais à dormir dans les heures qui suivront. ;) Mais le truc, c'est que tu peux trés bien être entrin de coder quand ta femme (ou une voisine) t'appelle pour te dire qu'elle va accouché et là ... [:anathema]

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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