accept-language: Модуль NGINX Accept-Language
Установка на Debian/Ubuntu
Эти документы относятся к пакету APT nginx-module-accept-language, предоставляемому репозиторием GetPageSpeed Extras.
- Настройте APT репозиторий, как описано в настройке APT репозитория.
- Установите модуль:
sudo apt-get update
sudo apt-get install nginx-module-accept-language
Показать дистрибутивы и архитектуры
| Дистрибутив| Версия | Компонент | Архитектуры |
|------------|-------------------|-------------|-----------------|
| debian | bookworm | main | amd64, arm64 |
| debian | bookworm-mainline | main | amd64, arm64 |
| debian | trixie | main | amd64, arm64 |
| debian | trixie-mainline | main | amd64, arm64 |
| ubuntu | focal | main | amd64, arm64 |
| ubuntu | focal-mainline | main | amd64, arm64 |
| ubuntu | jammy | main | amd64, arm64 |
| ubuntu | jammy-mainline | main | amd64, arm64 |
| ubuntu | noble | main | amd64, arm64 |
| ubuntu | noble-mainline | main | amd64, arm64 |
Этот модуль анализирует заголовок 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.