From e8404b8802110d124caaa79c28fe45a7c6f36137 Mon Sep 17 00:00:00 2001 From: xRangerDE Date: Mon, 11 May 2026 11:33:25 +0200 Subject: [PATCH] i18n: localize 2 hardcoded English alt texts on dynamic elements MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two elements rendered by renderer code had hardcoded English alt text that never localized: - renderer.ts cutter preview frame: alt="Preview" - renderer-profile.ts live-thumb: alt="Live preview" Added two new locale keys (DE+EN): - cutter.previewAlt — "Vorschau" / "Preview" - profile.liveThumbAlt — "Live-Vorschau" / "Live preview" renderer.ts updates: the three preview.innerHTML assignments switched to applyHtml + escapeHtml since the file's previous innerHTML pattern was running afoul of the security lint hook now that escapeHtml is in the template. Same shape as the other consolidated renderers (stats, archive, profile). Co-Authored-By: Claude Opus 4.7 (1M context) --- src/renderer-locale-de.ts | 2 ++ src/renderer-locale-en.ts | 2 ++ src/renderer-profile.ts | 2 +- src/renderer.ts | 6 +++--- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/renderer-locale-de.ts b/src/renderer-locale-de.ts index 57b71c7..77d3748 100644 --- a/src/renderer-locale-de.ts +++ b/src/renderer-locale-de.ts @@ -332,6 +332,7 @@ const UI_TEXT_DE = { openTwitch: 'Auf Twitch oeffnen', openTwitchTooltip: 'Diesen Kanal auf twitch.tv oeffnen', liveCardTooltip: 'Klick um sofort eine Live-Aufnahme zu starten', + liveThumbAlt: 'Live-Vorschau', recordNow: 'Jetzt aufnehmen', refresh: 'Aktualisieren', agoMinutes: 'vor {n} Min', @@ -443,6 +444,7 @@ const UI_TEXT_DE = { videoInfoFailed: 'Konnte Video-Informationen nicht lesen. FFprobe installiert?', previewLoading: 'Lade Vorschau...', previewUnavailable: 'Vorschau nicht verfugbar', + previewAlt: 'Vorschau', cutting: 'Schneidet...', cut: 'Schneiden', cutSuccess: 'Video erfolgreich geschnitten!', diff --git a/src/renderer-locale-en.ts b/src/renderer-locale-en.ts index 6958375..a4326c1 100644 --- a/src/renderer-locale-en.ts +++ b/src/renderer-locale-en.ts @@ -332,6 +332,7 @@ const UI_TEXT_EN = { openTwitch: 'Open on Twitch', openTwitchTooltip: 'Open this channel on twitch.tv', liveCardTooltip: 'Click to start a live recording right now', + liveThumbAlt: 'Live preview', recordNow: 'Record now', refresh: 'Refresh', agoMinutes: '{n} min ago', @@ -443,6 +444,7 @@ const UI_TEXT_EN = { videoInfoFailed: 'Could not read video info. Is FFprobe installed?', previewLoading: 'Loading preview...', previewUnavailable: 'Preview unavailable', + previewAlt: 'Preview', cutting: 'Cutting...', cut: 'Cut', cutSuccess: 'Video cut successfully!', diff --git a/src/renderer-profile.ts b/src/renderer-profile.ts index 572b0e0..09d8d03 100644 --- a/src/renderer-profile.ts +++ b/src/renderer-profile.ts @@ -106,7 +106,7 @@ function renderStreamerProfileCard(p: StreamerProfile): void { ? `
${p.currentStreamPreviewUrl - ? `Live preview` + ? `${escapeHtml(UI_TEXT.profile.liveThumbAlt)}` : `
`}
diff --git a/src/renderer.ts b/src/renderer.ts index 2208bb7..70f5306 100644 --- a/src/renderer.ts +++ b/src/renderer.ts @@ -1557,15 +1557,15 @@ async function updatePreview(time: number): Promise { } const preview = byId('cutterPreview'); - preview.innerHTML = `

${UI_TEXT.cutter.previewLoading}

`; + applyHtml(preview, `

${escapeHtml(UI_TEXT.cutter.previewLoading)}

`); const frame = await window.api.extractFrame(cutterFile, time); if (frame) { - preview.innerHTML = `Preview`; + applyHtml(preview, `${escapeHtml(UI_TEXT.cutter.previewAlt)}`); return; } - preview.innerHTML = `

${UI_TEXT.cutter.previewUnavailable}

`; + applyHtml(preview, `

${escapeHtml(UI_TEXT.cutter.previewUnavailable)}

`); } async function startCutting(): Promise {