/* Function: GetLocaleInfoAmPm Obtains the value of the AM or PM string for a locale. */ UErrorCode GetLocaleInfoAmPm(const char* locale, bool am, UChar* value, int32_t valueLength) { UErrorCode status = U_ZERO_ERROR; UDateFormat* pFormat = udat_open(UDAT_DEFAULT, UDAT_DEFAULT, locale, nullptr, 0, nullptr, 0, &status); UDateFormatHolder formatHolder(pFormat, status); if (U_FAILURE(status)) { return status; } udat_getSymbols(pFormat, UDAT_AM_PMS, am ? 0 : 1, value, valueLength, &status); return status; }
/* Function: GetLocaleInfoDecimalFormatSymbol Obtains the value of a DecimalFormatSymbols */ UErrorCode GetLocaleInfoDecimalFormatSymbol(const char* locale, UNumberFormatSymbol symbol, UChar* value, int32_t valueLength) { UErrorCode status = U_ZERO_ERROR; UNumberFormat* pFormat = unum_open(UNUM_DECIMAL, nullptr, 0, locale, nullptr, &status); UNumberFormatHolder formatHolder(pFormat, status); if (U_FAILURE(status)) { return status; } unum_getSymbol(pFormat, symbol, value, valueLength, &status); return status; }
/* Function: GetPercentPositivePattern Implementation of NumberFormatInfo.PercentPositivePattern. Returns the pattern index. */ int GetPercentPositivePattern(const char* locale) { const int DEFAULT_VALUE = 0; static const char* Patterns[] = {"n %", "n%", "%n", "% n"}; UErrorCode status = U_ZERO_ERROR; UNumberFormat* pFormat = unum_open(UNUM_PERCENT, nullptr, 0, locale, nullptr, &status); UNumberFormatHolder formatHolder(pFormat, status); assert(U_SUCCESS(status)); if (U_SUCCESS(status)) { int value = GetNumericPattern(pFormat, Patterns, ARRAY_LENGTH(Patterns), false); if (value >= 0) { return value; } } return DEFAULT_VALUE; }
/* PAL Function: GetLocaleTimeFormat Obtains time format information (in ICU format, it needs to be coverted to .NET Format). Returns 1 for success, 0 otherwise */ extern "C" int32_t GetLocaleTimeFormat(const UChar* localeName, int shortFormat, UChar* value, int32_t valueLength) { UErrorCode err = U_ZERO_ERROR; char locale[ULOC_FULLNAME_CAPACITY]; GetLocale(localeName, locale, ULOC_FULLNAME_CAPACITY, false, &err); if (U_FAILURE(err)) { return UErrorCodeToBool(U_ILLEGAL_ARGUMENT_ERROR); } UDateFormatStyle style = (shortFormat != 0) ? UDAT_SHORT : UDAT_MEDIUM; UDateFormat* pFormat = udat_open(style, UDAT_NONE, locale, nullptr, 0, nullptr, 0, &err); UDateFormatHolder formatHolder(pFormat, err); if (U_FAILURE(err)) return UErrorCodeToBool(err); udat_toPattern(pFormat, false, value, valueLength, &err); return UErrorCodeToBool(err); }
/* Function: GetNumberNegativePattern Implementation of NumberFormatInfo.NumberNegativePattern. Returns the pattern index. */ int GetNumberNegativePattern(const char* locale) { const int DEFAULT_VALUE = 1; static const char* Patterns[] = {"(n)", "-n", "- n", "n-", "n -"}; UErrorCode status = U_ZERO_ERROR; UNumberFormat* pFormat = unum_open(UNUM_DECIMAL, nullptr, 0, locale, nullptr, &status); UNumberFormatHolder formatHolder(pFormat, status); assert(U_SUCCESS(status)); if (U_SUCCESS(status)) { int value = GetNumericPattern(pFormat, Patterns, ARRAY_LENGTH(Patterns), true); if (value >= 0) { return value; } } return DEFAULT_VALUE; }