Files
ClaudeDo/src/ClaudeDo.Localization/locales/de.json
T
mika kuns 2700c3d817 fix(usage): stop 429s with an activity-dependent poll cadence + manual refresh
The usage monitor polled the undocumented OAuth usage endpoint every 60s and
earned 429s. It now polls every 5 min while any task is Running and every
15 min while idle (usage_poll_interval_active_seconds / _idle_seconds, both
clamped to >= 60; the old single usage_poll_interval_seconds key is gone).

A 429 comes back as UsageRateLimitedException carrying Retry-After and adds
exponential backoff on top, capped at 30 min and never shorter than the normal
cadence; the strike count resets on the first success. The schedule arithmetic
is the pure static UsagePollSchedule.NextDelay.

Since the idle cadence is slow on purpose, WorkerHub.RefreshUsage drives
UsageMonitorService.RefreshNowAsync behind a Refresh now button in the Usage
Monitor modal: an out-of-band poll that pushes the loop's next-due time out so
no double poll follows, with a 10s cooldown so click-spam can't earn a 429.

Staleness now measures against the slower (idle) interval so an idle worker
isn't flagged stale just for not polling.
2026-08-05 16:40:34 +02:00

633 lines
30 KiB
JSON
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.
{
"metadata": { "code": "de", "name": "Deutsch" },
"settings": {
"title": "EINSTELLUNGEN",
"save": "Speichern",
"cancel": "Abbrechen",
"language": "Sprache",
"tabGeneral": "Allgemein",
"tabWorktrees": "Worktrees",
"tabFiles": "Dateien",
"tabPrime": "Prime Claude",
"tabSkills": "Skills",
"general": {
"defaultInstructions": "Standard-Anweisungen",
"defaultInstructionsPlaceholder": "Basis-Anweisungen, die auf jede Aufgabe angewendet werden",
"model": "Modell",
"maxTurns": "Max. Durchläufe",
"effort": "Effort",
"modelPresets": "Vorgaben pro Modell",
"modelPresetsHint": "Effort und Durchlauf-Budget, mit denen eine Sitzung unter diesem Modell läuft. Overrides auf Listen- und Aufgabenebene gewinnen weiterhin.",
"permission": "Berechtigung",
"maxParallelExecutions": "Max. parallele Ausführungen",
"maxParallelExecutionsHint": "Wie viele Aufgaben aus der Warteschlange der Worker gleichzeitig ausführt.",
"usageGateHeading": "Usage-Limit-Stopp",
"usageGateHint": "Ab dieser Auslastung holt die Queue keine neuen Tasks mehr; laufende Tasks laufen zu Ende. 0 schaltet den Stopp ab.",
"usageGateFiveHourPct": "5-Stunden-Fenster (%)",
"usageGateSevenDayPct": "7-Tage-Fenster (%)",
"reportExcludedPaths": "Bericht: ausgeschlossene Pfade (einer pro Zeile)",
"standupWeekday": "Standup-Wochentag",
"weekdaySunday": "Sonntag",
"weekdayMonday": "Montag",
"weekdayTuesday": "Dienstag",
"weekdayWednesday": "Mittwoch",
"weekdayThursday": "Donnerstag",
"weekdayFriday": "Freitag",
"weekdaySaturday": "Samstag",
"sessionSkills": "Session-Skills",
"sessionSkillsHint": "Gilt für jede Aufgabe. Kombiniert sich mit Listen- und Aufgaben-Auswahl.",
"accentPreset": "Akzentfarbe",
"accentPresetMoss": "Moos",
"accentPresetPeat": "Torf",
"accentPresetSea": "Meer"
},
"worktrees": {
"strategy": "Strategie",
"centralWorktreeRoot": "Zentrales Worktree-Verzeichnis",
"autoCleanup": "Abgeschlossene Worktrees automatisch aufräumen nach",
"days": "Tagen",
"cleanupFinished": "Abgeschlossene Worktrees aufräumen",
"forceRemoveAll": "Alle Worktrees zwangsweise entfernen",
"confirmRemoveAll": "ALLE Worktrees entfernen? Nicht committete Arbeit geht verloren.",
"removeAll": "Alle entfernen"
},
"files": {
"agentsSection": "AGENTEN",
"agentsHint": "Mitgelieferte Standard-Agenten wiederherstellen. Vorhandene Dateien werden nicht überschrieben.",
"restoreDefaultAgents": "Standard-Agenten wiederherstellen",
"promptsSection": "PROMPTS",
"systemPrompt": "System",
"planningPrompt": "Planung (System)",
"planningInitialPrompt": "Planungs-Start",
"retryPrompt": "Wiederholung",
"dailyPrepPrompt": "Tagesplanung",
"weeklyReportPrompt": "Wochenbericht",
"openInEditor": "Im Editor öffnen",
"customizedSection": "ANGEPASST",
"customizedHint": "Diese Prompts weichen vom mitgelieferten Standard ab und werden unverändert beibehalten. Zurücksetzen, um künftige Standard-Verbesserungen zu erhalten.",
"resetToDefault": "Auf Standard zurücksetzen"
},
"prime": {
"description": "Bereite dein Claude-Nutzungsfenster vor, indem an den von dir gewählten Tagen zu einer bestimmten Zeit ein einzelner nicht-interaktiver Ping ausgelöst wird. Läuft nur, solange ClaudeDo geöffnet ist. Wenn die App innerhalb von 30 Minuten vor der Zielzeit startet, wird der Ping sofort ausgelöst.",
"addSchedule": "+ Zeitplan hinzufügen",
"removeScheduleTip": "Zeitplan entfernen",
"dailyPrepMaxTasks": "Max. Aufgaben pro Tag",
"dayMo": "Mo",
"dayTu": "Di",
"dayWe": "Mi",
"dayTh": "Do",
"dayFr": "Fr",
"daySa": "Sa",
"daySu": "So"
},
"onlineInbox": {
"tabHeader": "Online-Posteingang",
"enabledLabel": "Online-Posteingang-Sync aktivieren",
"restartHint": "Aktivieren oder Deaktivieren wird erst nach einem Worker-Neustart wirksam.",
"apiBaseUrlLabel": "API-Basis-URL",
"apiBaseUrlPlaceholder": "https://inbox.claudedo.kuns.dev",
"authorityLabel": "Zitadel-Authority (Issuer-URL)",
"authorityPlaceholder": "https://auth.example.com",
"clientIdLabel": "Client-ID",
"scopesLabel": "Scopes",
"redirectUriLabel": "Redirect-URI",
"pollIntervalLabel": "Abfrageintervall (Sekunden)",
"statusSection": "AUTH-STATUS",
"signedInStatus": "Angemeldet",
"signedOutStatus": "Nicht angemeldet",
"signInButton": "Im Browser anmelden",
"signOutButton": "Abmelden",
"configSection": "KONFIGURATION",
"saveButton": "Konfiguration speichern"
},
"inherit": {
"inheritedFromList": "geerbt · Liste",
"inheritedFromGlobal": "geerbt · Global",
"overrideBadge": "überschrieben",
"resetToInherited": "Auf geerbt zurücksetzen"
},
"turnsCeilingHint": "Läufe sind auf {0} Durchläufe gedeckelt — dieser Wert wird geklemmt.",
"agentEditor": {
"model": "Modell",
"maxTurns": "Max. Durchläufe",
"systemPrompt": "System-Prompt (angehängt)",
"promptPrepended": "Wird automatisch vorangestellt:",
"agentFile": "Agent-Datei",
"browse": "Durchsuchen...",
"sessionSkills": "Session-Skills",
"sessionSkillsHint": "Kombiniert sich additiv mit globaler (und Listen-)Auswahl."
},
"skills": {
"installSection": "INSTALLIEREN",
"installUrlPlaceholder": "Git-Repo-URL (owner/repo oder vollständige URL)",
"installButton": "Installieren",
"installedSection": "INSTALLIERT",
"updateButton": "Aktualisieren",
"removeButton": "Entfernen",
"emptyState": "Keine Skills installiert — oben eine GitHub-URL einfügen, um einen hinzuzufügen."
}
},
"tasks": {
"showCompletedTip": "Abgeschlossene anzeigen",
"letClaudeTip": "Claude machen lassen",
"listSettingsTip": "Listeneinstellungen",
"addPlaceholder": "Aufgabe hinzufügen…",
"enterKey": "ENTER",
"notesPinnedRow": "Notizen (Tagesnotizen)",
"clearDayTip": "Tag leeren",
"planMyDayTip": "Meinen Tag planen",
"overdue": "ÜBERFÄLLIG",
"tasks": "AUFGABEN",
"clearCompletedTip": "Alle abgeschlossenen löschen",
"ctxSendToQueue": "In Warteschlange einreihen",
"ctxRemoveFromQueue": "Aus Warteschlange entfernen",
"ctxCancelExecution": "Ausführung abbrechen",
"ctxMarkAs": "Markieren als",
"ctxMarkDone": "Erledigt",
"ctxMarkCancelled": "Abgebrochen",
"ctxOpenConPtySession": "Interaktive Sitzung öffnen",
"ctxOpenPlanningSession": "Planungssitzung öffnen",
"ctxResumePlanningSession": "Planungssitzung fortsetzen",
"ctxFinalizePlanningSession": "Plan finalisieren",
"ctxDiscardPlanningSession": "Planungssitzung verwerfen",
"ctxScheduleFor": "Planen für...",
"ctxClearSchedule": "Zeitplan entfernen",
"ctxRemoveFromMyDay": "Aus Mein Tag entfernen",
"ctxAddToMyDay": "Zu Mein Tag hinzufügen",
"badgeDraft": "ENTWURF",
"badgePlanned": "GEPLANT",
"badgeManual": "MANUELL",
"manualTip": "Manuelle Erinnerung — Claude nimmt sie nie auf",
"ctxMarkManual": "Als manuell markieren",
"ctxMarkClaudeTask": "Als Claude-Aufgabe markieren",
"approve": "Genehmigen",
"approveTip": "Genehmigen — als Erledigt markieren",
"reject": "Ablehnen",
"rejectTip": "Mit Feedback ablehnen und erneut ausführen",
"park": "Parken",
"parkTip": "Zur manuellen Bearbeitung auf Leerlauf zurücksetzen",
"cancel": "Abbrechen",
"cancelTip": "Diese Aufgabe abbrechen",
"removeFromQueueTip": "Aus Warteschlange entfernen",
"toggleSubtasksTip": "Unteraufgaben ein-/ausklappen",
"agentSuggestedTip": "Vom Agenten vorgeschlagen",
"interactiveChipTip": "Interaktive Sitzung offen — klicken, um im Mission Control dorthin zu springen",
"scheduleTitle": "Aufgabe planen",
"scheduleWhen": "WANN",
"scheduleConfirm": "Planen",
"rejectRerunTitle": "Ablehnen & erneut ausführen",
"reviewTitle": "Review",
"feedbackLabel": "FEEDBACK FÜR DEN AGENTEN",
"feedbackPlaceholder": "Was soll der Agent korrigieren?",
"rerun": "Erneut ausführen",
"refineTip": "Aufgabe mit Claude verfeinern",
"refiningTip": "Claude verfeinert diese Aufgabe…"
},
"lists": {
"heading": "Listen",
"searchPlaceholder": "Aufgaben suchen…",
"searchKbd": "Strg K",
"settingsTip": "Einstellungen",
"smartListsLabel": "INTELLIGENTE LISTEN",
"myListsLabel": "MEINE LISTEN",
"contextSettings": "Einstellungen...",
"contextWorktrees": "Worktrees…",
"contextOpenExplorer": "Im Explorer öffnen",
"contextOpenTerminal": "Im Terminal öffnen",
"contextLetClaude": "Claude machen lassen",
"newList": "Neue Liste",
"addReposTip": "Repos als Listen hinzufügen"
},
"details": {
"deleteTaskTip": "Aufgabe löschen",
"killSessionTip": "Laufende Sitzung beenden",
"closeTip": "Schließen",
"copyTaskIdTip": "Aufgaben-ID kopieren",
"starTip": "Favorit",
"agentSettingsTip": "Agent-Einstellungen",
"agentSettingsHeading": "Agent-Einstellungen (Überschreibungen)",
"mergeLabel": "MERGE",
"mergeTargetLabel": "Merge-Ziel",
"reviewCombinedDiff": "Kombiniertes Diff prüfen",
"mergeAllSubtasks": "Alle Teilaufgaben mergen",
"childOutcomesLabel": "TEILAUFGABEN",
"stepsLabel": "SCHRITTE",
"addStepPlaceholder": "Schritt hinzufügen...",
"detailsLabel": "DETAILS",
"copyDescriptionTip": "Beschreibung in die Zwischenablage kopieren",
"copyFormattedTip": "Titel, Beschreibung und offene Schritte kopieren",
"toggleEditPreviewTip": "Bearbeiten/Vorschau umschalten",
"previewBtn": "Vorschau",
"editBtn": "Bearbeiten",
"descriptionPlaceholder": "Aufgabendetails hinzufügen (Markdown unterstützt)...",
"prepTitle": "Tagesvorbereitung",
"planDay": "Tag planen",
"prepEmpty": "Heute noch keine Vorbereitung — klick Tag planen",
"roadblockReply": {
"placeholder": "Auf den Roadblock antworten…",
"send": "Senden",
"noSession": "Keine Sitzung zum Fortsetzen — dieser Lauf hat keine Session-ID zum Antworten.",
"failed": "Antwort konnte nicht gesendet werden: {0}"
},
"attachments": {
"sectionLabel": "ANHÄNGE",
"dropToAttach": "Zum Anhängen ablegen",
"addFile": "Datei hinzufügen…",
"removeTip": "Anhang entfernen",
"addedSummary": "✓ Hinzugefügt: {0} ({1} Datei(en))",
"overLimitError": "Konnte {0} nicht hinzufügen: {1}",
"invalidNameError": "Konnte {0} nicht hinzufügen: {1}",
"dropReadError": "Abgelegte Dateien konnten nicht gelesen werden: {0}",
"selectIdleTask": "Zuerst eine inaktive Aufgabe auswählen"
},
"sections": {
"description": "Beschreibung",
"steps": "Schritte",
"files": "Dateien"
}
},
"agent": {
"stopTip": "Agent stoppen",
"sendToQueue": "In Warteschlange einreihen",
"sendToQueueTip": "Diese Aufgabe einreihen, damit der Worker sie übernimmt",
"removeFromQueue": "Aus Warteschlange entfernen",
"removeFromQueueTip": "Diese Aufgabe wieder aus der Warteschlange nehmen",
"worktreeLabel": "WORKTREE",
"copyPathTip": "Pfad kopieren",
"diffLabel": "DIFF",
"openDiff": "Diff öffnen",
"worktreeBtn": "Worktree",
"openWorktreeTip": "Worktree im Datei-Explorer öffnen",
"continue": "Fortsetzen",
"continueTip": "Die letzte Sitzung fortsetzen und weitermachen",
"resetAndRetry": "Zurücksetzen & erneut versuchen",
"resetAndRetryTip": "Den Worktree verwerfen und die Aufgabe erneut einreihen, um von vorn zu beginnen"
},
"notes": {
"today": "Heute",
"add": "Hinzufügen",
"newNotePlaceholder": "Neue Notiz…",
"save": "Speichern",
"delete": "Löschen"
},
"session": {
"chipLive": "LIVE",
"chipDone": "FERTIG",
"chipFailed": "FEHLGESCHLAGEN",
"reviewContinueTip": "Dieses Feedback senden und die Aufgabe erneut ausführen",
"reviewResetTip": "Alle Änderungen verwerfen und die Aufgabe auf Leerlauf zurücksetzen"
},
"missionControl": {
"windowTitle": "Mission Control",
"newSession": "Neue Sitzung",
"empty": "Keine laufenden Aufgaben",
"settings": "Einstellungen",
"queue": "Warteschlange",
"blocked": "Blockiert",
"running": "Läuft",
"focusMode": "Fokus",
"overviewMode": "Übersicht",
"closeSession": "Sitzung schließen",
"conptyLaunchFailed": "Interaktive Sitzung konnte nicht geöffnet werden: {0}",
"conptyStarting": "Sitzung wird gestartet…",
"mergeHelperTitle": "Merge-Helfer",
"mergeHelperTaskTitle": "Listen-Handler: {0}",
"mergeHelperTaskDescriptionHeader": "Von diesem Lauf bearbeitete Tasks:",
"submitForReviewFailed": "Einreichen zum Review fehlgeschlagen: {0}",
"submitForReview": "Zum Review einreichen",
"submitForReviewTip": "Diesen Worktree committen und den Task ins Review bringen, damit er gemergt werden kann",
"planningTitleSuffix": " (Planung)",
"question": {
"title": "Claude fragt nach",
"placeholder": "Antwort eingeben…",
"send": "Senden"
}
},
"modals": {
"logVisualizer": {
"title": "WORKER-LOGS — LETZTE 30 MIN",
"warnErrorOnly": "Nur Warnungen & Fehler",
"refresh": "Aktualisieren",
"empty": "Keine Logs in den letzten 30 Minuten.",
"count": "{0} Einträge",
"footerHint": "logs",
"openTooltip": "Aktuelle Worker-Logs anzeigen"
},
"about": {
"title": "ÜBER",
"version": "Version",
"data": "Daten",
"logs": "Logs",
"config": "Konfiguration",
"open": "Öffnen"
},
"workerConnection": {
"title": "WORKER NICHT ERREICHBAR",
"body": "ClaudeDo kann den Hintergrund-Worker nicht erreichen. Normalerweise wird er bei der Anmeldung automatisch gestartet. Du kannst ihn jetzt starten oder neu installieren, falls das Problem bestehen bleibt.",
"dismiss": "Ausblenden",
"rerunInstaller": "Installer erneut ausführen",
"startWorker": "Worker starten"
},
"listSettings": {
"title": "LISTENEINSTELLUNGEN",
"deleteList": "Liste löschen",
"sectionGeneral": "ALLGEMEIN",
"name": "Name",
"workingDirectory": "Arbeitsverzeichnis",
"workingDirectoryPlaceholder": "(keines)",
"browse": "Durchsuchen...",
"defaultCommitType": "Standard-Commit-Typ",
"manualList": "Manuelle Liste (Erinnerungen)",
"manualListHint": "Neue Aufgaben in dieser Liste sind zunächst manuell: kein Einreihen, Ausführen oder Verfeinern, und die Automatik überspringt sie. Eine handgesteuerte Sitzung kannst du weiterhin öffnen.",
"sectionAgent": "AGENT",
"resetAgentSettings": "Agent-Einstellungen zurücksetzen",
"sectionVerify": "VERIFIKATION",
"verifyCommand": "Verifikationskommando",
"verifyCommandPlaceholder": "(keines — Merge verhält sich wie bisher)",
"verifyCommandHint": "Läuft im Arbeitsverzeichnis nach einem Merge, bevor die Aufgabe auf 'Erledigt' gesetzt wird. Ein Exit-Code ungleich 0 (oder Timeout) lässt den Merge bestehen, verhindert aber 'Erledigt' und meldet den Fehler."
},
"merge": {
"title": "WORKTREE MERGEN",
"windowTitle": "Worktree mergen",
"cancel": "Abbrechen",
"merge": "Mergen",
"targetBranch": "Ziel-Branch",
"removeWorktree": "Worktree nach dem Mergen entfernen",
"commitMessage": "Commit-Nachricht",
"conflictedFiles": "Konfliktdateien:"
},
"diff": {
"title": "DIFF",
"windowTitle": "Diff",
"merge": "Mergen…",
"filesHeader": "Dateien",
"binary": "Binärdatei — kein Text-Diff",
"empty": "Kein Inhalt"
},
"worktreesOverview": {
"refresh": "Aktualisieren",
"cleanupFinished": "Abgeschlossene aufräumen",
"columnTask": "AUFGABE",
"columnState": "STATUS",
"columnDiff": "DIFF",
"columnAge": "ALTER",
"columnOutcome": "ERGEBNIS",
"selectAll": "Alle auswählen",
"targetLabel": "Ziel",
"mergeAll": "Alle mergen",
"needsResolution": "ZU LÖSEN",
"resolve": "Lösen",
"phantom": "Phantom",
"phantomTooltip": "Verzeichnis fehlt auf der Festplatte",
"ctxShowDiff": "Diff anzeigen",
"ctxOpenInExplorer": "Im Explorer öffnen",
"ctxJumpToTask": "Zur Aufgabe springen",
"ctxMerge": "Mergen…",
"ctxDiscard": "Verwerfen",
"ctxKeep": "Behalten",
"ctxCopyBranch": "Branch kopieren",
"ctxCopyPath": "Pfad kopieren",
"ctxForceRemove": "Zwangsweise entfernen"
},
"repoImport": {
"title": "REPOS ALS LISTEN HINZUFÜGEN",
"windowTitle": "Repos als Listen hinzufügen",
"cancel": "Abbrechen",
"searchPlaceholder": "Repos suchen…",
"addFolder": "Ordner hinzufügen…",
"forgetFolders": "Ordner vergessen",
"alreadyAdded": "(bereits hinzugefügt)"
},
"mergeHelper": {
"title": "CLAUDE MACHEN LASSEN",
"windowTitle": "Claude machen lassen",
"scopeList": "Liste: {0}",
"confirm": "Claude machen lassen",
"cancel": "Abbrechen",
"selectAll": "Alle auswählen",
"selectNone": "Keine auswählen",
"empty": "Keine Aufgaben zu übergeben — alles erledigt oder abgebrochen.",
"columnTask": "AUFGABE",
"columnStatus": "STATUS"
},
"unfinishedPlanning": {
"title": "UNVOLLENDETE PLANUNGSSITZUNG",
"windowTitle": "Unvollendete Planungssitzung",
"discard": "Verwerfen",
"finalize": "Abschließen",
"resume": "Fortsetzen",
"draftTasksSuffix": " Entwurfsaufgabe(n) warten auf Abschluss."
},
"weeklyReport": {
"title": "WOCHENBERICHT",
"windowTitle": "Wochenbericht",
"from": "Von",
"to": "Bis",
"generate": "Erstellen",
"regenerate": "Neu erstellen",
"emptyStateHint": "Noch kein Bericht für diesen Zeitraum. Klicke auf „Erstellen“."
},
"usageMonitor": {
"title": "USAGE MONITOR",
"windowTitle": "Usage Monitor",
"noGauges": "Noch keine Nutzungslimits gemeldet.",
"refresh": "Jetzt aktualisieren",
"refreshHint": "Abruf alle 5 Min., während ein Task läuft, sonst alle 15 Min.",
"staleFormat": "Werte veraltet (Stand {0})",
"staleGateHint": "Das Gate greift in diesem Zustand nicht.",
"gateBlockedFormat": "Queue pausiert — {0}",
"throttleFormat": "Queue gedrosselt: {0}/{1} Slots ({2})",
"resetIn": "Reset in {0}",
"gaugeSession": "Session (5 Std.)",
"gaugeWeeklyAll": "Woche (alle Modelle)",
"gaugeWeeklyScopedFormat": "Woche ({0})",
"period": "Zeitraum:",
"last7Days": "7 Tage",
"last30Days": "30 Tage",
"fromDate": "Von",
"toDate": "Bis",
"modelUsage": "Modelle",
"taskUsage": "Tasks",
"emptyStateHint": "Noch keine Nutzungsdaten für diesen Zeitraum.",
"columnModel": "MODELL",
"columnIn": "IN",
"columnOut": "OUT",
"columnCache": "CACHE",
"columnOtherIn": "ÜBRIGES IN",
"columnOtherOut": "ÜBRIGES OUT",
"columnOtherCache": "ÜBRIGES CACHE",
"columnShare": "ANTEIL",
"columnTask": "TASK",
"columnList": "LISTE",
"columnModelShort": "MODELL",
"columnRuns": "RUNS",
"columnTotal": "GESAMT"
}
},
"installer": {
"nav": {
"back": "Zurück",
"next": "Weiter →",
"install": "Installieren",
"browse": "Durchsuchen...",
"cancel": "Abbrechen"
},
"welcome": {
"title": "Willkommen",
"heading": "ClaudeDo installieren",
"subheading": "Wähle aus, wohin ClaudeDo installiert werden soll, und klicke dann auf Weiter.",
"updateSubheading": "Deine Aufgaben, Konfiguration und Datenbank bleiben erhalten. Klicke auf Weiter, um fortzufahren.",
"installDirectory": "Installationsverzeichnis",
"registerMcp": "MCP-Server bei Claude registrieren",
"registerMcpHint": "Führt 'claude mcp add' aus, damit Claude deine ClaudeDo-Aufgaben sehen und verwalten kann. Du kannst dies später ändern."
},
"paths": {
"title": "Datenpfade",
"subtitle": "Lege fest, wo ClaudeDo seine Daten speichert.",
"databasePath": "Datenbankpfad",
"logDirectory": "Log-Verzeichnis",
"sandboxRoot": "Sandbox-Verzeichnis",
"worktreeStrategy": "Worktree-Strategie",
"centralWorktreeRoot": "Zentrales Worktree-Verzeichnis"
},
"service": {
"title": "Worker",
"subtitle": "Konfiguriere den ClaudeDo-Hintergrund-Worker.",
"signalRPort": "SignalR-Port",
"queueBackstopInterval": "Warteschlangen-Backstop-Intervall (ms)",
"claudeCliPath": "Claude-CLI-Pfad",
"autostart": "Worker bei der Anmeldung automatisch starten",
"autostartHint": "Der Worker läuft als du (der angemeldete Benutzer) über eine benutzerbezogene Anmelde-Aufgabe, sodass er deine Claude-CLI-Authentifizierung nutzen kann.",
"restartDelay": "Neustart-Verzögerung (ms)"
},
"uiSettings": {
"title": "UI-Einstellungen",
"subtitle": "Konfiguriere die Verbindungseinstellungen der ClaudeDo-Desktop-Oberfläche.",
"syncWithService": "Mit Worker-Einstellungen synchronisieren",
"signalRUrl": "SignalR-URL",
"syncHint": "Bei Synchronisierung werden diese Werte aus den Seiten „Worker“ und „Datenpfade“ abgeleitet."
},
"install": {
"title": "Installation",
"subtitle": "Klicke auf Installieren, um ClaudeDo zu erstellen und bereitzustellen.",
"launch": "ClaudeDo starten"
},
"settings": {
"removeUserData": "Benutzerdaten entfernen (Aufgaben, Logs, Konfigurationen in ~/.todo-app)",
"uninstall": "Deinstallieren",
"repair": "Reparieren",
"save": "Speichern",
"close": "Schließen"
},
"selfUpdate": {
"heading": "Ein neuerer Installer ist verfügbar",
"update": "Aktualisieren",
"continueAnyway": "Trotzdem fortfahren"
}
},
"planning": {
"conflict": {
"windowTitle": "Merge-Konflikt",
"modalTitle": "MERGE-KONFLIKT",
"openInVsCode": "Alle in VS Code öffnen",
"resolved": "Ich habe gelöst — fortfahren",
"abort": "Diesen Merge abbrechen"
},
"diff": {
"previewCombined": "Kombinierte Vorschau",
"loading": "Wird geladen…"
}
},
"conflictResolver": {
"windowTitle": "Merge-Konflikte lösen",
"modalTitle": "KONFLIKTE LÖSEN",
"loading": "Konflikte werden geladen…",
"ours": "MAIN · Ziel-Branch",
"result": "ERGEBNIS",
"theirs": "INCOMING · Task-Branch",
"binaryHint": "Binärdateien können hier nicht zusammengeführt werden — brich ab und löse sie in deinem Editor:",
"prevConflict": "Vorheriger Konflikt (Umschalt+F8)",
"nextConflict": "Nächster Konflikt (F8)",
"conflictMap": "Konflikte in dieser Datei — Marker anklicken zum Springen",
"acceptOurs": "Main hinzufügen",
"acceptTheirs": "Incoming hinzufügen",
"removeOurs": "Main entfernen",
"removeTheirs": "Incoming entfernen",
"continue": "Lösen & fortfahren",
"abort": "Merge abbrechen"
},
"controls": {
"datePicker": {
"today": "Heute",
"tomorrow": "Morgen",
"nextMon": "Nächster Mo",
"clear": "Löschen",
"time": "Zeit",
"done": "Fertig"
}
},
"shell": {
"menu": {
"help": "Hilfe",
"worker": "Worker",
"repositories": "Repositories",
"checkForUpdates": "Nach Updates suchen",
"restartWorker": "Worker neu starten",
"worktrees": "Worktrees…",
"weeklyReport": "Wochenbericht…",
"usageMonitor": "Usage Monitor…",
"about": "Über…",
"addRepos": "Repos als Listen hinzufügen…"
},
"update": {
"available": "Update verfügbar: v",
"updateNow": "Jetzt aktualisieren",
"dismiss": "Ausblenden"
}
},
"vm": {
"connection": { "online": "Online", "connecting": "Verbinden…", "offline": "Offline" },
"shell": { "restartingWorker": "Worker wird neu gestartet…" },
"agentStatus": { "idle": "Leerlauf", "queued": "In Warteschlange", "running": "Läuft", "review": "Prüfung", "children": "Wartet auf Teilaufgaben", "done": "Fertig", "failed": "Fehlgeschlagen", "cancelled": "Abgebrochen" },
"taskStatus": { "idle": "Leerlauf", "queued": "In Warteschlange", "running": "Läuft", "waitingForReview": "Wartet auf Prüfung", "waitingForChildren": "Wartet auf Teilaufgaben", "done": "Fertig", "failed": "Fehlgeschlagen", "cancelled": "Abgebrochen", "parked": "Geparkt", "interactive": "Interaktiv" },
"planningBadge": { "active": "PLANUNG", "finalized": "GEPLANT" },
"taskRow": { "createdPrefix": "Erstellt {0}", "stepsText": "{0}/{1} Schritte" },
"tasksIsland": { "completedHeader": "ABGESCHLOSSEN", "completedHeaderCount": "ABGESCHLOSSEN · {0}", "planningOpenFailed": "Planungssitzung konnte nicht geöffnet werden: {0}", "planningResumeFailed": "Planungssitzung konnte nicht fortgesetzt werden: {0}", "approveFailed": "Genehmigen & Mergen fehlgeschlagen: {0}", "moveRunningRejected": "Ein laufender Task kann nicht in eine andere Liste verschoben werden.", "moveWorktreeRejected": "Verschieben nicht möglich — dieser Task hat einen aktiven Worktree, der auf sein aktuelles Repo zeigt.", "moveRepoConfirm": "Unterschiedliche Repos — {0} → {1}. Task trotzdem verschieben?", "moveConfirmUnavailable": "Verschieben nicht möglich — der Bestätigungsdialog ist nicht verfügbar." },
"diff": { "loadFailed": "Diff konnte nicht geladen werden: {0}", "noChanges": "Keine Änderungen anzuzeigen.", "unavailable": "Diff nicht mehr verfügbar — Commit-Bereich unvollständig." },
"planningDiff": { "hubError": "Kombinierte Vorschau konnte nicht erstellt werden (Hub-Fehler).", "conflict": "Kombinierte Vorschau nicht möglich: Teilaufgabe {0} steht im Konflikt mit einer früheren Teilaufgabe ({1} Dateien).", "buildFailed": "Kombinierte Vorschau konnte nicht erstellt werden: {0}" },
"merge": { "commitMessage": "Merge-Aufgabe: {0}", "workerOfflineBranches": "Worker offline — Branches können nicht aufgelistet werden.", "loadBranchesFailed": "Branches konnten nicht geladen werden: {0}", "merged": "Zusammengeführt.", "conflict": "Merge-Konflikt — Ziel-Branch wiederhergestellt. Manuell oder über Fortsetzen lösen, dann erneut versuchen.", "blocked": "Blockiert: {0}", "unknownStatus": "Unbekannter Status: {0}", "mergeFailed": "Merge fehlgeschlagen: {0}" },
"conflictResolution": { "vsCodeError": "VS Code konnte nicht gestartet werden: {0}. Die Pfade sind oben aufgeführt — kopiere sie manuell.", "subtaskPrefix": "Konflikte in Teilaufgabe: {0}", "targetPrefix": "Zusammenführen in: {0}" },
"settingsModal": { "workerOffline": "Worker offline — Einstellungen schreibgeschützt.", "saveFailed": "Speichern fehlgeschlagen: {0}" },
"onlineInbox": { "workerOffline": "Worker offline — Konfiguration kann nicht geladen werden.", "saved": "Konfiguration gespeichert.", "saveFailed": "Speichern fehlgeschlagen: {0}", "signedIn": "Erfolgreich angemeldet.", "signedInNoRole": "Angemeldet, aber diesem Konto fehlt die Rolle 'user' in Zitadel — die Online-Synchronisierung wird abgelehnt, bis die Rolle im ClaudeDo-Projekt zugewiesen wird.", "signInFailed": "Anmeldung fehlgeschlagen: {0}", "signedOut": "Abgemeldet.", "signOutFailed": "Abmeldung fehlgeschlagen: {0}" },
"weeklyReport": { "invalidRange": "Ungültiger Datumsbereich.", "generating": "Bericht wird erstellt…", "error": "Fehler: {0}" },
"usageMonitor": {
"loadFailed": "Nutzungsdaten konnten nicht geladen werden: {0}",
"refreshFailed": "Nutzung konnte nicht aktualisiert werden: {0}"
},
"filesTab": { "workerOffline": "Worker offline.", "noneBundled": "Keine Standard-Agenten mitgeliefert.", "allPresent": "Alle Standard-Agenten bereits vorhanden.", "restored": "{0} Standard-Agent(en) wiederhergestellt.", "restoreFailed": "Wiederherstellung fehlgeschlagen: {0}", "openFailed": "Öffnen fehlgeschlagen: {0}", "resetToDefault": "Auf den mitgelieferten Standard zurückgesetzt." },
"sessionSkillsTab": { "installed": "Installiert: {0}", "installFailed": "Installation fehlgeschlagen: {0}", "updated": "Aktualisiert.", "updateFailed": "Aktualisierung fehlgeschlagen: {0}", "removed": "Entfernt.", "removeFailed": "Entfernen fehlgeschlagen: {0}" },
"worktreesTab": { "workerOffline": "Worker offline.", "removed": "{0} Worktree(s) entfernt.", "blocked": "Zwangsentfernung nicht möglich: {0} Aufgabe(n) laufen noch. Brich sie zuerst ab.", "removedFrom": "{0} Worktree(s) von {1} Aufgabe(n) entfernt.", "cleanupFailed": "Aufräumen fehlgeschlagen: {0}", "resetFailed": "Zurücksetzen fehlgeschlagen: {0}" },
"worktreesOverview": { "titleAll": "Worktrees", "titleList": "Worktrees — {0}", "listFallback": "Liste", "cleanupFailed": "Aufräumen fehlgeschlagen.", "cleanupFailedDetailed": "Aufräumen fehlgeschlagen: {0}", "removed": "{0} Worktree(s) entfernt.", "discardFailed": "Worktree konnte nicht verworfen werden.", "keepFailed": "Worktree konnte nicht behalten werden.", "cannotForceRunning": "Eine laufende Aufgabe kann nicht zwangsweise entfernt werden.", "forceRemoveFailed": "Zwangsentfernung fehlgeschlagen.", "forceRemoveFailedDetailed": "Zwangsentfernung fehlgeschlagen: {0}", "batchProgress": "Merge {0}/{1}…", "batchDone": "{0} gemergt, {1} zu lösen." },
"listSettings": { "untitled": "Unbenannt" },
"detailsIsland": { "verifyFailed": "Merge ist erfolgt, aber das Verifikationskommando der Liste ist fehlgeschlagen — die Aufgabe wurde nicht auf 'Erledigt' gesetzt." },
"lists": { "localSuffix": "{0} / lokal", "smartMyDay": "Mein Tag", "smartImportant": "Wichtig", "smartPlanned": "Geplant", "virtualQueue": "Warteschlange", "virtualRunning": "Läuft", "virtualReview": "Prüfung", "newList": "Neue Liste" }
},
"usage": {
"pill": {
"empty": "Nutzung ",
"bothFormat": "5h {0}% · 7d {1}%",
"fiveHourFormat": "5h {0}%",
"sevenDayFormat": "7d {0}%",
"fiveHourLabel": "5h",
"sevenDayLabel": "7d",
"resetIn": "{0}: Reset in {1}",
"durationHoursMinutes": "{0} h {1} m",
"durationMinutes": "{0} m",
"blockedReason": "Blockiert: {0}",
"stale": "veraltet (Stand {0})",
"lastError": "Letzter Fehler: {0}",
"throttled": "Gedrosselt: {0}/{1} Slots ({2})"
}
}
}