[英]Determine browser language(s) in Zend Framework?
我正在解散一個相當大的舊庫,其中包含隨着時間的推移積累的各種PHP幫助程序函數。 我正在尋找基於Zend Framework的替代品來盡可能多地使用這些功能。
我的第一個候選者是一個函數,它從可以是http_accept_language
的巨大列表中返回用戶最喜歡的瀏覽器語言 。
ZF有功能嗎?
我意識到Zend_Translate能夠以某種方式檢測瀏覽器語言,但我沒有看到公開可用的函數來實際獲取語言字符串。
干得好:
$locale = new Zend_Locale();
// if locale is 'de_AT' then 'de' will be returned as language
print $locale->getLanguage();
// if locale is 'de_AT' then 'AT' will be returned as region
print $locale->getRegion();
Zend_Locale
應該能夠提供幫助。
請參閱頁面上的示例和說明使用Zend_Locale (引用) :
對於大多數情況,
new Zend_Locale()
將自動選擇正確的區域設置,優先考慮用戶的Web瀏覽器提供的信息。
此頁面后面還有一些細節(引用) :
Zend_Locale
用於自動選擇語言環境的搜索算法使用三種信息源:
1.const Zend_Locale::BROWSER
- 用戶的Web瀏覽器為每個請求提供信息,這些信息由PHP在全局變量HTTP_ACCEPT_LANGUAGE
。 如果找不到匹配的區域設置,則優先考慮ENVIRONMENT
,最后是FRAMEWORK
。
2.const Zend_Locale::ENVIRONMENT
- PHP通過PHP內部函數setlocale()
發布主機服務器的語言環境。 如果找不到匹配的區域設置,則優先考慮FRAMEWORK
,最后是BROWSER
。
3.const Zend_Locale::FRAMEWORK
- 當Zend Framework具有指定組件默認值(計划但尚未可用)的標准化方法時,在實例化期間使用此常量將優先選擇基於這些默認值的區域設置。 如果找不到匹配的區域設置,則優先考慮ENVIRONMENT
,最后是BROWSER
。
(建議:去看那個頁面 - 我不會復制粘貼所有內容來閱讀^^)
編輯:這是說明我的評論的代碼部分:
$locale = new Zend_Locale();
var_dump($locale->getLanguage());
var_dump($locale->getRegion());
die;
給我 :
string(2) "fr"
bool(false)
好吧,我的瀏覽器要求法語,而不指定區域^^
我贊成了兩個答案。 作為使用Zend_Locale
獲取語言的替代方案,請考慮
是否有可能強制Zend_Locale()
獲取第一個完整的語言環境(語言代碼和區域代碼,如'en_US'),而不僅僅是語言代碼('en')? 如果沒有,處理貨幣是一個問題,因為它們需要一個完整的語言環境。
你是如何處理這個問題的? 我還沒有找到任何可接受的解決方案,對我來說,似乎這應該是Zend_Locale
的任務, _prepareLocale($locale, $strict = false)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.