diff --git a/web/src/lib/components/memory-page/memory-viewer.svelte b/web/src/lib/components/memory-page/memory-viewer.svelte
index e39a3cfa74..45aaf85b67 100644
--- a/web/src/lib/components/memory-page/memory-viewer.svelte
+++ b/web/src/lib/components/memory-page/memory-viewer.svelte
@@ -544,7 +544,9 @@
- {fromLocalDateTime(current.memory.assets[0].localDateTime).toLocaleString(DateTime.DATE_FULL)}
+ {fromLocalDateTime(current.memory.assets[0].localDateTime).toLocaleString(DateTime.DATE_FULL, {
+ locale: $locale,
+ })}
{current.asset.exifInfo?.city || ''}
diff --git a/web/src/lib/components/shared-components/server-about-modal.svelte b/web/src/lib/components/shared-components/server-about-modal.svelte
index cf935cd314..1284bb126d 100644
--- a/web/src/lib/components/shared-components/server-about-modal.svelte
+++ b/web/src/lib/components/shared-components/server-about-modal.svelte
@@ -6,6 +6,7 @@
import { t } from 'svelte-i18n';
import { mdiAlert } from '@mdi/js';
import Icon from '$lib/components/elements/icon.svelte';
+ import { locale } from '$lib/stores/preferences.store';
interface Props {
onClose: () => void;
@@ -177,16 +178,19 @@
{$t('version_history_item', {
values: {
version: item.version,
- date: createdAt.toLocaleString({
- month: 'short',
- day: 'numeric',
- year: 'numeric',
- }),
+ date: createdAt.toLocaleString(
+ {
+ month: 'short',
+ day: 'numeric',
+ year: 'numeric',
+ },
+ { locale: $locale },
+ ),
},
})}
diff --git a/web/src/lib/components/user-settings-page/device-card.svelte b/web/src/lib/components/user-settings-page/device-card.svelte
index 5b70b006be..74e6579dd0 100644
--- a/web/src/lib/components/user-settings-page/device-card.svelte
+++ b/web/src/lib/components/user-settings-page/device-card.svelte
@@ -64,7 +64,9 @@
{DateTime.fromISO(device.updatedAt, { locale: $locale }).toRelativeCalendar(options)}
-
- {DateTime.fromISO(device.updatedAt, { locale: $locale }).toLocaleString(DateTime.DATETIME_MED)}
+ {DateTime.fromISO(device.updatedAt, { locale: $locale }).toLocaleString(DateTime.DATETIME_MED, {
+ locale: $locale,
+ })}
diff --git a/web/src/lib/utils/byte-units.ts b/web/src/lib/utils/byte-units.ts
index dae44009e2..218e22f671 100644
--- a/web/src/lib/utils/byte-units.ts
+++ b/web/src/lib/utils/byte-units.ts
@@ -34,6 +34,7 @@ export function getBytesWithUnit(bytes: number, maxPrecision = 1): [number, Byte
* * de: `1,5 KiB`
*
* @param bytes number of bytes
+ * @param locale locale to use, default is `navigator.language`
* @param maxPrecision maximum number of decimal places, default is `1`
* @returns localized bytes with unit as string
*/
diff --git a/web/src/lib/utils/thumbnail-util.ts b/web/src/lib/utils/thumbnail-util.ts
index a53691e716..f0043790ea 100644
--- a/web/src/lib/utils/thumbnail-util.ts
+++ b/web/src/lib/utils/thumbnail-util.ts
@@ -1,6 +1,7 @@
+import { locale } from '$lib/stores/preferences.store';
import { AssetTypeEnum, type AssetResponseDto } from '@immich/sdk';
import { t } from 'svelte-i18n';
-import { derived } from 'svelte/store';
+import { derived, get } from 'svelte/store';
import { fromLocalDateTime } from './timeline-util';
/**
@@ -43,7 +44,7 @@ export const getAltText = derived(t, ($t) => {
return asset.exifInfo.description;
}
- const date = fromLocalDateTime(asset.localDateTime).toLocaleString({ dateStyle: 'long' });
+ const date = fromLocalDateTime(asset.localDateTime).toLocaleString({ dateStyle: 'long' }, { locale: get(locale) });
const hasPlace = !!asset.exifInfo?.city && !!asset.exifInfo?.country;
const names = asset.people?.filter((p) => p.name).map((p) => p.name) ?? [];
const peopleCount = names.length;
diff --git a/web/src/lib/utils/timeline-util.ts b/web/src/lib/utils/timeline-util.ts
index f40e2bc3eb..21a7d23953 100644
--- a/web/src/lib/utils/timeline-util.ts
+++ b/web/src/lib/utils/timeline-util.ts
@@ -1,41 +1,13 @@
-import type { AssetBucket } from '$lib/stores/assets-store.svelte';
import { locale } from '$lib/stores/preferences.store';
-import { type CommonJustifiedLayout } from '$lib/utils/layout-utils';
-
-import type { AssetResponseDto } from '@immich/sdk';
import { memoize } from 'lodash-es';
import { DateTime, type LocaleOptions } from 'luxon';
import { get } from 'svelte/store';
-export type DateGroup = {
- bucket: AssetBucket;
- index: number;
- row: number;
- col: number;
- date: DateTime;
- groupTitle: string;
- assets: AssetResponseDto[];
- assetsIntersecting: boolean[];
- height: number;
- intersecting: boolean;
- geometry: CommonJustifiedLayout;
-};
export type ScrubberListener = (
bucketDate: string | undefined,
overallScrollPercent: number,
bucketScrollPercent: number,
) => void | Promise