簡體和繁體判斷
我想根據http首部的 accept-language 決定提供簡體或繁體的文件。在chrome中, chrome://settings/languages 可以設定偏好語言,瀏覽器會據此設置 accept-language 首部。較好的處理方式是解析該字段,獲取qvalue,根據優先級選取最恰當的語言。但僅用于支持簡繁體,我想用取巧的辦法:忽略優先級,只要 accept-language 里出現了 zh-hant 、 zh-tw 、 zh-hk 等字樣,就返回繁體,否則返回簡體。
map?$http_accept_language?$lang?{ ?default?zhs; ?~zh-hant?zht; ?~zh-tw?zht; ?~zh-hk?zht; }
我用hexo生成網站,源文件用繁體寫成。對于 hexo generate 生成得到的 2015-10-06-nginx-accept-language-zhs-zht.html ,用 opencc 轉換得到簡體版本: 2015-10-06-nginx-accept-language-zhs-zht.html.zhs.html 。視情況還需要轉換其他一些文件,比如 atom.xml 、 提供“閱讀最多文章”功能 的 popular.json 。
#?zsh cd?~/maskray.me/public opencc?-c?t2s.json?-i?atom.xml?-o?atom.xml.zhs.xml for?i?in?**/*.html?20*;?do?#?選擇需要簡繁體支持的文件 ?c=${#${(s/.html/%)i}//[^%]/}?#?計算子串`.html`出現次數 ?if?((?$c?<p>在nginx配置文件中指定需要簡繁體支持的路由:</p><pre class="brush:plain;">location?~?^/blog/20???{ ?try_files?$uri.$lang.html?$uri?=404; ?add_header?vary?accept-language; } location?~?/atom.xml?{ ?try_files?$uri.$lang.xml?$uri?=404; ?add_header?vary?accept-language; } location?~?.json$?{ ?try_files?$uri.$lang.json?$uri?=404; ?add_header?vary?accept-language; } #?其他需要簡繁體支持的路由
根據http請求頭中的accept-language轉發到不同的頁面:
直接上代碼
if?($http_accept_language?~*?^zh){ ????set?$lang?"/index_cn.jsp"; } if?($http_accept_language?!~*?^zh){ ????set?$lang?"/index_en.jsp"; } ? location?=/?{ ????proxy_set_header?host?$host; ????proxy_set_header?x-real-ip?$remote_addr; ????proxy_set_header?x-forwarded-for?$remote_addr; ????proxy_pass?http://localhost:8080$lang; }
測試:
http://www.findmaven.net是一個findjar和findmaven的搜索引擎
瀏覽器設置(英文)
返回
瀏覽器設置(中文)
返回
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END