< prev index next >
make/jdk/src/classes/build/tools/cldrconverter/CLDRConverter.java
Print this page
rev 49854 : 8181157: CLDR Timezone name fallback implementation
Reviewed-by: sherman
@@ -29,10 +29,11 @@
import build.tools.cldrconverter.BundleGenerator.BundleType;
import java.io.File;
import java.io.IOException;
import java.io.UncheckedIOException;
import java.nio.file.*;
+import java.text.MessageFormat;
import java.time.*;
import java.util.*;
import java.util.ResourceBundle.Control;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -80,13 +81,15 @@
static final String CURRENCY_NAME_PREFIX = "currency.displayname.";
static final String CALENDAR_NAME_PREFIX = "calendarname.";
static final String CALENDAR_FIRSTDAY_PREFIX = "firstDay.";
static final String CALENDAR_MINDAYS_PREFIX = "minDays.";
static final String TIMEZONE_ID_PREFIX = "timezone.id.";
+ static final String EXEMPLAR_CITY_PREFIX = "timezone.excity.";
static final String ZONE_NAME_PREFIX = "timezone.displayname.";
static final String METAZONE_ID_PREFIX = "metazone.id.";
static final String PARENT_LOCALE_PREFIX = "parentLocale.";
+ static final String[] EMPTY_ZONE = {"", "", "", "", "", ""};
private static SupplementDataParseHandler handlerSuppl;
private static SupplementalMetadataParseHandler handlerSupplMeta;
private static LikelySubtagsParseHandler handlerLikelySubtags;
static NumberingSystemsParseHandler handlerNumbering;
@@ -660,27 +663,22 @@
handlerMetaZones.getData().entrySet().stream()
.filter(me ->
Arrays.deepEquals(data,
(String[])map.get(METAZONE_ID_PREFIX + me.getValue())))
.findAny();
- if (cldrMeta.isPresent()) {
- names.put(tzid, cldrMeta.get().getValue());
- } else {
+ cldrMeta.ifPresentOrElse(meta -> names.put(tzid, meta.getValue()), () -> {
// check the JRE meta key, add if there is not.
Optional<Map.Entry<String[], String>> jreMeta =
jreMetaMap.entrySet().stream()
.filter(jm -> Arrays.deepEquals(data, jm.getKey()))
.findAny();
- if (jreMeta.isPresent()) {
- names.put(tzid, jreMeta.get().getValue());
- } else {
+ jreMeta.ifPresentOrElse(meta -> names.put(tzid, meta.getValue()), () -> {
String metaName = "JRE_" + tzid.replaceAll("[/-]", "_");
names.put(METAZONE_ID_PREFIX + metaName, data);
names.put(tzid, metaName);
- jreMetaMap.put(data, metaName);
- }
- }
+ });
+ });
}
});
}
Arrays.stream(AVAILABLE_TZIDS).forEach(tzid -> {
@@ -703,10 +701,30 @@
}
}
}
});
+ // exemplar cities.
+ Map<String, Object> exCities = map.entrySet().stream()
+ .filter(e -> e.getKey().startsWith(CLDRConverter.EXEMPLAR_CITY_PREFIX))
+ .collect(Collectors
+ .toMap(Map.Entry::getKey, Map.Entry::getValue));
+ names.putAll(exCities);
+
+ if (!id.equals("en") &&
+ !names.isEmpty()) {
+ // CLDR does not have UTC entry, so add it here.
+ names.put("UTC", EMPTY_ZONE);
+
+ // no metazone zones
+ Arrays.asList(handlerMetaZones.get(MetaZonesParseHandler.NO_METAZONE_KEY)
+ .split("\\s")).stream()
+ .forEach(tz -> {
+ names.put(tz, EMPTY_ZONE);
+ });
+ }
+
return names;
}
/**
* Extracts the language independent calendar data. Each of the two keys,
@@ -767,10 +785,14 @@
"field.weekday",
"field.dayperiod",
"field.hour",
"timezone.hourFormat",
"timezone.gmtFormat",
+ "timezone.gmtZeroFormat",
+ "timezone.regionFormat",
+ "timezone.regionFormat.daylight",
+ "timezone.regionFormat.standard",
"field.minute",
"field.second",
"field.zone",
"TimePatterns",
"DatePatterns",
< prev index next >