Files
ClaudeDo/src/ClaudeDo.Localization/locales/en.json
T
mika kuns 4464dc6ff1 feat(config): Permission-Modus pro Liste und pro Task ueberschreibbar
Bisher gab es nur AppSettings.DefaultPermissionMode global — ein Task, der plan
oder acceptEdits braucht, erzwang das Umstellen der globalen Einstellung. Neue
Spalten tasks.permission_mode und list_config.permission_mode, Auflösung
task -> list -> global im EffectiveRunConfigResolver (den TaskRunner und
get_effective_run_config gemeinsam nutzen), ComboBox mit Inherited-Badge im
geteilten Agent-Editor.

MigrationBaselineTests: das Fixture baute per EnsureCreated das heutige Schema
und stempelte Legacy-History darauf — jede Migration nach dem Squash lief damit
in 'duplicate column name'. Es migriert jetzt gezielt bis InitialCreate und
prueft 'nichts pending' statt 'InitialCreate ist die einzige Zeile'.
2026-08-27 10:28:57 +02:00

841 lines
39 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": "en", "name": "English" },
"settings": {
"title": "SETTINGS",
"save": "Save",
"cancel": "Cancel",
"language": "Language",
"sidebar": {
"groupBasis": "BASICS",
"groupAdvanced": "ADVANCED",
"categoryGeneral": "General",
"categoryExecution": "Execution",
"categoryPrime": "Prime Claude",
"categoryWorktrees": "Worktrees",
"categoryFiles": "Files & Prompts",
"categorySkills": "Session Skills",
"categoryReports": "Reports"
},
"repoHint": {
"text": "Only takes effect once a repo is linked.",
"link": "Import repo"
},
"general": {
"defaultInstructions": "Default instructions",
"defaultInstructionsPlaceholder": "Baseline instructions applied to every task",
"model": "Model",
"maxTurns": "Max turns",
"effort": "Effort",
"modelPresets": "Per-model defaults",
"modelPresetsHint": "Reasoning effort and turn budget used when a session runs under that model. List- and task-level max-turn overrides still win.",
"maxTurnsCeiling": "Max turns ceiling",
"maxTurnsCeilingHint": "Hard cap every resolved max-turns value is clamped to — task, list, and per-model settings can't exceed this.",
"maxTurnsCeilingInvalid": "Max turns ceiling must be at least 1.",
"permission": "Permission",
"maxParallelExecutions": "Max parallel executions",
"maxParallelExecutionsHint": "How many queued tasks the worker runs at once.",
"usageGateHeading": "Usage limit stop",
"usageGateHint": "Once usage reaches this level, the queue stops picking up new tasks; running tasks finish normally. 0 turns the stop off.",
"usageGateFiveHourPct": "5-hour window (%)",
"usageGateSevenDayPct": "7-day window (%)",
"autoContinueOnUsageLimit": "Continue on session limit reset",
"autoContinueOnUsageLimitHint": "When a run stops because it hit the usage limit, automatically continue it once the 5-hour window resets. Also wakes the paused queue exactly at reset time instead of waiting for the next backstop check.",
"reportExcludedPaths": "Report: excluded paths (one per line)",
"standupWeekday": "Standup weekday",
"weekdaySunday": "Sunday",
"weekdayMonday": "Monday",
"weekdayTuesday": "Tuesday",
"weekdayWednesday": "Wednesday",
"weekdayThursday": "Thursday",
"weekdayFriday": "Friday",
"weekdaySaturday": "Saturday",
"sessionSkills": "Session skills",
"sessionSkillsHint": "Applied to every task. Combines with list- and task-level selections.",
"accentPreset": "Accent color",
"accentPresetMoss": "Moss",
"accentPresetPeat": "Peat",
"accentPresetSea": "Sea"
},
"worktrees": {
"strategy": "Strategy",
"centralWorktreeRoot": "Central worktree root",
"autoCleanup": "Auto-cleanup finished worktrees after",
"days": "days",
"cleanupFinished": "Cleanup finished worktrees",
"forceRemoveAll": "Force-remove all worktrees",
"confirmRemoveAll": "Remove ALL worktrees? Uncommitted work will be lost."
},
"files": {
"agentsSection": "AGENTS",
"agentsHint": "Restore bundled default agents. Existing files are not overwritten.",
"restoreDefaultAgents": "Restore default agents",
"promptsSection": "PROMPTS",
"systemPrompt": "System",
"planningPrompt": "Planning (system)",
"planningInitialPrompt": "Planning kickoff",
"retryPrompt": "Retry",
"dailyPrepPrompt": "Daily prep",
"weeklyReportPrompt": "Weekly report",
"viewPrompt": "View",
"customizedSection": "CUSTOMIZED",
"customizedHint": "These prompts differ from the bundled default and are kept as-is. Reset to pick up future default improvements.",
"resetToDefault": "Reset to default"
},
"prime": {
"description": "Run a single non-interactive Claude action on the days you choose, at a chosen time. Only runs while ClaudeDo is open. If the app starts within 30 minutes of the target time, it fires immediately.",
"addSchedule": "+ Add schedule",
"removeScheduleTip": "Remove schedule",
"dailyPrepMaxTasks": "Max tasks per day",
"actionLabel": "Action",
"actionPing": "Ping",
"actionFillMyDay": "Fill My Day",
"actionCustom": "Custom prompt",
"actionHint": "Ping only opens the usage window. Fill My Day runs the daily prep. Custom runs your own prompt with the ClaudeDo tools.",
"customPromptLabel": "Prompt",
"customPromptPlaceholder": "The full prompt to run for this schedule (required)",
"maxTasksDisabledHint": "Only applies to Fill My Day schedules.",
"promptOverrideLabel": "Prompt addition",
"promptOverridePlaceholder": "Extra instructions appended to the daily prep prompt for this schedule (optional)",
"dayMo": "Mo",
"dayTu": "Tu",
"dayWe": "We",
"dayTh": "Th",
"dayFr": "Fr",
"daySa": "Sa",
"daySu": "Su"
},
"onlineInbox": {
"tabHeader": "Online Inbox",
"enabledLabel": "Enable online inbox sync",
"restartHint": "Enabling or disabling takes effect after a Worker restart.",
"apiBaseUrlLabel": "API base 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": "Poll interval (seconds)",
"statusSection": "AUTH STATUS",
"signedInStatus": "Signed in",
"signedOutStatus": "Not signed in",
"signInButton": "Sign in via browser",
"signOutButton": "Sign out",
"configSection": "CONFIGURATION",
"saveButton": "Save config"
},
"inherit": {
"inheritedFromList": "inherited · List",
"inheritedFromGlobal": "inherited · Global",
"overrideBadge": "override",
"resetToInherited": "Reset to inherited"
},
"turnsCeilingHint": "Runs are capped at {0} turns — this value will be clamped.",
"agentEditor": {
"model": "Model",
"maxTurns": "Max turns",
"permissionMode": "Permission mode",
"systemPrompt": "System prompt (appended)",
"promptPrepended": "Prepended automatically:",
"agentFile": "Agent file",
"browse": "Browse...",
"sessionSkills": "Session skills",
"sessionSkillsHint": "Combines additively with global (and list) selections."
},
"skills": {
"installSection": "INSTALL",
"installUrlPlaceholder": "Git repo URL (owner/repo or full URL)",
"installButton": "Install",
"installedSection": "INSTALLED",
"updateButton": "Update",
"removeButton": "Remove",
"emptyState": "No skills installed — paste a GitHub URL above to add one."
}
},
"tasks": {
"showCompletedTip": "Show completed",
"letClaudeTip": "Let Claude handle it",
"mergeReviewsTip": "Let Claude merge the reviews",
"quickClaudeTip": "Quick Claude session",
"listSettingsTip": "List settings",
"addPlaceholder": "Add a task…",
"enterKey": "ENTER",
"notesPinnedRow": "Notes (daily notes)",
"clearDayTip": "Clear day",
"planMyDayTip": "Plan My Day",
"overdue": "OVERDUE",
"tasks": "TASKS",
"clearCompletedTip": "Clear all completed",
"ctxSendToQueue": "Send to queue",
"ctxRemoveFromQueue": "Remove from queue",
"ctxCancelExecution": "Cancel execution",
"ctxMarkAs": "Mark as",
"ctxMarkDone": "Done",
"ctxMarkCancelled": "Cancelled",
"ctxOpenConPtySession": "Open interactive session",
"ctxOpenWorktree": "Open worktree",
"ctxOpenPlanningSession": "Open planning Session",
"ctxResumePlanningSession": "Resume planning Session",
"ctxFinalizePlanningSession": "Finalize plan",
"ctxDiscardPlanningSession": "Discard planning session",
"ctxScheduleFor": "Schedule for...",
"ctxClearSchedule": "Clear schedule",
"ctxRemoveFromMyDay": "Remove from My Day",
"ctxAddToMyDay": "Add to My Day",
"badgeDraft": "DRAFT",
"badgePlanned": "PLANNED",
"badgeManual": "MANUAL",
"chainAfterPrefix": "after",
"manualTip": "Manual reminder — Claude never picks this up",
"ctxMarkManual": "Mark as manual",
"ctxMarkClaudeTask": "Mark as Claude task",
"ctxRefineTask": "Refine task",
"ctxPlanning": "Planning",
"ctxSchedule": "Schedule",
"ctxDeleteTask": "Delete task",
"reasonAlreadyRunning": "Task is already running",
"reasonAlreadyQueued": "Already in the queue",
"reasonWaitingForReview": "Waiting for review",
"reasonSubtasksQueued": "Subtasks are already queued",
"reasonPlanNotFinalized": "Plan isn't finalized yet",
"reasonPlanningActive": "Planning session is active — finalize the plan first",
"reasonInteractiveSession": "An interactive session is open for this task",
"reasonNotRunning": "Task isn't running",
"reasonRefining": "Refine is already running",
"reasonNotIdle": "Only available for idle tasks",
"reasonIsPlanningParent": "Part of a plan",
"reasonIsChildTask": "Subtasks don't have their own planning session",
"reasonPlanAlreadyFinalized": "Plan is already finalized",
"reasonNoWorktree": "No worktree for this task",
"cancel": "Cancel",
"removeFromQueueTip": "Remove from queue",
"toggleSubtasksTip": "Expand / collapse subtasks",
"agentSuggestedTip": "Suggested by the agent",
"interactiveChipTip": "Interactive session open — click to jump to it in Mission Control",
"scheduleTitle": "Schedule task",
"scheduleWhen": "WHEN",
"scheduleConfirm": "Schedule",
"refineTip": "Refine this task with Claude",
"refiningTip": "Claude is refining this task…",
"emptyHint": "No tasks yet. Add one, then right-click it and choose \"Send to queue\" — Claude works it in its own worktree.",
"emptyHintNoWorkingDir": "This list has no repo yet — link one in List Settings to enable the queue."
},
"lists": {
"heading": "Lists",
"searchPlaceholder": "Search tasks…",
"searchKbd": "Ctrl K",
"settingsTip": "Settings",
"smartListsLabel": "SMART LISTS",
"myListsLabel": "MY LISTS",
"contextWorktrees": "Worktrees…",
"contextOpenExplorer": "Open in Explorer",
"contextOpenTerminal": "Open in Terminal",
"contextOpenFindings": "Open findings folder",
"contextSettings": "Settings…",
"newList": "New list",
"addReposTip": "Add repos as lists",
"noRepoBannerText": "No repo linked yet. ClaudeDo runs tasks in a git repo.",
"noRepoBannerButton": "Import repo"
},
"details": {
"deleteTaskTip": "Delete task",
"killSessionTip": "Kill the running session",
"sendToQueue": "Send to queue",
"sendToQueueTip": "Queue this task so Claude picks it up on the next run",
"closeTip": "Close",
"copyTaskIdTip": "Copy task ID",
"starTip": "Star",
"agentSettingsTip": "Agent settings",
"agentSettingsHeading": "Agent settings (overrides)",
"copyFormattedTip": "Copy title, description and open steps",
"toggleEditPreviewTip": "Toggle edit/preview",
"planDay": "Plan day",
"prepEmpty": "No prep run today yet — click Plan day",
"roadblockReply": {
"placeholder": "Reply to the roadblock…",
"send": "Send",
"noSession": "No session to resume — this run has no session ID to reply into.",
"failed": "Couldn't send the reply: {0}"
},
"attachments": {
"dropToAttach": "Drop to attach",
"addFile": "Add file…",
"removeTip": "Remove attachment",
"addedSummary": "✓ Added {0} ({1} file(s))",
"overLimitError": "Could not add {0}: {1}",
"invalidNameError": "Could not add {0}: {1}",
"dropReadError": "Couldn't read the dropped files: {0}",
"selectIdleTask": "Select an idle task first"
},
"sections": {
"description": "Description",
"steps": "Steps",
"files": "Files"
},
"emptyState": "Select a task to see its details"
},
"agent": {
"openWorktreeTip": "Open worktree in file explorer — requires an active worktree",
"openDiffTip": "Open the diff — requires a worktree or a merged commit range",
"reviewCombinedDiffTip": "Only available for planning tasks with subtasks or child outcomes"
},
"notes": {
"today": "Today",
"add": "Add",
"newNotePlaceholder": "New note…"
},
"session": {
"chipLive": "LIVE",
"chipDone": "DONE",
"chipFailed": "FAILED",
"reviewContinueTip": "Send this feedback and re-run the task",
"reviewResetTip": "Discard all changes and reset the task to Idle",
"reviewFeedbackPlaceholder": "Feedback for next run",
"mergeDrainHint": "Merge is draining subtasks — Cancel unlocks once it finishes",
"approveMergesUnitHint": "Approve also merges this into the target branch right away — there's no separate merge step after it.",
"continueNoSessionTip": "Resumes the last run — needs a previous session to continue",
"resetAndRetryInteractiveTip": "Interactive session is open — close it first"
},
"missionControl": {
"windowTitle": "Mission Control",
"newSession": "New session",
"empty": "No running tasks",
"settings": "Settings",
"queue": "Queue",
"blocked": "Blocked",
"running": "Running",
"focusMode": "Focus",
"overviewMode": "Overview",
"closeSession": "Kill session",
"conptyLaunchFailed": "Couldn't open interactive session: {0}",
"conptyStarting": "Starting session…",
"mergeHelperTitle": "Merge Helper",
"mergeHelperHandoffTitleSuffix": " (Handoff)",
"mergeHelperTaskTitle": "List handler: {0}",
"mergeHelperTaskDescriptionHeader": "Tasks handled by this run:",
"mergeReviewsTitle": "Review Merge",
"mergeReviewsTaskTitle": "Review merge: {0}",
"submitForReviewFailed": "Couldn't submit for review: {0}",
"submitForReview": "Submit for review",
"submitForReviewTip": "Commit this worktree and move the task to review so it can be merged",
"retry": "Retry",
"retryTip": "Try launching this session again",
"planningTitleSuffix": " (Planning)",
"enqueueAlreadyOpen": "Can't queue — this task has an open interactive session.",
"enqueueFailed": "Queue failed: {0}",
"queueRefreshFailed": "Couldn't refresh the queue: {0}",
"question": {
"title": "Claude is asking",
"placeholder": "Type your answer…",
"send": "Send"
}
},
"modals": {
"logVisualizer": {
"title": "WORKER LOGS — LAST 30 MIN",
"warnErrorOnly": "Warnings & errors only",
"refresh": "Refresh",
"empty": "No logs in the last 30 minutes.",
"count": "{0} entries",
"footerHint": "logs",
"openTooltip": "View recent worker logs",
"copyLast": "Copy last 40",
"copyLastTooltip": "Copy the last 40 visible lines to the clipboard",
"copied": "{0} lines copied",
"copyFailed": "Copy failed"
},
"about": {
"title": "ABOUT",
"version": "Version",
"data": "Data",
"logs": "Logs",
"config": "Config",
"open": "Open"
},
"workerConnection": {
"title": "WORKER NOT REACHABLE",
"body": "ClaudeDo can't reach the background worker. It is normally started automatically at logon. You can start it now, or reinstall if the problem persists.",
"dismiss": "Dismiss",
"rerunInstaller": "Rerun Installer",
"startWorker": "Start Worker"
},
"listSettings": {
"title": "LIST SETTINGS",
"deleteList": "Delete list",
"sectionGeneral": "GENERAL",
"name": "Name",
"workingDirectory": "Working directory",
"workingDirectoryPlaceholder": "(none)",
"browse": "Browse...",
"defaultCommitType": "Default commit type",
"manualList": "Manual list (reminders)",
"manualListHint": "New tasks in this list start out manual: no queueing, running or refining, and automation skips them. You can still open a hand-driven session.",
"findingsTracked": "Commit the .claudedo findings folder",
"findingsTrackedHint": "Off: the folder stays out of git via .git/info/exclude. On: findings travel with the repo.",
"serializeOnFileOverlap": "Serialize tasks that touch the same files",
"serializeOnFileOverlapHint": "Off: tasks in this list run in parallel. On: a queued task whose declared file scope overlaps a running or awaiting-review sibling waits instead of starting.",
"sectionAgent": "AGENT",
"resetAgentSettings": "Reset agent settings",
"sectionVerify": "VERIFICATION",
"verifyCommand": "Verify command",
"verifyCommandPlaceholder": "(none — merge behaves as today)",
"verifyCommandHint": "Runs in the working directory after a merge lands, before the task is marked Done. A non-zero exit (or timeout) leaves the merge in place but keeps the task out of Done and reports the failure."
},
"merge": {
"title": "MERGE WORKTREE",
"windowTitle": "Merge worktree",
"cancel": "Cancel",
"merge": "Merge",
"targetBranch": "Target branch",
"removeWorktree": "Remove worktree after merge",
"commitMessage": "Commit message",
"conflictedFiles": "Conflicted files:"
},
"diff": {
"title": "DIFF",
"windowTitle": "Diff",
"merge": "Merge…",
"filesHeader": "Files",
"binary": "Binary file — no text diff",
"empty": "No content",
"unifiedView": "Unified",
"splitView": "Side by side",
"wrapLines": "Wrap lines",
"paneBase": "BASE",
"paneWorktree": "WORKTREE",
"maximize": "Maximize",
"restore": "Restore"
},
"worktreesOverview": {
"refresh": "Refresh",
"cleanupFinished": "Cleanup finished",
"columnTask": "TASK",
"columnState": "STATE",
"columnDiff": "DIFF",
"columnAge": "AGE",
"columnOutcome": "RESULT",
"selectAll": "Select all",
"targetLabel": "Target",
"mergeAll": "Merge all",
"needsResolution": "NEEDS RESOLUTION",
"resolve": "Resolve",
"phantom": "phantom",
"phantomTooltip": "Directory missing on disk",
"ctxShowDiff": "Show diff",
"ctxOpenInExplorer": "Open in Explorer",
"ctxJumpToTask": "Jump to task",
"ctxMerge": "Merge…",
"ctxDiscard": "Discard",
"ctxKeep": "Keep",
"ctxCopyBranch": "Copy branch",
"ctxCopyPath": "Copy path",
"ctxForceRemove": "Force remove"
},
"repoImport": {
"title": "ADD REPOS AS LISTS",
"windowTitle": "Add repos as lists",
"cancel": "Cancel",
"searchPlaceholder": "Search repos…",
"addFolder": "Add folder…",
"forgetFolders": "Forget folders",
"alreadyAdded": "(already added)"
},
"mergeHelper": {
"title": "LET CLAUDE HANDLE IT",
"windowTitle": "Let Claude handle it",
"scopeList": "List: {0}",
"scopeReview": "All lists — tasks waiting for review",
"confirm": "Let Claude handle it",
"cancel": "Cancel",
"selectAll": "Select all",
"selectNone": "Select none",
"empty": "No tasks to hand over — everything is done or cancelled.",
"columnTask": "TASK",
"columnStatus": "STATUS",
"orphanHint": "PARENT NOT IN SELECTION",
"orphanHintTip": "This subtask's parent isn't offered here (already done or cancelled), so it's listed on its own."
},
"unfinishedPlanning": {
"title": "UNFINISHED PLANNING SESSION",
"windowTitle": "Unfinished planning session",
"discard": "Discard",
"finalize": "Finalize",
"resume": "Resume",
"draftTasksSuffix": " draft task(s) waiting to be finalized."
},
"weeklyReport": {
"title": "WEEKLY REPORT",
"windowTitle": "Weekly Report",
"from": "From",
"to": "To",
"generate": "Generate",
"regenerate": "Regenerate",
"emptyStateHint": "No report for this range yet. Click “Generate”."
},
"usageMonitor": {
"title": "USAGE MONITOR",
"windowTitle": "Usage Monitor",
"noGauges": "No usage limits reported yet.",
"refresh": "Refresh now",
"refreshHint": "Polled every 5 min while a task runs, otherwise every 15 min.",
"staleFormat": "Values stale (as of {0})",
"staleGateHint": "The gate does not apply while values are stale.",
"gateBlockedFormat": "Queue paused — {0}",
"throttleFormat": "Queue throttled: {0}/{1} slots ({2})",
"resetIn": "Reset in {0} ({1})",
"dragHint": "Drag a marker, or type the value below.",
"legendSoft": "Soft · 2 slots",
"legendHard": "Hard · 1 slot",
"legendGate": "Gate · pause",
"gaugeSession": "Session (5h)",
"gaugeWeeklyAll": "Week (all models)",
"gaugeWeeklyScopedFormat": "Week ({0})",
"period": "Period:",
"last7Days": "7 days",
"last30Days": "30 days",
"fromDate": "From",
"toDate": "To",
"modelUsage": "Models",
"taskUsage": "Tasks",
"emptyStateHint": "No usage data for this range yet.",
"columnModel": "MODEL",
"columnIn": "IN",
"columnOut": "OUT",
"columnCache": "CACHE",
"columnOtherIn": "OTHER IN",
"columnOtherOut": "OTHER OUT",
"columnOtherCache": "OTHER CACHE",
"columnShare": "SHARE",
"columnTask": "TASK",
"columnList": "LIST",
"columnModelShort": "MODEL",
"columnRuns": "RUNS",
"columnTotal": "TOTAL",
"columnCost": "COST",
"columnRetries": "RETRIES",
"analyticsStampFormat": "Analytics as of {0}",
"analyticsNever": "Analytics not loaded yet",
"analyticsRefresh": "Refresh analytics",
"openDashboard": "Open TokenTracker dashboard",
"openDashboardTip": "Starts TokenTracker's local dashboard (localhost only, no cloud sync) and opens it in your browser. The first start takes a few seconds.",
"analyticsTotalsFormat": "{0} tokens · ${1}",
"ttMissingTitle": "Token analytics need TokenTracker",
"ttMissingBody": "TokenTracker (MIT) reads your local Claude transcripts and never sees prompts. ClaudeDo only calls its local export — it does not run `init`, installs no hooks and enables no cloud sync.",
"ttInstall": "Install TokenTracker",
"ttNodeHintFormat": "Node 20 or newer is required (found: {0}).",
"ttNodeMissing": "Node 20 or newer is required, but no Node runtime was found.",
"ttErrorFormat": "TokenTracker problem: {0}"
}
},
"installer": {
"nav": {
"back": "Back",
"next": "Next →",
"install": "Install",
"browse": "Browse...",
"cancel": "Cancel"
},
"welcome": {
"title": "Welcome",
"heading": "Install ClaudeDo",
"subheading": "Choose where to install ClaudeDo, then click Next.",
"updateSubheading": "Your tasks, config, and database will be preserved. Click Next to continue.",
"installDirectory": "Install Directory",
"registerMcp": "Register MCP server with Claude",
"registerMcpHint": "Runs 'claude mcp add' so Claude can view and manage your ClaudeDo tasks. You can change this later."
},
"systemCheck": {
"title": "System Check",
"subtitle": "ClaudeDo checks your system before installing.",
"recheck": "Recheck",
"summary": {
"running": "Checking your system…",
"ok": "Everything looks good.",
"warnings": "{0} warning(s) found.",
"blocking": "{0} problem(s) must be fixed: {1}"
},
"claudeHelp": {
"button": "Claude Help Me",
"error": "Could not start the Claude session: {0}",
"tooltip": {
"cliMissing": "The Claude CLI was not found — install it first (see the Claude CLI hint above).",
"notLoggedIn": "Claude is not logged in — run 'claude' once and complete the login flow.",
"ready": "Open an interactive Claude session to help fix your setup."
}
}
},
"paths": {
"title": "Data Paths",
"subtitle": "Configure where ClaudeDo stores its data.",
"databasePath": "Database Path",
"logDirectory": "Log Directory",
"sandboxRoot": "Sandbox Root",
"worktreeStrategy": "Worktree Strategy",
"centralWorktreeRoot": "Central Worktree Root"
},
"service": {
"title": "Worker",
"subtitle": "Configure the ClaudeDo background worker.",
"signalRPort": "SignalR Port",
"queueBackstopInterval": "Queue Backstop Interval (ms)",
"claudeCliPath": "Claude CLI Path",
"autostart": "Start worker automatically at logon",
"autostartHint": "The worker runs as you (the logged-in user) via a per-user logon task, so it can use your Claude CLI authentication.",
"restartDelay": "Restart Delay (ms)"
},
"uiSettings": {
"title": "UI Settings",
"subtitle": "Configure the ClaudeDo desktop UI connection settings.",
"syncWithService": "Sync with service settings",
"signalRUrl": "SignalR URL",
"syncHint": "When synced, these values are derived from the Service and Paths pages."
},
"install": {
"title": "Installation",
"subtitle": "Click Install to build and deploy ClaudeDo.",
"launch": "Launch ClaudeDo"
},
"diagnose": {
"title": "Diagnose",
"subtitle": "Re-run the environment checks against your installed configuration."
},
"settings": {
"removeUserData": "Remove user data (tasks, logs, configs in ~/.claudeDo)",
"uninstall": "Uninstall",
"repair": "Repair",
"save": "Save",
"close": "Close"
}
},
"checks": {
"git": {
"title": "Git",
"hint": "Install Git and make sure it is on PATH."
},
"gitIdentity": {
"title": "Git Identity",
"hint": "Set your git identity: git config --global user.name \"...\" and user.email \"...\"."
},
"ports": {
"title": "Ports",
"hint": "Free the port, or change it on the Worker page after install."
},
"writeAccess": {
"title": "Write Access",
"hint": "Choose a different install directory, or run the installer as administrator."
},
"claudeCli": {
"title": "Claude CLI",
"hint": "Install the Claude CLI and make sure it is on PATH."
},
"claudeVersion": {
"title": "Claude CLI Version",
"hint": "Update the Claude CLI to a newer version."
},
"claudeAuth": {
"title": "Claude Login",
"hint": "Run 'claude auth login' to sign in."
},
"permissionModeAuto": {
"title": "Permission Mode",
"hint": "Update the Claude CLI to a version that supports --permission-mode auto."
}
},
"planning": {
"diff": {
"previewCombined": "Preview combined",
"loading": "Loading…"
}
},
"conflictResolver": {
"windowTitle": "Resolve merge conflicts",
"modalTitle": "RESOLVE CONFLICTS",
"loading": "Loading conflicts…",
"ours": "MAIN · merge target",
"result": "RESULT",
"theirs": "INCOMING · task branch",
"binaryHint": "Binary files can't be merged here — abort and resolve them in your editor:",
"prevConflict": "Previous conflict (Shift+F8)",
"nextConflict": "Next conflict (F8)",
"conflictMap": "Conflicts in this file — click a marker to jump",
"acceptOurs": "Add main",
"acceptTheirs": "Add incoming",
"removeOurs": "Remove main",
"removeTheirs": "Remove incoming",
"continue": "Resolve & continue",
"abort": "Abort merge"
},
"controls": {
"datePicker": {
"today": "Today",
"tomorrow": "Tomorrow",
"nextMon": "Next Mon",
"clear": "Clear",
"time": "Time",
"done": "Done"
}
},
"shell": {
"menu": {
"help": "Help",
"worker": "Worker",
"repositories": "Repositories",
"checkForUpdates": "Check for updates",
"restartWorker": "Restart worker",
"worktrees": "Worktrees…",
"weeklyReport": "Weekly Report…",
"usageMonitor": "Usage Monitor…",
"about": "About…",
"addRepos": "Add repos as lists…"
},
"update": {
"available": "Update available: v",
"updateNow": "Update now",
"dismiss": "Dismiss"
},
"staleWorker": {
"message": "The worker is running an older build than this repo's merged main — restart it so your merged changes take effect."
},
"externalMerge": {
"banner": "A Claude session is resolving a merge conflict — don't edit files in the repository.",
"open": "Open resolver"
}
},
"vm": {
"connection": { "online": "Online", "connecting": "Connecting…", "offline": "Offline" },
"shell": { "restartingWorker": "Restarting worker…", "unexpectedError": "Unexpected error: {0}" },
"mainWindow": { "closeConfirm": { "message": "{0} Mission Control session(s) are still running. Closing the app will end them. Close anyway?" } },
"agentStatus": { "idle": "Idle", "queued": "Queued", "running": "Running", "review": "Review", "children": "Waiting for Subtasks", "done": "Done", "failed": "Failed", "cancelled": "Cancelled" },
"taskStatus": { "idle": "Idle", "queued": "Queued", "running": "Running", "waitingForReview": "Waiting for Review", "waitingForChildren": "Waiting for Subtasks", "done": "Done", "failed": "Failed", "cancelled": "Cancelled", "parked": "Parked", "interactive": "Interactive" },
"failureReason": { "maxTurns": "Turn limit reached", "timeout": "Timed out", "usageLimit": "Usage limit reached", "error": "Error", "cancelled": "Cancelled", "unknown": "Unknown reason" },
"failureReasonTooltip": { "maxTurns": "Turn limit reached ({0}/{1} turns) — the worktree is usually fine; continue the task instead of resetting it." },
"planningBadge": { "active": "PLANNING", "finalized": "PLANNED" },
"taskRow": { "createdPrefix": "Created {0}", "stepsText": "{0}/{1} steps" },
"queue": { "baseDirtyWarning": "Heads up: this list's repo has uncommitted changes ({0} modified, {1} untracked) — a new worktree starts from the last commit and won't include them." },
"tasksIsland": { "completedHeader": "COMPLETED", "completedHeaderCount": "COMPLETED · {0}", "planningResumeFailed": "Couldn't resume planning session: {0}", "approveFailed": "Approve & merge failed: {0}", "cancelReviewFailed": "Cancel review failed: {0}", "sendToQueueFailed": "Send to queue failed: {0}", "queuePlanBlockedInteractive": "Can't queue the plan — {0} has an open interactive session and must be closed first.", "moveRunningRejected": "Can't move a running task to another list.", "moveWorktreeRejected": "Can't move — this task has an active worktree pointing at its current repo.", "moveRepoConfirm": "Different repos — {0} → {1}. Move the task anyway?", "moveConfirmUnavailable": "Can't move — the confirmation dialog isn't available.", "quickClaudeNoWorkingDir": "This list has no working directory configured.", "quickClaudeDirMissing": "Working directory no longer exists: {0}", "setStatusFailed": "Failed to update status: {0}", "cancelFailed": "Cancel failed: {0}", "rejectToQueueFailed": "Reject to queue failed: {0}", "rejectToIdleFailed": "Reject failed: {0}", "deleteTaskConfirm": "Delete \"{0}\"? This cannot be undone.", "deleteTaskFailed": "Delete failed: {0}", "toggleDoneFailed": "Couldn't update done state: {0}", "removeFromQueueFailed": "Remove from queue failed: {0}", "openWorktreeFailed": "Couldn't open worktree: {0}" },
"diff": { "loadFailed": "Failed to load diff: {0}", "noChanges": "No changes to show.", "unavailable": "Diff no longer available — commit range incomplete." },
"planningDiff": { "hubError": "Could not build combined preview (hub error).", "conflict": "Cannot build combined preview: subtask {0} conflicts with an earlier subtask ({1} files).", "buildFailed": "Could not build combined preview: {0}" },
"merge": { "commitMessage": "chore: merge {0}", "progressMerging": "Merging…", "progressVerifying": "Running the list's verify command… ({0})", "workerOfflineBranches": "Worker offline — cannot list branches.", "loadBranchesFailed": "Failed to load branches: {0}", "merged": "Merged.", "blocked": "Blocked: {0}", "verifyFailed": "Merge landed, but the list's verify command failed — the task was kept out of Done.", "untrackedCollision": "Merge refused — it would overwrite an untracked file in the target working directory.", "unknownStatus": "Unknown status: {0}", "mergeFailed": "Merge failed: {0}" },
"settingsModal": { "workerOffline": "Worker offline — settings read-only.", "saveFailed": "Save failed: {0}" },
"onlineInbox": { "workerOffline": "Worker offline — cannot load config.", "saved": "Config saved.", "saveFailed": "Save failed: {0}", "signedIn": "Signed in successfully.", "signedInNoRole": "Signed in, but this account is missing the 'user' role in Zitadel — online sync will be rejected until the role is granted in the ClaudeDo project.", "signInFailed": "Sign-in failed: {0}", "signedOut": "Signed out.", "signOutFailed": "Sign-out failed: {0}" },
"weeklyReport": { "invalidRange": "Invalid date range.", "error": "Error: {0}" },
"usageMonitor": {
"loadFailed": "Couldn't load usage data: {0}",
"refreshFailed": "Couldn't refresh usage: {0}",
"thresholdSaveFailed": "Couldn't save the threshold: {0}",
"installStarted": "Installing TokenTracker — watch the log strip for progress.",
"installFailed": "Couldn't install TokenTracker: {0}",
"analyticsRefreshFailed": "Couldn't refresh the analytics: {0}",
"dashboardFailed": "Couldn't open the TokenTracker dashboard: {0}",
"dashboardUnavailable": "the local dashboard server did not start"
},
"filesTab": { "workerOffline": "Worker offline.", "noneBundled": "No default agents bundled.", "allPresent": "All default agents already present.", "restored": "Restored {0} default agent(s).", "restoreFailed": "Restore failed: {0}", "resetToDefault": "Reset to the bundled default." },
"sessionSkillsTab": { "installed": "Installed: {0}", "installFailed": "Install failed: {0}", "updated": "Updated.", "updateFailed": "Update failed: {0}", "removed": "Removed.", "removeFailed": "Remove failed: {0}" },
"worktreesTab": { "workerOffline": "Worker offline.", "removed": "Removed {0} worktree(s).", "blocked": "Cannot force-remove: {0} task(s) still running. Cancel them first.", "removedFrom": "Removed {0} worktree(s) from {1} task(s).", "cleanupFailed": "Cleanup failed: {0}", "resetFailed": "Reset failed: {0}" },
"worktreesOverview": { "titleAll": "Worktrees", "titleList": "Worktrees — {0}", "listFallback": "list", "cleanupFailed": "Cleanup failed.", "cleanupFailedDetailed": "Cleanup failed: {0}", "removed": "Removed {0} worktree(s).", "discardConfirm": "Discard the worktree for \"{0}\"? Uncommitted work will be lost.", "discardFailed": "Failed to discard worktree.", "keepFailed": "Failed to keep worktree.", "cannotForceRunning": "Cannot force-remove a running task.", "forceRemoveFailed": "Force remove failed.", "forceRemoveFailedDetailed": "Force remove failed: {0}", "batchDone": "Merged {0}, {1} need resolution.", "openInExplorerFailed": "Couldn't open path: {0}" },
"listSettings": { "untitled": "Untitled" },
"detailsIsland": { "verifyFailed": "Merge landed, but the list's verify command failed — the task was kept out of Done.", "untrackedCollision": "Merge refused — it would overwrite an untracked file in the target working directory.", "stopOffline": "Worker offline — can't stop the task.", "stopFailed": "Stop failed: {0}", "enqueueFailed": "Queue failed: {0}", "dequeueFailed": "Remove from queue failed: {0}", "resetAndRetryFailed": "Reset & retry failed: {0}", "toggleDoneFailed": "Couldn't update done state: {0}" },
"mergeSection": { "openWorktreeFailed": "Couldn't open worktree: {0}" },
"about": { "openPathFailed": "Couldn't open path: {0}" },
"lists": { "localSuffix": "{0} / local", "smartMyDay": "My Day", "smartImportant": "Important", "smartPlanned": "Planned", "virtualQueue": "Queue", "virtualRunning": "Running", "virtualReview": "Review", "newList": "New list", "findingsNotFound": "No findings yet for this list.", "findingsOpenFailed": "Couldn't open findings folder: {0}", "openInExplorerFailed": "Couldn't open path: {0}" },
"repoImport": { "loadFailed": "Couldn't load remembered folders: {0}", "saveFailed": "Couldn't save folders: {0}" }
},
"ops": {
"stalledHint": "Still running — worker hasn't responded in a while",
"merge": {
"merging": "Merging…",
"verifying": "Running the list's verify command… ({0})"
},
"diff": {
"parsing": "Parsing diff…"
},
"review": {
"submitting": "Submitting for review…",
"rejecting": "Rejecting…",
"parking": "Parking…",
"previewing": "Loading preview…"
},
"worktrees": {
"refreshing": "Refreshing…",
"cleaningUp": "Cleaning up finished worktrees…",
"resetting": "Resetting worktree…",
"forceRemoving": "Force-removing worktree…",
"batchMerging": "Merging {0}/{1}…"
},
"skills": {
"installing": "Cloning skill…",
"updating": "Updating skill…",
"restoringDefaults": "Restoring default agents…"
},
"repoImport": {
"scanning": "Scanning repositories…"
},
"updateCheck": {
"checking": "Checking for updates…"
},
"reports": {
"generatingWeekly": "Generating report…",
"runningDailyPrep": "Running daily prep…"
},
"planning": {
"finalizing": "Finalizing plan…",
"queuingSubtasks": "Queuing subtasks…"
},
"worker": {
"startupRecovery": "Recovering…",
"creatingWorktree": "Creating worktree…",
"rebasingAfterMerge": "Rebasing other worktrees…"
}
},
"usage": {
"pill": {
"empty": "Usage ",
"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": "Blocked: {0}",
"stale": "stale (as of {0})",
"lastError": "Last error: {0}",
"throttled": "Throttled: {0}/{1} slots ({2})"
}
},
"checks": {
"git": {
"title": "Git",
"hint": "Install Git from https://git-scm.com/downloads, then restart the installer."
},
"gitIdentity": {
"title": "Git identity",
"hint": "Run: git config --global user.name \"Your Name\" and git config --global user.email \"you@example.com\""
},
"ports": {
"title": "Ports",
"hint": "Change the SignalR/MCP ports on the Service page, or stop the process using them."
},
"writeAccess": {
"title": "Write access",
"hint": "Choose a different install directory, or run the installer with sufficient permissions (e.g. as administrator)."
},
"claudeCli": {
"title": "Claude CLI",
"hint": "Install the Claude CLI (npm install -g @anthropic-ai/claude-code), then restart your terminal/login session so the updated PATH takes effect."
},
"claudeVersion": {
"title": "Claude CLI version",
"hint": "Update the CLI: npm update -g @anthropic-ai/claude-code"
},
"claudeAuth": {
"title": "Claude CLI login",
"hint": "Run 'claude' once and complete the login flow."
},
"permissionModeAuto": {
"title": "--permission-mode auto support",
"hint": "Update the CLI: npm update -g @anthropic-ai/claude-code. ClaudeDo still works in acceptEdits/default mode, with more prompts."
}
}
}