
In this example, we display currencies in various formats and various languages.
Components used in this example
Working with currencies
class MyCurrency
{
- We get the locale, the region, the currency, the format and the output method.
- We set the cache.
- We verify the locale or we search the locale.
- We store the locale in the registry.
- We extract the territory from the locale if requested.
- We extract the currency from the territory if requested.
- We define the format of the currency if any.
- We execute the action.
- If we catch an exception, we return the error message.
    public function process()
    {
        // We get the locale, the region, the currency, the format and the output method.
        list($locale, $region, $fromLocale, $currency, $fromRegion,
            $localized, $normalized, $display, $position, $precision,
            $action) = $this->_getParameters();
        try {
            // We set the cache.
            $this->_setCache();
            // We verify the locale or we search the locale.
            $locale = MyLocale::findLocale($locale);
            // We store the locale in the registry.
            Zend_Registry::set('Zend_Locale', new Zend_Locale($locale));
            // We extract the territory from the locale if requested.
            $fromLocale and list(, $region) = explode('_', $locale);
            // We extract the currency from the territory if requested.
            $fromRegion and $currency = MyLocale::getRegionCurrency($region);
            $zendCurrency = new Zend_Currency($currency);
            // We define the format of the currency if any.
            $display and $format['display'] = constant("Zend_Currency::$display");
            $position and $format['position'] = constant("Zend_Currency::$position");
            is_null($precision) or $format['precision'] = (int)$precision;
            empty($format) or $zendCurrency->setFormat($format);
            // We execute the action.
            switch($action) {
                case 'Zend_Currency':
                    $result = $zendCurrency;
                    break;
                case 'getCurrencyList':
                    $result = $zendCurrency->getCurrencyList($region);
                    break;
                case 'getName':
                case 'getRegionList':
                case 'getShortName':
                case 'getSymbol':
                case 'getLocale':
                case 'toString':
                    $result = $zendCurrency->$action();
                    break;
                case 'toCurrency':
                default:
                    list($localized, $normalized) =
                        $this->_setNumber($localized, $normalized, $precision);
                    $result = $zendCurrency->toCurrency($normalized);
            }
        } catch (Exception $e) {
            // If we catch an exception, we return the error message.
            $result = $e->getMessage();
        }
        return array($locale, $region, $fromLocale, $currency, $fromRegion,
            $localized, $normalized, $display, $position, $precision,
            $action, $result);
    }
    private function _getParameters()
    {
        $locale = empty($_GET['locale'])? null : $_GET['locale'];
        $region = empty($_GET['region'])? null : $_GET['region'];
        $fromLocale = empty($_GET)? 1 : !empty($_GET['from-locale']);
        $currency = empty($_GET['currency'])? null : $_GET['currency'];
        $fromRegion = empty($_GET)? 1 : !empty($_GET['from-region']);
        $localized = isset($_GET['localized'])? $_GET['localized'] : null;
        $normalized = empty($_GET)? 1234.56 :
            (isset($_GET['normalized'])? $_GET['normalized'] : null);
        $display = isset($_GET['display'])? $_GET['display'] : null;
        $position = isset($_GET['position'])? $_GET['position'] : null;
        $precision = isset($_GET['precision'])? $_GET['precision'] : null;
        $precision == '' and $precision = null;
        $action = isset($_GET['action'])? $_GET['action'] : null;
        return array($locale, $region, $fromLocale, $currency, $fromRegion,
            $localized, $normalized, $display, $position, $precision,
            $action);
    }
    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);
    }
- We add the locale and the precision to the format.
- We normalize the amount and we convert the amount according to the locale.
    private function _setNumber($localized, $normalized, $precision)
    {
        // We add the locale and the precision to the format.
        $options['locale'] = Zend_Registry::get('Zend_Locale');
        is_null($precision) or $options['precision'] = (int)$precision;
        // We normalize the amount and we convert the amount according to the locale.
        if ($normalized) {
            $localized = Zend_Locale_Format::toNumber($normalized, $options);
            $normalized = Zend_Locale_Format::getNumber($localized, $options);
        } else if ($localized) {
            $normalized = Zend_Locale_Format::getNumber($localized, $options);
            $localized = Zend_Locale_Format::toNumber($normalized, $options);
        } else {
            $localized = Zend_Locale_Format::toNumber(0, $options);
            $normalized = 0;
        }
        return array($localized, $normalized);
    }
}
 
 
No comments:
Post a Comment