Redirection langue

Résolu
sofianemad Messages postés 16 Date d'inscription samedi 19 avril 2003 Statut Membre Dernière intervention 26 février 2008 - 26 févr. 2008 à 20:20
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 - 26 févr. 2008 à 23:59
bonjour,

j'ai tout essayé et je n'arrive pas a faire quelque chose qui me semble simple malgres tout les codes qui tourne sur le net concernant les redirections par rapport a la langue du navigateur.

 j'ai une page php dans laquelle je veux integrer un script qui :

dans le cas ou le visiteur est français : ne fait aucune redirection et continu a lire le reste de la page.

dans le cas ou le visiteur est non francophone anglais, allemand ou tout origine possible il soir redirigé vers unu autre adresse.

merci de votre aide je sais que ça parait basic et que beaucoup de script de ce type tourne sur le net mais souvent dans l'idée que l'on a créer une page specialement pour la redirection la ce n'est pas le cas je veux absolument qu'il continu a developper le reste de la page.

Merci a vous !

8 réponses

nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
26 févr. 2008 à 20:47
Salut,

premièrement un petit morceau de code serai le bienvenue et deuxièmement il serai bien de donner un peu plus d'infos du genre : Comment sait on si le visiteur est français ou pas ?

Si t'a besoin d'aide, MP !!!
3
sofianemad Messages postés 16 Date d'inscription samedi 19 avril 2003 Statut Membre Dernière intervention 26 février 2008
26 févr. 2008 à 21:00
le premier code fonctionne mais il ne prend en compte qu'une langue du
genre si tu es anglais je te redirige vers le site en version anglaise.
j'ai essayer de le bidouiller mais rien a faire impossible de lui
demander de faire une redirection pr toutes les langues hormis le
français.

<?php

  if (!isset($Langue)) {

    if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){

      $Langue = explode(",",$_SERVER['HTTP_ACCEPT_LANGUAGE']);

      $Langue = strtolower(substr(chop($Langue[0]),0,2));

    } else {

      $Langue = "en"; // Langue par défaut, des fois que l'en-tête n'aie pas été initialisée

    }

  } else {

    $Langue="en";

  }

  

  if ($Langue=='en') {

header( "Location: http://www.moredancehall.com/en/");

exit();

}

?>


le deuxieme fonctionne mais le probleme c'est que je redirige vers la
meme pages que le script du coup ça fait une boucle et il ne trouve
pas.

<?php

// récupère la variable langage si elle existe

if (eregi($HTTP_ACCEPT_LANGUAGE,"fr"))

// redirige vers la page

{header("location:index.php");}

// Sinon la varible n'existe pas et on redirige

else

{header("location:http://www.moredancehall.com/en/");}

?>
3
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
26 févr. 2008 à 21:14
Ho là là mais nicomilville, sérieux t'es toujours à côté de la plaque... tu n'aides pas les gens sur phpcs, c'est le contraire, alors je ne te le dis pas méchamment, mais tu devrais sérieusement songer à apprendre à programmer avant de donner des conseils, parce qu'ils ne servent à rien et tu fais perdre du temps à ceux qui te lisent. C'est pas la première fois qu'on te le dit en plus, mais après 200 messages postés ici, tu racontes toujours n'importe quoi, alors fais quelque chose. Il y a d'autres gens ici qui eux donneront les bonnes réponses.

sofianemad :
en haut de ta page tu mets (ou tu fais un include) :

$languages = array('en', 'fr')

if(!isset($_COOKIE['language']) or !in_array($_COOKIE['language'], $languages)){
        if(in_array(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2), $languages)){
            setcookie('language', strtolower(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2)));
            $_COOKIE['language'] = strtolower(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2));
        }
        else {
            setcookie('language', 'en');
            $_COOKIE['language'] = 'en';
        }
}

et dans tout le reste de ta page, tu utilises $_COOKIE['language'] à ta convenance pour traduire en anglais ou en français, ou rediriger avec. Si le mec est français, le cookie vaudra 'fr'. sinon et par défaut, ça vaudra 'en'.

Ce code n'est qu'un début, tu peux largement l'améliorer pour qu'il convienne à tes besoins.

à+
3
sofianemad Messages postés 16 Date d'inscription samedi 19 avril 2003 Statut Membre Dernière intervention 26 février 2008
26 févr. 2008 à 22:10
merci Evangun pr ta reponse qui est beaucoup plus concrete.

cela dit je ne vois pas vraiment comment utiliser ce code mon blog français se trouve à cette adresse http://www.moredancehall.com et le blog anglais a cette adresse http://www.moredancehall.com/en/.

est il possible tout simplement sans utiliser les cookies de faire une redirection de ce type qui fonctionne :

<?php

// récupère la variable langage si elle existe
if (eregi($HTTP_ACCEPT_LANGUAGE,"fr"))
// redirige vers la page
{header("location:index.php");}
// Sinon la varible n'existe pas et on redirige
else
{header("location:http://www.moredancehall.com/en/");}

?>

cela dit lorsque l'on est un visiteur français ça créé une boule et rend la page introuvable.
existe il une fonction que je peut placer dans ce code qui pourrait eviter cette boucle et le faire marcher convenablement ça serait beaucoup plus simple.
je sais que cette fonction existe mais comment l'utiliser alors la je n'en ai aucune idée ...

merci encore Evangun
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
26 févr. 2008 à 22:49
Non, je te conseille d'utiliser ce que j'ai mis. Déjà pour ne pas utiliser le eregi dont tu parles qui consomme des resources, et en plus pour ne pas recalculer la langue à chaque chargement de page.

Pourquoi n'utiliserais-tu pas ce que j'ai dit ? une difficulté ?

$languages = array('en', 'fr')

if(!isset($_COOKIE['language']) or !in_array($_COOKIE['language'], $languages)){
        if(in_array(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2), $languages)){
            setcookie('language', strtolower(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2)));
            $_COOKIE['language'] = strtolower(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2));
        }
        else {
            setcookie('language', 'en');
            $_COOKIE['language'] = 'en';
        }
}

if($_COOKIE['language'] == 'fr'){header ( site fr ) }
elseif($_COOKIE['language'] == 'en'){header ( site en ) }
0
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
26 févr. 2008 à 22:56
C'est vrai que l'utilisation des cookies n'est pas nécessairement utile dans ton cas... mais en général on ne fait qu'une seule page php qui affiche soit en anglais, soit en français, c'est pour ça que j'utilise des codes qui ressemblent à ça.
Mais bon, ça marchera dans ton cas, et autant le garder sous le coude pour le jour où tu en auras besoin.
à+
0
sofianemad Messages postés 16 Date d'inscription samedi 19 avril 2003 Statut Membre Dernière intervention 26 février 2008
26 févr. 2008 à 23:47
effectivement pour ce que tu dis une seul page php c'est le mieux pr afficher les deux mais ce code je veux l'utiliser pour un blog dotclear en faite et le meilleur moyen d'avoir une version anglaise et une française c'etait d'installer deux version avec deux base sql differente de maniere a ce que le contenu puisse differé, j'avoue c'est peut etre une methode de faineant mais ça me convient dans l'utilisation sinon le code que tu m'as fourni ne fonctionne pas en ajoutant les url.

il me met : Parse error: parse error, unexpected T_IF in /md/index.php on line 4

a++
0
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
26 févr. 2008 à 23:59
il manque un point-virgule à la première ligne :p
0
Rejoignez-nous