Redirection selon la langue du navigateur

Eléphanteau du PHP | 22 Messages

28 avr. 2006, 09:38

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

Eléphant du PHP | 451 Messages

28 avr. 2006, 10:12

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
Jpaul
J'essaye d'aider : parfois je fais des erreurs, on me les corrige et j'apprends un peu plus. Super ce forum :)

Eléphanteau du PHP | 22 Messages

28 avr. 2006, 13:32

Ah d'accord.
Merci

Eléphant du PHP | 493 Messages

28 avr. 2006, 13:55

if (isset($langue)==0)
Mets plutot :
if (!isset($langue))

Eléphant du PHP | 451 Messages

28 avr. 2006, 14:35

Vaedan a raison (j'avais pas vu).
N'oublie pas le résolu si c'est bon... ;)
Jpaul
J'essaye d'aider : parfois je fais des erreurs, on me les corrige et j'apprends un peu plus. Super ce forum :)

Eléphant du PHP | 77 Messages

13 juin 2006, 11:16

<?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:"

Eléphant du PHP | 332 Messages

13 juin 2006, 15:04

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