Lo svantaggio di usare AcceptLanguageModule è che non si può fare affidamento su aggiornamenti automatici del sistema più . E con ogni aggiornamento di nginx (anche di sicurezza), devi compilare Nginx da solo. Il secondo lato negativo è che il modulo presuppone che la lingua di accettazione sia già ordinata per valori di qualità. Io invece preferisco Lua perché può essere installato facilmente in distro debian based:
apt-get install nginx-extras
mio collega Filippo reso grande nginx-http-accept-lang di script in Lua. Gestisce correttamente i valori di qualità e reindirizza l'utente di conseguenza. Ho fatto small modification a quello script. Accetta le lingue supportate come parametro di input e restituisce la lingua più qualificata in base all'intestazione Accept-Language. Con il valore restituito puoi fare quello che vuoi. Può essere usato per riscritture, impostazione di lang cookie ...
Sto solo usando la determinazione della lingua solo per il percorso root (posizione = /). E il cookie user lang ha la preferenza sul browser. mio nginx conf si presenta così:
map $cookie_lang $pref_lang {
default "";
~en en;
~sk sk;
}
server {
listen 80 default_server;
root /usr/share/nginx/html;
index index.html index.htm;
# Make site accessible from http://localhost/
server_name localhost;
location =/{
# $lang_sup holds comma separated languages supported by site
set $lang_sup "en,sk";
set_by_lua_file $lang /etc/nginx/lang.lua $lang_sup;
if ($pref_lang) {
set $lang $pref_lang;
}
add_header Set-Cookie lang=$lang;
rewrite (.*) $scheme://$server_name/$lang$1;
}
location/{
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
}
In realtà non ci dovrebbe essere uno spazio tra il ~ e l'espressione. –
Richiede questo AcceptLanguageModule? –
Non funziona per me, mi porta sempre alla pagina inglese anche se configuro il mio browser solo per il francese –