accept-language: Модуль NGINX Accept-Language
Установка
Вы можете установить этот модуль в любой дистрибутив на базе RHEL, включая, но не ограничиваясь:
- RedHat Enterprise Linux 7, 8, 9 и 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 и 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
Включите модуль, добавив следующее в верхнюю часть файла /etc/nginx/nginx.conf:
load_module modules/ngx_http_accept_language_module.so;
Этот документ описывает nginx-module-accept-language v1.0.0, выпущенный 30 октября 2018 года.
Этот модуль анализирует заголовок Accept-Language и предоставляет наиболее подходящую локаль для пользователя из списка поддерживаемых локалей вашего сайта.
Синтаксис
set_from_accept_language $lang en ja pl;
$lang— это переменная, в которой будет храниться локальen ja pl— это локали, поддерживаемые вашим сайтом
Если ни одна из локалей из Accept-Language недоступна на вашем сайте, переменная устанавливается в первую локаль из поддерживаемых локалей вашего сайта (в данном случае en).
Предостережение
В настоящее время предполагается, что Accept-Language отсортирован по значениям качества (по моим тестам это так для Safari, Firefox, Opera и IE) и отбрасывает q (см. http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html).
В ситуации, когда я использую модуль, это предположение работает... но покупатель, будьте осторожны :-)
Пример конфигурации
Если у вас есть разные поддомены для каждого языка
server {
listen 80;
server_name your_domain.com;
set_from_accept_language $lang en ja zh;
rewrite ^/(.*) http://$lang.your_domain.com redirect;
}
Или вы можете сделать что-то подобное, перенаправляя людей, приходящих на '/', на /en (или /pt):
location / {
set_from_accept_language $lang pt en;
if ( $request_uri ~ ^/$ ) {
rewrite ^/$ /$lang redirect;
break;
}
}
Почему я это создал?
Я использую кэширование страниц с merb на многоязычном сайте, и мне нужен был способ обслуживать правильную языковую страницу из кэша. Скоро я размещу пример на http://gom-jabbar.org
Благодарности
Спасибо Эвану Миллеру за его руководство по написанию модулей nginx.
GitHub
Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-accept-language.