diff --git a/src/components/activitylog.js b/src/components/activitylog.js index 7054726266..4062b7ca1b 100644 --- a/src/components/activitylog.js +++ b/src/components/activitylog.js @@ -2,8 +2,8 @@ import escapeHtml from 'escape-html'; import Events from '../utils/events.ts'; import globalize from '../scripts/globalize'; import dom from '../scripts/dom'; -import * as datefns from 'date-fns'; -import dfnshelper from '../scripts/dfnshelper'; +import { formatRelative } from 'date-fns'; +import { getLocale } from '../scripts/dfnshelper'; import serverNotifications from '../scripts/serverNotifications'; import '../elements/emby-button/emby-button'; import './listview/listview.scss'; @@ -38,7 +38,7 @@ import { toBoolean } from '../utils/string.ts'; html += escapeHtml(entry.Name); html += ''; html += '
'; - html += datefns.formatRelative(Date.parse(entry.Date), Date.parse(new Date()), { locale: dfnshelper.getLocale() }); + html += formatRelative(Date.parse(entry.Date), Date.now(), { locale: getLocale() }); html += '
'; html += '
'; html += escapeHtml(entry.ShortOverview || ''); diff --git a/src/scripts/dfnshelper.js b/src/scripts/dfnshelper.js index 8e3a2516e0..8b9a0d4cd5 100644 --- a/src/scripts/dfnshelper.js +++ b/src/scripts/dfnshelper.js @@ -1,81 +1,86 @@ -import { af, arDZ, be, bg, bn, ca, cs, cy, da, de, el, enGB, enUS, eo, es, et, eu, faIR, fi, fr, frCA, gl, he, hi, hr, hu, id, is, it, ja, kk, ko, lt, lv, ms, nb, - nl, nn, pl, ptBR, pt, ro, ru, sk, sl, sv, ta, th, tr, uk, vi, zhCN, zhTW } from 'date-fns/locale'; -import globalize from './globalize'; +import enUS from 'date-fns/locale/en-US'; -const dateLocales = (locale) => ({ - 'af': af, - 'ar': arDZ, - 'be-by': be, - 'bg-bg': bg, - 'bn': bn, - 'ca': ca, - 'cs': cs, - 'cy': cy, - 'da': da, - 'de': de, - 'el': el, - 'en-gb': enGB, - 'en-us': enUS, - 'eo': eo, - 'es': es, - 'es-ar': es, - 'es-do': es, - 'es-mx': es, - 'et': et, - 'eu': eu, - 'fa': faIR, - 'fi': fi, - 'fr': fr, - 'fr-ca': frCA, - 'gl': gl, - 'gsw': de, - 'he': he, - 'hi-in': hi, - 'hr': hr, - 'hu': hu, - 'id': id, - 'is': is, - 'it': it, - 'ja': ja, - 'kk': kk, - 'ko': ko, - 'lt-lt': lt, - 'lv': lv, - 'ms': ms, - 'nb': nb, - 'nl': nl, - 'nn': nn, - 'pl': pl, - 'pt': pt, - 'pt-br': ptBR, - 'pt-pt': pt, - 'ro': ro, - 'ru': ru, - 'sk': sk, - 'sl-si': sl, - 'sv': sv, - 'ta': ta, - 'th': th, - 'tr': tr, - 'uk': uk, - 'vi': vi, - 'zh-cn': zhCN, - 'zh-hk': zhCN, - 'zh-tw': zhTW -})[locale]; +const LOCALE_MAP = { + 'af': 'af', + 'ar': 'ar-DZ', + 'be-by': 'be', + 'bg-bg': 'bg', + 'bn': 'bn', + 'ca': 'ca', + 'cs': 'cs', + 'cy': 'cy', + 'da': 'da', + 'de': 'de', + 'el': 'el', + 'en-gb': 'en-GB', + 'en-us': 'en-US', + 'eo': 'eo', + 'es': 'es', + 'es-ar': 'es', + 'es-do': 'es', + 'es-mx': 'es', + 'et': 'et', + 'eu': 'eu', + 'fa': 'fa-IR', + 'fi': 'fi', + 'fr': 'fr', + 'fr-ca': 'fr-CA', + 'gl': 'gl', + 'gsw': 'de', + 'he': 'he', + 'hi-in': 'hi', + 'hr': 'hr', + 'hu': 'hu', + 'id': 'id', + 'is': 'is', + 'it': 'it', + 'ja': 'ja', + 'kk': 'kk', + 'ko': 'ko', + 'lt-lt': 'lt', + 'lv': 'lv', + 'ms': 'ms', + 'nb': 'nb', + 'nl': 'nl', + 'nn': 'nn', + 'pl': 'pl', + 'pt': 'pt', + 'pt-br': 'pt-BR', + 'pt-pt': 'pt', + 'ro': 'ro', + 'ru': 'ru', + 'sk': 'sk', + 'sl-si': 'sl', + 'sv': 'sv', + 'ta': 'ta', + 'th': 'th', + 'tr': 'tr', + 'uk': 'uk', + 'vi': 'vi', + 'zh-cn': 'zh-CN', + 'zh-hk': 'zh-HK', + 'zh-tw': 'zh-TW' +}; + +const DEFAULT_LOCALE = 'en-US'; + +let localeString = DEFAULT_LOCALE; +let locale = enUS; + +export async function updateLocale(newLocale) { + console.debug('[dfnshelper] updating date-fns locale', newLocale); + localeString = LOCALE_MAP[newLocale] || LOCALE_MAP[newLocale.replace(/-.*/, '')] || DEFAULT_LOCALE; + console.debug('[dfnshelper] mapped to date-fns locale', localeString); + locale = await import(`date-fns/locale/${localeString}/index.js`); +} export function getLocale() { - return dateLocales(globalize.getCurrentLocale()) || dateLocales(globalize.getCurrentLocale().replace(/-.*/, '')) || enUS; + return locale; } export function getLocaleWithSuffix() { return { addSuffix: true, - locale: getLocale() + locale }; } - -export default { - getLocale: getLocale, - getLocaleWithSuffix -}; diff --git a/src/scripts/globalize.js b/src/scripts/globalize.js index 0cc5523438..7ef28a2789 100644 --- a/src/scripts/globalize.js +++ b/src/scripts/globalize.js @@ -2,6 +2,7 @@ import isEmpty from 'lodash-es/isEmpty'; import { currentSettings as userSettings } from './settings/userSettings'; import Events from '../utils/events.ts'; +import { updateLocale } from './dfnshelper'; const Direction = { rtl: 'rtl', @@ -100,6 +101,8 @@ const Direction = { } else { currentDateTimeCulture = currentCulture; } + updateLocale(currentDateTimeCulture); + ensureTranslations(currentCulture); } diff --git a/webpack.common.js b/webpack.common.js index e820878021..142d1bcec1 100644 --- a/webpack.common.js +++ b/webpack.common.js @@ -113,6 +113,21 @@ const config = { return `node_modules.${parts[0]}.${parts[1]}`; } + if (packageName === 'date-fns') { + const parts = module.context + .substring(module.context.lastIndexOf(packageName)) + .split(/[\\/]/); + + let name = `node_modules.${parts[0]}`; + if (parts[1]) { + name += `.${parts[1]}`; + } + if (parts[1] === 'locale') { + name += `.${parts[2]}`; + } + return name; + } + return `node_modules.${packageName}`; } }