i18n(agents/templates): translate /agents/templates +page.svelte via $_()

Adds agents.templates namespace covering page title + back link, header
sub copy, 2 section headings + descriptions, 4 chip variants (Agent/
Scene/Mission/Seeds with one/other plurals), detail no-agent role,
3 preview section headings (Scene-Layout/Starter-Missionen/Seeds), seed
hint + count plurals + unnamed fallback, 5 cadence variants (manual/
daily/weekly/interval/cron) with interpolation, options section + 4
checkbox labels, result strings (existing/new agent + scene + mission
active/paused + seed summary with/without failed), error fallback,
apply-button states (applying / "Template „{label}" anwenden").

Baselines: hardcoded 968 → 961 (7 cleared); missing-keys baseline unchanged.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Till JS 2026-04-27 17:58:15 +02:00
parent aa96cae8a0
commit 98a9bc4dc5
7 changed files with 349 additions and 49 deletions

View file

@ -0,0 +1,49 @@
{
"templates": {
"page_title_html": "Templates — Mana",
"back": "Zurück zum Workbench",
"title": "Templates",
"sub": "Vorgefertigte Setups für deinen Workbench. Wähle ein Template und du hast in einem Klick eine passende Scene, optionale AI-Agenten und erste Daten in den richtigen Modulen.",
"section_agent_title": "🤖 Agent-Templates",
"section_agent_desc": "Benannte AI-Personas mit eigener Policy, Memory und Starter-Mission.",
"section_workbench_title": "🎨 Workbench-Templates",
"section_workbench_desc": "Starter-Kits ohne AI — Scene-Layout + vor-gefüllte Habits, Goals und Module-Daten. Du arbeitest selbst, das Template nimmt dir die Einrichtung ab.",
"chip_agent": "Agent",
"chip_scene": "Scene",
"chip_mission_one": "{n} Mission",
"chip_mission_other": "{n} Missionen",
"chip_seed_one": "{n} Seed",
"chip_seed_other": "{n} Seeds",
"detail_no_agent_role": "Workbench-Setup ohne AI-Agent",
"section_scene": "Scene-Layout",
"section_missions": "Starter-Missionen",
"section_seeds": "Seeds",
"seed_hint": "Vorgefüllte Einträge in deinen Modulen. Werden als neue Records angelegt; bestehende Einträge mit gleicher Seed-ID werden übersprungen (idempotent).",
"seed_count_one": "{n} Eintrag",
"seed_count_other": "{n} Einträge",
"seed_unnamed": "(unbenannt)",
"cadence_manual": "manuell auslösen",
"cadence_daily": "täglich {h}:{m}",
"cadence_weekly": "wöchentlich, Tag {day} um {h}:00",
"cadence_interval": "alle {n} Minuten",
"cadence_cron": "cron: {expression}",
"section_options": "Optionen",
"opt_create_scene": "Scene „{name}\" anlegen und direkt öffnen",
"opt_create_missions": "Starter-Mission(en) mit anlegen",
"opt_start_active": "Mission(en) sofort aktivieren (Standard: pausiert)",
"opt_apply_seeds": "Seed-Daten in Module einpflegen",
"result_existing_agent": "„{name}\" existierte schon — wiederverwendet.",
"result_new_agent": "Agent „{name}\" angelegt.",
"result_template_applied": "Template angewendet.",
"result_scene_created": "Scene angelegt + aktiviert.",
"result_missions_active": "{n} Mission{n, plural, one {} other {en}} aktiviert.",
"result_missions_paused": "{n} Mission{n, plural, one {} other {en}} pausiert angelegt.",
"result_seeds_summary_no_failed": "{created} Seed{created, plural, one {} other {s}} neu, {skipped} bereits vorhanden.",
"result_seeds_summary_with_failed": "{created} Seed{created, plural, one {} other {s}} neu, {skipped} bereits vorhanden, {failed} fehlgeschlagen.",
"result_action_pick_other": "Weiteres Template auswählen",
"result_action_workbench": "Zum Workbench",
"err_apply_failed": "Konnte Template nicht anwenden",
"action_applying": "Lege an…",
"action_apply_template": "Template „{label}\" anwenden"
}
}

View file

@ -0,0 +1,49 @@
{
"templates": {
"page_title_html": "Templates — Mana",
"back": "Back to workbench",
"title": "Templates",
"sub": "Pre-configured setups for your workbench. Pick a template and you'll get a matching scene, optional AI agents, and starter data in the right modules — all in one click.",
"section_agent_title": "🤖 Agent templates",
"section_agent_desc": "Named AI personas with their own policy, memory, and starter mission.",
"section_workbench_title": "🎨 Workbench templates",
"section_workbench_desc": "Starter kits without AI — scene layout + pre-filled habits, goals, and module data. You work; the template handles the setup.",
"chip_agent": "Agent",
"chip_scene": "Scene",
"chip_mission_one": "{n} mission",
"chip_mission_other": "{n} missions",
"chip_seed_one": "{n} seed",
"chip_seed_other": "{n} seeds",
"detail_no_agent_role": "Workbench setup without AI agent",
"section_scene": "Scene layout",
"section_missions": "Starter missions",
"section_seeds": "Seeds",
"seed_hint": "Pre-filled entries in your modules. Created as new records; existing entries with the same seed ID are skipped (idempotent).",
"seed_count_one": "{n} entry",
"seed_count_other": "{n} entries",
"seed_unnamed": "(unnamed)",
"cadence_manual": "manual trigger",
"cadence_daily": "daily {h}:{m}",
"cadence_weekly": "weekly, day {day} at {h}:00",
"cadence_interval": "every {n} minutes",
"cadence_cron": "cron: {expression}",
"section_options": "Options",
"opt_create_scene": "Create scene \"{name}\" and open it",
"opt_create_missions": "Also create starter mission(s)",
"opt_start_active": "Activate mission(s) immediately (default: paused)",
"opt_apply_seeds": "Insert seed data into modules",
"result_existing_agent": "\"{name}\" already existed — reused.",
"result_new_agent": "Agent \"{name}\" created.",
"result_template_applied": "Template applied.",
"result_scene_created": "Scene created + activated.",
"result_missions_active": "{n} mission{n, plural, one {} other {s}} activated.",
"result_missions_paused": "{n} mission{n, plural, one {} other {s}} created (paused).",
"result_seeds_summary_no_failed": "{created} seed{created, plural, one {} other {s}} new, {skipped} already present.",
"result_seeds_summary_with_failed": "{created} seed{created, plural, one {} other {s}} new, {skipped} already present, {failed} failed.",
"result_action_pick_other": "Pick another template",
"result_action_workbench": "To workbench",
"err_apply_failed": "Couldn't apply template",
"action_applying": "Creating…",
"action_apply_template": "Apply template \"{label}\""
}
}

View file

@ -0,0 +1,49 @@
{
"templates": {
"page_title_html": "Templates — Mana",
"back": "Volver al workbench",
"title": "Templates",
"sub": "Configuraciones preestablecidas para tu workbench. Elige un template y obtén con un clic una escena adecuada, agentes IA opcionales y datos iniciales en los módulos correctos.",
"section_agent_title": "🤖 Templates de agente",
"section_agent_desc": "Personas IA con nombre, con su propia policy, memoria y mission inicial.",
"section_workbench_title": "🎨 Templates de workbench",
"section_workbench_desc": "Kits iniciales sin IA — layout de escena + habits, goals y datos de módulo preconfigurados. Tú trabajas, el template se encarga de la configuración.",
"chip_agent": "Agent",
"chip_scene": "Escena",
"chip_mission_one": "{n} mission",
"chip_mission_other": "{n} missions",
"chip_seed_one": "{n} seed",
"chip_seed_other": "{n} seeds",
"detail_no_agent_role": "Configuración de workbench sin agente IA",
"section_scene": "Layout de escena",
"section_missions": "Missions iniciales",
"section_seeds": "Seeds",
"seed_hint": "Entradas preconfiguradas en tus módulos. Se crean como nuevos registros; las entradas existentes con el mismo seed-ID se omiten (idempotente).",
"seed_count_one": "{n} entrada",
"seed_count_other": "{n} entradas",
"seed_unnamed": "(sin nombre)",
"cadence_manual": "disparador manual",
"cadence_daily": "diario {h}:{m}",
"cadence_weekly": "semanal, día {day} a las {h}:00",
"cadence_interval": "cada {n} minutos",
"cadence_cron": "cron: {expression}",
"section_options": "Opciones",
"opt_create_scene": "Crear escena «{name}» y abrirla",
"opt_create_missions": "Crear también mission(s) iniciales",
"opt_start_active": "Activar mission(s) de inmediato (por defecto: en pausa)",
"opt_apply_seeds": "Insertar datos seed en los módulos",
"result_existing_agent": "«{name}» ya existía — reutilizado.",
"result_new_agent": "Agent «{name}» creado.",
"result_template_applied": "Template aplicado.",
"result_scene_created": "Escena creada + activada.",
"result_missions_active": "{n} mission(s) activada(s).",
"result_missions_paused": "{n} mission(s) creada(s) en pausa.",
"result_seeds_summary_no_failed": "{created} seed{created, plural, one {} other {s}} nuevo(s), {skipped} ya presente(s).",
"result_seeds_summary_with_failed": "{created} seed{created, plural, one {} other {s}} nuevo(s), {skipped} ya presente(s), {failed} fallido(s).",
"result_action_pick_other": "Elegir otro template",
"result_action_workbench": "Al workbench",
"err_apply_failed": "No se pudo aplicar el template",
"action_applying": "Creando…",
"action_apply_template": "Aplicar template «{label}»"
}
}

View file

@ -0,0 +1,49 @@
{
"templates": {
"page_title_html": "Templates — Mana",
"back": "Retour au workbench",
"title": "Templates",
"sub": "Configurations prêtes à l'emploi pour ton workbench. Choisis un template et obtiens en un clic une scène adaptée, des agents IA optionnels et des données initiales dans les bons modules.",
"section_agent_title": "🤖 Templates d'agent",
"section_agent_desc": "Personas IA nommés avec leur propre policy, mémoire et mission de départ.",
"section_workbench_title": "🎨 Templates de workbench",
"section_workbench_desc": "Kits de démarrage sans IA — scène + habitudes, objectifs et données de modules pré-remplis. Tu travailles toi-même, le template prend en charge la configuration.",
"chip_agent": "Agent",
"chip_scene": "Scène",
"chip_mission_one": "{n} mission",
"chip_mission_other": "{n} missions",
"chip_seed_one": "{n} seed",
"chip_seed_other": "{n} seeds",
"detail_no_agent_role": "Configuration de workbench sans agent IA",
"section_scene": "Mise en page de la scène",
"section_missions": "Missions de départ",
"section_seeds": "Seeds",
"seed_hint": "Entrées pré-remplies dans tes modules. Créées comme nouveaux enregistrements ; les entrées existantes avec le même seed-ID sont ignorées (idempotent).",
"seed_count_one": "{n} entrée",
"seed_count_other": "{n} entrées",
"seed_unnamed": "(sans nom)",
"cadence_manual": "déclenchement manuel",
"cadence_daily": "quotidien {h}:{m}",
"cadence_weekly": "hebdomadaire, jour {day} à {h}:00",
"cadence_interval": "toutes les {n} minutes",
"cadence_cron": "cron : {expression}",
"section_options": "Options",
"opt_create_scene": "Créer la scène « {name} » et l'ouvrir",
"opt_create_missions": "Créer aussi la/les mission(s) de départ",
"opt_start_active": "Activer la/les mission(s) tout de suite (défaut : en pause)",
"opt_apply_seeds": "Insérer les données seed dans les modules",
"result_existing_agent": "« {name} » existait déjà — réutilisé.",
"result_new_agent": "Agent « {name} » créé.",
"result_template_applied": "Template appliqué.",
"result_scene_created": "Scène créée + activée.",
"result_missions_active": "{n} mission{n, plural, one {} other {s}} activée(s).",
"result_missions_paused": "{n} mission{n, plural, one {} other {s}} créée(s) en pause.",
"result_seeds_summary_no_failed": "{created} seed{created, plural, one {} other {s}} nouvelle(s), {skipped} déjà présente(s).",
"result_seeds_summary_with_failed": "{created} seed{created, plural, one {} other {s}} nouvelle(s), {skipped} déjà présente(s), {failed} échec(s).",
"result_action_pick_other": "Choisir un autre template",
"result_action_workbench": "Vers le workbench",
"err_apply_failed": "Impossible d'appliquer le template",
"action_applying": "Création…",
"action_apply_template": "Appliquer le template « {label} »"
}
}

View file

@ -0,0 +1,49 @@
{
"templates": {
"page_title_html": "Templates — Mana",
"back": "Torna al workbench",
"title": "Templates",
"sub": "Setup preconfigurati per il tuo workbench. Scegli un template e ottieni con un clic una scena adatta, agenti AI opzionali e dati iniziali nei moduli giusti.",
"section_agent_title": "🤖 Template Agent",
"section_agent_desc": "Persone AI con nome con policy, memoria e mission di partenza propria.",
"section_workbench_title": "🎨 Template Workbench",
"section_workbench_desc": "Kit iniziali senza AI — layout di scena + habits, goals e dati modulo precompilati. Lavori tu, il template si occupa della configurazione.",
"chip_agent": "Agent",
"chip_scene": "Scene",
"chip_mission_one": "{n} mission",
"chip_mission_other": "{n} mission",
"chip_seed_one": "{n} seed",
"chip_seed_other": "{n} seeds",
"detail_no_agent_role": "Setup workbench senza AI agent",
"section_scene": "Layout scena",
"section_missions": "Mission iniziali",
"section_seeds": "Seeds",
"seed_hint": "Voci precompilate nei tuoi moduli. Create come nuovi record; le voci esistenti con lo stesso seed-ID vengono saltate (idempotente).",
"seed_count_one": "{n} voce",
"seed_count_other": "{n} voci",
"seed_unnamed": "(senza nome)",
"cadence_manual": "trigger manuale",
"cadence_daily": "ogni giorno {h}:{m}",
"cadence_weekly": "settimanale, giorno {day} alle {h}:00",
"cadence_interval": "ogni {n} minuti",
"cadence_cron": "cron: {expression}",
"section_options": "Opzioni",
"opt_create_scene": "Crea la scena «{name}» e aprila",
"opt_create_missions": "Crea anche la/e mission iniziale/i",
"opt_start_active": "Attiva subito la/e mission (default: in pausa)",
"opt_apply_seeds": "Inserisci i dati seed nei moduli",
"result_existing_agent": "«{name}» esisteva già — riutilizzato.",
"result_new_agent": "Agent «{name}» creato.",
"result_template_applied": "Template applicato.",
"result_scene_created": "Scena creata + attivata.",
"result_missions_active": "{n} mission attivate.",
"result_missions_paused": "{n} mission create in pausa.",
"result_seeds_summary_no_failed": "{created} seed{created, plural, one {} other {s}} nuovi, {skipped} già presenti.",
"result_seeds_summary_with_failed": "{created} seed{created, plural, one {} other {s}} nuovi, {skipped} già presenti, {failed} falliti.",
"result_action_pick_other": "Scegli un altro template",
"result_action_workbench": "Al workbench",
"err_apply_failed": "Impossibile applicare il template",
"action_applying": "Creazione…",
"action_apply_template": "Applica template «{label}»"
}
}

View file

@ -14,6 +14,7 @@
import { ALL_TEMPLATES, type AgentTemplate } from '@mana/shared-ai';
import { applyTemplate } from '$lib/data/ai/agents/apply-template';
import { RoutePage } from '$lib/components/shell';
import { _ } from 'svelte-i18n';
let selected = $state<AgentTemplate | null>(null);
const agentTemplates = ALL_TEMPLATES.filter(
@ -101,7 +102,7 @@
</script>
<svelte:head>
<title>Templates — Mana</title>
<title>{$_('agents.templates.page_title_html')}</title>
</svelte:head>
{#snippet templateCard(t: AgentTemplate)}
@ -116,14 +117,24 @@
<span class="label">{t.label}</span>
<span class="tagline">{t.tagline}</span>
<span class="meta">
{#if t.agent}<span class="chip">Agent</span>{/if}
{#if t.scene}<span class="chip">Scene</span>{/if}
{#if t.agent}<span class="chip">{$_('agents.templates.chip_agent')}</span>{/if}
{#if t.scene}<span class="chip">{$_('agents.templates.chip_scene')}</span>{/if}
{#if t.missions && t.missions.length > 0}
<span class="chip">{t.missions.length} Mission{t.missions.length !== 1 ? 'en' : ''}</span>
<span class="chip"
>{t.missions.length === 1
? $_('agents.templates.chip_mission_one', { values: { n: t.missions.length } })
: $_('agents.templates.chip_mission_other', {
values: { n: t.missions.length },
})}</span
>
{/if}
{#if t.seeds}
{@const total = Object.values(t.seeds).reduce((s, items) => s + items.length, 0)}
<span class="chip">{total} Seed{total !== 1 ? 's' : ''}</span>
<span class="chip"
>{total === 1
? $_('agents.templates.chip_seed_one', { values: { n: total } })
: $_('agents.templates.chip_seed_other', { values: { n: total } })}</span
>
{/if}
</span>
</button>
@ -133,19 +144,18 @@
<div class="page">
<header class="header">
<button type="button" class="back" onclick={() => goto('/')}>
<ArrowLeft size={14} /><span>Zurück zum Workbench</span>
<ArrowLeft size={14} /><span>{$_('agents.templates.back')}</span>
</button>
<h1>Templates</h1>
<h1>{$_('agents.templates.title')}</h1>
<p class="sub">
Vorgefertigte Setups für deinen Workbench. Wähle ein Template und du hast in einem Klick
eine passende Scene, optionale AI-Agenten und erste Daten in den richtigen Modulen.
{$_('agents.templates.sub')}
</p>
</header>
<section class="section">
<div class="section-head">
<h2>🤖 Agent-Templates</h2>
<p>Benannte AI-Personas mit eigener Policy, Memory und Starter-Mission.</p>
<h2>{$_('agents.templates.section_agent_title')}</h2>
<p>{$_('agents.templates.section_agent_desc')}</p>
</div>
<div class="grid">
{#each agentTemplates as t (t.id)}
@ -156,10 +166,9 @@
<section class="section">
<div class="section-head">
<h2>🎨 Workbench-Templates</h2>
<h2>{$_('agents.templates.section_workbench_title')}</h2>
<p>
Starter-Kits ohne AI — Scene-Layout + vor-gefüllte Habits, Goals und Module-Daten. Du
arbeitest selbst, das Template nimmt dir die Einrichtung ab.
{$_('agents.templates.section_workbench_desc')}
</p>
</div>
<div class="grid">
@ -178,7 +187,7 @@
{#if selected.agent}
<p class="detail-role">{selected.agent.role}</p>
{:else}
<p class="detail-role">Workbench-Setup ohne AI-Agent</p>
<p class="detail-role">{$_('agents.templates.detail_no_agent_role')}</p>
{/if}
</div>
</header>
@ -187,7 +196,7 @@
{#if selected.scene}
<section class="preview">
<h3>Scene-Layout</h3>
<h3>{$_('agents.templates.section_scene')}</h3>
<p class="preview-name">
<strong>{selected.scene.name}</strong>
{#if selected.scene.description}
@ -206,21 +215,32 @@
{#if selected.missions && selected.missions.length > 0}
<section class="preview">
<h3>Starter-Missionen</h3>
<h3>{$_('agents.templates.section_missions')}</h3>
<ul class="missions-preview">
{#each selected.missions as m}
<li>
<strong>{m.title}</strong>
<p>{m.objective}</p>
<span class="cadence">
{#if m.cadence.kind === 'manual'}manuell auslösen
{:else if m.cadence.kind === 'daily'}täglich {m.cadence.atHour}:{String(
m.cadence.atMinute
).padStart(2, '0')}
{:else if m.cadence.kind === 'weekly'}wöchentlich, Tag {m.cadence.dayOfWeek} um {m
.cadence.atHour}:00
{:else if m.cadence.kind === 'interval'}alle {m.cadence.everyMinutes} Minuten
{:else}cron: {m.cadence.expression}
{#if m.cadence.kind === 'manual'}{$_('agents.templates.cadence_manual')}
{:else if m.cadence.kind === 'daily'}{$_('agents.templates.cadence_daily', {
values: {
h: m.cadence.atHour,
m: String(m.cadence.atMinute).padStart(2, '0'),
},
})}
{:else if m.cadence.kind === 'weekly'}{$_('agents.templates.cadence_weekly', {
values: { day: m.cadence.dayOfWeek, h: m.cadence.atHour },
})}
{:else if m.cadence.kind === 'interval'}{$_(
'agents.templates.cadence_interval',
{
values: { n: m.cadence.everyMinutes },
}
)}
{:else}{$_('agents.templates.cadence_cron', {
values: { expression: m.cadence.expression },
})}
{/if}
</span>
</li>
@ -231,22 +251,28 @@
{#if selected.seeds && Object.keys(selected.seeds).length > 0}
<section class="preview">
<h3>Seeds</h3>
<h3>{$_('agents.templates.section_seeds')}</h3>
<p class="seed-hint">
Vorgefüllte Einträge in deinen Modulen. Werden als neue Records angelegt; bestehende
Einträge mit gleicher Seed-ID werden übersprungen (idempotent).
{$_('agents.templates.seed_hint')}
</p>
<ul class="seeds-preview">
{#each Object.entries(selected.seeds) as [moduleName, items]}
<li>
<strong>{moduleName}</strong>
<span class="seed-count">
{items.length} Eintr{items.length !== 1 ? 'äge' : 'ag'}
{items.length === 1
? $_('agents.templates.seed_count_one', { values: { n: items.length } })
: $_('agents.templates.seed_count_other', {
values: { n: items.length },
})}
</span>
<ul class="seed-items">
{#each items as item}
<li>
<code>{(item.data as { name?: string }).name ?? '(unbenannt)'}</code>
<code
>{(item.data as { name?: string }).name ??
$_('agents.templates.seed_unnamed')}</code
>
</li>
{/each}
</ul>
@ -257,27 +283,31 @@
{/if}
<section class="options">
<h3>Optionen</h3>
<h3>{$_('agents.templates.section_options')}</h3>
{#if selected.scene}
<label class="opt">
<input type="checkbox" bind:checked={optCreateScene} />
<span>Scene „{selected.scene.name}" anlegen und direkt öffnen</span>
<span
>{$_('agents.templates.opt_create_scene', {
values: { name: selected.scene.name },
})}</span
>
</label>
{/if}
{#if selected.missions && selected.missions.length > 0}
<label class="opt">
<input type="checkbox" bind:checked={optCreateMissions} />
<span>Starter-Mission(en) mit anlegen</span>
<span>{$_('agents.templates.opt_create_missions')}</span>
</label>
<label class="opt" class:disabled={!optCreateMissions}>
<input type="checkbox" bind:checked={optStartActive} disabled={!optCreateMissions} />
<span>Mission(en) sofort aktivieren (Standard: pausiert)</span>
<span>{$_('agents.templates.opt_start_active')}</span>
</label>
{/if}
{#if selected.seeds && Object.keys(selected.seeds).length > 0}
<label class="opt">
<input type="checkbox" bind:checked={optApplySeeds} />
<span>Seed-Daten in Module einpflegen</span>
<span>{$_('agents.templates.opt_apply_seeds')}</span>
</label>
{/if}
</section>
@ -289,22 +319,42 @@
<strong>
{#if result.agentName}
{result.wasExistingAgent
? `„${result.agentName}" existierte schon — wiederverwendet.`
: `Agent „${result.agentName}" angelegt.`}
? $_('agents.templates.result_existing_agent', {
values: { name: result.agentName },
})
: $_('agents.templates.result_new_agent', {
values: { name: result.agentName },
})}
{:else}
Template angewendet.
{$_('agents.templates.result_template_applied')}
{/if}
</strong>
<p>
{#if result.sceneCreated}Scene angelegt + aktiviert.{/if}
{#if result.sceneCreated}{$_('agents.templates.result_scene_created')}{/if}
{#if result.missionCount > 0}
{result.missionCount} Mission{result.missionCount !== 1 ? 'en' : ''}
{optStartActive ? 'aktiviert' : 'pausiert angelegt'}.
{optStartActive
? $_('agents.templates.result_missions_active', {
values: { n: result.missionCount },
})
: $_('agents.templates.result_missions_paused', {
values: { n: result.missionCount },
})}
{/if}
{#if result.seedCreated + result.seedSkipped + result.seedFailed > 0}
{result.seedCreated} Seed{result.seedCreated !== 1 ? 's' : ''} neu,
{result.seedSkipped} bereits vorhanden{#if result.seedFailed > 0}, {result.seedFailed}
fehlgeschlagen{/if}.
{result.seedFailed > 0
? $_('agents.templates.result_seeds_summary_with_failed', {
values: {
created: result.seedCreated,
skipped: result.seedSkipped,
failed: result.seedFailed,
},
})
: $_('agents.templates.result_seeds_summary_no_failed', {
values: {
created: result.seedCreated,
skipped: result.seedSkipped,
},
})}
{/if}
</p>
{#if result.warnings.length > 0}
@ -318,23 +368,29 @@
</div>
<div class="result-actions">
<button type="button" class="btn-ghost" onclick={() => (selected = null)}>
Weiteres Template auswählen
{$_('agents.templates.result_action_pick_other')}
</button>
<button type="button" class="btn-primary" onclick={() => goto('/')}>
Zum Workbench
{$_('agents.templates.result_action_workbench')}
</button>
</div>
{:else}
{#if error}
<div class="result error">
<strong>Konnte Template nicht anwenden</strong>
<strong>{$_('agents.templates.err_apply_failed')}</strong>
<p>{error}</p>
</div>
{/if}
<div class="apply-row">
<button type="button" class="btn-primary" onclick={handleApply} disabled={applying}>
<Play size={14} />
<span>{applying ? 'Lege an…' : `Template „${selected.label}" anwenden`}</span>
<span
>{applying
? $_('agents.templates.action_applying')
: $_('agents.templates.action_apply_template', {
values: { label: selected.label },
})}</span
>
</button>
</div>
{/if}

View file

@ -201,7 +201,6 @@
"apps/mana/apps/web/src/routes/(app)/+page.svelte": 1,
"apps/mana/apps/web/src/routes/(app)/admin/+layout.svelte": 1,
"apps/mana/apps/web/src/routes/(app)/admin/user-data/[userId]/+page.svelte": 19,
"apps/mana/apps/web/src/routes/(app)/agents/templates/+page.svelte": 7,
"apps/mana/apps/web/src/routes/(app)/articles/settings/+page.svelte": 3,
"apps/mana/apps/web/src/routes/(app)/broadcasts/[id]/+page.svelte": 2,
"apps/mana/apps/web/src/routes/(app)/broadcasts/[id]/edit/+page.svelte": 4,