Aller au contenu

accept-language: Module Accept-Language de NGINX

Installation

Vous pouvez installer ce module dans toute distribution basée sur RHEL, y compris, mais sans s'y limiter :

  • RedHat Enterprise Linux 7, 8, 9 et 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 et 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

Activez le module en ajoutant ce qui suit en haut de /etc/nginx/nginx.conf :

load_module modules/ngx_http_accept_language_module.so;

Ce document décrit nginx-module-accept-language v1.0.0 publié le 30 octobre 2018.


Ce module analyse l'en-tête Accept-Language et fournit la locale la plus appropriée pour l'utilisateur à partir d'une liste de locales prises en charge par votre site web.

Syntaxe

set_from_accept_language $lang en ja pl;
  • $lang est la variable dans laquelle stocker la locale
  • en ja pl sont les locales prises en charge par votre site web

Si aucune des locales de Accept-Language n'est disponible sur votre site web, il définit la variable sur la première locale des locales prises en charge par votre site web (dans ce cas, en).

Avertissement

Il suppose actuellement que l'Accept-Language est trié par valeurs de qualité (d'après mes tests, c'est le cas pour safari, firefox, opera et ie) et ignore q (voir http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). Dans la situation où j'utilise le module, cette hypothèse fonctionne... mais acheteur averti :-)

Exemple de configuration

Si vous avez différents sous-domaines pour chaque langue

server {
    listen 80;
    server_name your_domain.com;
    set_from_accept_language $lang en ja zh;
    rewrite ^/(.*) http://$lang.your_domain.com redirect;
}

Ou vous pourriez faire quelque chose comme ceci, redirigeant les personnes venant à '/' vers /en (ou /pt) :

location / {
    set_from_accept_language $lang pt en;
     if ( $request_uri ~ ^/$ ) {
       rewrite ^/$ /$lang redirect;
       break;
     }
}

Pourquoi l'ai-je créé ?

J'utilise la mise en cache des pages avec merb sur un site web multilingue et j'avais besoin d'un moyen de servir la bonne page de langue à partir du cache. Je mettrai bientôt un exemple sur http://gom-jabbar.org

Remerciements

Merci à Evan Miller pour son guide sur l'écriture de modules nginx.

GitHub

Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub pour nginx-module-accept-language.