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