static Chronology<CalendarDate> getChronology(Locale locale) {

        String name = locale.getUnicodeLocaleType("ca");

        if (name == null) {
            switch (FormatUtils.getRegion(locale)) {
                case "AF":
                case "IR":
                    name = "persian";
                    break;
                case "SA":
                    name = "islamic-umalqura";
                    break;
                case "TH":
                    name = "buddhist";
                    break;
                default:
                    return adapt(PlainDate.axis(), ""); // ISO-8601 as default
            }
        } else if (name.equals("ethiopic-amete-alem")) {
            name = "ethioaa";
        } else if (name.equals("islamicc")) {
            name = "islamic-civil";
        } else if (name.equals("islamic")) {
            name = "islamic-icu4j"; // TODO: astro-variant
        }

        for (CalendarProvider provider : ResourceLoader.getInstance().services(CalendarProvider.class)) {
            Optional<Chronology<? extends CalendarDate>> c = provider.findChronology(name);

            if (c.isPresent()) {
                String calendarVariant = "";
                if (name.equals("historic")) {
                    calendarVariant = ChronoHistory.of(locale).getVariant();
                } else if (name.indexOf('-') > 0) {
                    calendarVariant = name;
                }
                return adapt(c.get(), calendarVariant);
            }
        }

        throw new IllegalArgumentException("Could not find any calendar for: " + name);

    }
static Chronology < CalendarDate > getChronology ( Locale locale ) { String name = locale . getUnicodeLocaleType ( "ca" ) ; if ( name == null ) { switch ( FormatUtils . getRegion ( locale ) ) { case "AF" : case "IR" : name = "persian" ; break ; case "SA" : name = "islamic-umalqura" ; break ; case "TH" : name = "buddhist" ; break ; default : return adapt ( PlainDate . axis ( ) , "" ) ; } } else if ( name . equals ( "ethiopic-amete-alem" ) ) { name = "ethioaa" ; } else if ( name . equals ( "islamicc" ) ) { name = "islamic-civil" ; } else if ( name . equals ( "islamic" ) ) { name = "islamic-icu4j" ; } for ( CalendarProvider provider : ResourceLoader . getInstance ( ) . services ( CalendarProvider . class ) ) { Optional < Chronology < ? extends CalendarDate > > c = provider . findChronology ( name ) ; if ( c . isPresent ( ) ) { String calendarVariant = "" ; if ( name . equals ( "historic" ) ) { calendarVariant = ChronoHistory . of ( locale ) . getVariant ( ) ; } else if ( name . indexOf ( '-' ) > 0 ) { calendarVariant = name ; } return adapt ( c . get ( ) , calendarVariant ) ; } } throw new IllegalArgumentException ( "Could not find any calendar for: " + name ) ; }
<p>Obtains a suitable chronology for given locale. </p>

<p>First the unicode-ca-extension of given locale is queried. If not available then ISO-8601 will be
chosen. Otherwise, all available implementations of {@link CalendarProvider} will be queried if they
can deliver a suitable chronology. </p>

@param   locale      the locale to be queried
@return  new bridge chronology for general calendar dates
@throws  IllegalArgumentException if the ca-extension of given locale does not point to any available calendar