Files
codecraft/web/src/i18n/de.ts
T
Richard ZinkandClaude Opus 5.5 9c80f2c857 Commits of agents carry a co-author trailer naming the model
A git wrapper (docker/git-coauthor -> /usr/local/lib/codecraft/bin/git) adds
--trailer "$CODECRAFT_COMMIT_TRAILER" right after the commit subcommand; the
agent shell puts it first on PATH and sets the trailer in the script itself
(works inside the sandbox, which clears the environment). Default text:
"Co-Authored-By: {model} ({provider}) via CodeCraft" (server.commit_trailer,
Settings -> General; empty = off). Git skips duplicates (amend, model wrote it).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 10:01:07 +01:00

998 lines
54 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import type { Messages } from "./en";
export const de: Messages = {
"common.loading": "Lädt…",
"common.save": "Speichern",
"common.add": "Hinzufügen",
"common.edit": "Bearbeiten",
"common.delete": "Löschen",
"common.remove": "Entfernen",
"common.close": "Schließen",
"common.collapse": "Einklappen",
"nav.menu": "Menü",
"nav.settings": "Einstellungen",
"nav.stats": "Statistik",
"nav.images": "Bilder",
"images.disabled": "Bildgenerierung ist nicht eingerichtet: Ein Admin aktiviert sie unter Einstellungen → Allgemein (fal.ai-Key in FAL_KEY).",
"images.promptPlaceholder": "Beschreibe das Bild: Motiv, Stil, Komposition, Farben, Licht… (Strg+Enter)",
"images.model": "Modell",
"images.size": "Format",
"images.count": "Anzahl",
"images.countN": "{n}×",
"images.folder": "Ordner",
"images.generate": "Erzeugen",
"images.generating": "Erzeuge…",
"images.empty": "Noch keine Bilder.",
"images.reuse": "Prompt wiederverwenden",
"images.copyPath": "Dateipfad kopieren",
"images.deleteConfirm": "Dieses Bild löschen (inklusive Datei)?",
"images.size.square_hd": "Quadrat HD",
"images.size.square": "Quadrat",
"images.size.landscape_4_3": "Quer 4:3",
"images.size.landscape_16_9": "Quer 16:9",
"images.size.portrait_4_3": "Hoch 3:4",
"images.size.portrait_16_9": "Hoch 9:16",
"settings.images": "Bildgenerierung (fal.ai)",
"settings.imagesEnabled": "Aktiv",
"settings.imagesKey": "API-Key",
"settings.imagesDefault": "Standardmodell",
"settings.imagesDir": "Ordner im Projekt",
"settings.imagesHint": "Modelle und Preise pro Bild werden in der Config-Datei bearbeitet ([images]).",
"budget.plan": "Go-Plan ({v}/Monat)",
"budget.window.5h": "5 Stunden",
"budget.window.week": "7 Tage",
"budget.window.month": "Monat",
"settings.planLimit": "Planlimit (USD/Monat)",
"settings.planLimitHint": "opencode Go: das monatliche Nutzungslimit deines Plans. CodeCraft zählt den Verbrauch, den jede Antwort meldet (5 Stunden 20 %, Woche 50 %, Monat 100 %) – nur Nutzung über CodeCraft.",
"status.plan": "Go {pct} ({window})",
"budget.title": "Budgets in diesem Monat",
"budget.spent": "Verbraucht",
"budget.budget": "Budget",
"budget.remaining": "Verbleibend",
"budget.provider": "Laut Anbieter",
"budget.balance": "Guthaben {v}",
"budget.providerSpent": "Abgerechnet {v}",
"budget.orgWide": "Organisationsweiter Kostenbericht des Anbieters",
"budget.remoteError": "nicht verfügbar",
"budget.hint": "Verbraucht = von CodeCraft mit deinen Preisen erfasste Kosten. Werte des Anbieters kommen aus deren APIs (OpenRouter, Anthropic mit Admin-Key, fal.ai mit Admin-Key).",
"budget.chip": "Budget {name}: {p}",
"budget.chipHint": "Ein Monatsbudget ist fast aufgebraucht – siehe Statistik.",
"settings.monthlyBudget": "Monatsbudget",
"settings.monthlyBudgetTotal": "Monatsbudget (gesamt)",
"settings.monthlyBudgetHint": "In der eingestellten Währung; 0 = keins. Warnungen erscheinen im Chat-Kopf.",
"settings.budgetWarning": "Warnen ab",
"settings.adminKey": "Admin-Key (optional)",
"settings.adminKeyHint": "Anthropic Admin-API-Key (sk-ant-admin01-…), um die echten, organisationsweiten Monatskosten anzuzeigen.",
"settings.fetchPrices": "Preise abrufen",
"settings.pricesFetched": "Preise für {n} Modelle aktualisiert – zum Übernehmen speichern.",
"stats.perMillion": "pro 1 Mio. Tok.",
"stats.perMillionHint": "Effektive Kosten pro Million Tokens (Input inkl. Cache + Output)",
"queue.pending": "{n} Nachricht(en) in der Warteschlange – werden beim nächsten Schritt übergeben",
"queue.stopped": "{n} Nachricht(en) in der Warteschlange",
"queue.sendNow": "Jetzt senden",
"queue.remove": "Aus der Warteschlange entfernen",
"queue.backgroundResult": "Ergebnis einer Hintergrundaufgabe",
"permissionMode.auto": "Automatisch (fragt einmal, Sicheres läuft)",
"nav.files": "Dateien",
"files.search": "Dateien suchen…",
"files.newFile": "Neue Datei",
"files.newFolder": "Neuer Ordner",
"files.upload": "Hochladen",
"files.showHidden": "Versteckte Dateien zeigen",
"files.newFileName": "Dateiname:",
"files.newFolderName": "Ordnername:",
"files.renameTo": "Neuer Name:",
"files.copyTo": "Name der Kopie:",
"files.chatHere": "Chat hier öffnen",
"files.newTab": "Dateimanager öffnen",
"files.closeTab": "Dateimanager schließen",
"files.rename": "Umbenennen",
"files.duplicate": "Duplizieren",
"files.download": "Herunterladen",
"files.actions": "Aktionen",
"files.deleteConfirm": "„{name}“ löschen?",
"files.deleteFolderConfirm": "Den Ordner „{name}“ mit allem Inhalt löschen?",
"files.noHits": "Keine Treffer",
"files.emptyFolder": "Leerer Ordner",
"files.dropHint": "Dateien hierher ziehen zum Hochladen",
"files.selectFile": "Datei auswählen",
"files.edit": "Bearbeiten",
"files.preview": "Vorschau",
"files.binary": "Binärdatei – zum Öffnen herunterladen.",
"files.tooLarge": "Datei zu groß für den Editor – bitte herunterladen.",
"files.discardChanges": "Ungespeicherte Änderungen verwerfen?",
"files.conflict": "Die Datei wurde seit dem Öffnen geändert (z. B. von einem Agenten). Trotzdem überschreiben?",
"files.tabFiles": "Dateien",
"git.init": "Git-Repository anlegen",
"git.clone": "Repository klonen",
"git.cloneUrl": "Repository-URL (https://… oder git@…):",
"git.cloneFolder": "Ordnername:",
"git.branch": "Branch",
"git.newBranch": "Neuer Branch",
"git.newBranchName": "Name des neuen Branches:",
"git.fetch": "Fetch",
"git.pull": "Pull",
"git.push": "Push",
"git.done": "Erledigt.",
"git.changes": "Änderungen",
"git.history": "Verlauf",
"git.staged": "Vorgemerkt",
"git.unstaged": "Änderungen",
"git.stage": "Vormerken",
"git.unstage": "Nicht mehr vormerken",
"git.stageAll": "Alle vormerken",
"git.unstageAll": "Alle zurücknehmen",
"git.discard": "Änderungen verwerfen",
"git.discardConfirm": "Alle Änderungen an {file} verwerfen?",
"git.openFile": "Datei öffnen",
"git.clean": "Keine Änderungen.",
"git.message": "Commit-Nachricht",
"git.amend": "Letzten Commit ändern",
"git.commit": "Commit",
"git.noCommits": "Noch keine Commits.",
"git.noDiff": "Keine Unterschiede.",
"composer.folder": "Ordner",
"composer.attachedFiles": "Angehängte Dateien (im Projekt, mit deinen Tools lesen):",
"composer.uploading": "Lade {n} hoch…",
"usage.title": "Modelle und Verbrauch dieser Session",
"usage.period": "Zeitraum",
"usage.current": "aktuell",
"usage.model": "Modell",
"usage.prices": "Preise pro 1 Mio. Tokens",
"usage.usage": "Nutzung",
"usage.speed": "Geschwindigkeit",
"usage.cacheWrite": "Cache geschrieben",
"usage.contextNow": "Kontext jetzt",
"usage.totalTime": "Gesamtzeit",
"usage.inSession": "In dieser Session",
"usage.providerMonth": "Provider diesen Monat",
"usage.byAgent": "Nach Agent und Modell",
"preview.page": "Seite {n} / {total}",
"preview.openBrowser": "Im Browser öffnen",
"preview.moreRows": "{n} weitere Zeilen nicht angezeigt",
"preview.moduleHint": "Tracker-Modul – wird auf dem Server zu Audio gerendert (der erste Start kann kurz dauern).",
"activity.phrases": "Grübelt|Tüftelt|Werkelt|Brütet|Sinniert|Knobelt|Schmiedet|Rätselt|Zaubert|Bastelt|Puzzelt|Feilt|Köchelt|Hirnt|Fummelt|Sortiert Gedanken|Dreht Schrauben|Entwirrt|Klamüsert|Ausbaldowert|Fuchst sich rein|Wuselt|Tüftelt weiter|Kalibriert",
"activity.prefill": "Prefill",
"activity.generated": "generiert",
"activity.prefilling": "liest Prompt…",
"mcp.users": "Erlaubte Benutzer",
"mcp.usersPlaceholder": "nur Admins",
"mcp.usersHint": "Benutzernamen mit Komma getrennt oder * für alle. Admins haben immer Zugriff.",
"settings.budgetAction": "Wenn ein Budget aufgebraucht ist",
"settings.budgetWarn": "Nur warnen",
"settings.budgetBlock": "Neue Anfragen blockieren",
"settings.sandbox": "Shell-Sandbox",
"settings.sandboxAuto": "Benutzer (nicht Admins)",
"settings.sandboxAlways": "Alle",
"settings.sandboxOff": "Aus",
"settings.sandboxHint": "Shell-Befehle und Git laufen in einer bubblewrap-Sandbox, in der nur die Ordner des Benutzers beschreibbar sind.",
"users.quota": "Monatskontingent",
"users.quotaHint": "Monatliches Kostenlimit (leer = unbegrenzt)",
"users.quotaPrompt": "Monatliches Kostenlimit für {name} (leer = unbegrenzt):",
"settings.tab.audit": "Audit",
"audit.title": "Audit-Log",
"audit.all": "Alle Aktionen",
"audit.time": "Zeit",
"audit.action": "Aktion",
"audit.detail": "Details",
"audit.backup": "Sicherung",
"audit.backupHint": "ZIP mit der Konfiguration und einer konsistenten Kopie der Datenbank (Sessions, Benutzer, Statistik). Als ${VAR} referenzierte Secrets sind nicht enthalten.",
"audit.download": "Sicherung herunterladen",
"craft.mode": "Craft-Modus",
"craft.modeHint": "Clean Room: nur, was ein Benutzer sieht. Deep: auch Seitenquelltext und Programme (Ghidra) – zum Nachbilden, nicht zum Kopieren.",
"craft.cleanRoom": "Clean Room",
"craft.deep": "Deep",
"settings.tab.tools": "Werkzeuge",
"tools.installed": "installiert",
"tools.install": "Ghidra installieren",
"tools.reinstall": "Installation prüfen / reparieren",
"tools.installing": "Installiere (Download ca. 800 MB, auf ARM wird der Dekompiler kompiliert – das dauert einige Minuten)…",
"tools.ghidraHint": "Mit Ghidra können Agenten Programme und Firmware dekompilieren (Windows .exe/.dll, Linux, DOS …), um zu verstehen, wie sie funktionieren – im Craft-Deep-Modus und in Modi mit Reverse-Engineering-Werkzeugen (Einstellungen → Agenten & Befehle). Wird samt eigenem JDK ins Daten-Volume installiert.",
"rewind.intro": "Die Unterhaltung wird auf den Stand vor dieser Nachricht zurückgesetzt; du kannst sie bearbeiten und neu senden.",
"rewind.noFiles": "Der Agent hat seitdem keine Dateien geändert.",
"rewind.restore": "Auch die {n} vom Agenten geänderte(n) Datei(en) zurücksetzen",
"rewind.willDelete": "wird gelöscht (neu)",
"rewind.bashNote": "Änderungen durch Shell-Befehle (z. B. installierte Pakete) werden nicht zurückgesetzt.",
"rewind.confirm": "Zurückspulen",
"files.discard": "Verwerfen",
"files.overwrite": "Überschreiben",
"shells.title": "Hintergrund-Shells",
"shells.chip": "{n}/{total} Shells",
"shells.running": "läuft",
"shells.exited": "beendet ({code})",
"shells.stop": "Stoppen",
"shells.noOutput": "(noch keine Ausgabe)",
"login.prompt": "Melde dich an, um fortzufahren.",
"login.invalid": "Ungültiges Token.",
"login.submit": "Anmelden",
"sidebar.newSession": "Neue Session",
"sidebar.noSessions": "Noch keine Sessions",
"sidebar.today": "Heute",
"sidebar.yesterday": "Gestern",
"sidebar.week": "Letzte 7 Tage",
"sidebar.older": "Älter",
"status.title": "Status",
"status.budgets": "Budgets",
"status.server": "Server",
"status.models": "Modelle",
"status.mcp": "MCP",
"status.level.ok": "alles in Ordnung",
"status.level.warn": "teilweise nicht verfügbar",
"status.level.err": "nicht verfügbar",
"status.level.off": "keine konfiguriert",
"status.providerOk": "{n} Modelle · {ms} ms",
"status.notChecked": "noch nicht geprüft",
"status.recheck": "Erneut prüfen",
"status.noProviders": "Keine Provider aktiv.",
"status.noMcp": "Keine MCP-Server konfiguriert.",
"status.providerSettings": "Provider",
"status.mcpSettings": "MCP-Server",
"sidebar.connected": "Verbunden",
"sidebar.disconnected": "Getrennt – verbinde neu…",
"sidebar.needsInput": "Wartet auf deine Eingabe",
"session.untitled": "Neue Session",
"wizard.title": "Was möchtest du machen?",
"wizard.subtitle": "Aufgabe wählen, beschreiben, was du willst, dann auf Start drücken.",
"wizard.whatToDo": "Was möchtest du machen?",
"wizard.task.chat": "Einfach chatten",
"wizard.task.chatDesc": "Fragen, besprechen, nachschlagen – ohne Projekt und Dateien",
"wizard.placeholder.chat": "Worüber möchtest du sprechen?",
"wizard.task.craft": "Etwas craften",
"wizard.task.craftDesc": "Website, App, Spiel oder altes Programm nachbauen – oder etwas Neues bauen",
"wizard.task.build": "Am Code arbeiten",
"wizard.task.buildDesc": "In einem Projekt umsetzen, reparieren und ausführen",
"wizard.task.plan": "Planen",
"wizard.task.planDesc": "Nur lesen: analysieren und einen Plan vorschlagen",
"wizard.whatToRecreate": "Was möchtest du nachbauen?",
"wizard.target.website": "Eine Website",
"wizard.target.app": "Eine App",
"wizard.target.game": "Ein Spiel",
"wizard.target.software": "Alte Software",
"wizard.target.fresh": "Nichts – neu anfangen",
"wizard.cleanDesc": "Nur aus dem Sichtbaren: Screenshots, sichtbarer Text, Verhalten",
"wizard.deepDesc": "Auch Quellen und Binärdateien untersuchen (Ghidra) – nachbilden, nie kopieren",
"wizard.softwareNeedsDeep": "Für die Analyse eines Programms braucht es den Deep-Modus (Dekompilieren). Im Clean Room werden nur Screenshots und deine Beschreibung genutzt.",
"wizard.sayWhat": "Sag, was du willst",
"wizard.placeholder.website": "Besondere Wünsche? z. B. nur die Startseite, in React, dunkles Theme …",
"wizard.placeholder.app": "Beschreibe die App, hänge Screenshots an …",
"wizard.placeholder.game": "Beschreibe das Spiel, hänge Screenshots an …",
"wizard.placeholder.software": "Was ist das für ein Programm? Worauf soll die neue Version laufen? Programm, Archiv oder Installer anhängen.",
"wizard.placeholder.fresh": "Zum Beispiel: eine Website für meine Bäckerei",
"wizard.placeholder.task": "Was soll gemacht werden?",
"wizard.enterHint": "Enter zum Starten · Shift+Enter für neue Zeile · Dateien ablegen oder einfügen",
"wizard.softwareHint": "Programm mit Bibliotheken, zip/tar.gz oder Installer anhängen – landet in original/",
"wizard.attach": "Dateien anhängen",
"wizard.ideas": "Ideen:",
"wizard.idea.siteLanding": "Nur die Startseite, als reines HTML/CSS",
"wizard.idea.siteShop": "Alle Seiten, in React mit Tailwind",
"wizard.idea.appTodo": "Eine To-do-App wie auf meinen Screenshots",
"wizard.idea.appNotes": "Eine Notiz-App mit dem gleichen Layout",
"wizard.idea.gameSnake": "Ein einfaches Snake-Spiel im Browser",
"wizard.idea.gameBreakout": "Ein Breakout-Klon mit eigener Grafik",
"wizard.idea.swDos": "Ein altes DOS-Spiel – die neue Version soll im Browser laufen",
"wizard.idea.swTool": "Ein altes Windows-Tool – als plattformübergreifende App nachbauen",
"wizard.idea.freshBakery": "Eine Website für meine Bäckerei",
"wizard.idea.freshSnake": "Ein einfaches Snake-Spiel",
"wizard.idea.planFeature": "Ein neues Feature für dieses Projekt planen",
"wizard.idea.planRefactor": "Die größten Schwächen finden und ein Refactoring vorschlagen",
"wizard.idea.buildTests": "Tests für das Kernmodul schreiben und Fehler beheben",
"wizard.idea.buildBug": "Finde und behebe den Fehler: ",
"wizard.builtBy": "Gebaut von",
"wizard.newFolderIn": "Gespeichert in einem neuen Ordner in",
"wizard.existingFolder": "Arbeitet in",
"wizard.chooseFolder": "Ordner wählen…",
"wizard.useNewFolder": "Neuen Ordner verwenden",
"wizard.start": "Start",
"wizard.creatingFolder": "Ordner wird angelegt…",
"wizard.uploading": "Dateien werden hochgeladen…",
"wizard.starting": "Wird gestartet…",
"phase.study": "Studieren",
"phase.specify": "Spezifizieren",
"phase.build": "Bauen",
"phase.check": "Prüfen",
"phase.ready": "Fertig",
"wizard.cloning": "Repository wird geklont…",
"wizard.originalTitle": "Original-Software hochladen",
"wizard.originalHint": "Programmordner als zip, tar.gz, 7z, Installer oder einzelne Dateien – bis 500 MB pro Datei. Klicken oder hier ablegen.",
"wizard.whereLabel": "Wo soll gebaut werden?",
"wizard.whereNew": "Neuer Ordner",
"wizard.whereExisting": "Bestehender Ordner",
"wizard.whereGit": "Git-Repository",
"wizard.cloneInto": "Geklont nach",
"rename.title": "Session umbenennen",
"rename.generateWith": "Namen vorschlagen mit",
"rename.generate": "Generieren",
"nav.terminal": "Terminal",
"terminal.new": "Neues Terminal",
"terminal.chatTab": "Chat",
"terminal.tab": "Terminal {n}",
"terminal.closeConfirm": "{name} schließen? Die Shell und alles, was darin läuft, wird beendet.",
"terminal.close": "Terminal schließen",
"terminal.here": "Terminal in diesem Ordner öffnen",
"terminal.connecting": "Verbinde…",
"terminal.reconnecting": "Verbindung verloren – verbinde neu…",
"terminal.keys": "Zusatztasten",
"gitcred.title": "Git",
"gitcred.hint": "Werden von deinen Agenten, dem Terminal und dem Git-Client zum Pullen und Pushen verwendet (z. B. Access-Tokens von Gitea/GitHub/GitLab). Liegen in deinem Home-Ordner als Git-Credential-Store – nur deine Sessions können sie nutzen.",
"gitcred.name": "Name für Commits",
"gitcred.email": "E-Mail für Commits",
"gitcred.credentials": "Zugangsdaten",
"gitcred.none": "Noch keine Zugangsdaten.",
"gitcred.host": "Host",
"gitcred.user": "Benutzername",
"gitcred.token": "Passwort oder Token",
"gitcred.add": "Host hinzufügen",
"gitcred.saved": "Git-Einstellungen gespeichert",
"wizard.task.cad": "3D-Modell zum Drucken",
"wizard.task.cadDesc": "Aus einer Beschreibung oder einer Handskizze – OpenSCAD, STL/3MF",
"wizard.placeholder.cad": "Beschreibe das Teil und seine Maße – oder hänge ein Foto deiner Skizze an (mit Maßen).",
"wizard.idea.cadBox": "Eine Box mit Schnappdeckel, Innenmaß 80 × 50 × 30 mm",
"wizard.idea.cadBracket": "Eine Wandhalterung für ein 25-mm-Rohr mit zwei M4-Schraublöchern",
"activity.reviewing": "Ergebnis wird geprüft (Runde {round})…",
"chat.reviewPassed": "Review bestanden:",
"chat.todoReminder": "Weiterarbeiten – {n} offene Todos:",
"agents.reverseTools": "Reverse-Engineering-Werkzeuge (binary_info, decompile mit Ghidra)",
"agents.reverseToolsHint": "Der Agent kann in diesem Modus Programme und Firmware untersuchen und dekompilieren (Ghidra muss unter Einstellungen → Werkzeuge installiert sein). Craft hat sie im Deep-Modus ohnehin.",
"agents.refineAfterTodos": "Jedes erledigte Todo prüfen und bis zum Ende der Liste arbeiten",
"agents.refineAfterTodosHint": "Jedes Todo, das der Agent als erledigt markiert, wird geprüft; bei Befunden wird es wieder geöffnet. Beendet er den Turn mit offenen Todos, arbeitet er weiter (für unbeaufsichtigte Läufe, z. B. über Nacht). Aus: nur ein Review am Ende des Turns.",
"chat.workSteps": "{n} Schritte",
"chat.workFiles": "{n} Dateien",
"chat.loadOlder": "Ältere Nachrichten laden",
"chat.showBeforeSummary": "Verlauf vor der Zusammenfassung anzeigen",
"chat.backToLatest": "Zu den neuesten Nachrichten",
"chat.search": "Im Chat suchen",
"chat.searchPlaceholder": "Nachrichten, Tool-Ausgaben … durchsuchen",
"chat.searchNone": "Keine Treffer",
"chat.searchHits": "{n} Treffer",
"chat.you": "Du",
"chat.agent": "Agent",
"media.title": "Medien",
"media.none": "Noch keine Bilder, Videos oder Audiodateien in diesem Chat.",
"media.filter.all": "Alle",
"media.filter.image": "Bilder",
"media.filter.video": "Videos",
"media.filter.audio": "Audio",
"media.source.generated": "generiert",
"media.source.tool": "Tool-Ausgabe",
"media.source.written": "vom Agenten geschrieben",
"media.source.answer": "in einer Antwort",
"media.source.upload": "dein Anhang",
"media.showInChat": "Im Chat zeigen",
"media.open": "Öffnen",
"media.prev": "Vorheriges",
"media.next": "Nächstes",
"media.back": "Zurück zur Übersicht",
"chat.reviewRound": "Review {round}: Änderungen nötig",
"agents.refine": "Review-Schleife",
"agents.refineRounds": "Review-Runden pro Aufgabe",
"agents.refineOff": "0 = aus",
"agents.refineModel": "Prüfer-Modell",
"agents.refineCriteria": "Prüfkriterien",
"agents.refineCriteriaHint": "Leer = Standardkriterien dieses Modus. Nach jeder abgeschlossenen Aufgabe prüft ein Reviewer das Ergebnis gegen deine Anfrage; bei Befunden arbeitet der Agent weiter – höchstens so viele Runden.",
"agents.refineShort": "Review ×{n}",
"agents.deleteFile": "Agenten-Datei {path} löschen?",
"nav.jobs": "Automationen",
"jobs.intro": "Agenten, die nach Zeitplan starten. Die Anweisungen jeder Automatisierung stehen in einer Markdown-Datei; Name, Zeitplan und Einstellungen legst du hier fest. Mit „Neue Automatisierung“ anlegen und die Anweisungen mit dem Assistenten erarbeiten – oder einen Agenten in einem Chat darum bitten (Tool „schedule“). Jeder Lauf erscheint als normaler Chat.",
"jobs.none": "Noch keine Automationen.",
"jobs.schedule": "Zeitplan",
"jobs.next": "Nächster Lauf",
"jobs.last": "Letzter Lauf",
"jobs.mode": "Läuft als",
"jobs.on": "An",
"jobs.off": "Aus",
"jobs.enable": "Aktivieren",
"jobs.disable": "Deaktivieren",
"jobs.runNow": "Jetzt starten",
"jobs.remove": "Entfernen",
"jobs.deleteConfirm": "Automation „{name}“ entfernen? Die Job-Datei bleibt erhalten.",
"jobs.openRun": "Lauf öffnen",
"jobs.prompt": "Auftrag",
"jobs.register": "Vorhandene Datei registrieren",
"jobs.registerHint": "Pfad zu einer Markdown-Datei mit Anweisungen (ältere Dateien mit Zeitplan im Frontmatter werden übernommen):",
"jobs.registerBtn": "Registrieren",
"jobs.status.running": "läuft",
"jobs.status.done": "fertig",
"jobs.status.timeout": "Zeitlimit",
"jobs.status.error": "Fehler",
"chat.more": "Mehr",
"worktree.title": "Isolierter Git-Worktree",
"worktree.hint": "Der Agent arbeitet auf einem eigenen Branch; deine Arbeitskopie auf „{base}“ bleibt unberührt, bis du mergst.",
"worktree.dirty": "{n} nicht committete Dateien",
"worktree.commits": "{n} Commits",
"worktree.merge": "In {base} mergen",
"worktree.remove": "Verwerfen",
"worktree.mergeConfirm": "Offene Änderungen committen und {branch} in {base} mergen?",
"worktree.removeConfirm": "Worktree und Branch {branch} verwerfen? Nicht gemergte Änderungen gehen verloren.",
"worktree.merged": "In {base} gemergt",
"worktree.removed": "Worktree verworfen",
"worktree.created": "Die Session arbeitet jetzt in einem eigenen Worktree",
"worktree.create": "Isolierter Worktree",
"worktree.busy": "Warte, bis der Agent fertig ist.",
"worktree.isolate": "In einem isolierten Git-Worktree arbeiten",
"worktree.isolateHint": "eigener Branch, am Ende mergen",
"worktree.creating": "Worktree wird angelegt…",
"files.up": "Einen Ordner nach oben",
"permission.hunksHint": "{n} Änderungen – entferne den Haken bei denen, die du nicht willst.",
"permission.applySelected": "Auswahl übernehmen ({k}/{n})",
"effort.title": "Denkaufwand für diese Nachricht",
"effort.auto": "Aufwand: Modell-Standard",
"effort.autoShort": "Aufwand: auto",
"effort.low": "Aufwand: niedrig",
"effort.medium": "Aufwand: mittel",
"effort.high": "Aufwand: hoch",
"effort.max": "Aufwand: maximal",
"regen.button": "Neu generieren",
"regen.title": "Diese Antwort neu erzeugen",
"regen.hint": "Entfernt diese Antwort (und stellt dabei geänderte Dateien wieder her) und führt deine letzte Nachricht erneut aus – mit dem hier gewählten Modell und Aufwand.",
"regen.go": "Neu generieren",
"voice.start": "Diktieren (Spracherkennung deines Browsers)",
"voice.stop": "Diktat beenden",
"voice.denied": "Mikrofonzugriff verweigert – in den Browser-Einstellungen erlauben.",
"voice.error": "Spracherkennung fehlgeschlagen",
"tokens.title": "API-Tokens",
"tokens.hint": "Für den Kommandozeilen-Client (codecraft) und Skripte: als „Authorization: Bearer <token>“ mitschicken. Nur-Lesen-Tokens können nur lesen (keine Prompts, keine Änderungen).",
"tokens.copyNow": "Token jetzt kopieren – er wird nur einmal angezeigt:",
"telegram.title": "Telegram",
"telegram.intro": "CodeCraft über Telegram mit deinem eigenen Bot nutzen: Nachrichten gehen an deine aktuelle Sitzung, Befehle wechseln Sitzungen, Modi und Modelle, Freigaben und Rückfragen kommen mit Knöpfen. Nur dein Telegram-Konto kann den Bot nutzen.",
"telegram.step1": "In Telegram @BotFather öffnen, /newbot senden und den Schritten folgen.",
"telegram.step2": "Das Token von BotFather hier einfügen.",
"telegram.connect": "Verbinden",
"telegram.checking": "Prüfe…",
"telegram.running": "läuft",
"telegram.stopped": "läuft nicht",
"telegram.paired": "gekoppelt",
"telegram.pairHint": "Letzter Schritt: deinen Bot öffnen und den Code senden (oder den Link antippen) – danach bedient er nur noch dein Telegram-Konto:",
"telegram.commands": "In Telegram: /help zeigt die Befehle – /sessions, /new, /mode, /model, /stop, /status, /costs …",
"telegram.disconnect": "Trennen",
"telegram.disconnectConfirm": "Telegram-Bot trennen? Er antwortet dann nicht mehr; mit seinem Token kannst du ihn wieder verbinden.",
"tokens.copy": "Kopieren",
"tokens.copied": "Kopiert",
"tokens.name": "Name",
"tokens.scope": "Rechte",
"tokens.lastUsed": "Zuletzt benutzt",
"tokens.expires": "Läuft ab",
"tokens.never": "nie",
"tokens.revoke": "Widerrufen",
"tokens.revokeConfirm": "Token „{name}“ widerrufen? Programme, die ihn nutzen, verlieren sofort den Zugriff.",
"tokens.namePlaceholder": "Name, z. B. Laptop-CLI",
"tokens.scopeFull": "Voller Zugriff",
"tokens.scopeRead": "Nur lesen",
"tokens.noExpiry": "Kein Ablauf",
"tokens.days": "Tage",
"tokens.create": "Token erstellen",
"cli.title": "Terminal-Client",
"cli.intro": "Arbeite mit CodeCraft im Terminal wie mit Claude Code: Der Agent bearbeitet Dateien und führt Befehle auf deinem Rechner aus, Modelle, Modi und Regeln kommen von diesem Server (Kosten erscheinen in deiner Statistik). Er läuft auch ohne Server mit eigenen API-Keys.",
"cli.step1": "Installieren (Linux, x86_64 und arm64):",
"cli.step1Source": "Aus dem Quellcode installieren (braucht Rust; dieser Server hat keine fertigen Binaries):",
"cli.step2": "Mit deinem CodeCraft-Konto anmelden:",
"cli.step3": "Im Projektordner mit `codecraft` starten. Darin: /help, /model, /mode, Shift+Tab wechselt den Modus, @ fügt Dateien hinzu. `codecraft update` aktualisiert.",
"cli.downloads": "Direkte Downloads:",
"memory.title": "Persönliches Gedächtnis",
"memory.hint": "Was jeder Agent über dich wissen soll – in allen Projekten, im Web und im Terminal-Client (Sprache, Code-Stil, bevorzugte Werkzeuge …). Projektwissen liegt pro Projekt in .codecraft/memory.md.",
"memory.placeholder": "z. B. Antworte auf Deutsch. Ich bevorzuge TypeScript und Rust. Nie ohne Rückfrage committen.",
"memory.remembered": "Gemerkt",
"whatsnew.title": "Neu in {version}",
"update.available": "Update {version} verfügbar",
"settings.version": "Version",
"settings.fallback": "Ersatz",
"settings.fallbackHint": "Wird automatisch genutzt, wenn der Host dieses Modells nicht erreichbar oder das Budget des Anbieters aufgebraucht ist",
"install.label": "App",
"install.installed": "Installiert",
"install.button": "CodeCraft als App installieren",
"install.hint.chrome": "Chrome auf Android: Menü ⋮ → „App installieren“ (oder „Zum Startbildschirm hinzufügen“ → Installieren). Wenn nur eine Verknüpfung entsteht, muss der Server aus dem Internet erreichbar sein, damit Google die App bauen kann.",
"install.hint.samsung": "Samsung Internet: Menü → „Seite hinzufügen zu“ → „Startbildschirm“.",
"install.hint.firefox": "Firefox kann keine Web-Apps installieren – öffne CodeCraft in Chrome (Android) oder nutze „Zum Startbildschirm hinzufügen“.",
"install.hint.ios": "Safari: Teilen-Knopf → „Zum Home-Bildschirm“. Push-Benachrichtigungen funktionieren nur in der installierten App.",
"install.hint.desktop": "Chrome/Edge: Installations-Symbol in der Adressleiste oder Menü → „CodeCraft installieren“.",
"settings.pushTestFailed": "Der Push-Dienst hat die Benachrichtigung abgelehnt",
"jobs.webhook": "Webhook",
"jobs.webhookOn": "Webhook aktivieren",
"jobs.webhookOff": "Webhook deaktivieren",
"jobs.webhookRenew": "Neues Secret",
"jobs.webhookShown": "Secret jetzt kopieren – es wird nur einmal angezeigt:",
"jobs.webhookHelp": "Beliebiges JSON per POST an die URL schicken; es wird an den Auftrag angehängt. Anmeldung per Header X-CodeCraft-Secret (oder ?secret=…), oder das Secret in Gitea/GitHub als Webhook-Secret eintragen (Signatur X-Gitea-Signature / X-Hub-Signature-256).",
"shareIn.title": "Mit CodeCraft geteilt",
"shareIn.newChat": "Neuen Chat starten",
"shareIn.appendTo": "oder an eine letzte Session anhängen",
"common.back": "Zurück",
"settings.tab.modes": "Meine Modi",
"modes.intro": "Deine eigenen Modi: ein Prompt, eine Art (Programmieren oder Unterhaltung), Werkzeuge und optional ein Modell. Sie erscheinen in „Neue Sitzung“ und in der Modus-Auswahl deiner Chats – nur für dich.",
"modes.none": "Du hast noch keine eigenen Modi.",
"modes.exists": "Ein Modus namens {name} existiert schon.",
"modes.promptPlaceholder": "z. B. Du bist ein geduldiger Englischlehrer. Korrigiere meine Sätze und erkläre kurz, warum.",
"agents.styleChatShort": "Unterhaltung",
"agents.styleCodingShort": "Programmieren",
"settings.tab.templates": "Vorlagen",
"templates.title": "Prompt-Vorlagen",
"templates.filter": "Vorlagen durchsuchen…",
"templates.none": "Noch keine Vorlagen.",
"templates.global": "für alle",
"templates.manage": "Vorlagen verwalten",
"templates.insert": "Einfügen",
"templates.personalTitle": "Meine Vorlagen",
"templates.personalHint": "Wiederverwendbare Prompts. Platzhalter wie {{datei}} oder {{ziel: was soll sich ändern}} werden beim Einfügen abgefragt.",
"templates.globalTitle": "Vorlagen für alle",
"templates.globalHint": "Diese Vorlagen sehen alle Benutzer.",
"templates.name": "Name",
"templates.textPlaceholder": "Prüfe {{datei}} auf Fehler und schlage Korrekturen vor.",
"templates.add": "Vorlage hinzufügen",
"templates.deleteConfirm": "Vorlage „{name}“ löschen?",
"palette.title": "Befehlspalette",
"palette.placeholder": "Zu Session, Seite oder Aktion springen…",
"palette.newSession": "Neue Session",
"palette.toggleTheme": "Hell/Dunkel umschalten",
"palette.nothing": "Nichts gefunden.",
"palette.move": "bewegen",
"palette.open": "öffnen",
"palette.prevNext": "vorherige/nächste Session",
"palette.close": "schließen",
"sidebar.pinned": "Angepinnt",
"sidebar.archive": "Archiv",
"sidebar.byTime": "Nach Datum",
"sidebar.byProject": "Nach Projekt",
"sidebar.groupByHint": "Sessions nach Datum oder Projektordner gruppieren",
"sidebar.organise": "Session organisieren",
"sidebar.pin": "Oben anpinnen",
"sidebar.unpin": "Nicht mehr anpinnen",
"sidebar.openBeside": "Daneben öffnen",
"chat.closePane": "Spalte schließen",
"sidebar.groupMenu": "Ordner-Optionen",
"sidebar.groupPin": "Oben fixieren",
"sidebar.groupUnpin": "Nicht mehr fixieren",
"sidebar.groupUp": "Nach oben",
"sidebar.groupDown": "Nach unten",
"sidebar.moveTo": "In Ordner verschieben…",
"sidebar.removeFromFolder": "Aus Ordner entfernen",
"sidebar.archiveOne": "Archivieren",
"sidebar.unarchive": "Aus dem Archiv holen",
"sidebar.moveTitle": "In Ordner verschieben",
"sidebar.moveHint": "Ordner gruppieren Sessions in der Liste. Gib einen neuen Namen ein.",
"sidebar.moveHintExisting": "Vorhandene Ordner: {folders}. Gib einen davon oder einen neuen Namen ein.",
"sidebar.folderName": "Ordnername",
"sidebar.move": "Verschieben",
"backup.restore": "Wiederherstellen",
"backup.restoreFile": "Aus Datei wiederherstellen…",
"backup.restoring": "Wird wiederhergestellt…",
"backup.restoreTitle": "Backup wiederherstellen?",
"backup.restoreConfirm": "Datenbank und Konfiguration durch {file} ersetzen? Alle Sitzungen, Benutzer, Statistiken und Einstellungen werden durch den Stand im Backup ersetzt; Dateien im Workspace bleiben unverändert. Der aktuelle Stand wird vorher gesichert. CodeCraft startet neu – laufende Agents werden beendet.",
"backup.restarting": "Backup übernommen – CodeCraft startet neu…",
"backup.notBack": "Der Server ist nicht zurückgekommen. Er braucht eine Restart-Policy (Docker: restart: unless-stopped) – bitte von Hand starten.",
"backup.now": "Jetzt sichern",
"backup.running": "Sichere…",
"backup.created": "Backup {file} erstellt.",
"backup.s3Failed": "Backup erstellt, aber der S3-Upload ist fehlgeschlagen",
"backup.daily": "Automatisch täglich sichern",
"backup.at": "um",
"backup.oclock": "Uhr",
"backup.keep": "behalten:",
"backup.s3": "In einen S3-Bucket kopieren (optional)",
"backup.s3Hint": "Jeder S3-kompatible Speicher funktioniert (AWS, MinIO, Garage, Backblaze B2, Hetzner …). Schlüssel dürfen ${ENV}-Verweise sein. Das Backup enthält die Config mit API-Keys – nur einen privaten Bucket verwenden.",
"backup.endpoint": "Endpunkt",
"backup.region": "Region",
"backup.bucket": "Bucket",
"backup.prefix": "Präfix",
"backup.accessKey": "Access Key",
"backup.secretKey": "Secret Key",
"backup.secretStored": "gespeichert – leer lassen zum Behalten",
"backup.s3Keep": "Im Bucket behalten (0 = alle)",
"backup.last": "Letztes Backup",
"backup.s3Ok": "hochgeladen",
"jobs.tplName": "Name",
"jobs.tplProject": "Projektordner",
"jobs.tplMode": "Modus",
"new.title": "Neue Session",
"new.directory": "Projektverzeichnis",
"new.invalidFolderName": "Ordnernamen dürfen kein „/“ enthalten.",
"new.up": "Hoch",
"new.noSubdirs": "Keine Unterverzeichnisse",
"new.model": "Modell",
"new.mode": "Modus",
"new.firstPrompt": "Was soll erledigt werden? (optional)",
"new.start": "Starten in {dir}",
"activity.thinking": "Denkt nach…",
"activity.writing": "Schreibt…",
"activity.tool": "Führt {tool} aus…",
"activity.subagent": "Subagent arbeitet: {name}",
"activity.waitingForYou": "Pausiert – wartet auf deine Antwort",
"activity.working": "Arbeitet",
"activity.titleBusy": "{n} aktiv",
"activity.titleInput": "Eingabe nötig",
"chat.reasoningLive": "Denkt nach…",
"chat.reasoningDone": "Gedacht · {n} Wörter",
"settings.reasoningDisplay": "Reasoning des Modells",
"settings.reasoningCollapsed": "Eingeklappt (per Klick öffnen)",
"settings.reasoningExpanded": "Immer aufgeklappt",
"settings.reasoningHidden": "Aus",
"settings.reasoningHint": "Die Überlegungen des Modells (sofern Modell und Provider sie liefern).",
"settings.reasoningLive": "Beim Denken offen, danach einklappen",
"chat.jumpLatest": "Zur neuesten Nachricht",
"sidebar.search": "Chats durchsuchen…",
"sidebar.searchResults": "Treffer ({n})",
"sidebar.noResults": "Nichts gefunden",
"chat.fork": "Forken: in einer Kopie dieses Chats weitermachen",
"chat.forked": "Geforkt – du bist jetzt in der Kopie",
"chat.export": "Exportieren",
"chat.exportMd": "Markdown (.md)",
"chat.exportJson": "JSON (.json)",
"chat.empty": "Schreib eine Nachricht, um zu starten.",
"chat.compactedAuto": "Kontext fast voll ({tokens} Tokens) – Unterhaltung automatisch komprimiert · Zusammenfassung",
"chat.compactedManual": "Unterhaltung bei {tokens} Tokens komprimiert · Zusammenfassung",
"chat.compactingAuto": "Kontext fast voll – Unterhaltung wird automatisch komprimiert",
"chat.compactingManual": "Unterhaltung wird komprimiert",
"chat.compactingDetail": "{tokens} von {limit} Tokens ({pct}) – danach arbeitet der Agent mit einer Zusammenfassung weiter",
"chat.telegram": "Fragen an Telegram senden",
"chat.telegramHint": "Freigaben und Rückfragen dieses Chats auch per Telegram schicken (der gerade in Telegram geöffnete Chat meldet sich immer)",
"cron.label": "Zeitplan",
"cron.mode.minutes": "Alle paar Minuten",
"cron.mode.hourly": "Stündlich",
"cron.mode.daily": "Täglich",
"cron.mode.weekly": "An Wochentagen",
"cron.mode.monthly": "Monatlich",
"cron.mode.custom": "Cron-Ausdruck",
"cron.every": "Alle",
"cron.minutes": "Minuten",
"cron.atMinute": "Zur Minute",
"cron.days": "Wochentage",
"cron.workdays": "Mo–Fr",
"cron.onDay": "Am",
"cron.at": "um",
"cron.customHint": "Minute Stunde Tag Monat Wochentag, z. B. „30 6 * * 1-5“ = Mo–Fr 06:30.",
"cron.nextRuns": "Nächste Läufe:",
"cron.shortMonths": "Monate ohne diesen Tag werden übersprungen.",
"cron.serverTz": "Uhrzeiten in Serverzeit ({tz})",
"jobEditor.saved": "Gespeichert",
"jobEditor.conflict": "Die Anweisungen wurden inzwischen geändert (z. B. vom Assistenten). Mit deiner Fassung überschreiben?",
"jobEditor.overwrite": "Überschreiben",
"jobEditor.runUnsaved": "Es gibt ungespeicherte Änderungen – der Lauf verwendet die gespeicherte Fassung. Trotzdem starten?",
"jobEditor.discard": "Ungespeicherte Änderungen verwerfen?",
"jobEditor.back": "Zurück zu den Automatisierungen",
"jobEditor.tab.prompt": "Anweisungen",
"jobEditor.tab.settings": "Zeitplan",
"jobEditor.tab.assistant": "Assistent",
"jobEditor.timeout": "Zeitlimit (Min.)",
"jobEditor.bypassHint": "Läuft nachts: Mit „Alles erlauben“ wartet der Lauf nie auf eine Freigabe.",
"jobEditor.instructions": "Anweisungen",
"jobEditor.instructionsHint": "Der Agent sieht nur diesen Text – keinen Chat, niemanden zum Nachfragen.",
"jobEditor.changedOnDisk": "Der Assistent hat die Datei geändert, während du bearbeitet hast.",
"jobEditor.reload": "Seine Fassung laden",
"jobEditor.assistantIntro": "Erarbeite die Anweisungen zusammen mit einem Modell: Beschreib, was die Automatisierung tun soll – es fragt nach und schreibt die Datei nebenan mit.",
"jobEditor.assistantStart": "Assistent starten",
"jobEditor.defaultModel": "Server-Standard",
"jobs.new": "Neue Automatisierung",
"jobs.namePlaceholder": "z. B. Nächtlicher Abhängigkeits-Check",
"jobs.fileHint": "Die Anweisungen landen in .codecraft/jobs/<name>.md in diesem Ordner.",
"jobs.startWith": "Beginnen mit",
"jobs.blank": "Leer",
"jobs.blankDesc": "Beispielgliederung zum Ausfüllen mit dem Assistenten",
"jobs.createAndEdit": "Anlegen und bearbeiten",
"jobs.edit": "Bearbeiten",
"jobs.permissionMode": "Freigabemodus",
"jobs.permissionModeHint": "Gilt ab dem nächsten Lauf. „Alles erlauben“: der Lauf fragt nie nach und wartet nicht auf Freigaben.",
"instructions.title": "Anweisungen für diesen Chat",
"instructions.hint": "Gelten für jede Nachricht in diesem Chat, zusätzlich zum Modus – z. B. Sprache, Ton, Regeln oder der Teil des Projekts, um den es geht.",
"instructions.placeholder": "z. B. Antworte immer auf Englisch. Ändere nur Dateien unter api/. Frag, bevor du Abhängigkeiten hinzufügst.",
"instructions.clear": "Entfernen",
"instructions.chip": "Anweisungen",
"chat.compacted": "Unterhaltung komprimiert – Zusammenfassung",
"chat.context": "Kontext",
"chat.contextHint": "{tokens} Tokens in der letzten Anfrage",
"chat.statsHint": "Tokens und Kosten dieser Session (Klick für Details)",
"chat.renameHint": "Doppelklick zum Umbenennen",
"chat.rewind": "Ab hier bearbeiten und neu senden",
"chat.delete": "Session löschen",
"chat.deleteConfirm": "Diese Session inklusive Subagenten löschen? Die Statistik bleibt erhalten.",
"composer.placeholder": "Nachricht… (/ für Befehle, @ für Dateien, Dateien anhängen oder einfügen)",
"composer.placeholderBusy": "Nachricht wird eingereiht und beim nächsten Schritt gesendet…",
"composer.send": "Senden",
"composer.queue": "Einreihen",
"composer.stop": "Stopp",
"composer.mode": "Modus",
"composer.model": "Modell",
"composer.permissionMode": "Berechtigungsmodus",
"composer.preview": "Vorschau (Markdown)",
"composer.previewEdit": "Zurück zum Bearbeiten",
"composer.previewEmpty": "Noch nichts zum Anzeigen.",
"composer.attach": "Dateien anhängen",
"command.compact": "Unterhaltung zusammenfassen, um Kontext freizugeben",
"command.new": "Neue Session starten",
"permissionMode.default": "Fragen (außer Lesebefehle)",
"permissionMode.accept_edits": "Änderungen automatisch annehmen",
"permissionMode.bypass": "Alles erlauben",
"plan.implement": "Zu Build wechseln und Plan umsetzen",
"plan.implementPrompt": "Setze den Plan um.",
"tool.input": "Eingabe",
"tool.output": "Ausgabe",
"tool.todosUpdated": "Aufgaben aktualisiert ({done}/{total} erledigt)",
"tool.todos": "Aufgaben",
"tool.openSubagent": "Subagent-Session öffnen",
"interaction.fromSubagent": "Vom Subagenten:",
"permission.title": "Freigabe erforderlich",
"permission.allowOnce": "Einmal erlauben",
"permission.alwaysTool": "{tool} in dieser Session immer erlauben",
"permission.alwaysCommand": "„{prefix}“ in dieser Session immer erlauben",
"permission.reject": "Ablehnen",
"permission.rejectWithFeedback": "Mit Rückmeldung ablehnen",
"permission.feedback": "Optional: Sag dem Agenten, was er stattdessen tun soll",
"question.title": "Frage an dich",
"question.fromAgent": "Der Agent braucht eine Entscheidung",
"question.fromMcp": "MCP-Server „{server}“ fragt",
"question.other": "Andere Antwort (Freitext)",
"question.answer": "Deine Antwort",
"question.submit": "Antworten",
"question.dismiss": "Verwerfen",
"settings.tab.general": "Allgemein",
"settings.tab.providers": "Provider & Modelle",
"settings.tab.mcp": "MCP",
"settings.tab.permissions": "Berechtigungen",
"settings.tab.agents": "Agenten & Befehle",
"settings.tab.raw": "Config-Datei",
"settings.saved": "Gespeichert – Änderungen sind aktiv.",
"settings.interface": "Oberfläche (dieses Gerät)",
"settings.language": "Sprache",
"settings.theme": "Design",
"settings.themeMode": "Modus",
"settings.themeAuto": "Auto",
"settings.themeLight": "Hell",
"settings.themeDark": "Dunkel",
"settings.themeSource": "Farben: {source} ({license})",
"settings.themeToggle": "Hell/Dunkel/Auto umschalten",
"settings.notifications": "Benachrichtigungen",
"settings.notificationsEnable": "Aktivieren",
"settings.notificationsOn": "Aktiv",
"settings.digest": "Tägliche Kostenübersicht um 20:00",
"settings.digestNow": "Heutige Übersicht jetzt senden",
"settings.pushTest": "Test senden",
"settings.pushTestSent": "Testbenachrichtigung gesendet",
"settings.pushTestNone": "Kein Gerät angemeldet",
"settings.pushDisable": "Ausschalten",
"settings.pushUnsupported": "Dieser Browser unterstützt keine Push-Benachrichtigungen. Auf iPhone/iPad: CodeCraft zuerst zum Home-Bildschirm hinzufügen.",
"settings.pushDenied": "Benachrichtigungen sind für diese Seite blockiert – in den Browser-Einstellungen erlauben.",
"settings.notificationsHint": "Push-Benachrichtigungen auf diesem Gerät, wenn ein Agent eine Freigabe braucht, eine Frage stellt oder eine längere Aufgabe beendet – nur wenn CodeCraft nicht geöffnet ist.",
"settings.server": "Server",
"settings.workspace": "Workspace",
"settings.defaultModel": "Standardmodell",
"settings.smallModel": "Kleines Modell",
"settings.smallModelHint": "Für Session-Titel. Die Komprimierung nutzt das Session-Modell.",
"settings.currency": "Währung",
"settings.autoCompact": "Auto-Komprimierung bei",
"settings.commitTrailer": "Commit-Vermerk der Agenten",
"settings.commitTrailerOff": "aus",
"settings.commitTrailerHint": "Wird als Trailer an jeden Git-Commit eines Agenten angehängt. {model} = Modellname, {provider} = Anbieter, {model_id} = Modell-ID. Leer = aus. Deine eigenen Commits bleiben unverändert.",
"settings.autoCompactHint": "Anteil des Kontextfensters (0 = aus).",
"settings.craft": "Craft-Modus",
"settings.cleanRoom": "Clean Room",
"settings.cleanRoomHint": "Nur nutzen, was ein Besucher sieht. Aus = Deep-Modus (Quelltext und Skripte dürfen gelesen werden).",
"settings.chromium": "Chromium-Programm",
"settings.widths": "Bildschirmbreiten (px)",
"settings.kind": "Typ",
"settings.baseUrl": "Basis-URL",
"settings.apiKey": "API-Key",
"settings.apiKeyStored": "Gespeichert – leer lassen zum Beibehalten",
"settings.apiKeyHint": "Wird in der Konfigurationsdatei gespeichert (für Admins lesbar, in Backups enthalten). ${NAME}-Verweise auf Umgebungsvariablen funktionieren weiterhin.",
"settings.authPrefix": "Auth-Präfix",
"settings.enabled": "Aktiv",
"settings.modelCount": "{n} Modelle",
"settings.models": "Modelle & Preise",
"settings.addModel": "Modell",
"settings.addDiscovered": "{n} gefundene hinzufügen",
"settings.pricesHint": "Preise pro 1 Mio. Tokens in der eingestellten Währung. Cache-Preise fallen auf den Input-Preis zurück.",
"settings.modelsEmptyHint": "Keine Modelle eingetragen: Sie werden automatisch beim Provider abgefragt.",
"settings.context": "Kontext",
"settings.maxInput": "Max. Eingabe",
"settings.maxInputHint": "Eingabe-Limit, falls der Anbieter eines unterhalb des Kontextfensters setzt (leer: das Kontextfenster). Der Chat wird zusammengefasst, bevor die Eingabe es erreicht.",
"settings.maxOutput": "Max. Ausgabe",
"settings.reasoning": "Reasoning",
"settings.vision": "Bilder",
"settings.effort": "Effort",
"settings.priceIn": "Input",
"settings.priceOut": "Output",
"settings.priceCacheRead": "Cache lesen",
"settings.priceCacheWrite": "Cache schreiben",
"settings.addProvider": "Provider hinzufügen",
"settings.providerName": "Name (optional)",
"settings.providerUp": "erreichbar · {ms} ms",
"settings.providerDown": "nicht erreichbar",
"settings.testConnection": "Verbindung testen",
"settings.testing": "Teste…",
"settings.testOk": "Verbindung klappt: {n} Modelle, {ms} ms. Noch nicht gespeichert.",
"settings.providerAuth": "API-Key fehlt oder ungültig",
"settings.providerCheck": "Provider prüfen",
"settings.providerChecking": "Prüfe…",
"settings.reloadProviders": "Provider & Modelle neu laden",
"settings.deleteProviderConfirm": "Provider „{name}“ löschen?",
"settings.invalidName": "Namen dürfen nur Buchstaben, Ziffern, - und _ enthalten.",
"settings.name": "Name",
"settings.addMcp": "MCP-Server hinzufügen",
"settings.deleteMcpConfirm": "MCP-Server „{name}“ löschen?",
"settings.rawHint": "Die komplette Konfigurationsdatei inklusive Kommentaren. Sie wird vor dem Speichern geprüft.",
"settings.revert": "Zurücksetzen",
"mcp.load": "Tools für das Modell",
"mcp.loadAuto": "Automatisch (bei vielen Tools bei Bedarf)",
"mcp.loadAlways": "Immer alle Tools mitsenden",
"mcp.loadOnDemand": "Bei Bedarf (mcp_search / mcp_call)",
"mcp.loadHint": "Jedes direkt mitgesendete Tool kostet bei jeder Anfrage Kontext. Große Server besser bei Bedarf laden.",
"mcp.reconnect": "Alle neu verbinden",
"mcp.none": "Keine MCP-Server konfiguriert.",
"mcp.tools": "{n} Tools",
"mcp.command": "Befehl",
"mcp.args": "Argumente (eins pro Zeile)",
"mcp.env": "Umgebung (KEY=Wert)",
"mcp.headers": "Header (Name: Wert)",
"mcp.state.disabled": "deaktiviert",
"mcp.state.connecting": "verbinde…",
"mcp.state.connected": "verbunden",
"mcp.state.failed": "Fehler",
"mcp.state.unknown": "nicht gestartet",
"permissions.intro": "Regeln für die Tool-Nutzung. „Fragen“ zeigt eine Freigabekarte. MCP-Tools: mcp__<server>__<tool>, Platzhalter erlaubt (mcp__*).",
"permissions.tools": "Tools",
"permissions.bash": "Shell-Befehle",
"permissions.bashHint": "Glob-Muster auf den ganzen Befehl. Zusammengesetzte Befehle (&&, ;, |) sind nur erlaubt, wenn jeder Teil erlaubt ist.",
"permissions.tool": "Tool",
"permissions.pattern": "Muster",
"permissions.rule": "Regel",
"permissions.allow": "Erlauben",
"permissions.ask": "Fragen",
"permissions.deny": "Verbieten",
"agents.title": "Agenten",
"agents.readOnly": "nur lesen",
"agents.commands": "Slash-Befehle",
"agents.skills": "Skills",
"stats.range7": "7 Tage",
"stats.range30": "30 Tage",
"stats.range90": "90 Tage",
"stats.range365": "1 Jahr",
"stats.rangeAll": "Alles",
"stats.tableView": "Tabellenansicht",
"stats.chartView": "Diagrammansicht",
"stats.cost": "Kosten",
"stats.perRequest": "{v} pro Anfrage",
"stats.requests": "Anfragen",
"stats.errors": "{n} fehlgeschlagen",
"stats.input": "Input",
"stats.output": "Output",
"stats.cacheRead": "Cache gelesen",
"stats.cacheHit": "Cache-Trefferquote",
"stats.tokens": "Tokens",
"stats.ttft": "Zeit bis zum ersten Token",
"stats.ttftHint": "Durchschnittliche Prefill-Wartezeit",
"stats.outputSpeed": "Ausgabegeschwindigkeit",
"stats.prefillSpeed": "Prefill-Geschwindigkeit",
"stats.costPerDay": "Kosten pro Tag nach Modell",
"stats.tokensPerDay": "Tokens pro Tag",
"stats.heatEmpty": "keine Aktivität",
"stats.heatmap": "Aktivität der letzten 14 Tage nach Uhrzeit",
"stats.byModel": "Nach Modell",
"stats.byProvider": "Nach Provider",
"stats.byAgent": "Nach Modus",
"stats.topSessions": "Teuerste Sessions",
"stats.perDay": "Pro Tag",
"stats.day": "Tag",
"stats.model": "Modell",
"stats.provider": "Provider",
"stats.agent": "Modus",
"stats.session": "Session",
"stats.total": "Gesamt",
"stats.other": "Sonstige",
"stats.noData": "Keine Anfragen in diesem Zeitraum.",
"common.ok": "OK",
"common.cancel": "Abbrechen",
"common.refresh": "Aktualisieren",
"nav.logout": "Abmelden",
"login.username": "Benutzername",
"login.password": "Passwort",
"login.passwordRepeat": "Passwort wiederholen",
"login.setupPrompt": "Noch keine Benutzer. Gib den Setup-Code aus dem Server-Log ein und lege den ersten Admin an.",
"login.setupCode": "Setup-Code",
"login.createAdmin": "Admin anlegen",
"login.invalidCode": "Ungültiger Setup-Code.",
"login.mismatch": "Die Passwörter stimmen nicht überein.",
"login.or": "oder",
"sidebar.shared": "Mit dir geteilt",
"chat.readOnly": "nur lesen",
"chat.readOnlyHint": "Diese Session wurde mit dir geteilt – du kannst mitlesen, aber nicht schreiben.",
"chat.backgroundDone": "Hintergrundaufgabe fertig",
"chat.waitingModel": "Warte auf freien Slot bei {model}…",
"chat.waitingSubagent": "Warte auf freien Subagent-Slot ({agent})…",
"chat.anySubagent": "Limit für alle Subagenten",
"tool.background": "Hintergrund",
"share.title": "Session teilen",
"share.hint": "Ausgewählte Benutzer können diese Session lesend verfolgen.",
"share.noUsers": "Keine weiteren Benutzer.",
"settings.tab.users": "Benutzer",
"settings.tab.folders": "Freigegebene Ordner",
"settings.tab.account": "Konto",
"settings.maxParallelSubagents": "Parallele Subagenten",
"settings.maxParallelSubagentsHint": "Max. gleichzeitig laufende Subagenten über alle Sessions (0 = unbegrenzt).",
"settings.maxConcurrency": "Parallele Anfragen",
"settings.maxConcurrencyHint": "Max. gleichzeitige Anfragen an diesen Host/dieses Modell; weitere warten in einer Warteschlange. 1 für Server, die nur eine Anfrage gleichzeitig verarbeiten.",
"settings.slots": "Slots",
"account.title": "Konto",
"account.current": "Aktuelles Passwort",
"account.new": "Neues Passwort",
"account.change": "Passwort ändern",
"account.changed": "Passwort geändert. Andere Geräte wurden abgemeldet.",
"account.hint": "Mindestens 8 Zeichen.",
"users.intro": "Benutzer arbeiten in ihrem eigenen Ordner <workspace>/<benutzername> und in den für sie freigegebenen Ordnern. Admins können den ganzen Workspace nutzen und den Server verwalten.",
"users.username": "Benutzername",
"users.usernameHint": "Buchstaben, Ziffern, - _ . – gleichzeitig der Name des Benutzerordners.",
"users.displayName": "Anzeigename",
"users.role": "Rolle",
"users.roleUser": "Benutzer",
"users.roleAdmin": "Admin",
"users.login": "Anmeldung",
"users.password": "Passwort",
"users.passwordHint": "Leer lassen für reine Single-Sign-on-Anmeldung.",
"users.created": "Angelegt",
"users.you": "du",
"users.setPassword": "Passwort setzen",
"users.newPasswordFor": "Neues Passwort für {name} (mind. 8 Zeichen):",
"users.enable": "Aktivieren",
"users.disable": "Deaktivieren",
"users.deleteConfirm": "Benutzer „{name}“ löschen? Seine Sessions bleiben für Admins sichtbar.",
"users.add": "Benutzer hinzufügen",
"folders.intro": "Ordner im Workspace, in denen ausgewählte Benutzer zusätzlich zu ihrem eigenen Ordner arbeiten dürfen.",
"folders.none": "Noch keine freigegebenen Ordner.",
"folders.noUsers": "Keine Benutzer ohne Admin-Rolle.",
"folders.add": "Ordner freigeben",
"folders.addHint": "Der Ordner wird angelegt, falls er nicht existiert. Bestehende Projektordner lassen sich ebenso freigeben.",
"folders.remove": "Freigabe aufheben",
"folders.removeConfirm": "Freigabe dieses Ordners aufheben? Die Dateien bleiben erhalten.",
"agents.intro": "Modi und Subagenten mit ihrem Modell. Ein Subagent kann auf einem anderen Modell oder Host laufen – z. B. ein kleines Modell, das im Hintergrund Doku oder Übersetzungen schreibt.",
"agents.primaryTitle": "Modi",
"agents.subagentTitle": "Subagenten",
"agents.modePrimary": "Modus",
"agents.modeSubagent": "Subagent",
"agents.source.builtin": "eingebaut",
"agents.source.personal": "persönlich",
"agents.source.config": "Config",
"agents.source.file": "Datei",
"agents.model": "Modell",
"agents.sessionModel": "Session-Modell",
"agents.modelHint": "Festes Modell für diesen Agenten; leer = das im Chat gewählte Modell.",
"agents.maxParallel": "Max. parallel",
"agents.maxParallelShort": "max. {n} parallel",
"agents.description": "Beschreibung",
"agents.descriptionHint": "Anhand dieser Beschreibung entscheidet der Hauptagent, wann er delegiert.",
"agents.mode": "Art",
"agents.addMode": "Neuer Modus",
"agents.style": "Art",
"agents.styleCoding": "Programmieren – Projekt-Kontext und Coding-Ablauf",
"agents.styleChat": "Unterhaltung – nur dieser Prompt, kein Projekt",
"agents.styleHint": "Unterhaltungs-Modi bekommen nur deinen Prompt plus Datum und persönliches Gedächtnis, wie der eingebaute Chat-Modus.",
"agents.readOnlyLabel": "Nur lesen",
"agents.readOnlyHint": "Nur Werkzeuge, die nichts verändern (wie der Plan-Modus)",
"agents.toolsSome": "{n} Werkzeuge ausgewählt – nur diese sind verfügbar",
"agents.tools": "Tools",
"agents.toolsAll": "Nichts ausgewählt = alle Werkzeuge",
"agents.prompt": "Anweisungen",
"agents.reset": "Zurücksetzen",
"agents.resetConfirm": "„{name}“ auf die eingebauten Standardwerte zurücksetzen?",
"agents.deleteConfirm": "Agent „{name}“ löschen?",
"agents.add": "Agent hinzufügen",
"agents.addWriter": "Writer (Doku, Zusammenfassungen, Übersetzungen)",
"agents.addBlank": "Leerer Agent",
"stats.user": "Benutzer",
"stats.allUsers": "Alle Benutzer",
"stats.byUser": "Nach Benutzer",
};