< prev index next >

make/jdk/src/classes/build/tools/cldrconverter/Bundle.java

Print this page
rev 57986 : 8234347: "Turkey" meta time zone does not generate composed localized names
8236548: Localized time zone name inconsistency between English and other locales
Reviewed-by:


 277             handleMultipleInheritance(myMap, parentsMap, calendarPrefix + "MonthAbbreviations");
 278             handleMultipleInheritance(myMap, parentsMap, calendarPrefix + "MonthNarrows");
 279             handleMultipleInheritance(myMap, parentsMap, calendarPrefix + "DayNames");
 280             handleMultipleInheritance(myMap, parentsMap, calendarPrefix + "DayAbbreviations");
 281             handleMultipleInheritance(myMap, parentsMap, calendarPrefix + "DayNarrows");
 282             handleMultipleInheritance(myMap, parentsMap, calendarPrefix + "AmPmMarkers");
 283             handleMultipleInheritance(myMap, parentsMap, calendarPrefix + "narrow.AmPmMarkers");
 284             handleMultipleInheritance(myMap, parentsMap, calendarPrefix + "abbreviated.AmPmMarkers");
 285             handleMultipleInheritance(myMap, parentsMap, calendarPrefix + "QuarterNames");
 286             handleMultipleInheritance(myMap, parentsMap, calendarPrefix + "QuarterAbbreviations");
 287             handleMultipleInheritance(myMap, parentsMap, calendarPrefix + "QuarterNarrows");
 288 
 289             adjustEraNames(myMap, calendarType);
 290 
 291             handleDateTimeFormatPatterns(TIME_PATTERN_KEYS, myMap, parentsMap, calendarType, "TimePatterns");
 292             handleDateTimeFormatPatterns(DATE_PATTERN_KEYS, myMap, parentsMap, calendarType, "DatePatterns");
 293             handleDateTimeFormatPatterns(DATETIME_PATTERN_KEYS, myMap, parentsMap, calendarType, "DateTimePatterns");
 294         }
 295 
 296         // First, weed out any empty timezone or metazone names from myMap.
 297         // Fill in any missing abbreviations if locale is "en".
 298         for (Iterator<String> it = myMap.keySet().iterator(); it.hasNext();) {
 299             String key = it.next();
 300             if (key.startsWith(CLDRConverter.TIMEZONE_ID_PREFIX)
 301                     || key.startsWith(CLDRConverter.METAZONE_ID_PREFIX)) {
 302                 @SuppressWarnings("unchecked")
 303                 Map<String, String> nameMap = (Map<String, String>) myMap.get(key);
 304                 if (nameMap.isEmpty()) {
 305                     // Some zones have only exemplarCity, which become empty.
 306                     // Remove those from the map.
 307                     it.remove();
 308                     continue;
 309                 }
 310 
 311                 if (id.equals("en")) {
 312                     fillInJREs(key, nameMap);
 313                 }
 314             }
 315         }
 316         for (Iterator<String> it = myMap.keySet().iterator(); it.hasNext();) {
 317             String key = it.next();
 318                 if (key.startsWith(CLDRConverter.TIMEZONE_ID_PREFIX)
 319                     || key.startsWith(CLDRConverter.METAZONE_ID_PREFIX)) {
 320                 @SuppressWarnings("unchecked")
 321                 Map<String, String> nameMap = (Map<String, String>) myMap.get(key);
 322 
 323                 // Convert key/value pairs to an array.
 324                 String[] names = new String[ZONE_NAME_KEYS.length];
 325                 int ix = 0;
 326                 for (String nameKey : ZONE_NAME_KEYS) {
 327                     String name = nameMap.get(nameKey);
 328                     if (name == null && parentsMap != null) {
 329                         @SuppressWarnings("unchecked")
 330                         Map<String, String> parentNames = (Map<String, String>) parentsMap.get(key);
 331                         if (parentNames != null) {
 332                             name = parentNames.get(nameKey);
 333                         }


 619         if (count != 0) {
 620             converter.convert(calendarType, lastLetter, count, jrePattern);
 621         }
 622         if (cldrFormat.contentEquals(jrePattern)) {
 623             return cldrFormat;
 624         }
 625         return jrePattern.toString();
 626     }
 627 
 628     private String toMetaZoneKey(String tzKey) {
 629         if (tzKey.startsWith(CLDRConverter.TIMEZONE_ID_PREFIX)) {
 630             String tz = tzKey.substring(CLDRConverter.TIMEZONE_ID_PREFIX.length());
 631             String meta = CLDRConverter.handlerMetaZones.get(tz);
 632             if (meta != null) {
 633                 return CLDRConverter.METAZONE_ID_PREFIX + meta;
 634             }
 635         }
 636         return null;
 637     }
 638 
 639     static List<Object[]> jreTimeZoneNames = Arrays.asList(TimeZoneNames.getContents());
 640     private void fillInJREs(String key, Map<String, String> map) {
 641         String tzid = null;
 642 
 643         if (key.startsWith(CLDRConverter.METAZONE_ID_PREFIX)) {
 644             // Look for tzid
 645             String meta = key.substring(CLDRConverter.METAZONE_ID_PREFIX.length());
 646             if (meta.equals("GMT")) {
 647                 tzid = meta;
 648             } else {
 649                 for (String tz : CLDRConverter.handlerMetaZones.keySet()) {
 650                     if (CLDRConverter.handlerMetaZones.get(tz).equals(meta)) {
 651                         tzid = tz;
 652                         break;
 653                     }
 654                 }
 655             }
 656         } else {
 657             tzid = key.substring(CLDRConverter.TIMEZONE_ID_PREFIX.length());
 658         }
 659 
 660         if (tzid != null) {
 661             for (Object[] jreZone : jreTimeZoneNames) {
 662                 if (jreZone[0].equals(tzid)) {
 663                     for (int i = 0; i < ZONE_NAME_KEYS.length; i++) {
 664                         if (map.get(ZONE_NAME_KEYS[i]) == null) {
 665                             String[] jreNames = (String[])jreZone[1];
 666                             map.put(ZONE_NAME_KEYS[i], jreNames[i]);
 667                         }
 668                     }
 669                     break;
 670                 }
 671             }
 672         }
 673     }
 674 
 675     /**
 676      * Perform a generic conversion of CLDR date-time format pattern letter based
 677      * on the support given by the SimpleDateFormat and the j.t.f.DateTimeFormatter
 678      * for date-time formatting.
 679      */
 680     private void convertDateTimePatternLetter(CalendarType calendarType, char cldrLetter, int count, StringBuilder sb) {
 681         switch (cldrLetter) {
 682             case 'u':
 683                 // Change cldr letter 'u' to 'y', as 'u' is interpreted as
 684                 // "Extended year (numeric)" in CLDR/LDML,
 685                 // which is not supported in SimpleDateFormat and
 686                 // j.t.f.DateTimeFormatter, so it is replaced with 'y'
 687                 // as the best approximation
 688                 appendN('y', count, sb);
 689                 break;
 690             case 'B':
 691                 // 'B' character (day period) is not supported by
 692                 // SimpleDateFormat and j.t.f.DateTimeFormatter,
 693                 // this is a workaround in which 'B' character
 694                 // appearing in CLDR date-time pattern is replaced




 277             handleMultipleInheritance(myMap, parentsMap, calendarPrefix + "MonthAbbreviations");
 278             handleMultipleInheritance(myMap, parentsMap, calendarPrefix + "MonthNarrows");
 279             handleMultipleInheritance(myMap, parentsMap, calendarPrefix + "DayNames");
 280             handleMultipleInheritance(myMap, parentsMap, calendarPrefix + "DayAbbreviations");
 281             handleMultipleInheritance(myMap, parentsMap, calendarPrefix + "DayNarrows");
 282             handleMultipleInheritance(myMap, parentsMap, calendarPrefix + "AmPmMarkers");
 283             handleMultipleInheritance(myMap, parentsMap, calendarPrefix + "narrow.AmPmMarkers");
 284             handleMultipleInheritance(myMap, parentsMap, calendarPrefix + "abbreviated.AmPmMarkers");
 285             handleMultipleInheritance(myMap, parentsMap, calendarPrefix + "QuarterNames");
 286             handleMultipleInheritance(myMap, parentsMap, calendarPrefix + "QuarterAbbreviations");
 287             handleMultipleInheritance(myMap, parentsMap, calendarPrefix + "QuarterNarrows");
 288 
 289             adjustEraNames(myMap, calendarType);
 290 
 291             handleDateTimeFormatPatterns(TIME_PATTERN_KEYS, myMap, parentsMap, calendarType, "TimePatterns");
 292             handleDateTimeFormatPatterns(DATE_PATTERN_KEYS, myMap, parentsMap, calendarType, "DatePatterns");
 293             handleDateTimeFormatPatterns(DATETIME_PATTERN_KEYS, myMap, parentsMap, calendarType, "DateTimePatterns");
 294         }
 295 
 296         // First, weed out any empty timezone or metazone names from myMap.

 297         for (Iterator<String> it = myMap.keySet().iterator(); it.hasNext();) {
 298             String key = it.next();
 299             if (key.startsWith(CLDRConverter.TIMEZONE_ID_PREFIX)
 300                     || key.startsWith(CLDRConverter.METAZONE_ID_PREFIX)) {
 301                 @SuppressWarnings("unchecked")
 302                 Map<String, String> nameMap = (Map<String, String>) myMap.get(key);
 303                 if (nameMap.isEmpty()) {
 304                     // Some zones have only exemplarCity, which become empty.
 305                     // Remove those from the map.
 306                     it.remove();
 307                     continue;
 308                 }




 309             }
 310         }
 311         for (Iterator<String> it = myMap.keySet().iterator(); it.hasNext();) {
 312             String key = it.next();
 313                 if (key.startsWith(CLDRConverter.TIMEZONE_ID_PREFIX)
 314                     || key.startsWith(CLDRConverter.METAZONE_ID_PREFIX)) {
 315                 @SuppressWarnings("unchecked")
 316                 Map<String, String> nameMap = (Map<String, String>) myMap.get(key);
 317 
 318                 // Convert key/value pairs to an array.
 319                 String[] names = new String[ZONE_NAME_KEYS.length];
 320                 int ix = 0;
 321                 for (String nameKey : ZONE_NAME_KEYS) {
 322                     String name = nameMap.get(nameKey);
 323                     if (name == null && parentsMap != null) {
 324                         @SuppressWarnings("unchecked")
 325                         Map<String, String> parentNames = (Map<String, String>) parentsMap.get(key);
 326                         if (parentNames != null) {
 327                             name = parentNames.get(nameKey);
 328                         }


 614         if (count != 0) {
 615             converter.convert(calendarType, lastLetter, count, jrePattern);
 616         }
 617         if (cldrFormat.contentEquals(jrePattern)) {
 618             return cldrFormat;
 619         }
 620         return jrePattern.toString();
 621     }
 622 
 623     private String toMetaZoneKey(String tzKey) {
 624         if (tzKey.startsWith(CLDRConverter.TIMEZONE_ID_PREFIX)) {
 625             String tz = tzKey.substring(CLDRConverter.TIMEZONE_ID_PREFIX.length());
 626             String meta = CLDRConverter.handlerMetaZones.get(tz);
 627             if (meta != null) {
 628                 return CLDRConverter.METAZONE_ID_PREFIX + meta;
 629             }
 630         }
 631         return null;
 632     }
 633 




































 634     /**
 635      * Perform a generic conversion of CLDR date-time format pattern letter based
 636      * on the support given by the SimpleDateFormat and the j.t.f.DateTimeFormatter
 637      * for date-time formatting.
 638      */
 639     private void convertDateTimePatternLetter(CalendarType calendarType, char cldrLetter, int count, StringBuilder sb) {
 640         switch (cldrLetter) {
 641             case 'u':
 642                 // Change cldr letter 'u' to 'y', as 'u' is interpreted as
 643                 // "Extended year (numeric)" in CLDR/LDML,
 644                 // which is not supported in SimpleDateFormat and
 645                 // j.t.f.DateTimeFormatter, so it is replaced with 'y'
 646                 // as the best approximation
 647                 appendN('y', count, sb);
 648                 break;
 649             case 'B':
 650                 // 'B' character (day period) is not supported by
 651                 // SimpleDateFormat and j.t.f.DateTimeFormatter,
 652                 // this is a workaround in which 'B' character
 653                 // appearing in CLDR date-time pattern is replaced


< prev index next >