在GWT中指定自定义货币,数字和日期时间格式的好方法是什么?

时间:2009-06-03 18:30:47

标签: datetime gwt internationalization currency

我有一个GWT项目,我需要手动指定货币,数字和日期时间格式。这些自定义包括指定货币符号,分组分隔符,小数分隔符,负数格式等。实现此目的的最佳方法是什么?

我应该使用GWT NumberFormat课吗? NumberFormat广泛使用GWT国际化结构,如Constants接口等。如果您因此指定了自定义数字格式掩码,它仍将查看当前区域设置并使用这些货币符号,十进制symol和千位分隔符,如在后期绑定和国际化的“NumberFormat”实例中指定。

我的问题是:将如何实现这一目标?你会重新实现NumberFormat的功能吗?你会从它派生并使用受保护的构造函数并将其传递给您自己创建的某种自定义NumberConstant实例吗?如何获取i18n NumberConstants实例,并使用它来填充您自己的实例并仅覆盖您想要的内容?

你会如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

我使用NumberFormat.getFormat(字符串格式)进行自定义货币格式化(在$符号前删除“US”)。

在我的应用程序中,我将结果放入公共常量。我已经在i18n资源包中存储了“format”参数以及所有特定于UI的字符串。

答案 1 :(得分:0)

public class MyNumberFormat extends NumberFormat{

    private static CurrencyCodeMapConstants currencyCodeMapConstants = GWT.create(CurrencyCodeMapConstants.class);

    protected MyNumberFormat(String pattern, CurrencyData cdata,
            boolean userSuppliedPattern) {
        super(pattern, cdata, userSuppliedPattern);     
    }

    public static NumberFormat getCurrencyFormat(String currencyCode) {     
        return new MyNumberFormat(defaultNumberConstants.currencyPattern(),
            lookupCurrency(currencyCode), false);
      }

      private static CurrencyData lookupCurrency(String currencyCode) {
        CurrencyData currencyData = CurrencyList.get().lookup(currencyCode);

        Map currencyMap = currencyCodeMapConstants.currencyMap();       

        String code = currencyData.getCurrencyCode();
        //String symbol = currencyData.getCurrencySymbol();
        String symbol = currencyMap.get(currencyCode);
        int fractionDigits = currencyData.getDefaultFractionDigits();
        String portableSymbol = currencyData.getPortableCurrencySymbol();       

        return toCurrencyData(code, symbol, fractionDigits, portableSymbol);
      }

      public static native CurrencyData toCurrencyData(String code, String symbol, int fractionDigits, String portableSymbol) /*-{
        return [ code, symbol, fractionDigits, portableSymbol ];
      }-*/;
}

我可以在GXT网格中使用

        column = new ColumnConfig("precioventa", constants.modeloPrendaPrecioVenta(), 100);
        column.setAlignment(HorizontalAlignment.RIGHT);        
        column.setNumberFormat(MyNumberFormat.getCurrencyFormat("PEN"));        
        columns.add(column);