1// © 2016 and later: Unicode, Inc. and others.
2// License & terms of use: http://www.unicode.org/copyright.html#License
3/*
4 *******************************************************************************
5 * Copyright (C) 2008-2012, International Business Machines Corporation and    *
6 * others. All Rights Reserved.                                                *
7 *******************************************************************************
8 */
9package com.ibm.icu.impl.javaspi.util;
10
11import java.util.Locale;
12import java.util.spi.LocaleNameProvider;
13
14import com.ibm.icu.impl.javaspi.ICULocaleServiceProvider;
15import com.ibm.icu.impl.locale.AsciiUtil;
16import com.ibm.icu.text.LocaleDisplayNames;
17
18public class LocaleNameProviderICU extends LocaleNameProvider {
19
20    @Override
21    public String getDisplayCountry(String countryCode, Locale locale) {
22        countryCode = AsciiUtil.toUpperString(countryCode);
23        String disp = LocaleDisplayNames.getInstance(ICULocaleServiceProvider.toULocaleNoSpecialVariant(locale))
24                .regionDisplayName(countryCode);
25        if (disp == null || disp.length() == 0 || disp.equals(countryCode)) {
26            return null;
27        }
28        return disp;
29    }
30
31    @Override
32    public String getDisplayLanguage(String languageCode, Locale locale) {
33        languageCode = AsciiUtil.toLowerString(languageCode);
34        String disp = LocaleDisplayNames.getInstance(ICULocaleServiceProvider.toULocaleNoSpecialVariant(locale))
35                .languageDisplayName(languageCode);
36        if (disp == null || disp.length() == 0 || disp.equals(languageCode)) {
37            return null;
38        }
39        return disp;
40    }
41
42    // Not available in Java 6
43    // @Override
44    public String getDisplayScript(String scriptCode, Locale locale) {
45        scriptCode = AsciiUtil.toTitleString(scriptCode);
46        String disp = LocaleDisplayNames.getInstance(ICULocaleServiceProvider.toULocaleNoSpecialVariant(locale))
47                .scriptDisplayName(scriptCode);
48        if (disp == null || disp.length() == 0 || disp.equals(scriptCode)) {
49            return null;
50        }
51        return disp;
52    }
53
54    @Override
55    public String getDisplayVariant(String variant, Locale locale) {
56        variant = AsciiUtil.toUpperString(variant);
57        String disp = LocaleDisplayNames.getInstance(ICULocaleServiceProvider.toULocaleNoSpecialVariant(locale))
58                .variantDisplayName(variant);
59        if (disp == null || disp.length() == 0 || disp.equals(variant)) {
60            return null;
61        }
62        return disp;
63    }
64
65    @Override
66    public Locale[] getAvailableLocales() {
67        return ICULocaleServiceProvider.getAvailableLocales();
68    }
69}
70