diff --git a/src/components/relative-time.jsx b/src/components/relative-time.jsx index 9c62c771..9308c643 100644 --- a/src/components/relative-time.jsx +++ b/src/components/relative-time.jsx @@ -16,7 +16,8 @@ function isValidDate(value) { const resolvedLocale = new Intl.DateTimeFormat().resolvedOptions().locale; const DTF = mem((locale, opts = {}) => { - const lang = localeMatch([locale], [resolvedLocale], locale); + const regionlessLocale = locale.replace(/-[a-z]+$/i, ''); + const lang = localeMatch([regionlessLocale], [resolvedLocale], locale); try { return new Intl.DateTimeFormat(lang, opts); } catch (e) {} diff --git a/src/utils/nice-date-time.js b/src/utils/nice-date-time.js index 29019360..adf81c88 100644 --- a/src/utils/nice-date-time.js +++ b/src/utils/nice-date-time.js @@ -7,10 +7,8 @@ const defaultLocale = new Intl.DateTimeFormat().resolvedOptions().locale; const _DateTimeFormat = (opts) => { const { locale, dateYear, hideTime, formatOpts } = opts || {}; - const loc = - locale && !/pseudo/i.test(locale) - ? localeMatch([locale], [defaultLocale], locale) - : defaultLocale; + const regionlessLocale = locale.replace(/-[a-z]+$/i, ''); + const loc = localeMatch([regionlessLocale], [defaultLocale], locale); const currentYear = new Date().getFullYear(); const options = { // Show year if not current year @@ -24,9 +22,11 @@ const _DateTimeFormat = (opts) => { }; try { return Intl.DateTimeFormat(loc, options); - } catch (e) { - return Intl.DateTimeFormat(undefined, options); - } + } catch (e) {} + try { + return Intl.DateTimeFormat(locale, options); + } catch (e) {} + return Intl.DateTimeFormat(undefined, options); }; const DateTimeFormat = mem(_DateTimeFormat);