fix(document): localize PdfViewer render-error message and download link
The error state showed a hardcoded German string ("Fehler beim Laden
der PDF" / "Direkt öffnen") to all users regardless of locale. Use the
localized doc_render_failed and doc_download_link messages so the
recovery path (message + working download link) is honest in de/en/es.
Refs #708
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -171,14 +171,14 @@ function handleAnnotationClick(id: string) {
|
|||||||
</div>
|
</div>
|
||||||
{:else if renderer.error}
|
{:else if renderer.error}
|
||||||
<div class="flex h-full w-full flex-col items-center justify-center gap-3 bg-pdf-bg text-ink-3">
|
<div class="flex h-full w-full flex-col items-center justify-center gap-3 bg-pdf-bg text-ink-3">
|
||||||
<p class="font-sans text-sm text-red-400">Fehler beim Laden der PDF</p>
|
<p class="font-sans text-sm text-red-400">{m.doc_render_failed()}</p>
|
||||||
<a
|
<a
|
||||||
href={url}
|
href={url}
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
class="font-sans text-xs text-primary underline hover:text-ink-2"
|
class="font-sans text-xs text-primary underline hover:text-ink-2"
|
||||||
>
|
>
|
||||||
Direkt öffnen
|
{m.doc_download_link()}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
{:else}
|
{:else}
|
||||||
|
|||||||
@@ -3,9 +3,39 @@ import { cleanup, render } from 'vitest-browser-svelte';
|
|||||||
import { page } from 'vitest/browser';
|
import { page } from 'vitest/browser';
|
||||||
import PdfViewer from './PdfViewer.svelte';
|
import PdfViewer from './PdfViewer.svelte';
|
||||||
import { makeFakeLibLoader } from './testHelpers';
|
import { makeFakeLibLoader } from './testHelpers';
|
||||||
|
import { m } from '$lib/paraglide/messages.js';
|
||||||
|
|
||||||
afterEach(cleanup);
|
afterEach(cleanup);
|
||||||
|
|
||||||
|
function makeFailingLibLoader() {
|
||||||
|
const lib = {
|
||||||
|
GlobalWorkerOptions: { workerSrc: '' },
|
||||||
|
getDocument: vi.fn().mockReturnValue({
|
||||||
|
promise: Promise.reject(new Error('JBig2 failed to initialize'))
|
||||||
|
}),
|
||||||
|
TextLayer: class {
|
||||||
|
render() {
|
||||||
|
return Promise.resolve();
|
||||||
|
}
|
||||||
|
cancel() {}
|
||||||
|
}
|
||||||
|
} as unknown as typeof import('pdfjs-dist');
|
||||||
|
return vi.fn().mockResolvedValue([lib, { default: '' }] as const);
|
||||||
|
}
|
||||||
|
|
||||||
|
describe('PdfViewer — render failure', () => {
|
||||||
|
it('shows the localized failure message and a download link, not a blank canvas', async () => {
|
||||||
|
render(PdfViewer, {
|
||||||
|
url: '/api/documents/test/file',
|
||||||
|
documentId: 'test',
|
||||||
|
libLoader: makeFailingLibLoader()
|
||||||
|
});
|
||||||
|
|
||||||
|
await expect.element(page.getByText(m.doc_render_failed())).toBeVisible();
|
||||||
|
await expect.element(page.getByRole('link', { name: m.doc_download_link() })).toBeVisible();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('PdfViewer — empty / error states', () => {
|
describe('PdfViewer — empty / error states', () => {
|
||||||
it('renders the no-file placeholder when url is empty', async () => {
|
it('renders the no-file placeholder when url is empty', async () => {
|
||||||
render(PdfViewer, { url: '', libLoader: makeFakeLibLoader() });
|
render(PdfViewer, { url: '', libLoader: makeFakeLibLoader() });
|
||||||
|
|||||||
Reference in New Issue
Block a user