Beispiel #1
0
void LocaleICU::initializeLocaleData()
{
    if (m_didCreateDecimalFormat)
        return;
    m_didCreateDecimalFormat = true;
    UErrorCode status = U_ZERO_ERROR;
    m_numberFormat = unum_open(UNUM_DECIMAL, 0, 0, m_locale.data(), 0, &status);
    if (!U_SUCCESS(status))
        return;

    Vector<String, DecimalSymbolsSize> symbols;
    symbols.append(decimalSymbol(UNUM_ZERO_DIGIT_SYMBOL));
    symbols.append(decimalSymbol(UNUM_ONE_DIGIT_SYMBOL));
    symbols.append(decimalSymbol(UNUM_TWO_DIGIT_SYMBOL));
    symbols.append(decimalSymbol(UNUM_THREE_DIGIT_SYMBOL));
    symbols.append(decimalSymbol(UNUM_FOUR_DIGIT_SYMBOL));
    symbols.append(decimalSymbol(UNUM_FIVE_DIGIT_SYMBOL));
    symbols.append(decimalSymbol(UNUM_SIX_DIGIT_SYMBOL));
    symbols.append(decimalSymbol(UNUM_SEVEN_DIGIT_SYMBOL));
    symbols.append(decimalSymbol(UNUM_EIGHT_DIGIT_SYMBOL));
    symbols.append(decimalSymbol(UNUM_NINE_DIGIT_SYMBOL));
    symbols.append(decimalSymbol(UNUM_DECIMAL_SEPARATOR_SYMBOL));
    symbols.append(decimalSymbol(UNUM_GROUPING_SEPARATOR_SYMBOL));
    ASSERT(symbols.size() == DecimalSymbolsSize);
    setLocaleData(symbols, decimalTextAttribute(UNUM_POSITIVE_PREFIX), decimalTextAttribute(UNUM_POSITIVE_SUFFIX), decimalTextAttribute(UNUM_NEGATIVE_PREFIX), decimalTextAttribute(UNUM_NEGATIVE_SUFFIX));
}
Beispiel #2
0
void LocaleWin::initializeLocaleData() {
  if (m_didInitializeNumberData)
    return;

  Vector<String, DecimalSymbolsSize> symbols;
  enum DigitSubstitution {
    DigitSubstitutionContext = 0,
    DigitSubstitution0to9 = 1,
    DigitSubstitutionNative = 2,
  };
  DWORD digitSubstitution = DigitSubstitution0to9;
  getLocaleInfo(LOCALE_IDIGITSUBSTITUTION, digitSubstitution);
  if (digitSubstitution == DigitSubstitution0to9) {
    symbols.append("0");
    symbols.append("1");
    symbols.append("2");
    symbols.append("3");
    symbols.append("4");
    symbols.append("5");
    symbols.append("6");
    symbols.append("7");
    symbols.append("8");
    symbols.append("9");
  } else {
    String digits = getLocaleInfoString(LOCALE_SNATIVEDIGITS);
    ASSERT(digits.length() >= 10);
    for (unsigned i = 0; i < 10; ++i)
      symbols.append(digits.substring(i, 1));
  }
  ASSERT(symbols.size() == DecimalSeparatorIndex);
  symbols.append(getLocaleInfoString(LOCALE_SDECIMAL));
  ASSERT(symbols.size() == GroupSeparatorIndex);
  symbols.append(getLocaleInfoString(LOCALE_STHOUSAND));
  ASSERT(symbols.size() == DecimalSymbolsSize);

  String negativeSign = getLocaleInfoString(LOCALE_SNEGATIVESIGN);
  enum NegativeFormat {
    NegativeFormatParenthesis = 0,
    NegativeFormatSignPrefix = 1,
    NegativeFormatSignSpacePrefix = 2,
    NegativeFormatSignSuffix = 3,
    NegativeFormatSpaceSignSuffix = 4,
  };
  DWORD negativeFormat = NegativeFormatSignPrefix;
  getLocaleInfo(LOCALE_INEGNUMBER, negativeFormat);
  String negativePrefix = emptyString();
  String negativeSuffix = emptyString();
  switch (negativeFormat) {
    case NegativeFormatParenthesis:
      negativePrefix = "(";
      negativeSuffix = ")";
      break;
    case NegativeFormatSignSpacePrefix:
      negativePrefix = negativeSign + " ";
      break;
    case NegativeFormatSignSuffix:
      negativeSuffix = negativeSign;
      break;
    case NegativeFormatSpaceSignSuffix:
      negativeSuffix = " " + negativeSign;
      break;
    case NegativeFormatSignPrefix:  // Fall through.
    default:
      negativePrefix = negativeSign;
      break;
  }
  m_didInitializeNumberData = true;
  setLocaleData(symbols, emptyString(), emptyString(), negativePrefix,
                negativeSuffix);
}