iT邦幫忙

2

Nginx 多語系進階設定

最近公司想把官方網站分開成中文版/英文版/日文版

每個語系版面不盡相同,所以預計會都分開做

然後有要求多語系的部份

目前是想在輸入統一網域 company.com 後各自依瀏覽器語言分別轉向各自網址 - company.com.tw / company.com / company.jp

上網爬文後有看到可以直接在 nginx 處理掉這部份,但遇到一個問題,如果多語系轉向各自網站之後,有辦法依照上次使用者選擇的語系分嗎?
本來是想用 cookie 做,但不知道 nginx 能不能做 cookie 的判斷
分配原則大約是:

  1. 如果使用者有按過某個語系C(set cookie) => nginx 轉語系C
  2. 如果使用者第一次來沒按過東西或沒 cookie 記錄 => nginx 依瀏覽器語言判斷

如果 nginx 真的沒法做到是不是就要做在下一層的後端語言中呢?

1
dragonH
iT邦超人 5 級 ‧ 2020-06-18 14:14:22

vue 或 react 那類的前端 framework

搭配 i18n

可以把 語言別 寫在 cookie 或 localstorage 裡

user 每次進來 就是上次選擇的語言或預設

用瀏覽器判斷應該也是可以

反正就是 js 的操作

nginx 操作 cookie 的話

應該可以參考這個

現在應該都是用 i18n 居多

應該比較少寫多個網站

因為只需要維護 i18n 的語言 list 就好

kyoe iT邦新手 5 級 ‧ 2020-06-18 14:42:51 檢舉

對, 但是老闆對各國的版面有不同的排版跟要求...我的角度當然是i18n的好..就是..

2

nginx 可以獲取到 http_user_agent
這可以先做基本的裝置語系導向。

其實如果你們已經有各國別域名的話。
只要.com的做判斷就好。其他的tw、jp。你根本不需要再判斷語系。

程式碼寫個依域名鎖定語系就行了。連session、cookie都用不到。
至於不同域名的session或cookie共用問題。
你可以全綁到.com上就好了。

1
froce
iT邦大師 1 級 ‧ 2020-06-18 15:35:26

一般來說瀏覽器會送Accept-Language的檔頭,對其做map,然後重導向即可。

範例參考下面網址:
https://gist.github.com/varnav/782d5aeb42c6ffa77678025767013c95

map $http_accept_language $index_redirect_uri {
default "/en/";
"~(^|,)en.+,ru" "/en/";
"~(^|,)ru.+,en" "/ru/";
"~(^|,)en" "/en/";
"~(^|,)ru" "/ru/";
}

location = / {
return 302 $index_redirect_uri;
}

可以看到如果沒傳Accept-Language會導向/en/,如果ru在前會導向ru。
我沒實際測過就是了。

kyoe iT邦新手 5 級 ‧ 2020-06-20 09:16:07 檢舉

感謝大大
不過 nginx 我是有找到跳轉的方式
但現在想做到的是 使用者如果有選過其他語言的話以他選過的為主 這個比較麻煩

我期望的場景是 使用者第一次透過 .com 總站進來後, 轉往其他語言的子站時會被記錄, 下次他進總站就直接幫他導去他曾選過的子站, 除非他在從子站點連結回到總站, 才會再回到總站

我要發表回答

立即登入回答