LibLocale: Parse day-period hour cycle preferences
For example, the locale "fr-FR" will have the preferred hour cycle list of "H hB", meaning h23 and h12-with-day-periods. Whether date-times are actually formatted with day-periods is up to the user, but we need to parse the hour cycle as h12 to know that the FR region supports h12. This bug was revealed by LibJS no longer blindly falling back to h12 (if the `hour12` option is true) or h24 (if the `hour12` option is false).
This commit is contained in:
parent
05e080c4ba
commit
eeb16f03bb
Notes:
sideshowbarker
2024-07-17 16:42:19 +09:00
Author: https://github.com/trflynn89 Commit: https://github.com/SerenityOS/serenity/commit/eeb16f03bb Pull-request: https://github.com/SerenityOS/serenity/pull/21339
2 changed files with 14 additions and 2 deletions
|
@ -575,9 +575,9 @@ static ErrorOr<void> parse_hour_cycles(DeprecatedString core_path, CLDR& cldr)
|
|||
auto const& time_data_object = supplemental_object.get_object("timeData"sv).value();
|
||||
|
||||
auto parse_hour_cycle = [](StringView hour_cycle) -> Optional<Locale::HourCycle> {
|
||||
if (hour_cycle == "h"sv)
|
||||
if (hour_cycle.is_one_of("h"sv, "hb"sv, "hB"sv))
|
||||
return Locale::HourCycle::H12;
|
||||
if (hour_cycle == "H"sv)
|
||||
if (hour_cycle.is_one_of("H"sv, "Hb"sv, "HB"sv))
|
||||
return Locale::HourCycle::H23;
|
||||
if (hour_cycle == "K"sv)
|
||||
return Locale::HourCycle::H11;
|
||||
|
|
|
@ -109,6 +109,18 @@ describe("correct behavior", () => {
|
|||
const ja3 = Intl.DateTimeFormat("ja", { hour: "numeric", hour12: false });
|
||||
expect(ja3.resolvedOptions().hourCycle).toBe("h23");
|
||||
expect(ja3.resolvedOptions().hour12).toBeFalse();
|
||||
|
||||
const fr1 = Intl.DateTimeFormat("fr", { hour: "numeric" });
|
||||
expect(fr1.resolvedOptions().hourCycle).toBe("h23");
|
||||
expect(fr1.resolvedOptions().hour12).toBeFalse();
|
||||
|
||||
const fr2 = Intl.DateTimeFormat("fr", { hour: "numeric", hour12: true });
|
||||
expect(fr2.resolvedOptions().hourCycle).toBe("h12");
|
||||
expect(fr2.resolvedOptions().hour12).toBeTrue();
|
||||
|
||||
const fr3 = Intl.DateTimeFormat("fr", { hour: "numeric", hour12: false });
|
||||
expect(fr3.resolvedOptions().hourCycle).toBe("h23");
|
||||
expect(fr3.resolvedOptions().hour12).toBeFalse();
|
||||
});
|
||||
|
||||
test("timeZone", () => {
|
||||
|
|
Loading…
Add table
Reference in a new issue