Skip to content

Commit

Permalink
CLDR-10347 show one example for each day period, excluding midnight (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
haytenf authored Aug 16, 2024
1 parent 0a99e76 commit e4264a8
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,6 @@ public class ExampleGenerator {

private static final Date DATE_SAMPLE2;
private static final Date DATE_SAMPLE3;
private static final Date DATE_SAMPLE4;

static {
Calendar calendar = Calendar.getInstance(ZONE_SAMPLE, ULocale.ENGLISH);
Expand All @@ -180,8 +179,6 @@ public class ExampleGenerator {

calendar.set(1999, 8, 5, 7, 0, 0); // 1999-09-05 07:00:00
DATE_SAMPLE3 = calendar.getTime();
calendar.set(1999, 8, 5, 23, 0, 0); // 1999-09-05 23:00:00
DATE_SAMPLE4 = calendar.getTime();
}

static final List<DecimalQuantity> CURRENCY_SAMPLES =
Expand Down Expand Up @@ -2597,7 +2594,6 @@ private String handleDateFormatItem(String xpath, String value, boolean showCont
String numbersOverride = parts.findAttributeValue("pattern", "numbers");
SimpleDateFormat sdf =
icuServiceBuilder.getDateFormat(calendar, value, numbersOverride);
sdf.setTimeZone(ZONE_SAMPLE);
String defaultNumberingSystem =
cldrFile.getWinningValue("//ldml/numbers/defaultNumberingSystem");
String timeSeparator =
Expand All @@ -2609,6 +2605,7 @@ private String handleDateFormatItem(String xpath, String value, boolean showCont
dfs.setTimeSeparatorString(timeSeparator);
sdf.setDateFormatSymbols(dfs);
if (id == null || id.indexOf('B') < 0) {
sdf.setTimeZone(ZONE_SAMPLE);
// Standard date/time format, or availableFormat without dayPeriod
if (value.contains("MMM") || value.contains("LLL")) {
// alpha month, do not need context examples
Expand All @@ -2626,9 +2623,27 @@ private String handleDateFormatItem(String xpath, String value, boolean showCont
}
} else {
List<String> examples = new ArrayList<>();
examples.add(sdf.format(DATE_SAMPLE3));
examples.add(sdf.format(DATE_SAMPLE));
examples.add(sdf.format(DATE_SAMPLE4));
DayPeriodInfo dayPeriodInfo =
supplementalDataInfo.getDayPeriods(
DayPeriodInfo.Type.format, cldrFile.getLocaleID());
Set<DayPeriod> dayPeriods =
new LinkedHashSet<DayPeriod>(dayPeriodInfo.getPeriods());
for (DayPeriod dayPeriod : dayPeriods) {
if (dayPeriod.equals(
DayPeriod.midnight)) { // suppress midnight, see ICU-12278 bug
continue;
}
R3<Integer, Integer, Boolean> info =
dayPeriodInfo.getFirstDayPeriodInfo(dayPeriod);
if (info != null) {
int time =
((info.get0() + info.get1())
/ 2); // dayPeriod endpoints overlap, midpoint to
// disambiguate
String formatted = sdf.format(time);
examples.add(formatted);
}
}
return formatExampleList(examples.toArray(new String[0]));
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1123,6 +1123,42 @@ private void checkDayPeriod(
checkPathValue(exampleGenerator, path, cldrFile.getStringValue(path), expected);
}

public void TestAllDayPeriods() { // excludes midnight, see ICU-12278
checkDayPeriodsForLocale(
"en",
"Bhm",
"〖3:00 at night〗〖9:00 in the morning〗〖12:00 noon〗〖3:00 in the afternoon〗〖7:30 in the evening〗");
checkDayPeriodsForLocale(
"it",
"Bhm",
"〖3:00 di notte〗〖9:00 di mattina〗〖12:00 mezzogiorno〗〖3:00 di pomeriggio〗〖9:00 di sera〗");
checkDayPeriodsForLocale(
"de",
"Bhm",
"〖2:30 nachts〗〖7:30 morgens〗〖11:00 vorm.〗〖12:30 mittags〗〖3:30 nachm.〗〖9:00 abends〗");
checkDayPeriodsForLocale("zh", "Bhm", "〖凌晨2:30〗〖早上6:30〗〖上午10:00〗〖中午12:30〗〖下午4:00〗〖晚上9:30〗");
checkDayPeriodsForLocale(
"am",
"EBhm",
"〖ሐሙስ በሌሊት 3:00〗〖ሐሙስ ጥዋት 9:00〗〖ሐሙስ ቀትር 12:00〗〖ሐሙስ ከሰዓት 3:00〗〖ሐሙስ በምሽት 9:00〗");
checkDayPeriodsForLocale(
"hi",
"EBhms",
"〖गुरु रात 2:00:00〗〖गुरु सुबह 8:00:00〗〖गुरु दोपहर 2:00:00〗〖गुरु शाम 6:00:00〗");
}

public void checkDayPeriodsForLocale(String localeId, String pattern, String expected) {
ExampleGenerator exampleGenerator = getExampleGenerator(localeId);
String path =
"//ldml/dates/calendars/calendar[@type=\"gregorian\"]"
+ "/dateTimeFormats/availableFormats/dateFormatItem"
+ "[@id=\""
+ pattern
+ "\"]";
String message = "Day periods with pattern \"" + pattern + "\"";
checkValue(message, expected, exampleGenerator, path);
}

/**
* Test that getExampleHtml returns same output for same input regardless of order in which it
* is called with different inputs.
Expand Down

0 comments on commit e4264a8

Please sign in to comment.