Zend Locale & Zend_Currency: Region code -
i trying create connection between zend_locale , zend_currency using browser language preferences.
browser: en
$locale = new zend_locale(zend_locale::browser); zend_debug::dump($locale->getlanguage()); zend_debug::dump($locale->getregion()); die; result:
string(2) "en" bool(false) browser: en_us
$locale = new zend_locale(zend_locale::browser); zend_debug::dump($locale->getlanguage()); zend_debug::dump($locale->getregion()); die; result:
string(2) "en" string(2) "us" ho have solve problem?
this plugin controller:
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 config file has been created $isready = myproject_main::isready(); $module = $request->getmodulename (); if($module == "default"){ // set 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 user request if not set, please old prefereces $lang = $request->getparam ( 'lang', $ns->lang ); if(empty($lang)){ // user preference if(strlen($locale) == 2){ // check if browser locale formed 2 chars $lang = $locale; }elseif (strlen($locale) > 4){ // check if browser locale formed > 4 chars $lang = substr($locale, 0, 2); // language code browser preference } } // translate language or 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; } } thanks
obviously, client's language preferences first step, won't in cases. if return value, not use determine appropriate currency described - users may set preferred language/region foreign setting. examples expats , language learners. though may edge case, don't trust detect currency.
the robust solution use geolocation service returns currency location found, e.g. http://www.geoplugin.com/webservices/php.
the combination of both methods may solution. if return conflicting values, offer user possibility choose 2 found currencies (or other).
Comments
Post a Comment