Monday, December 28, 2009

Working with locales


In this example, we get or set locales. We also translate months, languages, regions, etc... And we get numbers in their local format.

Components used in this example
Working with locales
  • We define the list of data with translations.

class MyLocale
{
    
// We define the list of data with translations.
    
public $transListOptions = array(
        
'alpha3toterritory',
        
'characters''chartofallback''citytotimezone''currencyfraction',
        
'currencyrounding''currencysymbol''currencytoname''currencytoregion',
        
'date''dateinterval''dateitem''datetime''day''days''delimiters',
        
'era''eras''fallbacktochar''field''key',
        
'language''languagetoscript''languagetoterritory''layout''localeupgrade',
        
'measurement''month''months',
        
'nametocurrency''numberingsystem''numerictoterritory',
        
'phonetoterritory''postaltoterritory''quarter''quarters''question',
        
'regiontocurrency''regiontoterritory''relative',
        
'script''scripttolanguage''symbols',
        
'territory''territorytoalpha3''territorytolanguage''territorytonumeric',
        
'territorytophone''territorytoregion''territorytotimezone',
        
'time''timezonetocity''timezonetoterritory''timezonetowindows''type',
        
'unit''variant''week''windowstotimezone',
    );
Processing the locale
  • We get the locale, the method and the action.
  • We set the cache.
  • We get details on the locale.
  • Or we set a default locale.
  • Or we translate predefined data.
  • Or we convert numbers to a local format.
  • If we catch an exception, we return the error message.

    public function process()
    {
        
// We get the locale, the method and the action.
        
list($locale$method$option) = $this->_getParameters();

        try {
            
// We set the cache.
            
$this->_setCache();

            switch (
$method) {
                
// We get details on the locale.

                
case 'Zend_Locale::findLocale':
                    
$result Zend_Locale::findLocale($locale);
                    break;

                case 
'getLanguage':
                case 
'getRegion':
                case 
'getHttpCharset':
                    
$localObj = new Zend_Locale($locale);
                    
$result $localObj->$method();
                    break;

                
// Or we set a default locale.

                
case 'Zend_Locale::setDefault':
                    
Zend_Locale::setDefault($locale);
                    
$result Zend_Locale::getDefault();
                    break;

                case 
'Zend_Registry::set':
                    
$localObj = new Zend_Locale($locale);
                    
Zend_Registry::set('Zend_Locale'$localObj);
                    
$result Zend_Registry::get('Zend_Locale');
                    break;

                
// Or we translate predefined data.

                
case 'Zend_Locale::getTranslationList':
                    
$result Zend_Locale::getTranslationList($option$locale);
                    break;

                case 
'getQuestion':
                    
$localObj = new Zend_Locale();
                    
$result $localObj->getQuestion($locale);
                    break;

                
// Or we convert numbers to a local format.

                
case 'toInteger':
                case 
'toFloat':
                case 
'toNumber':
                    
$result Zend_Locale_Format::$method($option,
                        array(
'locale' => $locale));
                    break;

                default:
                    
$result = new Zend_Locale($locale);
            }

        } catch (
Exception $e) {
            
// If we catch an exception, we return the error message.
            
$result $e->getMessage();
        }

        return array(
$locale$method$option$result);
    }
Extraction of the parameters from the GET request

    private function _getParameters()
    {
        
$locale = empty($_GET['locale'])? null $_GET['locale'];
        
$method = isset($_GET['method'])? $_GET['method'] : null;
        
$option = isset($_GET['option'])? $_GET['option'] : null;

        return array(
$locale$method$option);
    }
Setting the cache

    private function _setCache()
    {
        
$frontendOptions = array('lifetime' => 3600'automatic_serialization' => true);
        
$backendOptions = array('cache_dir' => sys_get_temp_dir());
        
$cache Zend_Cache::factory('Core''File'$frontendOptions$backendOptions);
        
Zend_Locale::setCache($cache);
    }

}

No comments:

Post a Comment