From a32e6a4eb3cc74a6234a580c1e8a8db90d3f5583 Mon Sep 17 00:00:00 2001 From: Paul Rosenzweig <paulrosenzweig@users.noreply.github.com> Date: Thu, 3 Oct 2019 13:36:40 -0400 Subject: [PATCH] show am/pm if locale uses 12-hour clock (#11049) --- frontend/src/metabase/lib/i18n.js | 7 ++++++ .../filters/pickers/HoursMinutesInput.jsx | 3 ++- frontend/test/metabase/lib/i18n.unit.spec.js | 25 +++++++++++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 frontend/test/metabase/lib/i18n.unit.spec.js diff --git a/frontend/src/metabase/lib/i18n.js b/frontend/src/metabase/lib/i18n.js index eeeee69e449..c9552a9054d 100644 --- a/frontend/src/metabase/lib/i18n.js +++ b/frontend/src/metabase/lib/i18n.js @@ -25,6 +25,13 @@ export function setLocalization(translationsObject) { moment.locale(locale); } +// Format a fixed timestamp in local time to see if the current locale defaults +// to using a 24 hour clock. +export function isLocale24Hour() { + const formattedTime = moment("2000-01-01T13:00:00").format("LT"); + return /^13:/.test(formattedTime); +} + // we delete msgid property since it's redundant, but have to add it back in to // make ttag happy function addMsgIds(translationsObject) { diff --git a/frontend/src/metabase/query_builder/components/filters/pickers/HoursMinutesInput.jsx b/frontend/src/metabase/query_builder/components/filters/pickers/HoursMinutesInput.jsx index 20e7dfd3d7e..fdb298618ea 100644 --- a/frontend/src/metabase/query_builder/components/filters/pickers/HoursMinutesInput.jsx +++ b/frontend/src/metabase/query_builder/components/filters/pickers/HoursMinutesInput.jsx @@ -2,6 +2,7 @@ import React from "react"; import NumericInput from "metabase/components/NumericInput"; import Icon from "metabase/components/Icon"; +import { isLocale24Hour } from "metabase/lib/i18n"; import cx from "classnames"; import moment from "moment"; @@ -12,7 +13,7 @@ const HoursMinutesInput = ({ onChangeHours, onChangeMinutes, onClear, - is24HourMode = false, + is24HourMode = isLocale24Hour(), }) => ( <div className="flex align-center"> <NumericInput diff --git a/frontend/test/metabase/lib/i18n.unit.spec.js b/frontend/test/metabase/lib/i18n.unit.spec.js new file mode 100644 index 00000000000..8a31a116654 --- /dev/null +++ b/frontend/test/metabase/lib/i18n.unit.spec.js @@ -0,0 +1,25 @@ +import moment from "moment"; + +import { isLocale24Hour } from "metabase/lib/i18n"; + +describe("isLocale24Hour", () => { + const testCases = [ + ["en", false], + ["en-us", false], + ["en-gb", true], + ["fr", true], + ["zh-cn", true], + ]; + for (const [locale, is24] of testCases) { + it(`should return ${is24} for '${locale}'`, () => { + // save locale before changing it + const startingLocale = moment.locale(); + + moment.locale(locale); + expect(isLocale24Hour()).toBe(is24); + + // reset locale + moment.locale(startingLocale); + }); + } +}); -- GitLab