8791 sujets

Développement web côté serveur, CMS

Pages :
Bonjour,
J'ai un asser gros problème sur mon site, ce dernier est disponible en 2 langues. Sur la page index j'ai mis un code qui est supposé détecter la langue du navigateur du visiteur et donc affiche le site en conséquence. Si la langue n'est pas indiqué, normalement ça devrait être la version en anglais qui s'affiche.

Apparemment le site s'affiche toujours en français. C'est vraiment un gros problème pour nous étant donné l'orientation international que souhaite prendre l'entreprise. J'ignore d'où provient le bug, donc si quelqu'un peu m'aider...
Le site

Voici mon code:

<?php
//Récupération de la langue ou définition par défaut
if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){ //si définie par header http
  $lang = explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']); // on créé un tableau en séparant les données renvoyées se trouvant séparés par une virgule
  $lang = strtoupper(substr(chop($lang[0]),0,2)); // on ne sélectionne que la première langue renvoyée qu'on passe en lettre majuscule
}
else{ // si non définie par header http -> FR par défaut
  $lang='fr';
}

if($lang != 'fr' || $lang != 'en'){ //langue par défaut si langue est définie mais non supportée
    $lang='fr';
}

    // Ici on redirige
    if($lang == "fr"){
        header('location:http://www.spypoint.com/FR');
    }
    elseif($lang == "en"){
        header('location:http://www.spypoint.com/EN');
    }
    else{ // normalement la langue doit être FR  ou EN, donc cette dernière condition est en pratique inutile
        header('location:http://www.spypoint.com/EN');
    }
?>

<!-- Et des liens dans la page HTML si jamais php n'est pas appliqué; ce qui serait plutôt surprenant -->

<!DOCTYPE HTML>
<html><!-- InstanceBegin template="/Templates/SpyPointTemp_index.dwt" codeOutsideHTMLIsLocked="false" -->
<head>
<meta charset="utf-8">

<link rel="icon" type="image/ico" href="ggtelecom.ico" />
<!--[if IE]><link rel="shortcut icon" href="../ggtelecom.ico" /><![endif]-->

<meta name="google-site-verification" content="CTKZ1FTqh2Do0blnYO3TAl5Yi9pWfzUoaMFON9kBD6A" />
<!-- InstanceBeginEditable name="pageTitle" --><title>Spypoint Trail Camera :: Caméra De Surveillance Spypoint</title><!-- InstanceEndEditable -->
<!-- InstanceBeginEditable name="description" --><meta name="Description" content="G.G. Telecom Specialist in SPYPOINT game cameras, SPYPOINT wireless motion detectors and spypoint trail monitors / Le spécialiste des caméras de surveillances SPYPOINT, des détecteurs de mouvements sans fil SPYPOINT et des moniteurs de sentiers" /><!-- InstanceEndEditable -->
<link href="CSS/index.css" rel="stylesheet" type="text/css" />
<!-- InstanceBeginEditable name="pageCSS" --><!-- InstanceEndEditable -->

</head>

<body>
<div id="top">
	<h1 class="logo"><img src="interface/spypoint.png" width="397" height="78" alt="SPYPOINT" /></h1>
    <img src="interface/index/get_index.png" alt="Get the point..." width="245" height="22" id="get" />
</div>
	<a name="top" id="top"></a>
	<div id="textarea">
	<!-- InstanceBeginEditable name="Main" -->
    <p class="enter"><span lang="en" xml:lang="en"><a href="http://www.spypoint.com/EN">Enter</a></span> / <a href="http://www.spypoint.com/FR">Entrer</a></p>
    <!--<img src="interface/surveillance.png" alt="Surveillance Cameras and monitoring system" name="get" width="190" height="130" id="description" />-->
    <p class="description"><span lang="en" xml:lang="en">Surveillance Cameras and monitoring system</span></p>
    <p class="description">Système de surveillance sans-fils</p>
    <img src="interface/index/GG_index.png" alt="GG Telecom, products of Advanced Technologie / Produits de technologie avancé" name="gg" width="340" height="174" id="gg" />
  	  <!-- InstanceEndEditable -->	
    <div class="spacer"></div>
  </div>

  <div id="right-reserved">
  <p>Tous droits réservés  2011 &copy; G.G. TELECOM</p>
  </div>
<!-- InstanceBeginEditable name="pageScript" --><script type="text/javascript"></script><!-- InstanceEndEditable -->

  <!--Google Analytics-->
<script type="text/javascript">
	var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
	document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
	try {
		var pageTracker = _gat._getTracker("UA-11325817-1");
		pageTracker._setDomainName("none");
		pageTracker._setAllowLinker(true);
		pageTracker._trackPageview();
	} 
	catch(err) {}
</script>
</body>
<!-- InstanceEnd --></html>

Modifié par juliesunset (13 Sep 2011 - 17:27)
Bon j'ai fait quelques modif et là c'est l'anglais qui s'affiche systématiquement...


<?php
//Récupération de la langue ou définition par défaut
if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){ //si définie par header http
  $lang = explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']); // on créé un tableau en séparant les données renvoyées se trouvant séparés par une virgule
  $lang = strtoupper(substr(chop($lang[0]),0,2)); // on ne sélectionne que la première langue renvoyée qu'on passe en lettre majuscule
}
else{ // si non définie par header http -> EN par défaut
  $lang='en';
}

if($lang != 'fr' || $lang != 'en'){ //langue par défaut si langue est définie mais non supportée
    $lang='en';
}

    // Ici on redirige
    if($lang == "fr"){
        header('location:http://www.spypoint.com/FR');
    }
    elseif($lang == "en"){
        header('location:http://www.spypoint.com/EN');
    }
    else{ // normalement la langue doit être FR  ou EN, donc cette dernière condition est en pratique inutile
        header('location:http://www.spypoint.com/EN');
    }
?>
Modérateur
Bonjour,

Le problème vient de cette condition :


if($lang != 'fr' || $lang != 'en'){ //langue par défaut si langue est définie mais non supportée

    $lang='en';

}


$lang sera toujours différente de "fr" ou différente de "en", puisqu'elle ne peut pas être les deux à la fois. Il faudrait plutôt que tu écrives : si $lang n'est ni "fr" ni "en", utilise "en". Revois cette condition.
Modifié par Tony Monast (08 Sep 2011 - 16:30)
OK il est clair qu'il me manque l'info pour utiliser le bon sélecteur...

Je connais :
== (est égale)
> (est supérieur)
< (est inférieur)
>= (est supérieur ou égale)
<= (est inférieur ou égale)
!= (est différent)

Mais j'ignore comment faire une sélection comme celle que tu me décrit.
Modérateur
Je ne connais pas bien la syntaxe PHP, mais peut-être quelque chose comme :


if !($lang == 'fr' || $lang == 'en')


Ça veut dire : If not (langue égale à fr ou langue égale à en).

Edit : Par contre, je ne suis pas certain si le point d'exclamation peut être en dehors de la parenthèse ou si elle doit être à l'intérieur. À toi de lire la documentation là-dessus. Smiley cligne
Modifié par Tony Monast (08 Sep 2011 - 16:49)
Pour plus de simplicité pour des modifications à posteriori, même:
if(!in_array($lang, array('fr', 'en'))

Ou dérivé (explode, etc.).
Administrateur
Lpu8er a écrit :
Pour plus de simplicité pour des modifications à posteriori, même:
if(!in_array($lang, array('fr', 'en'))

Ou dérivé (explode, etc.).

Hum oui plutôt Smiley confused
Donc,

ça
if(!in_array($lang, array('fr', 'en'))


à place de ça?
if($lang != 'fr' || $lang != 'en')


EDIT: J'ai remplacé la ligne (d'ailleurs il manque une parenthèse) mais ça ne change rien, je tombe toujours sur l'anglais alors que mon navigateur est défini en français.
J'ai aussi essayer le code donné par Tony, en ajoutant des parenthèse, et pas de changement non plus.
Modifié par juliesunset (08 Sep 2011 - 17:21)
quand tu récupère la langue juste avant, tu passe les caractères en majuscules avec strtoupper: essaie de comparer $lang à "FR" ou "EN".
Modifié par tilsitt (08 Sep 2011 - 17:43)
juliesunset a écrit :
C'est vraiment un gros problème pour nous étant donné l'orientation international que souhaite prendre l'entreprise.


Je ne vois pas en quoi le fait de rediriger automatiquement montre tellement une vocation internationale. En plus, la langue du navigateur peut être l' anglais mais le visiteur préfère peut-être espagnol par exemple voire un français expatrié.

Si tu mets des drapeaux correspondants aux versions du site, les visiteurs seront curieux d'aller voir ces dîtes versions et constateront que le site est disponible en plusieurs langues.
La majorité de nos visiteurs sont anglophone, c'est donc plus accommodant pour eux. Mais surtout, c'est connu, l'anglais c'est la langue des affaires! Et c'est d'autant plus vrai au Québec.

Donc je renvoie sur le site anglais pour c'est visiteur en particulier et aussi pour ceux dont la langue ne correspond pas à FR ou EN. Dans le cas où c'est un visiteur francophone, normalement ça devrait renvoyer le site en français. (Et c'est là mon problème en ce moment, le site renvoie systématiquement à la version anglaise.)

Dans tous les cas il y a possibilité de changer de langue en cliquant sur "Français" ou "English", en haut à gauche du site, tout dépendant sur quelle version du site on est.

Concernant l'utilisation des drapeaux, ça a déjà été discuté il y a un moment sur le forum. Pas une bonne idée. Ça fait trop référence à une nationalité plutôt qu'à une langue. Mais ça c'est un autre sujet.
Voilà!

<?php
//Récupération de la langue ou définition par défaut
if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){ //si définie par header http
  $lang = explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']); // on créé un tableau en séparant les données renvoyées se trouvant séparés par une virgule
  $lang = strtoupper(substr(chop($lang[0]),0,2)); // on ne sélectionne que la première langue renvoyée qu'on passe en lettre majuscule
}
else{ // si non définie par header http -> EN par défaut
  $lang='en';
}

if ($lang != 'fr' || $lang != 'en'){ //langue par défaut si langue est définie mais non supportée
    $lang='en';
}

    // Ici on redirige
    if($lang == "fr"){
        header('location:http://www.spypoint.com/FR');
    }
    elseif($lang == "en"){
        header('location:http://www.spypoint.com/EN');
    }
    else{ // normalement la langue doit être FR  ou EN, donc cette dernière condition est en pratique inutile
        header('location:http://www.spypoint.com/EN');
    }
?>
Modérateur
Ces lignes ne sont toujours pas bonnes, comme je l'avais déjà signalé.


if ($lang != 'fr' || $lang != 'en'){ //langue par défaut si langue est définie mais non supportée

    $lang='en';

}
Pages :