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;
$langest la variable dans laquelle stocker la localeen ja plsont 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.