]> granicus.if.org Git - icu/commitdiff
ICU-10968 Add DisplayContext.Type.DISPLAY_LENGTH and values for it, implement support (J)
authorPeter Edberg <pedberg@unicode.org>
Sun, 7 Sep 2014 06:22:43 +0000 (06:22 +0000)
committerPeter Edberg <pedberg@unicode.org>
Sun, 7 Sep 2014 06:22:43 +0000 (06:22 +0000)
X-SVN-Rev: 36378

icu4j/main/classes/core/src/com/ibm/icu/impl/LocaleDisplayNamesImpl.java
icu4j/main/classes/core/src/com/ibm/icu/text/DisplayContext.java
icu4j/main/tests/core/src/com/ibm/icu/dev/test/util/ULocaleTest.java

index e818ff0539e4a6655de35db7704842a979ec121b..37724c178fcc959b12ca043d9f1f22532a8307d2 100644 (file)
@@ -26,6 +26,7 @@ public class LocaleDisplayNamesImpl extends LocaleDisplayNames {
     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;
@@ -93,6 +94,7 @@ public class LocaleDisplayNamesImpl extends LocaleDisplayNames {
     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:
@@ -102,6 +104,9 @@ public class LocaleDisplayNamesImpl extends LocaleDisplayNames {
             case CAPITALIZATION:
                 capitalization = contextItem;
                 break;
+            case DISPLAY_LENGTH:
+                nameLength = contextItem;
+                break;
             default:
                 break;
             }
@@ -109,6 +114,7 @@ public class LocaleDisplayNamesImpl extends LocaleDisplayNames {
 
         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() :
@@ -207,6 +213,9 @@ public class LocaleDisplayNamesImpl extends LocaleDisplayNames {
         case CAPITALIZATION:
             result = capitalization;
             break;
+        case DISPLAY_LENGTH:
+            result = nameLength;
+            break;
         default:
             result = DisplayContext.STANDARD_NAMES; // hmm, we should do something else here
             break;
@@ -367,6 +376,12 @@ public class LocaleDisplayNamesImpl extends LocaleDisplayNames {
     }
 
     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);
     }
 
@@ -376,13 +391,25 @@ public class LocaleDisplayNamesImpl extends LocaleDisplayNames {
         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);
@@ -390,31 +417,51 @@ public class LocaleDisplayNamesImpl extends LocaleDisplayNames {
 
     @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));
     }
 
@@ -514,12 +561,15 @@ public class LocaleDisplayNamesImpl extends LocaleDisplayNames {
         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;
@@ -527,6 +577,7 @@ public class LocaleDisplayNamesImpl extends LocaleDisplayNames {
         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:
@@ -536,14 +587,19 @@ public class LocaleDisplayNamesImpl extends LocaleDisplayNames {
                 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;
index 9ac06c37276dbf68f281a3ae94e25e07e9b58e1c..29e970f2cfdc0b8f2947b4e02d7f4f8093b348b0 100644 (file)
@@ -68,7 +68,27 @@ public enum DisplayContext {
      * isolated name on a calendar page.
      * @stable ICU 51
      */
-    CAPITALIZATION_FOR_STANDALONE(Type.CAPITALIZATION, 4);
+    CAPITALIZATION_FOR_STANDALONE(Type.CAPITALIZATION, 4),
+    /**
+     * ================================
+     * Settings for DISPLAY_LENGTH (use one)
+     */
+    /**
+     * A possible setting for DISPLAY_LENGTH:
+     * use full names when generating a locale name,
+     * e.g. "United States" for US.
+     * @draft ICU 54
+     * @provisional This API might change or be removed in a future release.
+     */
+    LENGTH_FULL(Type.DISPLAY_LENGTH, 0),
+    /**
+     * A possible setting for DISPLAY_LENGTH:
+     * use short names when generating a locale name,
+     * e.g. "U.S." for US.
+     * @draft ICU 54
+     * @provisional This API might change or be removed in a future release.
+     */
+    LENGTH_SHORT(Type.DISPLAY_LENGTH, 1);
 
     /**
      * Type values for DisplayContext
@@ -85,7 +105,13 @@ public enum DisplayContext {
          * CAPITALIZATION_FOR_STANDALONE.
          * @stable ICU 51
          */
-        CAPITALIZATION
+        CAPITALIZATION,
+        /**
+         * DISPLAY_LENGTH can be set to LENGTH_FULL or LENGTH_SHORT.
+         * @draft ICU 54
+         * @provisional This API might change or be removed in a future release.
+         */
+        DISPLAY_LENGTH
     }
 
     private final Type type;
index a7eb6150332349f3c5ff337f934347b6eea2f9f1..a99265015963222cdf1003e8ac67b6f61d7f3e26 100644 (file)
@@ -1033,56 +1033,70 @@ public class ULocaleTest extends TestFmwk {
                 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);
                     } 
                 }