com.ibm.icu.text.LocaleDisplayNames Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of icu4j Show documentation
Show all versions of icu4j Show documentation
International Component for Unicode for Java (ICU4J) is a mature, widely used Java library
providing Unicode and Globalization support
/*
*******************************************************************************
* Copyright (C) 2009-2014, International Business Machines Corporation and *
* others. All Rights Reserved. *
*******************************************************************************
*/
package com.ibm.icu.text;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Locale;
import com.ibm.icu.impl.ICUConfig;
import com.ibm.icu.lang.UScript;
import com.ibm.icu.text.DisplayContext.Type;
import com.ibm.icu.util.ULocale;
/**
* Returns display names of ULocales and components of ULocales. For
* more information on language, script, region, variant, key, and
* values, see {@link com.ibm.icu.util.ULocale}.
* @stable ICU 4.4
*/
public abstract class LocaleDisplayNames {
/**
* Enum used in {@link #getInstance(ULocale, DialectHandling)}.
* @stable ICU 4.4
*/
public enum DialectHandling {
/**
* Use standard names when generating a locale name,
* e.g. en_GB displays as 'English (United Kingdom)'.
* @stable ICU 4.4
*/
STANDARD_NAMES,
/**
* Use dialect names when generating a locale name,
* e.g. en_GB displays as 'British English'.
* @stable ICU 4.4
*/
DIALECT_NAMES
}
// factory methods
/**
* Convenience overload of {@link #getInstance(ULocale, DialectHandling)} that specifies
* STANDARD dialect handling.
* @param locale the display locale
* @return a LocaleDisplayNames instance
* @stable ICU 4.4
*/
public static LocaleDisplayNames getInstance(ULocale locale) {
return getInstance(locale, DialectHandling.STANDARD_NAMES);
};
/**
* Convenience overload of {@link #getInstance(Locale, DisplayContext...)} that specifies
* {@link DisplayContext#STANDARD_NAMES}.
* @param locale the display JDK locale
* @return a LocaleDisplayNames instance
* @draft ICU 54
* @provisional This API might change or be removed in a future release.
*/
public static LocaleDisplayNames getInstance(Locale locale) {
return getInstance(ULocale.forLocale(locale));
};
/**
* Returns an instance of LocaleDisplayNames that returns names formatted for the provided locale,
* using the provided dialectHandling.
* @param locale the display locale
* @param dialectHandling how to select names for locales
* @return a LocaleDisplayNames instance
* @stable ICU 4.4
*/
public static LocaleDisplayNames getInstance(ULocale locale, DialectHandling dialectHandling) {
LocaleDisplayNames result = null;
if (FACTORY_DIALECTHANDLING != null) {
try {
result = (LocaleDisplayNames) FACTORY_DIALECTHANDLING.invoke(null,
locale, dialectHandling);
} catch (InvocationTargetException e) {
// fall through
} catch (IllegalAccessException e) {
// fall through
}
}
if (result == null) {
result = new LastResortLocaleDisplayNames(locale, dialectHandling);
}
return result;
}
/**
* Returns an instance of LocaleDisplayNames that returns names formatted for the provided locale,
* using the provided DisplayContext settings
* @param locale the display locale
* @param contexts one or more context settings (e.g. for dialect
* handling, capitalization, etc.
* @return a LocaleDisplayNames instance
* @stable ICU 51
*/
public static LocaleDisplayNames getInstance(ULocale locale, DisplayContext... contexts) {
LocaleDisplayNames result = null;
if (FACTORY_DISPLAYCONTEXT != null) {
try {
result = (LocaleDisplayNames) FACTORY_DISPLAYCONTEXT.invoke(null,
locale, (Object[])contexts);
} catch (InvocationTargetException e) {
// fall through
} catch (IllegalAccessException e) {
// fall through
}
}
if (result == null) {
result = new LastResortLocaleDisplayNames(locale, contexts);
}
return result;
}
/**
* Returns an instance of LocaleDisplayNames that returns names formatted for the provided JDK
* locale, using the provided DisplayContext settings
* @param locale the display JDK locale
* @param contexts one or more context settings (e.g. for dialect
* handling, capitalization, etc.
* @return a LocaleDisplayNames instance
* @draft ICU 54
* @provisional This API might change or be removed in a future release.
*/
public static LocaleDisplayNames getInstance(Locale locale, DisplayContext... contexts) {
return getInstance(ULocale.forLocale(locale), contexts);
}
// getters for state
/**
* Returns the locale used to determine the display names. This is not necessarily the same
* locale passed to {@link #getInstance}.
* @return the display locale
* @stable ICU 4.4
*/
public abstract ULocale getLocale();
/**
* Returns the dialect handling used in the display names.
* @return the dialect handling enum
* @stable ICU 4.4
*/
public abstract DialectHandling getDialectHandling();
/**
* Returns the current value for a specified DisplayContext.Type.
* @param type the DisplayContext.Type whose value to return
* @return the current DisplayContext setting for the specified type
* @stable ICU 51
*/
public abstract DisplayContext getContext(DisplayContext.Type type);
// names for entire locales
/**
* Returns the display name of the provided ulocale.
* @param locale the locale whose display name to return
* @return the display name of the provided locale
* @stable ICU 4.4
*/
public abstract String localeDisplayName(ULocale locale);
/**
* Returns the display name of the provided locale.
* @param locale the locale whose display name to return
* @return the display name of the provided locale
* @stable ICU 4.4
*/
public abstract String localeDisplayName(Locale locale);
/**
* Returns the display name of the provided locale id.
* @param localeId the id of the locale whose display name to return
* @return the display name of the provided locale
* @stable ICU 4.4
*/
public abstract String localeDisplayName(String localeId);
// names for components of a locale id
/**
* Returns the display name of the provided language code.
* @param lang the language code
* @return the display name of the provided language code
* @stable ICU 4.4
*/
public abstract String languageDisplayName(String lang);
/**
* Returns the display name of the provided script code.
* @param script the script code
* @return the display name of the provided script code
* @stable ICU 4.4
*/
public abstract String scriptDisplayName(String script);
/**
* Returns the display name of the provided script code
* when used in the context of a full locale name.
* @param script the script code
* @return the display name of the provided script code
* @internal ICU 49
* @deprecated This API is ICU internal only.
*/
@Deprecated
public String scriptDisplayNameInContext(String script) {
return scriptDisplayName(script);
}
/**
* Returns the display name of the provided script code. See
* {@link com.ibm.icu.lang.UScript} for recognized script codes.
* @param scriptCode the script code number
* @return the display name of the provided script code
* @stable ICU 4.4
*/
public abstract String scriptDisplayName(int scriptCode);
/**
* Returns the display name of the provided region code.
* @param region the region code
* @return the display name of the provided region code
* @stable ICU 4.4
*/
public abstract String regionDisplayName(String region);
/**
* Returns the display name of the provided variant.
* @param variant the variant string
* @return the display name of the provided variant
* @stable ICU 4.4
*/
public abstract String variantDisplayName(String variant);
/**
* Returns the display name of the provided locale key.
* @param key the locale key name
* @return the display name of the provided locale key
* @stable ICU 4.4
*/
public abstract String keyDisplayName(String key);
/**
* Returns the display name of the provided value (used with the provided key).
* @param key the locale key name
* @param value the locale key's value
* @return the display name of the provided value
* @stable ICU 4.4
*/
public abstract String keyValueDisplayName(String key, String value);
/**
* Sole constructor. (For invocation by subclass constructors,
* typically implicit.)
* @internal
* @deprecated This API is ICU internal only.
*/
@Deprecated
protected LocaleDisplayNames() {
}
private static final Method FACTORY_DIALECTHANDLING;
private static final Method FACTORY_DISPLAYCONTEXT;
static {
String implClassName = ICUConfig.get("com.ibm.icu.text.LocaleDisplayNames.impl", "com.ibm.icu.impl.LocaleDisplayNamesImpl");
Method factoryDialectHandling = null;
Method factoryDisplayContext = null;
try {
Class> implClass = Class.forName(implClassName);
try {
factoryDialectHandling = implClass.getMethod("getInstance",
ULocale.class, DialectHandling.class);
} catch (NoSuchMethodException e) {
}
try {
factoryDisplayContext = implClass.getMethod("getInstance",
ULocale.class, DisplayContext[].class);
} catch (NoSuchMethodException e) {
}
} catch (ClassNotFoundException e) {
// fallback to last resort impl
}
FACTORY_DIALECTHANDLING = factoryDialectHandling;
FACTORY_DISPLAYCONTEXT = factoryDisplayContext;
}
/**
* Minimum implementation of LocaleDisplayNames
*/
private static class LastResortLocaleDisplayNames extends LocaleDisplayNames {
private ULocale locale;
private DisplayContext[] contexts;
private LastResortLocaleDisplayNames(ULocale locale, DialectHandling dialectHandling) {
this.locale = locale;
DisplayContext context = (dialectHandling == DialectHandling.DIALECT_NAMES) ?
DisplayContext.DIALECT_NAMES : DisplayContext.STANDARD_NAMES;
this.contexts = new DisplayContext[] {context};
}
private LastResortLocaleDisplayNames(ULocale locale, DisplayContext... contexts) {
this.locale = locale;
this.contexts = new DisplayContext[contexts.length];
System.arraycopy(contexts, 0, this.contexts, 0, contexts.length);
}
@Override
public ULocale getLocale() {
return locale;
}
@Override
public DialectHandling getDialectHandling() {
DialectHandling result = DialectHandling.STANDARD_NAMES;
for (DisplayContext context : contexts) {
if (context.type() == DisplayContext.Type.DIALECT_HANDLING) {
if (context.value() == DisplayContext.DIALECT_NAMES.ordinal()) {
result = DialectHandling.DIALECT_NAMES;
break;
}
}
}
return result;
}
@Override
public DisplayContext getContext(Type type) {
DisplayContext result = DisplayContext.STANDARD_NAMES; // final fallback
for (DisplayContext context : contexts) {
if (context.type() == type) {
result = context;
break;
}
}
return result;
}
@Override
public String localeDisplayName(ULocale locale) {
return locale.getName();
}
@Override
public String localeDisplayName(Locale locale) {
return ULocale.forLocale(locale).getName();
}
@Override
public String localeDisplayName(String localeId) {
return new ULocale(localeId).getName();
}
@Override
public String languageDisplayName(String lang) {
return lang;
}
@Override
public String scriptDisplayName(String script) {
return script;
}
@Override
public String scriptDisplayName(int scriptCode) {
return UScript.getShortName(scriptCode);
}
@Override
public String regionDisplayName(String region) {
return region;
}
@Override
public String variantDisplayName(String variant) {
return variant;
}
@Override
public String keyDisplayName(String key) {
return key;
}
@Override
public String keyValueDisplayName(String key, String value) {
return value;
}
}
}