Aller au contenu

Redirection en fonction de la langue du browser


Bak

Sujets conseillés

Bjr,

Petit souci avec un code qui devrait permettre une redirection vers la page adéquate en fonction de la langue du navigateur :

<?php
if (!isset($Langue)) {
if(isset($HTTP_ACCEPT_LANGUAGE)){
$Langue = explode(",",$HTTP_ACCEPT_LANGUAGE);
$Langue = strtolower(substr(chop($Langue[0]),0,2)); }
else
$Langue="fr";
}
include ( "index-$Langue.php" );
?>

Rien à faire, je suis invariablement redirigé vers la page par défaut en cas de non reconnaissance de la langue (ici "fr"). J'ai testé çà avec des navigateurs anglophones situés aux USA, ils sont également redirigés vers la page française...là, je sèche grave

A ce sujet, est-ce qu'il y a une différence entre "en" et "us" ?

Merci d'avance

Lien vers le commentaire
Partager sur d’autres sites

Salut Cap'tain

As-tu tenté d'afficher ton $Langue avec un echo, avant de l'attribuer par défaut ?

Excuse moi, je ne comprends pas bien l'intérêt ? Merci de ta réponse en tous les cas...

Lien vers le commentaire
Partager sur d’autres sites

Effectivement, çà fonctionne mieux avec :

<?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";
}
include ( "index-$Langue.php" );
?>

Merci

Lien vers le commentaire
Partager sur d’autres sites

Petit cours de debug:

Juste avant la fin de ta boucle if(isset($HTTP_ACCEPT_LANGUAGE)){, tu fais :

echo 'test - '.$Langue;

Ensuite, plusieurs résultats sont possibles :

- Rien ne s'affiche : le script ne rentre pas dans la boucle, le $HTTP_ACCEPT_LANGUAGE n'est pas défini => Essaye avec $_SERVER['HTTP_ACCEPT_LANGUAGE']

- Seul 'test -' s'affiche : le script rentre dans la boucle, mais le traitement que tu fais n'est pas correct; corrige le.

- test -en apparaît (par exemple) : tout va bien, le script fonctionne.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Loin de moi l'idée de vous interrompre ;) Mais la syntaxe du premier "else" n'est pas correcte ... il manque une accolade ouvrante ({) après "else". Indente correctement ton code, ce genre d'erreur apparaît tout de suite après.

J'aurais écrit cela ainsi :

  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 = "fr"; // Langue par défaut, des fois que l'en-tête n'aie pas été initialisée
}
} else {
$Langue="fr";
}

include ( "index-$Langue.php" );

A noter que j'ai rajouté un "else" car il faut toujours une solution de repli (fallback) pour une gestion de langue efficace...sinon il peut arriver qu'un utilisateur ne satisfasse aucune des conditions et il aura certainement une erreur.

Finalement, à ce stade tu prends les 2 premières lettres de n'importe quelle langue...cela fonctionne, mais si par hasard tu n'a pas de fichier "index-it.php" (pour les italiens) le include retournera une erreur...alors il vaudrait mieux limiter aux langages que tu souhaites et si la langue souhaitée par l'utilisateur (par son navigateur) n'existe pas, tu lui présente la langue dans une langue par défaut...

Lien vers le commentaire
Partager sur d’autres sites

Si je ne m'abuse (et je crois être dans le vrai, tellement je l'utilise), une condition sur une ligne, peut être exemptée d'accolades ouvrante et fermante.

Par contre, je suis bien d'accord sur le fallback indispensable.

Lien vers le commentaire
Partager sur d’autres sites

Oui c'est juste, j'ai mal lu... sur la ligne précédente il ferme le deuxième "if" et non le premier... my bad ;)

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...