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,于 2018 年 10 月 30 日发布。
该模块解析 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 上放一个示例。
致谢
感谢 Evan Miller 提供的 nginx 模块编写指南。
GitHub
您可以在 nginx-module-accept-language 的 GitHub 仓库 中找到有关此模块的其他配置提示和文档。