function price_format($price, $sf_user = false) { if (!$sf_user) { $sf_user = sfContext::getInstance()->getUser(); } $cur = $sf_user->getCurrency(); $culture = $sf_user->getCulture(); $numberFormat = new sfNumberFormat($culture); $ar = sfNumberFormatInfo::getCurrencyInstance($culture)->getPattern(); if ($cur->getAbbr() != 'EUR' && $cur->getAbbr() != 'USD') { $pattern = str_replace('¤', '', $ar['positive']); $pattern = trim(str_replace('¤', '', $ar['positive'])) . ' ' . $cur->getAbbr(); } else { $pattern = $ar['positive']; } return $numberFormat->format($cur->getFactor() * $price, $pattern, $cur->getAbbr()); }
$n = sfNumberFormatInfo::getInstance(); $n1 = sfNumberFormatInfo::getInstance(); $n->setPattern(sfNumberFormatInfo::CURRENCY); $pattern = $n->getPattern(); $n1->setPattern(sfNumberFormatInfo::PERCENTAGE); $pattern1 = $n1->getPattern(); $t->isnt($pattern, $pattern1, '->getPattern() ->setPattern() changes the current pattern'); $n = sfNumberFormatInfo::getInstance(); $n1 = sfNumberFormatInfo::getInstance(); $n->Pattern = sfNumberFormatInfo::CURRENCY; $n1->setPattern(sfNumberFormatInfo::CURRENCY); $t->is($n->getPattern(), $n1->getPattern(), '->setPattern() is equivalent to ->Pattern = '); $t->is($n->getPattern(), $n->Pattern, '->getPattern() is equivalent to ->Pattern'); // ::getCurrencyInstance() $t->diag('::getCurrencyInstance()'); $t->is(sfNumberFormatInfo::getCurrencyInstance()->getPattern(), sfNumberFormatInfo::getInstance(null, sfNumberFormatInfo::CURRENCY)->getPattern(), '::getCurrencyInstance() is a shortcut for ::getInstance() and type sfNumberFormatInfo::CURRENCY'); // ::getPercentageInstance() $t->diag('::getPercentageInstance()'); $t->is(sfNumberFormatInfo::getPercentageInstance()->getPattern(), sfNumberFormatInfo::getInstance(null, sfNumberFormatInfo::PERCENTAGE)->getPattern(), '::getPercentageInstance() is a shortcut for ::getInstance() and type sfNumberFormatInfo::PERCENTAGE'); // ::getScientificInstance() $t->diag('::getScientificInstance()'); $t->is(sfNumberFormatInfo::getScientificInstance()->getPattern(), sfNumberFormatInfo::getInstance(null, sfNumberFormatInfo::SCIENTIFIC)->getPattern(), '::getScientificInstance() is a shortcut for ::getInstance() and type sfNumberFormatInfo::SCIENTIFIC'); $tests = array('fr' => array('DecimalDigits' => -1, 'DecimalSeparator' => ',', 'GroupSeparator' => ' ', 'CurrencySymbol' => '$US', 'NegativeInfinitySymbol' => '-∞', 'PositiveInfinitySymbol' => '+∞', 'NegativeSign' => '-', 'PositiveSign' => '+', 'NaNSymbol' => 'NaN', 'PercentSymbol' => '%', 'PerMilleSymbol' => '‰'), 'en' => array('DecimalDigits' => -1, 'DecimalSeparator' => '.', 'GroupSeparator' => ',', 'CurrencySymbol' => '$', 'NegativeInfinitySymbol' => '-∞', 'PositiveInfinitySymbol' => '+∞', 'NegativeSign' => '-', 'PositiveSign' => '+', 'NaNSymbol' => 'NaN', 'PercentSymbol' => '%', 'PerMilleSymbol' => '‰')); foreach ($tests as $culture => $fixtures) { $n = sfNumberFormatInfo::getInstance($culture); foreach ($fixtures as $method => $result) { $getter = 'get' . $method; $t->is($n->{$getter}(), $result, sprintf('->%s() returns "%s" for culture "%s"', $getter, $result, $culture)); } } // setters/getters