Изменение значения NumberConstants.decimalSeparator () - PullRequest
2 голосов
/ 01 июня 2009

Я работаю с NumberField и NumberFormat. Как я могу изменить значение NumberConstants.decimalSeparator () без изменения моей локали? Например, я хочу иметь "." или "," как десятичные разделители для всех локалей. Можно ли создать файл пользовательских свойств NumberConstants_bla.properties и заставить gxt использовать его вместо стандартных NumberConstants_ru_RU.properties или NumberConstants_en_US.properties (в зависимости от текущей локали)? Где мне разместить этот файл?

Ответы [ 2 ]

1 голос
/ 01 июня 2009

В Java вы можете установить десятичный разделитель, используя DecimalFormatSymbols .

// default symbols for the locale
DecimalFormatSymbols decimalFormatSymbols = DecimalFormatSymbols.getInstance();
// set your required separator
decimalFormatSymbols.setDecimalSeparator(',');
// create a decimal format and set your symbols
DecimalFormat format = new DecimalFormat();
format.setDecimalFormatSymbols(decimalFormatSymbols);
0 голосов
/ 28 марта 2013

Вы можете создать свои собственные NumberConstants (в которые вы помещаете требуемый десятичный разделитель), а затем использовать его для создания собственного NumberFormat.

Пример моих собственных NumberConstants:

import com.google.gwt.i18n.client.constants.NumberConstants;

public class MyNumberConstants implements NumberConstants {
  @Override
  public String notANumber() {
    return "NaN";
  }

  @Override
  public String currencyPattern() {
    return "#,##0.00\\u00A0\\u00A4";
  }

  @Override
  public String decimalPattern() {
    return "#,##0.###";
  }

  @Override
  public String decimalSeparator() {
    return ".";
  }

  @Override
  public String defCurrencyCode() {
    return "EUR";
  }

  @Override
  public String exponentialSymbol() {
    return "e";
  }

  @Override
  public String globalCurrencyPattern() {
    return "#,##0.00\\u00A0\\u00A4";
  }

  @Override
  public String groupingSeparator() {
    return "\\u00A0";
  }

  @Override
  public String infinity() {
    return "\u221E";
  }

  @Override
  public String minusSign() {
    return "-";
  }

  @Override
  public String monetaryGroupingSeparator() {
    return ",";
  }

  @Override
  public String monetarySeparator() {
    return "\\u00A0";
  }

  @Override
  public String percent() {
    return "%";
  }

  @Override
  public String percentPattern() {
    return "#,##0\\u00A0%";
  }

  @Override
  public String perMill() {
    return "\\u2030";
  }

  @Override
  public String plusSign() {
    return "+";
  }

  @Override
  public String scientificPattern() {
    return "#E0";
  }

  @Override
  public String simpleCurrencyPattern() {
    return "#,##0.00\\u00A0\\u00A4";
  }

  @Override
  public String zeroDigit() {
    return "0";
  }
}

Пример MyFormat:

public class MyFormat extends NumberFormat{

  public MyFormat(){
    super(new MyNumberConstants(),"0.0", CurrencyList.get().getDefault(),true);
  }
}

Предупреждение: это уродливый обходной путь, который может вызвать проблемы для i18n. Я использую его просто для форматирования некоторого измерения, которое, как я предполагаю, будет отображаться одинаково для всех.

...