CalendarDataResult
GetNativeCalendarName(Locale& locale, CalendarId calendarId, UChar* nativeName, int32_t stringCapacity)
{
- LocalPointer<LocaleDisplayNames> displayNames(LocaleDisplayNames::createInstance(locale));
-
- UnicodeString calendarName;
- displayNames->keyValueDisplayName("calendar", GetCalendarName(calendarId), calendarName);
-
UErrorCode err = U_ZERO_ERROR;
- calendarName.extract(nativeName, stringCapacity, err);
+ ULocaleDisplayNames* pDisplayNames = uldn_open(locale.getName(), ULDN_STANDARD_NAMES, &err);
+ ULocaleDisplayNamesHolder displayNamesHolder(pDisplayNames, err);
+
+ uldn_keyValueDisplayName(pDisplayNames, "calendar", GetCalendarName(calendarId), nativeName, stringCapacity, &err);
return GetCalendarDataResult(err);
}
#include "unicode/udatpg.h"
#include "unicode/udat.h"
#include "unicode/unum.h"
+#include "unicode/uldnames.h"
// IcuHolder is a template that can manage the lifetime of a raw pointer to ensure that it is cleaned up at the correct
// time. The general usage pattern is to aquire some ICU resource via an _open call, then construct a holder using the
}
};
+struct ULocaleDisplayNamesCloser
+{
+ void operator()(ULocaleDisplayNames* pLocaleDisplayNames) const
+ {
+ uldn_close(pLocaleDisplayNames);
+ }
+};
+
typedef IcuHolder<UCalendar, UCalendarCloser> UCalendarHolder;
typedef IcuHolder<UEnumeration, UEnumerationCloser> UEnumerationHolder;
typedef IcuHolder<UDateTimePatternGenerator, UDateTimePatternGeneratorCloser> UDateTimePatternGeneratorHolder;
typedef IcuHolder<UDateFormat, UDateFormatCloser> UDateFormatHolder;
typedef IcuHolder<UNumberFormat, UNumberFormatCloser> UNumberFormatHolder;
+typedef IcuHolder<ULocaleDisplayNames, ULocaleDisplayNamesCloser> ULocaleDisplayNamesHolder;