UnicodeString& ICUService::getDisplayName(const UnicodeString& id, UnicodeString& result, const Locale& locale) const { { UErrorCode status = U_ZERO_ERROR; Mutex mutex(&lock); const Hashtable* map = getVisibleIDMap(status); if (map != NULL) { ICUServiceFactory* f = (ICUServiceFactory*)map->get(id); if (f != NULL) { f->getDisplayName(id, locale, result); return result; } // fallback UErrorCode status = U_ZERO_ERROR; ICUServiceKey* fallbackKey = createKey(&id, status); while (fallbackKey->fallback()) { UnicodeString us; fallbackKey->currentID(us); f = (ICUServiceFactory*)map->get(us); if (f != NULL) { f->getDisplayName(id, locale, result); delete fallbackKey; return result; } } delete fallbackKey; } } result.setToBogus(); return result; }
UBool LocaleKeyFactory::handlesKey(const ICUServiceKey& key, UErrorCode& status) const { const Hashtable* supported = getSupportedIDs(status); if (supported) { UnicodeString id; key.currentID(id); return supported->get(id) != NULL; } return FALSE; }