Page 1 sur 1

Redirection selon la langue du navigateur

Posté : 28 avr. 2006, 09:38
par Graphix
Bonjour,

je possède un site en 3 langues. Je souhaite faire une page d'accueil avec uniquement un script détectant la langue du navigateur et redirigeant ensuite vers le site dans la même langue que le navigateur.

A la racine du site j'ai créé la page index.php :
<?php
if (isset($langue)==0)
{
$langue=substr($HTTP_ACCEPT_LANGUAGE, 0, 2);
}
if ($langue="en")
{
Header ("Location : http://www.monsite.ch/pro/3000/en/");
}
if ($langue="fr")
{
Header ("Location : http://www.monsite.ch/pro/3000/fr/");
}
if ($langue="de")
{
Header ("Location : http://www.monsite.ch/pro/3000/de/");
}
exit;
?>
Mais ça ne fonctionne pas vraiment. Sur explorer je suis redirigé sur le site en anglais, alors que Explorer est en français. Pour Firefox, aucune redirection ne se fait.

Je suis un gros débutant en PHP, je précise.

Y a-t-il des erreurs dans mon code ?

merci :D

Posté : 28 avr. 2006, 10:12
par jpaul
Quand tu fais une comparaison il faut mettre == au lieu de = (qui sert à l'affectation).

Ton code devient donc :
<?php
if (isset($langue)==0)
{
$langue=substr($HTTP_ACCEPT_LANGUAGE, 0, 2);
}
if ($langue=="en")
{
Header ("Location : http://www.monsite.ch/pro/3000/en/");
}
if ($langue=="fr")
{
Header ("Location : http://www.monsite.ch/pro/3000/fr/");
}
if ($langue=="de")
{
Header ("Location : http://www.monsite.ch/pro/3000/de/");
}
exit;
?>
Bonne continuation

Posté : 28 avr. 2006, 13:32
par Graphix
Ah d'accord.
Merci

Posté : 28 avr. 2006, 13:55
par Vaedan
if (isset($langue)==0)
Mets plutot :
if (!isset($langue))

Posté : 28 avr. 2006, 14:35
par jpaul
Vaedan a raison (j'avais pas vu).
N'oublie pas le résolu si c'est bon... ;)

Posté : 13 juin 2006, 11:16
par drelb
<?php
if (isset($langue)==0)
{
$langue=substr($HTTP_ACCEPT_LANGUAGE, 0, 2);
}
if ($langue=="en")
{
Header ("Location : http://www.monsite.ch/pro/3000/en/");
}
if ($langue=="fr")
{
Header ("Location : http://www.monsite.ch/pro/3000/fr/");
}
if ($langue=="de")
{
Header ("Location : http://www.monsite.ch/pro/3000/de/");
}
exit;
?>
il ya une autre erreur , il faut éviter l'espace entre location et :
sinon cela marche pas et donc écrire "location:"

Posté : 13 juin 2006, 15:04
par Henri
Je rajouterais quelques points :
1) Pour les versions "modernes" de PHP, la valeur se trouve dans
$_SERVER['HTTP_ACCEPT_LANGUAGE'];
2) Même si cela ne se produit jamais et qu'il y a 99,99% de chances que cette variable soit toujours en minuscules, forcer les minuscules ne cause pas de perte de performances.
if (!isset($langue)) {
$langue=strtolower(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2)); 
}
3) La suite de tests if n'est pas très efficace. En effet, une fois qu'une valeur est trouvée, ce n'est pas la peine de continuer à tester.
Tu pourrais déjà mettre des if ... elseif ... else ...
Ou mieux, un switch case qui permettrait par exemple de gérer une langue par défaut (que ce passe t'il avec tes if si la langue que tu récupères est brésilien ou croate ?)
switch ($langue) {
  case 'fr':
    header ("Location: http://www.monsite.ch/pro/3000/fr/"); 
    break;
  case 'de':
    header ("Location: http://www.monsite.ch/pro/3000/de/"); 
    break;
  default:
    header ("Location: http://www.monsite.ch/pro/3000/en/"); 
    break;
}
ou encore envoyer l'internaute vers une page qui lui permette de choisir la langue si elle n'est pas reconnue automatiquement.
switch ($langue) {
  case 'fr':
  case 'de':
  case 'en':
    header ("Location: http://www.monsite.ch/pro/3000/".$langue."/"); 
    break;
  default:
    header ("Location: http://www.monsite.ch/pro/3000/choixlangue.php"); 
    break;
}