許多網頁是有多國語言設計的,而這種多國語言設計的預設值,通常是可以從偵測使用者瀏覽器設定的語系,來取得預設的顯示語言。
瀏覽器設定的語言,從PHP中以$_SERVER[‘HTTP_ACCEPT_LANGUAGE’]就可以取回,其中會是一整串的語系字串,如:
zh-TW,zh;q=0.8,en-US;q=0.6,en;q=0.4,zh-CN;q=0.2
上面的語系字串中,以逗號區隔出來的,是多個語系的設定,意思是如果沒有zh-TW的語系,就依zh、en-US、en、zh-CN等順序,依序選用。
日前在某個專案裏,也碰到了這樣的需求,也實作完成了,自已測試在各瀏覽器上都正常,好了,結案!
居然不到5分鐘,馬上就回報bug來了!在iOS上都無法偵測到正確的語系!
檢查的結果,原來iOS傳送的$_SERVER[‘HTTP_ACCEPT_LANGUAGE’],內容全部都是「小寫」…說起來,這真是個很鳥的小問題,一開始在偵測語系的時候,本來也就應該要先作這類字串的處理了,只是一時偷懶,沒做,沒想到馬上就出問題…
解決方法:把傳入的$_SERVER[‘HTTP_ACCEPT_LANGUAGE’]值,加上strtolower(),一律轉成小寫,再作後續的處理就好啦~