[php] 如何偵測瀏覽器預設語系
2017 Oct 07 未分類
最近幫一個做跨國生意的客戶做切換語系的功能
客戶說希望他的巴西客戶上線的時候
可以提示客戶把預設的英文語系 切換成巴西語系(巴西的葡萄牙文)
老實說路老闆沒做過這種東西
但這種機制應該已經滿成熟了
我們看過 Yahoo/Google 都有這類的語系/地區提示
一開始客戶跟我們說
能不能用地區(IP)來判斷
如果是巴西的 IP
就跳提示跟使用者說
"我們有葡萄牙語 你要不要切換呢?"
判斷 IP 要先有 巴西的 IP 資料
所以我上網找了一些免費下載的 IP 資料
有巴西的區段
我把資料都塞進資料庫
寫了一段簡單的程式
然後裝了一個 chrome 的 vpn plugin
切了幾個巴西的 IP
結果都判斷不出來
但如果把這個 IP 丟到下載 IP 資料的網站查詢
又可以正確的查出是巴西的 IP
這表示其實他讓我下載的 IP 不是全部
可能要付費才能拿到完整的資料
但怎麼可能說服客人花錢買這資料?
所以我上網查了一下有沒有別的方法
另一個方法是
去判斷客戶預設瀏覽器的語系
其實瀏覽器在跟 web server 要資料的時候
都會跟 server 講
"我使用的語系是XXX"
然後 server 可以做出判斷
送出不同的語系內容
所以我建議客人也是這樣判斷
如果瀏覽者的瀏覽器把巴西葡萄牙語設定成第一個語系
(也可以說成是預設語系)
就跳出提示
"我們有葡萄牙語 你要不要切換呢?"
程式可以這樣寫
<?php
$accept_lang = locale_accept_from_http($_SERVER['HTTP_ACCEPT_LANGUAGE']);?>
if(($accept_lang=='pt_BR' || $accept_lang=='pt') && $lang!='pt'):
//做你想做的事情
endif;
?>
上面程式碼的意思是
透過 locale_accept_from_http 去抓取瀏覽器告知支援的語系
如果語系是 pt_BR 或是 pt
(一個是標準葡萄牙語 一個是巴西葡萄牙語)
而且目前的語系不是 pt
(這是我自己定義的變數 表示目前系統的語系)
就跳出提示的文字
(提示文字我沒寫出來 你可以自己寫你喜歡的內容)
至於測試的方法
你可以打開你的 chrome 設定
有個語言的區段
先加入你想要的語言
然後把它至頂
瀏覽器就會把這個語系當做預設語系
就可以測試上面那段code啦
其實這方法遠比判斷 IP 來的好
因為像 Google 這種大企業
他申請的 IP 可能是美國的
但他會拿到其他國家用
如果 Google 沒有申請變更 IP 的地區資訊
還是會把它判斷成美國的 IP
(Google 在彰化的機房的IP就是美國的IP)
這個案例提供給大家參考囉~
工商服務時間
路老闆將在2017/11月開始 每個星期五下午 4:00 ~ 6:00
提供免費的諮詢服務 (你沒看錯 是免費的喔)
只要你有任何網站製作的問題
都歡迎來跟路老闆聊喔
有興趣的朋友可到
路老闆有限公司的粉絲團詢問