accept-language: Módulo Accept-Language do NGINX
Instalação
Você pode instalar este módulo em qualquer distribuição baseada em RHEL, incluindo, mas não se limitando a:
- RedHat Enterprise Linux 7, 8, 9 e 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 e 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
Ative o módulo adicionando o seguinte no topo de /etc/nginx/nginx.conf:
load_module modules/ngx_http_accept_language_module.so;
Este documento descreve o nginx-module-accept-language v1.0.0 lançado em 30 de outubro de 2018.
Este módulo analisa o cabeçalho Accept-Language e fornece a localidade mais adequada para o usuário a partir de uma lista de localidades suportadas pelo seu site.
Sintaxe
set_from_accept_language $lang en ja pl;
$langé a variável na qual armazenar a localidadeen ja plsão as localidades suportadas pelo seu site
Se nenhuma das localidades do Accept-Language estiver disponível no seu site, ele define a variável para a primeira localidade das localidades suportadas pelo seu site (neste caso, en).
Advertência
Atualmente, assume-se que o Accept-Language está ordenado por valores de qualidade (pelos meus testes, esse é o caso para safari, firefox, opera e ie) e descarta o q (veja http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html).
Na situação em que estou usando o módulo, essa suposição funciona... mas comprador, cuidado :-)
Exemplo de configuração
Se você tiver subdomínios diferentes 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;
}
Ou você poderia fazer algo assim, redirecionando pessoas que vêm para '/' para /en (ou /pt):
location / {
set_from_accept_language $lang pt en;
if ( $request_uri ~ ^/$ ) {
rewrite ^/$ /$lang redirect;
break;
}
}
Por que eu criei isso?
Estou usando cache de página com merb em um site multilíngue e precisava de uma maneira de servir a página do idioma correto do cache. Em breve colocarei um exemplo em http://gom-jabbar.org
Agradecimentos
Obrigado a Evan Miller pelo seu guia sobre como escrever módulos nginx.
GitHub
Você pode encontrar dicas adicionais de configuração e documentação para este módulo no repositório do GitHub para nginx-module-accept-language.