跳转至

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 仓库 中找到有关此模块的其他配置提示和文档。