La desventaja de usar AcceptLanguageModule es que no se puede confiar en las actualizaciones automáticas del sistema más . Y con cada actualización de nginx (incluso de seguridad), usted tiene que compilar Nginx usted mismo. El segundo inconveniente es que el módulo asume que el idioma de aceptación ya está ordenado por valores de calidad. Yo prefiero en lugar Lua, ya que puede ser fácilmente instalado en distribuciones basadas en Debian:
apt-get install nginx-extras
Mi colega Fillipo hizo gran guión nginx-http-accept-lang en Lua. Maneja correctamente los valores de calidad y redirige al usuario en consecuencia. He hecho small modification en esa secuencia de comandos. Acepta los idiomas compatibles como parámetro de entrada y devuelve el idioma más calificado según el encabezado Aceptar idioma. Con el valor devuelto, puede hacer lo que quiera. Se puede usar para reescribir, configurar lang cookie ...
Solo estoy usando la determinación de idioma para la ruta de acceso raíz (location = /). Y la cookie de usuario lang tiene preferencia sobre el navegador. Mi conf nginx se ve así:
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;
}
}
En realidad no debería haber un espacio entre el ~ y la expresión. –
¿Esto requiere el AcceptLanguageModule? –
No funciona para mí, siempre me lleva a la página en inglés, incluso si configuro mi navegador para francés solo –