From 4835704a04cf5aa5ec71a8aef902d54b9c6cae82 Mon Sep 17 00:00:00 2001 From: wei <> Date: Fri, 6 Jan 2006 04:42:44 +0000 Subject: Adding I18N support. --- framework/I18N/TNumberFormat.php | 209 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 209 insertions(+) create mode 100644 framework/I18N/TNumberFormat.php (limited to 'framework/I18N/TNumberFormat.php') diff --git a/framework/I18N/TNumberFormat.php b/framework/I18N/TNumberFormat.php new file mode 100644 index 00000000..712f548b --- /dev/null +++ b/framework/I18N/TNumberFormat.php @@ -0,0 +1,209 @@ + + * @version $Revision: 1.7 $ $Date: 2005/12/15 07:14:49 $ + * @package System.I18N + */ + + /** + * Get the NumberFormat class. + */ +Prado::using('System.I18N.core.NumberFormat'); + + +/** + * To format numbers in locale sensitive manner use + * + * + * + * + * Numbers can be formatted as currency, percentage, decimal or scientific + * numbers by specifying the Type attribute. The known types are + * "currency", "percentage", "decimal" and "scientific". + * + * If someone from US want to see sales figures from a store in + * Germany (say using the EURO currency), formatted using the german + * currency, you would need to use the attribute Culture="de_DE" to get + * the currency right, e.g. 100,00 â‚?. The decimal and grouping separator is + * then also from the de_DE locale. This may lead to some confusion because + * people from US know the "," as thousand separator. Therefore a "Currency" + * attribute is available, so that the output from the following example + * results in â‚?100.00 + * + * + * + * + * Namespace: System.I18N + * + * Properties + * - Value, number, + *
Gets or sets the number to format. The tag content is used as Value + * if the Value property is not specified. + * - Type, string, + *
Gets or sets the formatting type. The valid types are + * 'decimal', 'currency', 'percentage' and 'scientific'. + * - Currency, string, + *
Gets or sets the currency symbol for the currency format. + * The default is 'USD' if the Currency property is not specified. + * - Pattern, string, + *
Gets or sets the custom number formatting pattern. + * + * @author Xiang Wei Zhuo + * @version v1.0, last update on Sat Dec 11 17:49:56 EST 2004 + * @package System.I18N + */ +class TNumberFormat extends TI18NControl +{ + /** + * Default NumberFormat, set to the application culture. + * @var NumberFormat + */ + protected static $formatter; + + /** + * Get the number formatting pattern. + * @return string format pattern. + */ + function getPattern() + { + return $this->getViewState('Pattern',''); + } + + /** + * Set the number format pattern. + * @param string format pattern. + */ + function setPattern($pattern) + { + $this->setViewState('Pattern',$pattern,''); + } + + /** + * Get the numberic value for this control. + * @return string number + */ + function getValue() + { + return $this->getViewState('Value',''); + } + + /** + * Set the numberic value for this control. + * @param string the number value + */ + function setValue($value) + { + $this->setViewState('Value',$value,''); + } + + /** + * Get the formatting type for this control. + * @return string formatting type. + */ + function getType() + { + $type = $this->getViewState('Type',''); + if(empty($type)) + return 'd'; + return $type; + } + + /** + * Set the formatting type for this control. + * @param string formatting type, either "decimal", "currency","percentage" + * or "scientific" + * @throws TPropertyTypeInvalidException + */ + function setType($type) + { + $type = strtolower($type); + + switch($type) + { + case 'decimal': + $this->setViewState('Type','d',''); break; + case 'currency': + $this->setViewState('Type','c',''); break; + case 'percentage': + $this->setViewState('Type','p',''); break; + case 'scientific': + $this->setViewState('Type','e',''); break; + default: + throw new TPropertyTypeInvalidException($this,'Type',$type); + } + + } + + /** + * Get the currency for this control. + * @param parameter + * @return string 3 letter currency code. + */ + function getCurrency() + { + $currency = $this->getViewState('Currency',''); + if(empty($currency)) + return 'USD'; + return $currency; + } + + /** + * Set the 3-letter ISO 4217 code. For example, the code + * "USD" represents the US Dollar and "EUR" represents the Euro currency. + * @param string currency code. + */ + function setCurrency($currency) + { + $this->setViewState('Currency', $currency,''); + } + + /** + * Formats the localized number, be it currency or decimal, or percentage. + * If the culture is not specified, the default application + * culture will be used. + * @return string formatted number + */ + protected function getFormattedValue() + { + $app = $this->Application->getGlobalization(); + //initialized the default class wide formatter + if(is_null(self::$formatter)) + self::$formatter = new NumberFormat($app->Culture); + + $pattern = strlen($this->getPattern()) > 0 + ? $this->getPattern() : $this->getType(); + + $culture = $this->getCulture(); + //return the specific cultural formatted number + if(!empty($culture) && $app->Culture != $culture) + { + $formatter = new NumberFormat($culture); + return $formatter->format($this->getValue(),$pattern, + $this->getCurrency(), + $this->getCharset()); + } + + //return the application wide culture formatted number. + return self::$formatter->format($this->getValue(),$pattern, + $this->getCurrency(), + $this->getCharset()); + } + + protected function render($writer) + { + $writer->write($this->getFormattedValue()); + } +} + +?> \ No newline at end of file -- cgit v1.2.3