Перейти к содержанию

accept-language: Модуль NGINX Accept-Language

Установка на Debian/Ubuntu

Эти документы относятся к пакету APT nginx-module-accept-language, предоставляемому репозиторием GetPageSpeed Extras.

  1. Настройте APT репозиторий, как описано в настройке APT репозитория.
  2. Установите модуль:
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.