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)); }
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); }