2009-09-29 60 views
7

我目前正在使用用戶語言提供內容的自動用戶語言檢測。在PHP中檢測用戶語言 - 穩定的解決方案

當然其可以手動改變語言的

,但如果用戶訪問該頁面,第一次我想提供他的語言的內容。

所以我google搜索,發現$ _ SERVER [「HTTP_ACCEPT_LANGUAGE」] - 瓦爾得到這樣的結果:

de-de,de;q=0.8,en-us;q=0.5,en;q=0.3

最新最好的方式來過濾這個結果得到一個明確的結果,如「EN 「/」DE「/」IT「?

$rL = $_SERVER["HTTP_ACCEPT_LANGUAGE"]; // de-de,de;q=0.8,en-us;q=0.5,en;q=0.3 
$langCode = strtoupper($rl[0].$rl[1]); 

此Server-Var上的第二個問題是,它只會在瀏覽器提供一些信息時給我一個結果。設置默認頁面語言是唯一可能的處理方式嗎?

我感興趣的是第二種可能性是得到通過IP的語言。所以,如果我得到的語言,我可能知道用戶的語言。但是在瑞士,比利時等多語言國家呢?什麼與TLD的喜歡.com/.net/.org等。

那麼,您會應用哪種方法來檢測用戶語言?

感謝您的幫助。

回答

5

堅持接受語言。所有的瀏覽器都會通過標題,而且它更像是用戶想要的語言,而不是粗略的地理定位。

PECL有http_negotiate_language可以解析頭和適當選擇語言對你來說,雖然在實踐中,即使只是在字符串中尋找en/de/it有點假方法效果比IP嗅探更好。

Whats with tld's like .com/.net/.org and so on.

域名通常不涉及IP嗅探,其是可能連接到某些國家的IP範圍的它的後端數據庫。針對國家猜測的反向解析幾乎沒有用,因爲很少IPs反向解析爲ccTLD。

+0

很好,當我嘗試用我得到了http_negotiate_language的例子 - 致命錯誤:調用未定義功能http_negotiate_language() - 做我自己做錯了什麼? – wildhaber 2009-09-29 16:56:52

+0

安裝pecl_http擴展。 http://uk.php.net/manual/en/http.install.php或者在negotiate_language頁面的註釋中有一個本地PHP版本,看起來應該是OK。 – bobince 2009-09-29 17:32:44

1

作爲最佳實踐,我會去與Zend框架的真正發達Zend_Locale組件。

它擁有所有你需要國際化和本地化應用程序,從檢測的用戶的本地設置爲廣角號國際貨幣,數字,日期格式化和翻譯管理解決方案是什麼。