Done. Please cross-check both branches.
-- dims
--- Enke Michael <[EMAIL PROTECTED]> wrote:
> Hi folks,
> here is a patch for I18nTransformer:
> 1) new tag int-currency introduced:
>    In merchandise calculations often
>    the calculations are done not with double
>    ($1,23+$4,56) but with integers:
>    (cent 123+cent 456)
>    Soo give the value 579 will result
>    in 5.79 for US locale but 579 for spanish locale
>    because there is no sub currency in Spain.
> 2) the <i18n:number> tag did not preserve
>    trailing and leading zeros and did only show
>    three decimal places.
>    Soo <i18n:number>0.12345</i18n:number>
>    was transformed to 0.123
>    and <i18n:number>0.10000</i18n:number>
>    was transformed to 0.1
>    This is now fixed.
> Could a commiter commit please?
> 
> Regards,
> Michael
> 
> > --- I18nTransformer.java.orig       Thu Sep  6 15:46:30 2001
> +++ I18nTransformer.java      Fri Sep  7 12:57:30 2001
> @@ -258,7 +258,8 @@
>  
>      /**
>       * <code>sub-type</code> attribute is used with <code>i18:number</code> to
> -     * indicate a sub-type: <code>currency</code> or <code>percent</code>.
> +     * indicate a sub-type: <code>currency</code>, <code>int-currency</code>
> +     * or <code>percent</code>.
>       */
>      public static final String I18N_SUB_TYPE_ATTRIBUTE = "sub-type";
>  
> @@ -1058,6 +1059,8 @@
>  
>          // src format
>          DecimalFormat from_fmt = (DecimalFormat)NumberFormat.getInstance(srcLoc);
> +     int int_currency = 0;
> +
>       // src-pattern overwrites locale format
>          if (srcPattern != null) {
>              from_fmt.applyPattern(srcPattern);
> @@ -1065,10 +1068,28 @@
>  
>       // to format
>          DecimalFormat to_fmt = null;
> +        char dec = from_fmt.getDecimalFormatSymbols().getDecimalSeparator();
> +        int decAt = 0;
> +        boolean appendDec = false;
>          if (subType == null) {
>              to_fmt = (DecimalFormat)NumberFormat.getInstance(loc);
> +            to_fmt.setMaximumFractionDigits(309);
> +            for(int i=value.length()-1;
> +                i>=0 && value.charAt(i)!=dec;i--,decAt++);
> +            if(decAt < value.length()) to_fmt.setMinimumFractionDigits(decAt);
> +            decAt = 0;
> +            for(int i = 0; i < value.length() && value.charAt(i) != dec; i++) {
> +              if(Character.isDigit(value.charAt(i))) decAt++;
> +            }
> +            to_fmt.setMinimumIntegerDigits(decAt);
> +            if(value.charAt(value.length()-1) == dec) appendDec = true;
>          } else if (subType.equals("currency")) {
>              to_fmt = (DecimalFormat)NumberFormat.getCurrencyInstance(loc);
> +        } else if (subType.equals("int-currency")) {
> +            to_fmt = (DecimalFormat)NumberFormat.getCurrencyInstance(loc);
> +         int_currency = 1;
> +         for(int i=0;i<to_fmt.getMaximumFractionDigits();i++)
> +             int_currency *= 10;
>          } else if (subType.equals("percent")) {
>              to_fmt = (DecimalFormat)NumberFormat.getPercentInstance(loc);
>          }
> @@ -1083,6 +1104,12 @@
>          } else {
>              try {
>                  numberValue = from_fmt.parse(value);
> +                if(int_currency > 0)
> +                 numberValue = new Double(numberValue.doubleValue()/
> +                                          int_currency);
> +                else {
> +
> +                }
>              } catch (ParseException pe) {
>                  throw new SAXException(this.getClass().getName()
>                                         + "i18n:number - parsing error.", pe);
> @@ -1091,6 +1118,7 @@
>  
>          // we have all necessary data here: do formatting.
>          String result = to_fmt.format(numberValue);
> +        if(appendDec) result = result + dec;
>          debug("i18n:number result: " + result);
>          return result;
>      }
> > --- i18n-transformer.xml.orig       Fri Sep  7 14:50:02 2001
> +++ i18n-transformer.xml      Fri Sep  7 14:49:35 2001
> @@ -189,6 +189,7 @@
>                               </p>
>                                       <ul>
>                                               <li><code><![CDATA[<i18n:number 
>sub-type="currency" value="1703.74" />]]></code> will
> result in localized presentation of the <code>value</code> - $1,703.74 for US 
>locale.</li>
> +                                             <li><code><![CDATA[<i18n:number 
>sub-type="int-currency" value="170374" />]]></code> will
> result in localized presentation of the <code>value</code> - $1,703.74 for US 
>locale, 170374 for
> a currency without subunit.</li>
>                                               <li><code><![CDATA[<i18n:number 
>sub-type="percent" value="1.2" />]]></code> will result
> in localized percent <code>value</code> - %120 for most of the locales.</li>
>                                       </ul>
>                               <p>
> 
> > ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, email: [EMAIL PROTECTED]


=====
Davanum Srinivas, JNI-FAQ Manager
http://www.jGuru.com/faq/JNI

__________________________________________________
Do You Yahoo!?
Get email alerts & NEW webcam video instant messaging with Yahoo! Messenger
http://im.yahoo.com

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]

Reply via email to