Redirection selon la langue du visiteur

Résolu
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. 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. Super cool
      Cà marche
      Merci a vous
      0
  2. Modérateur
    Salut.
    La réponse à ta question est dans la FAQ : php rediriger en fonction de la langue du visiteur
    1
    1. Pas de quoi, c'est Ssylvainsab qui a fait tout le boulot ;-)
      1
      1. Modérateur
        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
        1. 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
          1. Modérateur
            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
            1. 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
              1. Modérateur
                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
                1. 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
                  1. remplacer
                    header("Location: /index.php/$Langue");
                    par
                    header("Location: /index.php?Langue=$Langue");
                    0
                    1. et si vous pensiez à sortir le $Langue de la chaîne de caractères ca irait pas mieux ?

                      header("Location: /index.php/".$Langue);
                      0
                    2. Modérateur
                      @jnfritzPas besoin, c'est entre double quotes.
                      0
                  2. 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