private final ULocale locale;
private final DialectHandling dialectHandling;
private final DisplayContext capitalization;
+ private final DisplayContext nameLength;
private final DataTable langData;
private final DataTable regionData;
private final MessageFormat separatorFormat;
public LocaleDisplayNamesImpl(ULocale locale, DisplayContext... contexts) {
DialectHandling dialectHandling = DialectHandling.STANDARD_NAMES;
DisplayContext capitalization = DisplayContext.CAPITALIZATION_NONE;
+ DisplayContext nameLength = DisplayContext.LENGTH_FULL;
for (DisplayContext contextItem : contexts) {
switch (contextItem.type()) {
case DIALECT_HANDLING:
case CAPITALIZATION:
capitalization = contextItem;
break;
+ case DISPLAY_LENGTH:
+ nameLength = contextItem;
+ break;
default:
break;
}
this.dialectHandling = dialectHandling;
this.capitalization = capitalization;
+ this.nameLength = nameLength;
this.langData = LangDataTables.impl.get(locale);
this.regionData = RegionDataTables.impl.get(locale);
this.locale = ULocale.ROOT.equals(langData.getLocale()) ? regionData.getLocale() :
case CAPITALIZATION:
result = capitalization;
break;
+ case DISPLAY_LENGTH:
+ result = nameLength;
+ break;
default:
result = DisplayContext.STANDARD_NAMES; // hmm, we should do something else here
break;
}
private String localeIdName(String localeId) {
+ if (nameLength == DisplayContext.LENGTH_SHORT) {
+ String locIdName = langData.get("LanguagesShort", localeId);
+ if (!locIdName.equals(localeId)) {
+ return locIdName;
+ }
+ }
return langData.get("Languages", localeId);
}
if (lang.equals("root") || lang.indexOf('_') != -1) {
return lang;
}
+ if (nameLength == DisplayContext.LENGTH_SHORT) {
+ String langName = langData.get("LanguagesShort", lang);
+ if (!langName.equals(lang)) {
+ return adjustForUsageAndContext(CapitalizationContextUsage.LANGUAGE, langName);
+ }
+ }
return adjustForUsageAndContext(CapitalizationContextUsage.LANGUAGE, langData.get("Languages", lang));
}
@Override
public String scriptDisplayName(String script) {
String str = langData.get("Scripts%stand-alone", script);
- if (str.equals(script) ) {
+ if (str.equals(script)) {
+ if (nameLength == DisplayContext.LENGTH_SHORT) {
+ str = langData.get("Scripts%short", script);
+ if (!str.equals(script)) {
+ return adjustForUsageAndContext(CapitalizationContextUsage.SCRIPT, str);
+ }
+ }
str = langData.get("Scripts", script);
}
return adjustForUsageAndContext(CapitalizationContextUsage.SCRIPT, str);
@Override
public String scriptDisplayNameInContext(String script) {
+ if (nameLength == DisplayContext.LENGTH_SHORT) {
+ String scriptName = langData.get("Scripts%short", script);
+ if (!scriptName.equals(script)) {
+ return adjustForUsageAndContext(CapitalizationContextUsage.SCRIPT, scriptName);
+ }
+ }
return adjustForUsageAndContext(CapitalizationContextUsage.SCRIPT, langData.get("Scripts", script));
}
@Override
public String scriptDisplayName(int scriptCode) {
- return adjustForUsageAndContext(CapitalizationContextUsage.SCRIPT, scriptDisplayName(UScript.getShortName(scriptCode)));
+ return scriptDisplayName(UScript.getShortName(scriptCode));
}
@Override
public String regionDisplayName(String region) {
+ if (nameLength == DisplayContext.LENGTH_SHORT) {
+ String regionName = regionData.get("CountriesShort", region);
+ if (!regionName.equals(region)) {
+ return adjustForUsageAndContext(CapitalizationContextUsage.TERRITORY, regionName);
+ }
+ }
return adjustForUsageAndContext(CapitalizationContextUsage.TERRITORY, regionData.get("Countries", region));
}
@Override
public String variantDisplayName(String variant) {
+ // don't have a resource for short variant names
return adjustForUsageAndContext(CapitalizationContextUsage.VARIANT, langData.get("Variants", variant));
}
@Override
public String keyDisplayName(String key) {
+ // don't have a resource for short key names
return adjustForUsageAndContext(CapitalizationContextUsage.KEY, langData.get("Keys", key));
}
@Override
public String keyValueDisplayName(String key, String value) {
+ if (nameLength == DisplayContext.LENGTH_SHORT) {
+ String keyValueName = langData.get("Types%short", key, value);
+ if (!keyValueName.equals(value)) {
+ return adjustForUsageAndContext(CapitalizationContextUsage.KEYVALUE, keyValueName);
+ }
+ }
return adjustForUsageAndContext(CapitalizationContextUsage.KEYVALUE, langData.get("Types", key, value));
}
private ULocale locale;
private DialectHandling dialectHandling;
private DisplayContext capitalization;
+ private DisplayContext nameLength;
private LocaleDisplayNames cache;
public LocaleDisplayNames get(ULocale locale, DialectHandling dialectHandling) {
- if (!(dialectHandling == this.dialectHandling && DisplayContext.CAPITALIZATION_NONE == this.capitalization && locale.equals(this.locale))) {
+ if (!(dialectHandling == this.dialectHandling && DisplayContext.CAPITALIZATION_NONE == this.capitalization &&
+ DisplayContext.LENGTH_FULL == this.nameLength && locale.equals(this.locale))) {
this.locale = locale;
this.dialectHandling = dialectHandling;
this.capitalization = DisplayContext.CAPITALIZATION_NONE;
+ this.nameLength = DisplayContext.LENGTH_FULL;
this.cache = new LocaleDisplayNamesImpl(locale, dialectHandling);
}
return cache;
public LocaleDisplayNames get(ULocale locale, DisplayContext... contexts) {
DialectHandling dialectHandlingIn = DialectHandling.STANDARD_NAMES;
DisplayContext capitalizationIn = DisplayContext.CAPITALIZATION_NONE;
+ DisplayContext nameLengthIn = DisplayContext.LENGTH_FULL;
for (DisplayContext contextItem : contexts) {
switch (contextItem.type()) {
case DIALECT_HANDLING:
case CAPITALIZATION:
capitalizationIn = contextItem;
break;
+ case DISPLAY_LENGTH:
+ nameLengthIn = contextItem;
+ break;
default:
break;
}
}
- if (!(dialectHandlingIn == this.dialectHandling && capitalizationIn == this.capitalization && locale.equals(this.locale))) {
+ if (!(dialectHandlingIn == this.dialectHandling && capitalizationIn == this.capitalization &&
+ nameLengthIn == this.nameLength && locale.equals(this.locale))) {
this.locale = locale;
this.dialectHandling = dialectHandlingIn;
this.capitalization = capitalizationIn;
+ this.nameLength = nameLengthIn;
this.cache = new LocaleDisplayNamesImpl(locale, contexts);
}
return cache;
public String displayLocale;
public DisplayContext dialectHandling;
public DisplayContext capitalization;
+ public DisplayContext nameLength;
public String localeToBeNamed;
public String result;
- public TestContextItem(String dLoc, DisplayContext dia, DisplayContext cap, String locToName, String res) {
+ public TestContextItem(String dLoc, DisplayContext dia, DisplayContext cap, DisplayContext nameLen, String locToName, String res) {
displayLocale = dLoc;
dialectHandling = dia;
capitalization = cap;
+ nameLength = nameLen;
localeToBeNamed = locToName;
result = res;
}
};
final TestContextItem[] items = {
- new TestContextItem( "da", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, "en", "engelsk" ),
- new TestContextItem( "da", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, "en", "Engelsk" ),
- new TestContextItem( "da", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_UI_LIST_OR_MENU, "en", "Engelsk" ),
- new TestContextItem( "da", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_STANDALONE, "en", "engelsk" ),
- new TestContextItem( "da", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, "en_US", "engelsk (USA)" ),
- new TestContextItem( "da", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, "en_US", "Engelsk (USA)" ),
- new TestContextItem( "da", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_UI_LIST_OR_MENU, "en_US", "Engelsk (USA)" ),
- new TestContextItem( "da", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_STANDALONE, "en_US", "engelsk (USA)" ),
- new TestContextItem( "da", DisplayContext.DIALECT_NAMES, DisplayContext.CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, "en_US", "amerikansk engelsk" ),
- new TestContextItem( "da", DisplayContext.DIALECT_NAMES, DisplayContext.CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, "en_US", "Amerikansk engelsk" ),
- new TestContextItem( "da", DisplayContext.DIALECT_NAMES, DisplayContext.CAPITALIZATION_FOR_UI_LIST_OR_MENU, "en_US", "Amerikansk engelsk" ),
- new TestContextItem( "da", DisplayContext.DIALECT_NAMES, DisplayContext.CAPITALIZATION_FOR_STANDALONE, "en_US", "amerikansk engelsk" ),
- new TestContextItem( "es", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, "en", "ingl\u00E9s" ),
- new TestContextItem( "es", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, "en", "Ingl\u00E9s" ),
- new TestContextItem( "es", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_UI_LIST_OR_MENU, "en", "Ingl\u00E9s" ),
- new TestContextItem( "es", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_STANDALONE, "en", "Ingl\u00E9s" ),
- new TestContextItem( "es", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, "en_US", "ingl\u00E9s (Estados Unidos)" ),
- new TestContextItem( "es", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, "en_US", "Ingl\u00E9s (Estados Unidos)" ),
- new TestContextItem( "es", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_UI_LIST_OR_MENU, "en_US", "Ingl\u00E9s (Estados Unidos)" ),
- new TestContextItem( "es", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_STANDALONE, "en_US", "Ingl\u00E9s (Estados Unidos)" ),
- new TestContextItem( "es", DisplayContext.DIALECT_NAMES, DisplayContext.CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, "en_US", "ingl\u00E9s estadounidense" ),
- new TestContextItem( "es", DisplayContext.DIALECT_NAMES, DisplayContext.CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, "en_US", "Ingl\u00E9s estadounidense" ),
- new TestContextItem( "es", DisplayContext.DIALECT_NAMES, DisplayContext.CAPITALIZATION_FOR_UI_LIST_OR_MENU, "en_US", "Ingl\u00E9s estadounidense" ),
- new TestContextItem( "es", DisplayContext.DIALECT_NAMES, DisplayContext.CAPITALIZATION_FOR_STANDALONE, "en_US", "Ingl\u00E9s estadounidense" ),
+ new TestContextItem( "da", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, DisplayContext.LENGTH_FULL, "en", "engelsk" ),
+ new TestContextItem( "da", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, DisplayContext.LENGTH_FULL, "en", "Engelsk" ),
+ new TestContextItem( "da", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_UI_LIST_OR_MENU, DisplayContext.LENGTH_FULL, "en", "Engelsk" ),
+ new TestContextItem( "da", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_STANDALONE, DisplayContext.LENGTH_FULL, "en", "engelsk" ),
+ new TestContextItem( "da", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, DisplayContext.LENGTH_FULL, "en_GB", "engelsk (Storbritannien)" ),
+ new TestContextItem( "da", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, DisplayContext.LENGTH_FULL, "en_GB", "Engelsk (Storbritannien)" ),
+ new TestContextItem( "da", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_UI_LIST_OR_MENU, DisplayContext.LENGTH_FULL, "en_GB", "Engelsk (Storbritannien)" ),
+ new TestContextItem( "da", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_STANDALONE, DisplayContext.LENGTH_FULL, "en_GB", "engelsk (Storbritannien)" ),
+ new TestContextItem( "da", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, DisplayContext.LENGTH_SHORT, "en_GB", "engelsk (UK)" ),
+ new TestContextItem( "da", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, DisplayContext.LENGTH_SHORT, "en_GB", "Engelsk (UK)" ),
+ new TestContextItem( "da", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_UI_LIST_OR_MENU, DisplayContext.LENGTH_SHORT, "en_GB", "Engelsk (UK)" ),
+ new TestContextItem( "da", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_STANDALONE, DisplayContext.LENGTH_SHORT, "en_GB", "engelsk (UK)" ),
+ new TestContextItem( "da", DisplayContext.DIALECT_NAMES, DisplayContext.CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, DisplayContext.LENGTH_FULL, "en_GB", "britisk engelsk" ),
+ new TestContextItem( "da", DisplayContext.DIALECT_NAMES, DisplayContext.CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, DisplayContext.LENGTH_FULL, "en_GB", "Britisk engelsk" ),
+ new TestContextItem( "da", DisplayContext.DIALECT_NAMES, DisplayContext.CAPITALIZATION_FOR_UI_LIST_OR_MENU, DisplayContext.LENGTH_FULL, "en_GB", "Britisk engelsk" ),
+ new TestContextItem( "da", DisplayContext.DIALECT_NAMES, DisplayContext.CAPITALIZATION_FOR_STANDALONE, DisplayContext.LENGTH_FULL, "en_GB", "britisk engelsk" ),
+ new TestContextItem( "es", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, DisplayContext.LENGTH_FULL, "en", "ingl\u00E9s" ),
+ new TestContextItem( "es", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, DisplayContext.LENGTH_FULL, "en", "Ingl\u00E9s" ),
+ new TestContextItem( "es", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_UI_LIST_OR_MENU, DisplayContext.LENGTH_FULL, "en", "Ingl\u00E9s" ),
+ new TestContextItem( "es", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_STANDALONE, DisplayContext.LENGTH_FULL, "en", "Ingl\u00E9s" ),
+ new TestContextItem( "es", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, DisplayContext.LENGTH_FULL, "en_GB", "ingl\u00E9s (Reino Unido)" ),
+ new TestContextItem( "es", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, DisplayContext.LENGTH_FULL, "en_GB", "Ingl\u00E9s (Reino Unido)" ),
+ new TestContextItem( "es", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_UI_LIST_OR_MENU, DisplayContext.LENGTH_FULL, "en_GB", "Ingl\u00E9s (Reino Unido)" ),
+ new TestContextItem( "es", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_STANDALONE, DisplayContext.LENGTH_FULL, "en_GB", "Ingl\u00E9s (Reino Unido)" ),
+ new TestContextItem( "es", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, DisplayContext.LENGTH_SHORT, "en_GB", "ingl\u00E9s (RU)" ),
+ new TestContextItem( "es", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, DisplayContext.LENGTH_SHORT, "en_GB", "Ingl\u00E9s (RU)" ),
+ new TestContextItem( "es", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_UI_LIST_OR_MENU, DisplayContext.LENGTH_SHORT, "en_GB", "Ingl\u00E9s (RU)" ),
+ new TestContextItem( "es", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_STANDALONE, DisplayContext.LENGTH_SHORT, "en_GB", "Ingl\u00E9s (RU)" ),
+ new TestContextItem( "es", DisplayContext.DIALECT_NAMES, DisplayContext.CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, DisplayContext.LENGTH_FULL, "en_GB", "ingl\u00E9s brit\u00E1nico" ),
+ new TestContextItem( "es", DisplayContext.DIALECT_NAMES, DisplayContext.CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, DisplayContext.LENGTH_FULL, "en_GB", "Ingl\u00E9s brit\u00E1nico" ),
+ new TestContextItem( "es", DisplayContext.DIALECT_NAMES, DisplayContext.CAPITALIZATION_FOR_UI_LIST_OR_MENU, DisplayContext.LENGTH_FULL, "en_GB", "Ingl\u00E9s brit\u00E1nico" ),
+ new TestContextItem( "es", DisplayContext.DIALECT_NAMES, DisplayContext.CAPITALIZATION_FOR_STANDALONE, DisplayContext.LENGTH_FULL, "en_GB", "Ingl\u00E9s brit\u00E1nico" ),
+ new TestContextItem( "en", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, DisplayContext.LENGTH_FULL, "ur@numbers=latn", "Urdu (Western Digits)" ),
+ new TestContextItem( "en", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, DisplayContext.LENGTH_FULL, "ur@numbers=arabext", "Urdu (Extended Arabic-Indic Digits)" ),
+ new TestContextItem( "en", DisplayContext.STANDARD_NAMES, DisplayContext.CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, DisplayContext.LENGTH_SHORT, "ur@numbers=arabext", "Urdu (X Arabic-Indic Digits)" ),
};
for (TestContextItem item: items) {
ULocale locale = new ULocale(item.displayLocale);
- LocaleDisplayNames ldn = LocaleDisplayNames.getInstance(locale, item.dialectHandling, item.capitalization);
+ LocaleDisplayNames ldn = LocaleDisplayNames.getInstance(locale, item.dialectHandling, item.capitalization, item.nameLength);
DisplayContext dialectHandling = ldn.getContext(DisplayContext.Type.DIALECT_HANDLING);
DisplayContext capitalization = ldn.getContext(DisplayContext.Type.CAPITALIZATION);
- if (dialectHandling != item.dialectHandling || capitalization != item.capitalization) {
- errln("FAIL: displayLocale: " + item.displayLocale + ", dialectHandling: " + item.dialectHandling +
- ", capitalization: " + item.capitalization + ", localeToName: " + item.localeToBeNamed +
- ", => read back dialectHandling: " + dialectHandling + ", capitalization: " + capitalization);
+ DisplayContext nameLength = ldn.getContext(DisplayContext.Type.DISPLAY_LENGTH);
+ if (dialectHandling != item.dialectHandling || capitalization != item.capitalization || nameLength != item.nameLength) {
+ errln("FAIL: displayLoc: " + item.displayLocale + ", dialectNam?: " + item.dialectHandling +
+ ", capitalize: " + item.capitalization + ", nameLen: " + item.nameLength + ", locToName: " + item.localeToBeNamed +
+ ", => read back dialectNam?: " + dialectHandling + ", capitalize: " + capitalization + ", nameLen: " + nameLength);
} else {
String result = ldn.localeDisplayName(item.localeToBeNamed);
if (!result.equals(item.result)) {
- errln("FAIL: displayLocale: " + item.displayLocale + ", dialectHandling: " + item.dialectHandling +
- ", capitalization: " + item.capitalization + ", localeToName: " + item.localeToBeNamed +
+ errln("FAIL: displayLoc: " + item.displayLocale + ", dialectNam?: " + item.dialectHandling +
+ ", capitalize: " + item.capitalization + ", nameLen: " + item.nameLength + ", locToName: " + item.localeToBeNamed +
", => expected result: " + item.result + ", got: " + result);
}
}