mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-14 19:01:08 +02:00
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:
parent
aa96cae8a0
commit
98a9bc4dc5
7 changed files with 349 additions and 49 deletions
49
apps/mana/apps/web/src/lib/i18n/locales/agents/de.json
Normal file
49
apps/mana/apps/web/src/lib/i18n/locales/agents/de.json
Normal 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"
|
||||
}
|
||||
}
|
||||
49
apps/mana/apps/web/src/lib/i18n/locales/agents/en.json
Normal file
49
apps/mana/apps/web/src/lib/i18n/locales/agents/en.json
Normal 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}\""
|
||||
}
|
||||
}
|
||||
49
apps/mana/apps/web/src/lib/i18n/locales/agents/es.json
Normal file
49
apps/mana/apps/web/src/lib/i18n/locales/agents/es.json
Normal 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}»"
|
||||
}
|
||||
}
|
||||
49
apps/mana/apps/web/src/lib/i18n/locales/agents/fr.json
Normal file
49
apps/mana/apps/web/src/lib/i18n/locales/agents/fr.json
Normal 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} »"
|
||||
}
|
||||
}
|
||||
49
apps/mana/apps/web/src/lib/i18n/locales/agents/it.json
Normal file
49
apps/mana/apps/web/src/lib/i18n/locales/agents/it.json
Normal 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}»"
|
||||
}
|
||||
}
|
||||
|
|
@ -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}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue