簡體   English   中英

在Zend Framework中確定瀏覽器語言?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM