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

Popular posts from this blog

linux - xterm copying to CLIPBOARD using copy-selection causes automatic updating of CLIPBOARD upon mouse selection -

qt - Errors in generated MOC files for QT5 from cmake -