0
我正尝试使用浏览器语言首选项在Zend_Locale和Zend_Currency之间建立连接。Zend Locale&Zend_Currency:地区代码
浏览器:连接
$locale = new Zend_Locale(Zend_Locale::BROWSER);
Zend_Debug::Dump($locale->getLanguage());
Zend_Debug::Dump($locale->getRegion());
die;
结果:
string(2) "en"
bool(false)
浏览器:EN_US
$locale = new Zend_Locale(Zend_Locale::BROWSER);
Zend_Debug::Dump($locale->getLanguage());
Zend_Debug::Dump($locale->getRegion());
die;
结果:
string(2) "en"
string(2) "US"
何我有解决这个问题吗?
这是我的插件控制器:
class MyProject_Controller_Plugin_Language extends Zend_Controller_Plugin_Abstract {
public function routeShutdown(Zend_Controller_Request_Abstract $request) {
$locale = new Zend_Locale(Zend_Locale::BROWSER);
$registry = Zend_Registry::getInstance();
// Check if the config file has been created
$isReady = MyProject_Main::isReady();
$module = $request->getModuleName();
if($module == "default"){ // set the right session namespace per module
$ns = new Zend_Session_Namespace ('Default');
}elseif($module == "admin"){
$ns = new Zend_Session_Namespace ('Admin');
}else{
$ns = new Zend_Session_Namespace ('Default');
}
// check the user request if it is not set, please get the old prefereces
$lang = $request->getParam ('lang', $ns->lang);
if(empty($lang)){ // Get the user preference
if(strlen($locale) == 2){ // Check if the Browser locale is formed with 2 chars
$lang = $locale;
}elseif (strlen($locale) > 4){ // Check if the Browser locale is formed with > 4 chars
$lang = substr($locale, 0, 2); // Get the language code from the browser preference
}
}
// Get the translate language or the default language: en
if(file_exists(PUBLIC_PATH . "/languages/$lang/$lang.mo")){
$translate = new Zend_Translate(array('adapter' => "MyProject_Translate_Adapter_Gettext", 'content' => PUBLIC_PATH . "/languages/$lang/$lang.mo", 'locale' => $lang, 'disableNotices' => true));
}else{
$translate = new Zend_Translate(array('adapter' => "MyProject_Translate_Adapter_Gettext", 'locale' => $lang, 'disableNotices' => true));
}
$registry->set('Zend_Translate', $translate);
$registry->set('Zend_Locale', $locale);
if($isReady){
$ns->langid = Languages::get_language_id_by_code($lang);
}else{
$ns->langid = 1;
}
$ns->lang = $lang;
}
}
感谢
嗨我已经更新了我的问题添加php代码。正如你所看到的,我已经避免了像之前描述的那样设置货币,并且我已经以这种方式处理了区域设置,但在我看来,这是一种粗鲁的方式。任何建议? – Michelangelo 2013-05-10 09:36:43