Redirection selon la langue du visiteur

Résolu
guifson Messages postés 10 Statut Membre -  
Aurèli1s Messages postés 209 Statut Membre -
Bonjous a tous.
J'aimerai savoir comment on peut adapter un cookie ou bien une fonction php, de telle facon qu'une page precise du site d'affiche selon la langue du visiteur.
En fait, mon site est en trois langues, Anglais, francais et Espagnol.
https://www.afribaba.com (l'index principale est en Anglais )
https://www.afribaba.com (est la partie en francais)
https://www.afribaba.com (est la partie en Espagnol)
Mon probleme concret, est de savoir s'avoir comment adapter peut-etre un cookie ou bien une fonction php:
-->qui redirige un visiteur sur https://www.afribaba.com si sa langue est le francais
-->qui redirige un visiteur sur https://www.afribaba.com si sa langue est l'espagnol
-->qui redirige un visteur sur https://www.afribaba.com si sa langue est l'anglais et/ou bien une langue qui n'est ni le francais, ni l'espagnol
Ok Merci a vous

12 réponses

  1. zefoots Messages postés 146 Statut Membre 62
     
    Salut,

    Je viens de lire la FAQ indiquée par Ssylvainsab, et il me semble que c'est exactement la réponse à ta question. Relis bien cette FAQ et surtout essaye de bien comprendre ce qui est écrit. Il faut juste que tu l'adaptes un peu à ton site. Par exemple, dans ton cas, à la place de
    header("Location: /index.php?Langue=fr");
    il faudra que tu écrives
    header("Location: /fr/index.php");
    puisque ton site fonctionne comme ça (c'est cette ligne qui permet de faire la redirection).

    La ligne
    $Langue = explode(",",$HTTP_ACCEPT_LANGUAGE);
    permet de savoir quelle langue utilise la personne qui surf sur ton site. En effet, $HTTP_ACCEPT_LANGUAGE est renvoyé par le navigateur (Internet Explorer, Firefox, etc.) que la personne utilise pour surfer et c'est dans cette variable qu'on peut extraire la langue.
    Si tu veux comprendre ce que contient la variable $HTTP_ACCEPT_LANGUAGE, il te suffit d'écrire dans ton fichier index.php
    echo $HTTP_ACCEPT_LANGUAGE;
    Ensuite, si tu veux comprendre ce que fait
    $Langue = explode(",",$HTTP_ACCEPT_LANGUAGE);
    il te suffit de faire
    echo explode(",",$HTTP_ACCEPT_LANGUAGE);
    etc.
    2
    1. guifson Messages postés 10 Statut Membre
       
      Super cool
      Cà marche
      Merci a vous
      0
  2. Ssylvainsab Messages postés 2892 Statut Modérateur 825
     
    Salut.
    La réponse à ta question est dans la FAQ : php rediriger en fonction de la langue du visiteur
    1
  3. zefoots Messages postés 146 Statut Membre 62
     
    Pas de quoi, c'est Ssylvainsab qui a fait tout le boulot ;-)
    1
  4. Ssylvainsab Messages postés 2892 Statut Modérateur 825
     
    Merci zefoots.
    Je n'ai fait que donner un lien, c'est toi qui a expliqué !

    Par contre, il vaut mieux utiliser les variables superglobales : $_SERVER['HTTP_ACCEPT_LANGUAGE'].
    J'ai changé ça dans l'astuce.
    1
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. guifson Messages postés 10 Statut Membre
     
    Mais justement le probleme est que je n'ai pas $langue dans mon site.
    En fait je peux dire que j'ai reunit trois sites entier en un seul, car https://www.afribaba.com , https://www.afribaba.com et https://www.afribaba.com sont presque fait differamment , ce qui fait que il n'y'a aucun dossier lang qui relie les 2 sous-domaines et l'index principale.
    Merci a vous
    0
  7. zeb
     
    Salut tt le monde

    je me retrouve a avoir les meme besoin, j'ai suivi le faq et voila le code que j'ai rajoute :

    if (!isset($Langue)) {
    $Langue = explode(',',$_server['HTTP_ACCEPT_LANGUAGE']);
    $Langue = strtolower(substr(chop($Langue[0]),0,2)); }
    else
    $Langue="fr";
    }
    {
    header("Location: /index.php/$Langue");
    }
    ?>

    pour mon blog :
    http://zeb.3dvf.com/blog/

    le probleme etant que la redirection ne marche pas et la page devient inatteignable.
    a savoir en rentrant http://zeb.3dvf.com/blog/ je suis redirige vers : http://zeb.3dvf.com/index.php/fr

    help :)
    0
  8. Ssylvainsab Messages postés 2892 Statut Modérateur 825
     
    Tu ne peux pas envoyer un header après avoir affiché quoi que ce soit.
    Est-ce que ton problème ne viendrait pas de là ?
    --
    Sylvain
    0
  9. zeb
     
    mmm je suis pas trop sur de ce que tu veux dire par afficher quoi que ce soit ?
    tu veux dire par la que cette partie de l'index .php doit figurer en debut de code ?
    0
  10. Ssylvainsab Messages postés 2892 Statut Modérateur 825
     
    Par "affiches quoi que ce soit", j'entends "envoyer quelquechose au client". Si tu envoies quelque chose au client, les headers seront envoyés avec, donc tu ne peux pas en envoyer d'autre.
    --
    Sylvain
    0
  11. zeb
     
    Concretement j'ai installe le script en debut du fichier index.php ( qui contient en plus les informations de base pour les blog gere par dotclear) , donc il ne me semble pas que j'envoies quelquechose au client avant le header lui meme.
    Actuellement le script evidemment n'est pas present sur le blog.

    Je crois surtout que ce qui pose probleme c que l'index.php est dans le repertoire blog. Peut etre utiliser une redirection pour faire sauter le index.php aiderait ? je sais pas, je sais plus :)....
    0
  12. didierjunk
     
    remplacer
    header("Location: /index.php/$Langue");
    par
    header("Location: /index.php?Langue=$Langue");
    0
    1. jnfritz
       
      et si vous pensiez à sortir le $Langue de la chaîne de caractères ca irait pas mieux ?

      header("Location: /index.php/".$Langue);
      0
      1. Ssylvainsab Messages postés 2892 Statut Modérateur 825 > jnfritz
         
        Pas besoin, c'est entre double quotes.
        0
  13. Aurèli1s Messages postés 209 Statut Membre 4
     
    Moi sa ne marche pas, j'ai ajouté:

    <?php
    if (!isset($langue_user) && !isset($_SESSION["ch_langue"])){
    $langue_user=substr($_SERVER["HTTP_ACCEPT_LANGUAGE"], 0, 2);
    switch($langue_user){
    case"fr":
    $_SESSION["ch_langue"] = "fr";
    header("Location: /fr/index.php");
    break;
    case "en":
    $_SESSION["ch_langue"] = "en";
    header("Location: /fr/index.php");
    break;
    }
    }
    ?>

    Mais rien ne change....
    0