From 1931739aac96634cf876e4305930ebbac5a63a01 Mon Sep 17 00:00:00 2001 From: Till JS Date: Mon, 27 Apr 2026 14:53:09 +0200 Subject: [PATCH] =?UTF-8?q?i18n(todo):=20translate=20views/DetailView=20vi?= =?UTF-8?q?a=20$=5F()=20=E2=80=94=20title,=20prop=20rows,=20sections,=20me?= =?UTF-8?q?ta?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Shell labels: notFound + confirmDelete - Title input placeholder + Untitled fallback (was hardcoded English 'Untitled') - Prop rows: Sichtbarkeit / Priorität (todo.priority) / Fällig (todo.dueDate) / Dauer (todo.duration) / Kalender labels - Priority options routed via priorityKeys map → todo.priorityLow/Medium/High/Urgent - Duration value with {n} interpolation, calendar Planen button + unschedule aria - Tags / Beschreibung section labels (existing top-level keys) - Subtasks count interpolation ({done}/{total}) - Meta footer Erstellt/Bearbeitet with {date} interpolation - Toast undo "Aufgabe gelöscht" Baselines: hardcoded 1042 → 1034 (8 cleared); missing-keys baseline unchanged. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../web/src/lib/i18n/locales/todo/de.json | 1 + .../web/src/lib/i18n/locales/todo/en.json | 1 + .../web/src/lib/i18n/locales/todo/es.json | 1 + .../web/src/lib/i18n/locales/todo/fr.json | 1 + .../web/src/lib/i18n/locales/todo/it.json | 1 + .../lib/modules/todo/views/DetailView.svelte | 68 ++++++++++++------- scripts/i18n-hardcoded-baseline.json | 1 - 7 files changed, 48 insertions(+), 26 deletions(-) diff --git a/apps/mana/apps/web/src/lib/i18n/locales/todo/de.json b/apps/mana/apps/web/src/lib/i18n/locales/todo/de.json index 8dc95ad9f..c65507d0d 100644 --- a/apps/mana/apps/web/src/lib/i18n/locales/todo/de.json +++ b/apps/mana/apps/web/src/lib/i18n/locales/todo/de.json @@ -89,6 +89,7 @@ "layoutFocus": "Fokus" }, "detailView": { + "labelVisibility": "Sichtbarkeit", "notFound": "Aufgabe nicht gefunden", "confirmDelete": "Aufgabe wirklich löschen?", "toastDeleted": "Aufgabe gelöscht", diff --git a/apps/mana/apps/web/src/lib/i18n/locales/todo/en.json b/apps/mana/apps/web/src/lib/i18n/locales/todo/en.json index 456fbd1b1..b9c63f9f7 100644 --- a/apps/mana/apps/web/src/lib/i18n/locales/todo/en.json +++ b/apps/mana/apps/web/src/lib/i18n/locales/todo/en.json @@ -89,6 +89,7 @@ "layoutFocus": "Focus" }, "detailView": { + "labelVisibility": "Visibility", "notFound": "Task not found", "confirmDelete": "Really delete task?", "toastDeleted": "Task deleted", diff --git a/apps/mana/apps/web/src/lib/i18n/locales/todo/es.json b/apps/mana/apps/web/src/lib/i18n/locales/todo/es.json index daa08576a..8d185876b 100644 --- a/apps/mana/apps/web/src/lib/i18n/locales/todo/es.json +++ b/apps/mana/apps/web/src/lib/i18n/locales/todo/es.json @@ -89,6 +89,7 @@ "layoutFocus": "Enfoque" }, "detailView": { + "labelVisibility": "Visibilidad", "notFound": "Tarea no encontrada", "confirmDelete": "¿Eliminar realmente la tarea?", "toastDeleted": "Tarea eliminada", diff --git a/apps/mana/apps/web/src/lib/i18n/locales/todo/fr.json b/apps/mana/apps/web/src/lib/i18n/locales/todo/fr.json index 1c5d91f13..29abb7994 100644 --- a/apps/mana/apps/web/src/lib/i18n/locales/todo/fr.json +++ b/apps/mana/apps/web/src/lib/i18n/locales/todo/fr.json @@ -89,6 +89,7 @@ "layoutFocus": "Focus" }, "detailView": { + "labelVisibility": "Visibilité", "notFound": "Tâche introuvable", "confirmDelete": "Vraiment supprimer la tâche ?", "toastDeleted": "Tâche supprimée", diff --git a/apps/mana/apps/web/src/lib/i18n/locales/todo/it.json b/apps/mana/apps/web/src/lib/i18n/locales/todo/it.json index 7aba4db9f..82668349c 100644 --- a/apps/mana/apps/web/src/lib/i18n/locales/todo/it.json +++ b/apps/mana/apps/web/src/lib/i18n/locales/todo/it.json @@ -89,6 +89,7 @@ "layoutFocus": "Focus" }, "detailView": { + "labelVisibility": "Visibilità", "notFound": "Attività non trovata", "confirmDelete": "Eliminare davvero l'attività?", "toastDeleted": "Attività eliminata", diff --git a/apps/mana/apps/web/src/lib/modules/todo/views/DetailView.svelte b/apps/mana/apps/web/src/lib/modules/todo/views/DetailView.svelte index e02d1b1c4..ed2203357 100644 --- a/apps/mana/apps/web/src/lib/modules/todo/views/DetailView.svelte +++ b/apps/mana/apps/web/src/lib/modules/todo/views/DetailView.svelte @@ -20,6 +20,7 @@ import LinkedItems from '$lib/components/links/LinkedItems.svelte'; import { toastStore } from '@mana/shared-ui/toast'; import { removeTagIdWithUndo } from '$lib/data/tag-mutations'; + import { _ } from 'svelte-i18n'; let { navigate, params, goBack }: ViewProps = $props(); let taskId = $derived(params.taskId as string); @@ -84,7 +85,7 @@ async function saveField() { detail.blur(); await tasksStore.updateTask(taskId, { - title: editTitle.trim() || detail.entity?.title || 'Untitled', + title: editTitle.trim() || detail.entity?.title || $_('todo.detailView.untitledFallback'), description: editDescription.trim() || undefined, dueDate: editDueDate ? new Date(editDueDate).toISOString() : null, priority: editPriority, @@ -139,16 +140,16 @@ const id = taskId; await tasksStore.deleteTask(id); goBack(); - toastStore.undo('Aufgabe gelöscht', () => { + toastStore.undo($_('todo.detailView.toastDeleted'), () => { db.table('tasks').update(id, { deletedAt: undefined }); }); } - const priorityLabels: Record = { - low: 'Niedrig', - medium: 'Mittel', - high: 'Hoch', - urgent: 'Dringend', + const priorityKeys: Record = { + low: 'todo.priorityLow', + medium: 'todo.priorityMedium', + high: 'todo.priorityHigh', + urgent: 'todo.priorityUrgent', }; const priorityColors: Record = { @@ -162,11 +163,11 @@ {#snippet body(task)} @@ -182,18 +183,18 @@ bind:value={editTitle} onfocus={detail.focus} onblur={saveField} - placeholder="Titel..." + placeholder={$_('todo.detailView.placeholderTitle')} />
- Sichtbarkeit + {$_('todo.detailView.labelVisibility')}
- Priorität + {$_('todo.priority')}
- Fällig + {$_('todo.dueDate')} - Dauer - {Math.round(task.estimatedDuration / 60)} Min. + {$_('todo.duration')} + {$_('todo.detailView.durationMin', { + values: { n: Math.round(task.estimatedDuration / 60) }, + })}
{/if}
- Kalender + {$_('todo.detailView.labelCalendar')} {#if isScheduled}
@@ -254,7 +259,7 @@
0}
- +
{#each taskTags as tag (tag.id)}