accept-language: Módulo Accept-Language de NGINX
Instalación
Puedes instalar este módulo en cualquier distribución basada en RHEL, incluyendo, pero no limitado a:
- RedHat Enterprise Linux 7, 8, 9 y 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 y Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-accept-language
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-accept-language
Habilita el módulo añadiendo lo siguiente en la parte superior de /etc/nginx/nginx.conf:
load_module modules/ngx_http_accept_language_module.so;
Este documento describe nginx-module-accept-language v1.0.0 lanzado el 30 de octubre de 2018.
Este módulo analiza el encabezado Accept-Language y proporciona la configuración regional más adecuada para el usuario a partir de una lista de configuraciones regionales soportadas por tu sitio web.
Sintaxis
set_from_accept_language $lang en ja pl;
$langes la variable en la que se almacenará la configuración regionalen ja plson las configuraciones regionales soportadas por tu sitio web
Si ninguna de las configuraciones regionales de Accept-Language está disponible en tu sitio web, se establece la variable en la primera configuración regional de las configuraciones regionales soportadas por tu sitio web (en este caso, en).
Advertencia
Actualmente asume que el Accept-Language está ordenado por valores de calidad (por mis pruebas, este es el caso para safari, firefox, opera e ie) y descarta q (ver http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html).
En la situación en la que estoy usando el módulo, esta suposición funciona... pero el comprador que tenga cuidado :-)
Ejemplo de configuración
Si tienes diferentes subdominios para cada idioma
server {
listen 80;
server_name your_domain.com;
set_from_accept_language $lang en ja zh;
rewrite ^/(.*) http://$lang.your_domain.com redirect;
}
O podrías hacer algo como esto, redirigiendo a las personas que vienen a '/' a /en (o /pt):
location / {
set_from_accept_language $lang pt en;
if ( $request_uri ~ ^/$ ) {
rewrite ^/$ /$lang redirect;
break;
}
}
¿Por qué lo creé?
Estoy usando caché de páginas con merb en un sitio web multilingüe y necesitaba una forma de servir la página en el idioma correcto desde la caché. Pronto pondré un ejemplo en http://gom-jabbar.org
Agradecimientos
Gracias a Evan Miller por su guía sobre cómo escribir módulos de nginx.
GitHub
Puedes encontrar consejos de configuración adicionales y documentación para este módulo en el repositorio de GitHub para nginx-module-accept-language.