Redirection en fonction de la langue de l'internaute.

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Redirection en fonction de la langue de l'internaute.

Re: Redirection en fonction de la langue de l'internaute.

par moogli » 28 mai 2012, 11:14

salut,

tu as, dans la variable $_SERVER (HTTP_ACCEPT_LANGUAGE), l'information langue du navigateur.

Aprèsil te faut stocker cela dans une variable de session (pour éviter les bétises) et utiliser la fonction header pour la redirection.

si tu est sur un sous domaine tu y reste, a partir du moment où tes liens ne référence pas autre chose. Pour cela utilise des liens relatif et on absolue.

si tu veux un system de drapeau c'est la même chose :)

par contre suivant le navigateur tu n'a pas la même chose
par exemple (pour français "france"
chrome : fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
safari : fr-FR
opera : fr-FR,fr;q=0.9,en;q=0.8
IE9 : fr-FR
ephiphany : fr-fr, fr;q=0.90

le français "belge" c'est fr-BE
je regardais rapidement pour le néerlandais la locale serait nl-NL ou nl-be (ce que tu cherche nan ?), par contre sur les navigateurs j'ai eu nl ou nl-be (le dernier étant a priori ton ton tu peux l'utiliser, si c'est la même chose, utilise nl)
normalement la première correspond à la locale par défaut.

donc par exemple, on vois que les locales sont séparée par des ; on peux utiliser explode pour avoir un tableau et on regarde ce que contient le premier index du tableau.
Utilise strpos pour cela (pas besoin de preg match). tu va chercher a savoir si la chaine contient fr-FR ou nl_be

un petit code de test
<?php
header('Content-type: text/html; charset=utf-8');
echo '<pre>';
var_dump($_SERVER['HTTP_ACCEPT_LANGUAGE']);
echo '</pre>';
$acceptLocal = explode(';',$_SERVER['HTTP_ACCEPT_LANGUAGE']);
// français "français" c'est fr-FR, pour le français "belge" c'est fr-BE
if (stripos($acceptLocal[0], 'fr-BE')!== false){ // utilisation de str[b]i[/b]pos pour éviter les problème minuscule / majuscule entre le navigateur
	echo 'on parle français';
}
if (strpos($acceptLocal[0], 'nl-be')!== false){
	echo 'on parle néerlandais ';
}
je te laisse faire le reste :)

c'est améliorable bien entendu.

Il est doit aussi être possible le faire directement par le serveur. Avec apache, utilise un fichier .htaccess pour cela. un exemple (y en a surement des mieux) http://www.apacheweek.com/features/negotiation


@+

Redirection en fonction de la langue de l'internaute.

par monkey77 » 28 mai 2012, 04:00

Bonjour,

Je travaille actuellement sur un blog musical belge (wordpress). Le site doit être
disponible en deux langues: français et néerlandais.

La version française est située à la racine alors que la version néerlandaise
est dans un dossier 'nl'. L'url de la première version est du type http://fr.nomdedomaine.be
et celle de la seconde du type http://nl.nomdedomaine.be

Il faudrait donc que le code détecte la langue du navigateur (peu importe lequel
- en effet ,j'avais trouvé un code qui fonctionnait pour Netscape):
> langue du navigateur est le fr => redirection vers fr.nomdedomaine.be
> la langue du navigateur est le nl => redirection vers nl.nomdedomaine.be
> si aucune des deux conditions précédentes => on reste sur http://www.nomdedomaine.be

Je me doute qu'il faut utiliser les conditions mais mes connaissances en php sont quasi nulles...
if( langue = fr ):
rediriger vers fr.nomdedomaine.be;
elseif( langue = nl ):
rediriger vers nl.nomdedomaine.be;
else:
continuer sur http://www.nomdedomaine.be;

Est-ce que quelqu'un sur ce forum pourrait m'aider à trouver une solution?

D'avance, merci à ceux qui liront ce post.

PS : une personne qui accède directement à l'url 'nl.nomdedomaine.be' doit rester
sur la section néerlandaise et pas être redirigée vers http://www.nomdedomaine.be puis seulement
vers nl.nomdedomaine.be

J'ai entendu parler d'un 'preg_match'? Mais je n'en sais pas plus