Nhược điểm của việc sử dụng AcceptLanguageModule là bạn không thể dựa vào cập nhật hệ thống tự động nữa . Và với mọi cập nhật nginx (thậm chí là an ninh), bạn phải tự biên dịch Nginx. Nhược điểm thứ hai là mô-đun giả định rằng ngôn ngữ chấp nhận được sắp xếp theo các giá trị chất lượng đã có. Tôi khá thích Lua vì nó có thể được cài đặt một cách dễ dàng trong distro debian dựa trên:
apt-get install nginx-extras
Đồng nghiệp của tôi Fillipo làm lớn nginx-http-accept-lang kịch bản trong Lua. Nó xử lý một cách chính xác các giá trị chất lượng và chuyển hướng người dùng cho phù hợp. Tôi đã thực hiện small modification cho tập lệnh đó. Nó chấp nhận các ngôn ngữ được hỗ trợ như tham số đầu vào và trả về ngôn ngữ có trình độ nhất theo tiêu đề Accept-Language. Với giá trị trả lại bạn có thể làm bất cứ điều gì bạn muốn. Nó có thể được sử dụng để viết lại, thiết lập cookie lang ...
Tôi chỉ sử dụng xác định ngôn ngữ cho đường dẫn gốc (vị trí = /). Và cookie lang người dùng có tùy chọn trên trình duyệt. nginx conf của tôi trông như thế này:
map $cookie_lang $pref_lang {
default "";
~en en;
~sk sk;
}
server {
listen 80 default_server;
root /usr/share/nginx/html;
index index.html index.htm;
# Make site accessible from http://localhost/
server_name localhost;
location =/{
# $lang_sup holds comma separated languages supported by site
set $lang_sup "en,sk";
set_by_lua_file $lang /etc/nginx/lang.lua $lang_sup;
if ($pref_lang) {
set $lang $pref_lang;
}
add_header Set-Cookie lang=$lang;
rewrite (.*) $scheme://$server_name/$lang$1;
}
location/{
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
}
Thực ra không nên có khoảng trống giữa biểu thức ~ và biểu thức. –
Điều này có yêu cầu AcceptLanguageModule không? –
Không làm việc cho tôi, nó luôn đưa tôi đến trang tiếng Anh ngay cả khi tôi định cấu hình trình duyệt của mình cho tiếng Pháp chỉ –