From 98ce33e788d8b0c68bf3d9431d63a1ce6bf232ad Mon Sep 17 00:00:00 2001 From: Till JS Date: Mon, 27 Apr 2026 15:07:35 +0200 Subject: [PATCH] =?UTF-8?q?i18n(memoro):=20translate=20views/DetailView=20?= =?UTF-8?q?via=20$=5F()=20=E2=80=94=20title=20sources,=20statuses,=20field?= =?UTF-8?q?s,=20transcript?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - TITLE_SOURCE_LABELS map → TITLE_SOURCE_KEYS routing through $_(memoro.detail_view.title_sources.*) - statusLabels map → STATUS_KEYS routing through $_(memoro.detail_view.statuses.*) - Shell labels (notFound/confirmDelete/toast_deleted) - Title placeholder: idle vs generating variant - 4 prop rows (Status/Dauer/Sprache/Sichtbarkeit) + lang placeholder - Section labels (Zusammenfassung/Transkript) + transcript states (transcribing/failed/empty/source) - Meta-row Erstellt/Bearbeitet with {date} Baselines: hardcoded 1025 → 1017 (8 cleared); missing-keys baseline unchanged. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../modules/memoro/views/DetailView.svelte | 80 ++++++++++--------- scripts/i18n-hardcoded-baseline.json | 1 - 2 files changed, 44 insertions(+), 37 deletions(-) diff --git a/apps/mana/apps/web/src/lib/modules/memoro/views/DetailView.svelte b/apps/mana/apps/web/src/lib/modules/memoro/views/DetailView.svelte index 44a9eba46..b045738d0 100644 --- a/apps/mana/apps/web/src/lib/modules/memoro/views/DetailView.svelte +++ b/apps/mana/apps/web/src/lib/modules/memoro/views/DetailView.svelte @@ -15,18 +15,16 @@ import { VisibilityPicker, type VisibilityLevel } from '@mana/shared-privacy'; import type { ViewProps } from '$lib/app-registry'; import type { LocalMemo, ProcessingStatus } from '../types'; + import { _ } from 'svelte-i18n'; - // Human-readable labels for the title-source badge below the title - // input. We use these specific strings (not @mana/shared-llm's - // generic tierLabel) so we can surface the actual model family - // — both browser and mana-server now run Gemma 4 variants, so the - // label stays coherent across tiers. - const TITLE_SOURCE_LABELS: Record = { - none: 'Lokal (regelbasiert)', - browser: 'Auf deinem Gerät (Gemma 4 E2B)', - 'mana-server': 'Mana-Server (Gemma 4 E4B)', - byok: 'Dein API-Key', - cloud: 'Google Gemini', + // Map LlmTier → i18n key (mana-server keyed as 'mana_server' since dots are + // reserved path separators). Strings live in memoro.detail_view.title_sources. + const TITLE_SOURCE_KEYS: Record = { + none: 'memoro.detail_view.title_sources.none', + browser: 'memoro.detail_view.title_sources.browser', + 'mana-server': 'memoro.detail_view.title_sources.mana_server', + byok: 'memoro.detail_view.title_sources.byok', + cloud: 'memoro.detail_view.title_sources.cloud', }; function isLlmTier(value: unknown): value is LlmTier { @@ -84,11 +82,11 @@ return `${m}:${String(s).padStart(2, '0')}`; } - const statusLabels: Record = { - pending: 'Ausstehend', - processing: 'Wird verarbeitet', - completed: 'Fertig', - failed: 'Fehlgeschlagen', + const STATUS_KEYS: Record = { + pending: 'memoro.detail_view.statuses.pending', + processing: 'memoro.detail_view.statuses.processing', + completed: 'memoro.detail_view.statuses.completed', + failed: 'memoro.detail_view.statuses.failed', }; const statusColors: Record = { @@ -130,21 +128,21 @@ if (detail.focused) return null; const metadata = (memo.metadata as Record | null) ?? {}; const source = metadata.titleSource; - return isLlmTier(source) ? TITLE_SOURCE_LABELS[source] : null; + return isLlmTier(source) ? $_(TITLE_SOURCE_KEYS[source]) : null; }); detail.deleteWithUndo({ - label: 'Memo gelöscht', + label: $_('memoro.detail_view.toast_deleted'), delete: () => memosStore.delete(memoId), goBack, })} @@ -156,7 +154,9 @@ bind:value={editTitle} onfocus={detail.focus} onblur={saveField} - placeholder={titleIsGenerating && !editTitle ? 'Titel wird generiert…' : 'Titel…'} + placeholder={titleIsGenerating && !editTitle + ? $_('memoro.detail_view.placeholder_title_generating') + : $_('memoro.detail_view.placeholder_title_idle')} />