PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 05-05-2010 08:59:51

10000hz
Membre
Inscription : 30-07-2009
Messages : 64

tel include si c'est en français !

hello à tous,

j'ai un menu en anglais qui est inséré en include dans toutes mes pages - je rêve de pouvoir changer d' "include" s'il le navigateur détecte que l'internaute est situé en france - il aurait ainsi une nav en français ... c'est possible? plutôt que les redirections je préfère "jongler" avec include que je trouve génial ... aussi,  si j'ai 2 include dans la même page est-il possible de changer les 2 à la fois (ex. le menu + un texte)

merci wink

Hz.

Hors ligne

#2 05-05-2010 09:18:10

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : tel include si c'est en français !

Bonjour,

Oui c'est parfaitement possible.
Par contre, sur le plan technique, en ce qui me concerne, j'opterais plutôt pour garder les includes existants et developper une ressource de gestion language basé sur une fonction qui retourne un message texte en fonction d'un parametre langue et N° de message. Le support peut être un fichier .txt situé sur le serveur. L'avantage de ce système est de ne pas toucher au code php à chaque fois que l'on rajoute une langue dans l'applicatif. Suffit de mettre à jour le(s) fichier(s) ressource de globalisation.


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#3 05-05-2010 09:48:23

10000hz
Membre
Inscription : 30-07-2009
Messages : 64

Re : tel include si c'est en français !

comment tu fais pour la première solut ?

merci wink

Hors ligne

#4 05-05-2010 09:58:58

Alnoss
Modérateur absent
Lieu : 06 - PACA
Inscription : 11-05-2009
Messages : 541
Site Web

Re : tel include si c'est en français !

Salut,

Comme je disais JC, c'est parfaitement possible... et comme lui, j'opterais pour une autre technique : le define()

Dans un premier temps, ta page qui définit le langage (nommée decide-lang.php) :


<?php
$lang=substr($HTTP_SERVER_VARS['HTTP_ACCEPT_LANGUAGE'],0,2);} //on tente de reconnaitre la langue du navigateur
if($_GET['lang']=='fr'){ //si langue = fr -> on inclut fr-lang.php
  include('langue/fr-lang.php');}
elseif ($_GET['lang']=='en'){ //si langue = en -> on inclut en-lang.php
  include('langue/en-lang.php');}
else {include('langue/fr-lang.php');} // par défaut, on inclu la page fr
?>

et ensuite, tes fichiers "langue" :
selon mon code, fr-lang.php

<?php
define('LANGUE',"fr");
define('TEXTE_ACCUEIL',"Bonjour");
?>

et en-lang.php :

<?php
define('LANGUE',"en");
define('TEXTE_ACCUEIL',"Welcome");
?>

Enfin, dans ta page d'affichage :


<!-- on oublie pas le petit require pour l'appel à la langue -->
<?php require("langue/decide-lang.php");?>
<!-- puis on écrit simplement son texte : -->
Accueil : <?php echo TEXTE_ACCUEIL;?>
 

Ainsi, tu obtiendras soit " Accueil : Bonjour ", soit " Accueil : Welcome " selon la langue choisie

Grace à cette méthode, tu ne changes pas d'include, mais simplement les textes wink


MERCI de lire le mode d'emploi avant de poster !!

Hors ligne

#5 05-05-2010 10:03:49

10000hz
Membre
Inscription : 30-07-2009
Messages : 64

Re : tel include si c'est en français !

classe !
merci messieurs wink

Hors ligne

#6 05-05-2010 13:53:04

10000hz
Membre
Inscription : 30-07-2009
Messages : 64

Re : tel include si c'est en français !

2 pti trucs ... je suis pas sûr qu'il y ait une }  ici -->  $lang=substr($HTTP_SERVER_VARS['HTTP_ACCEPT_LANGUAGE'],0,2);}

et puis il a pas l'air de détecter le fr ... il se base sur le'hébergeur ou le navigateur ?

Hors ligne

#7 05-05-2010 16:37:22

Alnoss
Modérateur absent
Lieu : 06 - PACA
Inscription : 11-05-2009
Messages : 541
Site Web

Re : tel include si c'est en français !

effectivement... cela fait partie d'un plus long code ... et oubli de la virer lors de la recopie (oui, gros fénéant inside ^^)

Il se base TOUJOURS sur le navigateur du visiteur

Après, il est vrai que ce code date un peu et que les $HTTP_SERVER_VARS['blabla'] sont, je crois, périmés...

Dans ce cas, utilise $_SERVEUR['HTTP_ACCEPT_LANGUAGE']


MERCI de lire le mode d'emploi avant de poster !!

Hors ligne

#8 06-05-2010 08:05:24

10000hz
Membre
Inscription : 30-07-2009
Messages : 64

Re : tel include si c'est en français !

yep merci, ça marche smile sous IE mais pas chrome sad ... j'ai aussi trouvé un code où le type utilise explose à la place de subtr tu peux m'expliquer la différence?
$lang = explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']);
merci!
hz

Hors ligne

#9 06-05-2010 09:05:28

Alnoss
Modérateur absent
Lieu : 06 - PACA
Inscription : 11-05-2009
Messages : 541
Site Web

Re : tel include si c'est en français !

en fait :
- explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']) va rechercher le contenu en fonction du paramètre défini (ici, la " , ") : utile si longueur a récupérer a une longueur aléatoire

- substr("test",0,2) par contre récupère "n" caractères (ici 2) à partir du caractère "x" (ici 0) : ici, ça renverra " te "
Ainsi, il est plus approprié lorsque tu sais à l'avance la longueur et la position de ce que tu veux récupérer.


MERCI de lire le mode d'emploi avant de poster !!

Hors ligne

#10 06-05-2010 09:12:47

10000hz
Membre
Inscription : 30-07-2009
Messages : 64

Re : tel include si c'est en français !

super merci pour ton retour wink
bonne journée !

Hors ligne

#11 06-05-2010 17:59:35

10000hz
Membre
Inscription : 30-07-2009
Messages : 64

Re : tel include si c'est en français !

encore moi, mais décidément !
le script marche très bien vec IE (pour une fois !!) et FIREFOX pourquoi pas chrome et safari ???????:rolleyes: c'est frustrant...
une idée ?

merci wink

Hors ligne

#12 07-05-2010 08:04:54

Alnoss
Modérateur absent
Lieu : 06 - PACA
Inscription : 11-05-2009
Messages : 541
Site Web

Re : tel include si c'est en français !

Chaque explorateur web "traduit" les codes à sa propre manière... il peut y avoir des divergences notables !!
Firefox donne une fois de plus l'exemple, avec un respect des standards et de leurs interprétations...
Chrome n'est pas encore tout à fait au point (la preuve)... et Safari apparemment aussi.

Lorsque l'on veut avoir un explorateur web leger, il faut savoir faire des concessions...
c'est pas pour rien que certains sont un peu plus lourds afin d'intégrer des fonctionnalités "nécessaires".
(note perso : sans concevoir la lourdeur IE qui est purement aberrante)


MERCI de lire le mode d'emploi avant de poster !!

Hors ligne

#13 10-05-2010 08:36:10

10000hz
Membre
Inscription : 30-07-2009
Messages : 64

Re : tel include si c'est en français !

LA SOLUTION !!!!

en fait chaque navigateur reconnait fr de differentes façons.. IE => fr ; firefox => fr-fr et chrome fr-FR !!!!

voilà mon code et ça marche wink j'espère que ça aidera certain d'entre vous ...


<?php
$lang = explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']);
if ($lang[0] == 'fr')
     {include('/menu_fr.php');}
elseif ($lang[0] == 'fr-fr')
  {include('/menu_fr.php');}
elseif ($lang[0] == 'fr-FR')
  {include('/menu_fr.php');}
else {include('/menu_eng.php');}
?>

Hors ligne

#14 10-05-2010 08:40:43

10000hz
Membre
Inscription : 30-07-2009
Messages : 64

Re : tel include si c'est en français !

pardon ... safari => fr-fr (pas firfox..)

Hors ligne

#15 10-05-2010 09:30:37

Alnoss
Modérateur absent
Lieu : 06 - PACA
Inscription : 11-05-2009
Messages : 541
Site Web

Re : tel include si c'est en français !

ok, mais si tu dois gérer 10 langues, tu comptes faire autant de conditionnelle ??

vu que la partie commune se situe sur les 2 premiers caractères...

Autant faire :

<?php
$lang = explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']);
$lang = substr($lang[0],0,2); // on recup juste les 2 premiers caracteres
if ($lang == 'fr') {include('/menu_fr.php');} // 1 SEULE conditionnelle suffit pour le fr (français)
/* pour l'exemple */
if ($lang == 'it') {include('/menu_it.php');} // 1 SEULE conditionnelle suffit pour le it (italien)
if ($lang == 'es') {include('/menu_es.php');} // 1 SEULE conditionnelle suffit pour le es (espagnol)
/* fin de l'exemple */
else {include('/menu_eng.php');}?>

Simplicité - Efficacité - Concision


MERCI de lire le mode d'emploi avant de poster !!

Hors ligne

#16 10-05-2010 19:53:31

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : tel include si c'est en français !

Bonjour,

Comme je l'ai dit au début, j'aime pas cette methode non plus car comme tu l'as si bien dit alnoss elle t'oblige aussi a faire 1 ligne de code par langue gérée.. Et puis pour un site qui doit en gérer 20 (enfin c'est rare aussi^^) ca fait une sacré entête sur toutes tes pages..

Enfin je dis ça, je dis rien hein.


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#17 11-05-2010 07:35:12

Alnoss
Modérateur absent
Lieu : 06 - PACA
Inscription : 11-05-2009
Messages : 541
Site Web

Re : tel include si c'est en français !

Jc a écrit :

ca fait une sacré entête sur toutes tes pages..

Pas du tout, un simple

<?php require("langue/decide-lang.php");?>

suffit wink
-------
P.S : Et pour moi qui utilise une pseudo-frame, il me suffit de le mettre 1 seule fois, dans ma page de trame (structure assembleuse d'include)


MERCI de lire le mode d'emploi avant de poster !!

Hors ligne

#18 11-05-2010 15:17:07

10000hz
Membre
Inscription : 30-07-2009
Messages : 64

Re : tel include si c'est en français !

super j'avais pas pigé ... $lang = substr($lang[0],0,2);

bon ben voilà un pb 100% résolu !

encore merci wink

Hors ligne

Pied de page des forums