最近公司想把官方網站分開成中文版/英文版/日文版
每個語系版面不盡相同,所以預計會都分開做
然後有要求多語系的部份
目前是想在輸入統一網域 company.com 後各自依瀏覽器語言分別轉向各自網址 - company.com.tw / company.com / company.jp
上網爬文後有看到可以直接在 nginx 處理掉這部份,但遇到一個問題,如果多語系轉向各自網站之後,有辦法依照上次使用者選擇的語系分嗎?
本來是想用 cookie 做,但不知道 nginx 能不能做 cookie 的判斷
分配原則大約是:
如果 nginx 真的沒法做到是不是就要做在下一層的後端語言中呢?
vue 或 react 那類的前端 framework
搭配 i18n
可以把 語言別 寫在 cookie 或 localstorage 裡
user 每次進來 就是上次選擇的語言或預設
用瀏覽器判斷應該也是可以
反正就是 js 的操作
nginx 操作 cookie 的話
應該可以參考這個
現在應該都是用 i18n 居多
應該比較少寫多個網站
因為只需要維護 i18n 的語言 list 就好
nginx 可以獲取到 http_user_agent
這可以先做基本的裝置語系導向。
其實如果你們已經有各國別域名的話。
只要.com的做判斷就好。其他的tw、jp。你根本不需要再判斷語系。
程式碼寫個依域名鎖定語系就行了。連session、cookie都用不到。
至於不同域名的session或cookie共用問題。
你可以全綁到.com上就好了。
一般來說瀏覽器會送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。
我沒實際測過就是了。