From f4fd8a450377b78914152e3d9fa03cb3a5054885 Mon Sep 17 00:00:00 2001 From: Zain Date: Fri, 20 Mar 2026 17:52:37 +0800 Subject: [PATCH] fix: skip i18n for raw error texts --- .../components/virtual-preview-list.ts | 8 +++++ tests/unit/virtual-preview-list.test.ts | 33 ++++++++++++++++++- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/src/content/components/virtual-preview-list.ts b/src/content/components/virtual-preview-list.ts index ce987ec..e505cbc 100644 --- a/src/content/components/virtual-preview-list.ts +++ b/src/content/components/virtual-preview-list.ts @@ -74,9 +74,17 @@ export class VirtualPreviewList extends LitElement { * Render a single preview item * @private */ + private isTranslationCandidate(error: string): boolean { + return /^[a-z0-9_]+$/.test(error); + } + private resolveErrorText(error?: string): string | undefined { if (!error) return undefined; + if (!this.isTranslationCandidate(error)) { + return error; + } + const translationKey = `error_${error}`; const translated = I18nService.t(translationKey); diff --git a/tests/unit/virtual-preview-list.test.ts b/tests/unit/virtual-preview-list.test.ts index a89c337..b917d36 100644 --- a/tests/unit/virtual-preview-list.test.ts +++ b/tests/unit/virtual-preview-list.test.ts @@ -1,4 +1,4 @@ -import { describe, expect, it } from 'vitest'; +import { describe, expect, it, vi } from 'vitest'; import { VirtualPreviewList } from '../../src/content/components/virtual-preview-list'; import { I18nService } from '../../src/utils/i18n'; @@ -118,4 +118,35 @@ describe('VirtualPreviewList pending preview mapping', () => { element.remove(); }); + + it('renders raw error text without warning when given a network error message', async () => { + const warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => {}); + + const element = new VirtualPreviewList(); + element.items = [ + { + file: { + id: 'file-network', + name: 'old-network.mkv', + ext: 'mkv', + size: 1, + mtime: Date.now(), + isDir: false, + }, + newName: 'new-network.mkv', + conflict: false, + error: 'Network error', + }, + ]; + + document.body.appendChild(element); + await element.updateComplete; + + const textContent = element.shadowRoot?.textContent ?? ''; + expect(textContent).toContain('Network error'); + expect(warnSpy).not.toHaveBeenCalled(); + + warnSpy.mockRestore(); + element.remove(); + }); });