Aller au contenu

Sujets conseillés

Posté

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

Posté

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

Sinon, je pense que tu devrais utiliser $_SERVER['HTTP_ACCEPT_LANGUAGE'], il y a plus de chances que ça fonctionne.

Posté

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...

Posté

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

Posté

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.

Posté

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...

Posté (modifié)

"Webmaster-hub, et tout devient clair"

Merci à vous 2 ;)

Modifié par Bak
Posté

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.

Posté

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 ;)

Posté

Mais sinon, je suis comme toi; j'ouvre et ferme les accolades au même niveau d'indentation, plutôt qu'en fin de ligne: c'est plus facile à repérer par la suite.

Veuillez vous connecter pour commenter

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



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