Zend Валюта в евро с английским языком - PullRequest
0 голосов
/ 10 июня 2011

Вполне возможно, что я совершенно не понимаю подхода Zend при работе с валютами.

Что я хочу сделать, так это иметь объект Zend_Currency, где активной валютой является ЕВРО, а язык должен бытьАнглийский (язык приложения en_GB).Zend_Currency подключен к локали, и если я создаю Zend_Currency с английской локалью, у меня не может быть EUR.

Я также пробовал это

$this->currency = new Zend_Currency(array('currency' => 'EUR'), "en_GB");

Но если я пытаюсь

echo $this->currency->getSymbol(); // I get £

И нет способов поменять валюту.

Ответы [ 3 ]

2 голосов
/ 14 июня 2011

Это сработало:

$this->currency = new Zend_Currency('en_GB');
$this->currency->setFormat(array('currency' =>  'EUR', 'name' =>'EUR', 'symbol' => '€'));
2 голосов
/ 17 мая 2012

Я расширил Zend_Currency и переписал методы getName() и getSymbol(), чтобы они (как и Zend_Currency при изменении локали, чего мы не хотим ...) возвращают «свежие» данные из Zend_Locale_Data каждый раз, когда я делаю запрос.

В приведенном ниже примере класса вы можете создать экземпляр Default_Model_Currency() и установить для параметра валюты значение любой действительной валюты (например, EUR, USD и т. Д.), Сохраняя тот же языковой стандарт.

<?php

/*
* Currency class extends Zend_Currency with exchange
* functionality using the Exchange_Service
*
* @author HF Bonnet
*/
class Default_Model_Currency extends Zend_Currency
{
    /*
    * Precision to round currency values with, the
    * default precision is 0
    */
    private $_precision = 0;




    /*
    * Set the currency's precision
    *
    * @attribute int $precision
    * @return Default_Model_Currency
    */
    public function setPrecision($precision)
    {
        $validator = new Zend_Validator_Digits();
        if ($validator->isValid($precision))
            $this->_precision = $precision;

        return $this;
    }



    /*
    * Becouse of problems with zend_currency I've choosen
    * to override __toString
    */
    public function __toString()
    {
        return sprintf(
            '%s %s',
            $this->getShortName(),
            $this->getValue()
        );
    }



    /*
    * Get the full name from a currency, this method is overwitten
    * to support the changing of currency without changing the locale
    *
    * @param string $currency (Optional) Currency name
    * @param string|Zend_Locale $locale
    * @return string $name
    */
    public function getName($currency = null, $locale = null)
    {
        return Zend_Locale_Data::getContent(
            null, 
            'nametocurrency', 
            $this->getShortName()
        );
    }



    /*
    * Get the full name from a currency, this method is overwitten
    * to support the changing of a locale
    *       
    * @param string $currency (Optional) Currency name
    * @param string|Zend_Locale $locale
    * @return string $name
    */
    public function getSymbol($currency = null, $locale = null)
    {
        return Zend_Locale_Data::getContent(
            null, 
            'currencysymbol', 
            $this->getShortName()
        );
    }



    /*
    * Get the localized value from the currency
    *
    * @return string $value
    */
    public function getLocalizedValue()
    {
        return Zend_Locale_Format::toNumber(
            parent::getValue(),
            array(
                'precision' => $this->_precision,
                'locale' => $this->getLocale()
            )
        );
    }



    /*
    * Get the default valuta. First checks in the Zend_Registry
    * for the default valuta, if not found it is fetched from the
    * database.
    * 
    * @return string $defaultCurrency
    */
    public function getDefaultValuta()
    {
        $currency = Zend_Registry::get('currency');

        if (!isset($currency['default'])):
            $className = Zend_Registry::get('prefix')->services . 'Registry';
            $currency['default'] = $className::getInstance()
                                             ->getDb('currencyValuta')
                                             ->getDefaultValuta()
                                             ->getIso();
            Zend_Registry::set(
                'currency', $currency
            );
        endif;

        return $currency['default'];
    }



    /*
    * Exchanges the currency using the rates found in the
    * exchange service.
    *
    * @attribute string $to
    * @return Default_Model_Currency
    */
    public function exchange($to)
    {
        if ($to === $this->getShortName())
            return $this;

        $currencyTo = new Default_Model_Currency(
            array(
                'value' => 0,
                'currency' => $to,
                'precision' => $this->_precision
            )
        );

        // Set the exchange service
        $currencyTo->setService(
            $this->getExchangeService()
        );

        return $currencyTo->add($this);
    }



    /*
    * Get an Default_Model_Settings instance
    * 
    * @return Default_Model_Settings 
    */
    public function getExchangeService()
    {
        $className = Zend_Registry::get('prefix')->services . 'Exchange';
        return $className::getInstance();
    }

}
0 голосов
/ 10 июня 2011

Это похоже на работу: -

$currency = new Zend_Currency();
$currency->setFormat(array('currency' => 'EUR', 'symbol' => '€'));

Вы можете передать getFormat () массив, чтобы установить такие параметры. http://framework.zend.com/manual/en/zend.currency.options.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...