Search in sources :

Example 6 with LocaleProviderAdapter

use of sun.util.locale.provider.LocaleProviderAdapter in project jdk8u_jdk by JetBrains.

the class LocaleProviders method bug7198834Test.

static void bug7198834Test() {
    LocaleProviderAdapter lda = LocaleProviderAdapter.getAdapter(DateFormatProvider.class, Locale.US);
    LocaleProviderAdapter.Type type = lda.getAdapterType();
    if (type == LocaleProviderAdapter.Type.HOST && System.getProperty("os.name").startsWith("Windows")) {
        DateFormat df = DateFormat.getDateInstance(DateFormat.FULL, Locale.US);
        String date = df.format(new Date());
        if (date.charAt(date.length() - 1) == ' ') {
            throw new RuntimeException("Windows Host Locale Provider returns a trailing space.");
        }
    } else {
        System.out.println("Windows HOST locale adapter not found. Ignoring this test.");
    }
}
Also used : LocaleProviderAdapter(sun.util.locale.provider.LocaleProviderAdapter)

Example 7 with LocaleProviderAdapter

use of sun.util.locale.provider.LocaleProviderAdapter in project jdk8u_jdk by JetBrains.

the class DecimalFormatSymbols method getInstance.

/**
     * Gets the <code>DecimalFormatSymbols</code> instance for the specified
     * locale.  This method provides access to <code>DecimalFormatSymbols</code>
     * instances for locales supported by the Java runtime itself as well
     * as for those supported by installed
     * {@link java.text.spi.DecimalFormatSymbolsProvider
     * DecimalFormatSymbolsProvider} implementations.
     * If the specified locale contains the {@link java.util.Locale#UNICODE_LOCALE_EXTENSION}
     * for the numbering system, the instance is initialized with the specified numbering
     * system if the JRE implementation supports it. For example,
     * <pre>
     * NumberFormat.getNumberInstance(Locale.forLanguageTag("th-TH-u-nu-thai"))
     * </pre>
     * This may return a {@code NumberFormat} instance with the Thai numbering system,
     * instead of the Latin numbering system.
     *
     * @param locale the desired locale.
     * @return a <code>DecimalFormatSymbols</code> instance.
     * @exception NullPointerException if <code>locale</code> is null
     * @since 1.6
     */
public static final DecimalFormatSymbols getInstance(Locale locale) {
    LocaleProviderAdapter adapter;
    adapter = LocaleProviderAdapter.getAdapter(DecimalFormatSymbolsProvider.class, locale);
    DecimalFormatSymbolsProvider provider = adapter.getDecimalFormatSymbolsProvider();
    DecimalFormatSymbols dfsyms = provider.getInstance(locale);
    if (dfsyms == null) {
        provider = LocaleProviderAdapter.forJRE().getDecimalFormatSymbolsProvider();
        dfsyms = provider.getInstance(locale);
    }
    return dfsyms;
}
Also used : LocaleProviderAdapter(sun.util.locale.provider.LocaleProviderAdapter) DecimalFormatSymbolsProvider(java.text.spi.DecimalFormatSymbolsProvider)

Example 8 with LocaleProviderAdapter

use of sun.util.locale.provider.LocaleProviderAdapter in project jdk8u_jdk by JetBrains.

the class DecimalFormatSymbols method initialize.

/**
     * Initializes the symbols from the FormatData resource bundle.
     */
private void initialize(Locale locale) {
    this.locale = locale;
    // get resource bundle data
    LocaleProviderAdapter adapter = LocaleProviderAdapter.getAdapter(DecimalFormatSymbolsProvider.class, locale);
    // Avoid potential recursions
    if (!(adapter instanceof ResourceBundleBasedAdapter)) {
        adapter = LocaleProviderAdapter.getResourceBundleBased();
    }
    Object[] data = adapter.getLocaleResources(locale).getDecimalFormatSymbolsData();
    String[] numberElements = (String[]) data[0];
    decimalSeparator = numberElements[0].charAt(0);
    groupingSeparator = numberElements[1].charAt(0);
    patternSeparator = numberElements[2].charAt(0);
    percent = numberElements[3].charAt(0);
    //different for Arabic,etc.
    zeroDigit = numberElements[4].charAt(0);
    digit = numberElements[5].charAt(0);
    minusSign = numberElements[6].charAt(0);
    exponential = numberElements[7].charAt(0);
    //string representation new since 1.6
    exponentialSeparator = numberElements[7];
    perMill = numberElements[8].charAt(0);
    infinity = numberElements[9];
    NaN = numberElements[10];
    // ISO 3166 country code, and exceptions are expensive.
    if (locale.getCountry().length() > 0) {
        try {
            currency = Currency.getInstance(locale);
        } catch (IllegalArgumentException e) {
        // use default values below for compatibility
        }
    }
    if (currency != null) {
        intlCurrencySymbol = currency.getCurrencyCode();
        if (data[1] != null && data[1] == intlCurrencySymbol) {
            currencySymbol = (String) data[2];
        } else {
            currencySymbol = currency.getSymbol(locale);
            data[1] = intlCurrencySymbol;
            data[2] = currencySymbol;
        }
    } else {
        // default values
        intlCurrencySymbol = "XXX";
        try {
            currency = Currency.getInstance(intlCurrencySymbol);
        } catch (IllegalArgumentException e) {
        }
        currencySymbol = "ยค";
    }
    // Currently the monetary decimal separator is the same as the
    // standard decimal separator for all locales that we support.
    // If that changes, add a new entry to NumberElements.
    monetarySeparator = decimalSeparator;
}
Also used : LocaleProviderAdapter(sun.util.locale.provider.LocaleProviderAdapter) ResourceBundleBasedAdapter(sun.util.locale.provider.ResourceBundleBasedAdapter)

Example 9 with LocaleProviderAdapter

use of sun.util.locale.provider.LocaleProviderAdapter in project jdk8u_jdk by JetBrains.

the class DateFormatSymbols method initializeData.

/**
     * Initializes this DateFormatSymbols with the locale data. This method uses
     * a cached DateFormatSymbols instance for the given locale if available. If
     * there's no cached one, this method creates an uninitialized instance and
     * populates its fields from the resource bundle for the locale, and caches
     * the instance. Note: zoneStrings isn't initialized in this method.
     */
private void initializeData(Locale locale) {
    SoftReference<DateFormatSymbols> ref = cachedInstances.get(locale);
    DateFormatSymbols dfs;
    if (ref == null || (dfs = ref.get()) == null) {
        if (ref != null) {
            // Remove the empty SoftReference
            cachedInstances.remove(locale, ref);
        }
        dfs = new DateFormatSymbols(false);
        // Initialize the fields from the ResourceBundle for locale.
        LocaleProviderAdapter adapter = LocaleProviderAdapter.getAdapter(DateFormatSymbolsProvider.class, locale);
        // Avoid any potential recursions
        if (!(adapter instanceof ResourceBundleBasedAdapter)) {
            adapter = LocaleProviderAdapter.getResourceBundleBased();
        }
        ResourceBundle resource = ((ResourceBundleBasedAdapter) adapter).getLocaleData().getDateFormatData(locale);
        dfs.locale = locale;
        // CLDR: long.Eras, Eras and narrow.Eras
        if (resource.containsKey("Eras")) {
            dfs.eras = resource.getStringArray("Eras");
        } else if (resource.containsKey("long.Eras")) {
            dfs.eras = resource.getStringArray("long.Eras");
        } else if (resource.containsKey("short.Eras")) {
            dfs.eras = resource.getStringArray("short.Eras");
        }
        dfs.months = resource.getStringArray("MonthNames");
        dfs.shortMonths = resource.getStringArray("MonthAbbreviations");
        dfs.ampms = resource.getStringArray("AmPmMarkers");
        dfs.localPatternChars = resource.getString("DateTimePatternChars");
        // Day of week names are stored in a 1-based array.
        dfs.weekdays = toOneBasedArray(resource.getStringArray("DayNames"));
        dfs.shortWeekdays = toOneBasedArray(resource.getStringArray("DayAbbreviations"));
        // Put dfs in the cache
        ref = new SoftReference<>(dfs);
        SoftReference<DateFormatSymbols> x = cachedInstances.putIfAbsent(locale, ref);
        if (x != null) {
            DateFormatSymbols y = x.get();
            if (y == null) {
                // Replace the empty SoftReference with ref.
                cachedInstances.replace(locale, x, ref);
            } else {
                ref = x;
                dfs = y;
            }
        }
        // If the bundle's locale isn't the target locale, put another cache
        // entry for the bundle's locale.
        Locale bundleLocale = resource.getLocale();
        if (!bundleLocale.equals(locale)) {
            SoftReference<DateFormatSymbols> z = cachedInstances.putIfAbsent(bundleLocale, ref);
            if (z != null && z.get() == null) {
                cachedInstances.replace(bundleLocale, z, ref);
            }
        }
    }
    // Copy the field values from dfs to this instance.
    copyMembers(dfs, this);
}
Also used : Locale(java.util.Locale) LocaleProviderAdapter(sun.util.locale.provider.LocaleProviderAdapter) ResourceBundleBasedAdapter(sun.util.locale.provider.ResourceBundleBasedAdapter) ResourceBundle(java.util.ResourceBundle)

Example 10 with LocaleProviderAdapter

use of sun.util.locale.provider.LocaleProviderAdapter in project jdk8u_jdk by JetBrains.

the class BreakIterator method createBreakInstance.

private static BreakIterator createBreakInstance(Locale locale, int type) {
    LocaleProviderAdapter adapter = LocaleProviderAdapter.getAdapter(BreakIteratorProvider.class, locale);
    BreakIterator iterator = createBreakInstance(adapter, locale, type);
    if (iterator == null) {
        iterator = createBreakInstance(LocaleProviderAdapter.forJRE(), locale, type);
    }
    return iterator;
}
Also used : LocaleProviderAdapter(sun.util.locale.provider.LocaleProviderAdapter)

Aggregations

LocaleProviderAdapter (sun.util.locale.provider.LocaleProviderAdapter)11 ResourceBundleBasedAdapter (sun.util.locale.provider.ResourceBundleBasedAdapter)2 SoftReference (java.lang.ref.SoftReference)1 CollatorProvider (java.text.spi.CollatorProvider)1 DateFormatSymbolsProvider (java.text.spi.DateFormatSymbolsProvider)1 DecimalFormatSymbolsProvider (java.text.spi.DecimalFormatSymbolsProvider)1 NumberFormatProvider (java.text.spi.NumberFormatProvider)1 Locale (java.util.Locale)1 ResourceBundle (java.util.ResourceBundle)1