@@ -171,7 +171,7 @@
@@ -229,7 +229,7 @@
diff --git a/web/src/lib/components/i18n/__test__/format-message.spec.ts b/web/src/lib/components/i18n/__test__/format-message.spec.ts
index 1449b3d4b7..be3e36bfa8 100644
--- a/web/src/lib/components/i18n/__test__/format-message.spec.ts
+++ b/web/src/lib/components/i18n/__test__/format-message.spec.ts
@@ -2,13 +2,10 @@ import FormatTagB from '$lib/components/i18n/__test__/format-tag-b.svelte';
import FormatMessage from '$lib/components/i18n/format-message.svelte';
import '@testing-library/jest-dom';
import { render, screen } from '@testing-library/svelte';
-import { init, json, locale, register, waitLocale } from 'svelte-i18n';
-import { get } from 'svelte/store';
+import { init, locale, register, waitLocale } from 'svelte-i18n';
import { describe } from 'vitest';
describe('FormatMessage component', () => {
- let $json: (id: string, locale?: string | undefined) => unknown;
-
beforeAll(async () => {
register('en', () =>
Promise.resolve({
@@ -21,12 +18,11 @@ describe('FormatMessage component', () => {
await init({ fallbackLocale: 'en' });
await waitLocale('en');
- $json = get(json);
});
it('formats a plain text message', () => {
render(FormatMessage, {
- message: $json('hello'),
+ key: 'hello',
values: { name: 'test' },
});
expect(screen.getByText('Hello test')).toBeInTheDocument();
@@ -34,20 +30,20 @@ describe('FormatMessage component', () => {
it('throws an error when locale is empty', async () => {
await locale.set(undefined);
- expect(() => render(FormatMessage, { message: undefined })).toThrowError();
+ expect(() => render(FormatMessage, { key: '' })).toThrowError();
await locale.set('en');
});
it('shows raw message when value is empty', () => {
render(FormatMessage, {
- message: $json('hello'),
+ key: 'hello',
});
expect(screen.getByText('Hello {name}')).toBeInTheDocument();
});
it('shows message when slot is empty', () => {
render(FormatMessage, {
- message: $json('html'),
+ key: 'html',
values: { name: 'test' },
});
expect(screen.getByText('Hello test')).toBeInTheDocument();
@@ -55,7 +51,7 @@ describe('FormatMessage component', () => {
it('renders a message with html', () => {
const { container } = render(FormatTagB, {
- message: $json('html'),
+ key: 'html',
values: { name: 'test' },
});
expect(container.innerHTML).toBe('Hello test');
@@ -63,7 +59,7 @@ describe('FormatMessage component', () => {
it('renders a message with html and plural', () => {
const { container } = render(FormatTagB, {
- message: $json('plural'),
+ key: 'plural',
values: { count: 1 },
});
expect(container.innerHTML).toBe('You have 1 item');
@@ -71,8 +67,13 @@ describe('FormatMessage component', () => {
it('protects agains XSS injection', () => {
render(FormatMessage, {
- message: $json('xss'),
+ key: 'xss',
});
expect(screen.getByText('')).toBeInTheDocument();
});
+
+ it('displays the message key when not found', () => {
+ render(FormatMessage, { key: 'invalid.key' });
+ expect(screen.getByText('invalid.key')).toBeInTheDocument();
+ });
});
diff --git a/web/src/lib/components/i18n/__test__/format-tag-b.svelte b/web/src/lib/components/i18n/__test__/format-tag-b.svelte
index c7017eabef..f06a54a1e0 100644
--- a/web/src/lib/components/i18n/__test__/format-tag-b.svelte
+++ b/web/src/lib/components/i18n/__test__/format-tag-b.svelte
@@ -2,11 +2,11 @@
import FormatMessage from '../format-message.svelte';
import type { ComponentProps } from 'svelte';
- export let message: unknown;
+ export let key: string;
export let values: ComponentProps['values'];
-
+
{#if tag === 'b'}
{message}
{/if}
diff --git a/web/src/lib/components/i18n/format-message.svelte b/web/src/lib/components/i18n/format-message.svelte
index 5bf3c14c32..62ccead471 100644
--- a/web/src/lib/components/i18n/format-message.svelte
+++ b/web/src/lib/components/i18n/format-message.svelte
@@ -1,11 +1,11 @@
diff --git a/web/src/lib/components/onboarding-page/onboarding-storage-template.svelte b/web/src/lib/components/onboarding-page/onboarding-storage-template.svelte
index 193adb3e4d..e8f3542f5d 100644
--- a/web/src/lib/components/onboarding-page/onboarding-storage-template.svelte
+++ b/web/src/lib/components/onboarding-page/onboarding-storage-template.svelte
@@ -9,7 +9,7 @@
import Button from '../elements/buttons/button.svelte';
import Icon from '../elements/icon.svelte';
import OnboardingCard from './onboarding-card.svelte';
- import { json, t } from 'svelte-i18n';
+ import { t } from 'svelte-i18n';
import FormatMessage from '$lib/components/i18n/format-message.svelte';
const dispatch = createEventDispatcher<{
@@ -30,7 +30,7 @@
-
+
{message}
diff --git a/web/src/lib/components/shared-components/version-announcement-box.svelte b/web/src/lib/components/shared-components/version-announcement-box.svelte
index 5f4b5557dd..ff161f1eeb 100644
--- a/web/src/lib/components/shared-components/version-announcement-box.svelte
+++ b/web/src/lib/components/shared-components/version-announcement-box.svelte
@@ -3,7 +3,7 @@
import type { ServerVersionResponseDto } from '@immich/sdk';
import Button from '../elements/buttons/button.svelte';
import FullScreenModal from './full-screen-modal.svelte';
- import { json, t } from 'svelte-i18n';
+ import { t } from 'svelte-i18n';
import FormatMessage from '$lib/components/i18n/format-message.svelte';
let showModal = false;
@@ -37,7 +37,7 @@
{#if showModal}
(showModal = false)}>