Redirection (ou non) basée sur la langue du navigateur - Nginx

Répondre
Partager Rechercher
Bonsoir,

Pour résumer, j'ai donc installé nginx sur un de mes vps, la langue par défaut du site (example.com) serait le français mais j'aimerais lui ajouter une redirection automatique vers sa partie anglaise (example.com/en).
La langue dans lequel le navigateur de la personne parcourant le site serait configurée permettrait cette redirection ou non.

J'ai alors ajouté ceci dans le fichier de configuration de mon server block :

Code:
location = / {
rewrite_by_lua '
for lang in (ngx.var.http_accept_language .. ","):gmatch("([^,]*),") do
if string.sub(lang, 0, 2) == "fr" then
return
end
if string.sub(lang, 0, 2) == "en" then
ngx.redirect("/en/")
end
end
ngx.redirect("/")
';
}
Ça semble correctement fonctionner à une exception près.
Même si le français est la langue par défaut dans Chrome mais qu'elle est en dessous de l'anglais, cela redirige vers la partie anglaise (1ère image) et lorsque le français est au dessus cela fonctionne correctement (2ème image).
Après, dernier point, je ne suis pas non plus certain que ce soit véritablement correct, notamment concernant le dernier "ngx.redirect("/")", ou alors y a-t-il mieux à faire ?

En espérant que certains d'entre vous auront une idée, merci par avance.

Édition : Ah oui, j'oubliais, si jamais, je ne souhaite pas faire une redirection en fonction de la géolocalisation.
Miniatures attachées
Cliquez sur l'image pour la voir en taille réelle

Nom : langue_1.JPG
Taille : 609x155
Poids : 17,0 Ko
ID : 267720   Cliquez sur l'image pour la voir en taille réelle

Nom : langue_2.JPG
Taille : 619x167
Poids : 19,3 Ko
ID : 267721  

Dernière modification par Minuit ; 14/06/2016 à 01h27.
Bha j'ai envie de dire que c'est le comportement normal.

Langages acceptés ‡ langage de l'interface du navigateur

Regarde le header généré en fonction de l'ordre que tu définies pour les langages acceptés.
Accept-Language: en-GB,en;q=0.7,fr;q=0.3

Ta fonction est conçue pour matcher uniquement le premier, donc en l'occurrence EN (dans mon exemple)
Si tu mets FR en premier il matchera donc FR, car il sera placé avant dans le header, l'ordre a son importance.
Je vois, merci.

C'était surtout que je trouvais ça étrange que dans les 2 cas, en ayant le langage par défaut de chrome sur le français, le placement était tout aussi important pour l'affichage des résultats.
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés