Zend framework Zend Locale&;Zend_货币:地区代码
我正在尝试使用浏览器语言首选项在Zend_语言环境和Zend_货币之间创建连接 浏览器:enZend framework Zend Locale&;Zend_货币:地区代码,zend-framework,zend-locale,zend-currency,Zend Framework,Zend Locale,Zend Currency,我正在尝试使用浏览器语言首选项在Zend_语言环境和Zend_货币之间创建连接 浏览器:en $locale = new Zend_Locale(Zend_Locale::BROWSER); Zend_Debug::Dump($locale->getLanguage()); Zend_Debug::Dump($locale->getRegion()); die; $locale = new Zend_Locale(Zend_Locale::BROWSER); Zend_Debug:
$locale = new Zend_Locale(Zend_Locale::BROWSER);
Zend_Debug::Dump($locale->getLanguage());
Zend_Debug::Dump($locale->getRegion());
die;
$locale = new Zend_Locale(Zend_Locale::BROWSER);
Zend_Debug::Dump($locale->getLanguage());
Zend_Debug::Dump($locale->getRegion());
die;
结果:
string(2) "en"
bool(false)
string(2) "en"
string(2) "US"
浏览器:en_US
结果:
string(2) "en"
bool(false)
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代码。正如您所看到的,我必须避免像您之前描述的那样设置货币,并且我以这种方式处理了区域设置,但在我看来这是一种粗鲁的方式。有什么建议吗?