static Vector<String> localeData(const String& locale, size_t keyIndex) { Vector<String> keyLocaleData; switch (keyIndex) { case indexOfExtensionKeyCa: { UErrorCode status = U_ZERO_ERROR; UEnumeration* calendars = ucal_getKeywordValuesForLocale("calendar", locale.utf8().data(), false, &status); ASSERT(U_SUCCESS(status)); int32_t nameLength; while (const char* availableName = uenum_next(calendars, &nameLength, &status)) { ASSERT(U_SUCCESS(status)); String calendar = String(availableName, nameLength); keyLocaleData.append(calendar); // Ensure aliases used in language tag are allowed. if (calendar == "gregorian") keyLocaleData.append(ASCIILiteral("gregory")); else if (calendar == "islamic-civil") keyLocaleData.append(ASCIILiteral("islamicc")); else if (calendar == "ethiopic-amete-alem") keyLocaleData.append(ASCIILiteral("ethioaa")); } uenum_close(calendars); break; } case indexOfExtensionKeyNu: keyLocaleData = numberingSystemsForLocale(locale); break; default: ASSERT_NOT_REACHED(); } return keyLocaleData; }
static Vector<String> localeData(const String& locale, size_t keyIndex) { // 9.1 Internal slots of Service Constructors & 11.2.3 Internal slots (ECMA-402 2.0) ASSERT_UNUSED(keyIndex, !keyIndex); // The index of the extension key "nu" in relevantExtensionKeys is 0. return numberingSystemsForLocale(locale); }