{
  "metadata": { "code": "en", "name": "English" },
  "settings": {
    "title": "SETTINGS",
    "save": "Save",
    "cancel": "Cancel",
    "language": "Language",
    "tabGeneral": "General",
    "tabWorktrees": "Worktrees",
    "tabFiles": "Files",
    "tabPrime": "Prime Claude",
    "general": {
      "defaultInstructions": "Default instructions",
      "defaultInstructionsPlaceholder": "Baseline instructions applied to every task",
      "model": "Model",
      "maxTurns": "Max turns",
      "permission": "Permission",
      "maxParallelExecutions": "Max parallel executions",
      "maxParallelExecutionsHint": "How many queued tasks the worker runs at once.",
      "reportExcludedPaths": "Report: excluded paths (one per line)",
      "standupWeekday": "Standup weekday",
      "weekdaySunday": "Sunday",
      "weekdayMonday": "Monday",
      "weekdayTuesday": "Tuesday",
      "weekdayWednesday": "Wednesday",
      "weekdayThursday": "Thursday",
      "weekdayFriday": "Friday",
      "weekdaySaturday": "Saturday"
    },
    "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.",
      "removeAll": "Remove All"
    },
    "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",
      "openInEditor": "Open in editor"
    },
    "prime": {
      "description": "Prime your Claude usage window by firing a single non-interactive ping 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, the ping fires immediately.",
      "addSchedule": "+ Add schedule",
      "removeScheduleTip": "Remove schedule",
      "dailyPrepMaxTasks": "Max tasks per day",
      "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"
    },
    "agentEditor": {
      "model": "Model",
      "maxTurns": "Max turns",
      "systemPrompt": "System prompt (appended)",
      "promptPrepended": "Prepended automatically:",
      "agentFile": "Agent file",
      "browse": "Browse..."
    }
  },
  "tasks": {
    "showCompletedTip": "Show completed",
    "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",
    "ctxRunInteractively": "Run interactively",
    "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",
    "approve": "Approve",
    "approveTip": "Approve — mark Done",
    "reject": "Reject",
    "rejectTip": "Reject with feedback and re-run",
    "park": "Park",
    "parkTip": "Send back to Idle for manual editing",
    "cancel": "Cancel",
    "cancelTip": "Cancel this task",
    "removeFromQueueTip": "Remove from queue",
    "toggleSubtasksTip": "Expand / collapse subtasks",
    "agentSuggestedTip": "Suggested by the agent",
    "scheduleTitle": "Schedule task",
    "scheduleWhen": "WHEN",
    "scheduleConfirm": "Schedule",
    "rejectRerunTitle": "Reject & re-run",
    "reviewTitle": "Review",
    "feedbackLabel": "FEEDBACK FOR THE AGENT",
    "feedbackPlaceholder": "What should the agent fix?",
    "rerun": "Re-run",
    "refineTip": "Refine this task with Claude"
  },
  "lists": {
    "heading": "Lists",
    "searchPlaceholder": "Search tasks…",
    "searchKbd": "Ctrl K",
    "settingsTip": "Settings",
    "smartListsLabel": "SMART LISTS",
    "myListsLabel": "MY LISTS",
    "contextSettings": "Settings...",
    "contextWorktrees": "Worktrees…",
    "contextOpenExplorer": "Open in Explorer",
    "contextOpenTerminal": "Open in Terminal",
    "newList": "New list",
    "addReposTip": "Add repos as lists"
  },
  "details": {
    "deleteTaskTip": "Delete task",
    "killSessionTip": "Kill the running session",
    "closeTip": "Close",
    "copyTaskIdTip": "Copy task ID",
    "starTip": "Star",
    "agentSettingsTip": "Agent settings",
    "agentSettingsHeading": "Agent settings (overrides)",
    "mergeLabel": "MERGE",
    "mergeTargetLabel": "Merge target",
    "reviewCombinedDiff": "Review combined diff",
    "mergeAllSubtasks": "Merge all subtasks",
    "childOutcomesLabel": "IMPROVEMENTS",
    "stepsLabel": "STEPS",
    "addStepPlaceholder": "Add a step...",
    "detailsLabel": "DETAILS",
    "copyDescriptionTip": "Copy description to clipboard",
    "copyFormattedTip": "Copy title, description and open steps",
    "toggleEditPreviewTip": "Toggle edit/preview",
    "previewBtn": "Preview",
    "editBtn": "Edit",
    "descriptionPlaceholder": "Add task details (markdown supported)...",
    "prepTitle": "Daily prep",
    "planDay": "Plan day",
    "prepEmpty": "No prep run today yet — click Plan day",
    "attachments": {
      "sectionLabel": "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}",
      "selectIdleTask": "Select an idle task first"
    },
    "sections": {
      "description": "Description",
      "steps": "Steps",
      "files": "Files"
    }
  },
  "agent": {
    "stopTip": "Stop agent",
    "sendToQueue": "Send to queue",
    "sendToQueueTip": "Queue this task for the worker to pick up",
    "removeFromQueue": "Remove from queue",
    "removeFromQueueTip": "Take this task back out of the queue",
    "worktreeLabel": "WORKTREE",
    "copyPathTip": "Copy path",
    "diffLabel": "DIFF",
    "openDiff": "Open diff",
    "worktreeBtn": "Worktree",
    "openWorktreeTip": "Open worktree in file explorer",
    "continue": "Continue",
    "continueTip": "Resume the last session and keep going",
    "resetAndRetry": "Reset & retry",
    "resetAndRetryTip": "Discard the worktree and re-queue the task to run from scratch"
  },
  "notes": {
    "today": "Today",
    "add": "Add",
    "newNotePlaceholder": "New note…",
    "save": "Save",
    "delete": "Delete"
  },
  "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"
  },
  "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"
    },
    "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",
      "sectionAgent": "AGENT",
      "resetAgentSettings": "Reset agent settings"
    },
    "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"
    },
    "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)"
    },
    "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”."
    }
  },
  "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."
    },
    "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"
    },
    "settings": {
      "removeUserData": "Remove user data (tasks, logs, configs in ~/.todo-app)",
      "uninstall": "Uninstall",
      "repair": "Repair",
      "save": "Save",
      "close": "Close"
    },
    "selfUpdate": {
      "heading": "A newer installer is available",
      "update": "Update",
      "continueAnyway": "Continue anyway"
    }
  },
  "planning": {
    "conflict": {
      "windowTitle": "Merge conflict",
      "modalTitle": "MERGE CONFLICT",
      "openInVsCode": "Open all in VS Code",
      "resolved": "I've resolved — continue",
      "abort": "Abort this merge"
    },
    "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…",
      "about": "About…",
      "addRepos": "Add repos as lists…"
    },
    "update": {
      "available": "Update available: v",
      "updateNow": "Update now",
      "dismiss": "Dismiss"
    }
  },
  "vm": {
    "connection": { "online": "Online", "connecting": "Connecting…", "offline": "Offline" },
    "shell": { "restartingWorker": "Restarting worker…" },
    "agentStatus": { "idle": "Idle", "queued": "Queued", "running": "Running", "review": "Review", "children": "Waiting for Improvements", "done": "Done", "failed": "Failed", "cancelled": "Cancelled" },
    "taskStatus": { "idle": "Idle", "queued": "Queued", "running": "Running", "waitingForReview": "Waiting for Review", "waitingForChildren": "Waiting for Improvements", "done": "Done", "failed": "Failed", "cancelled": "Cancelled", "parked": "Parked" },
    "planningBadge": { "active": "PLANNING", "finalized": "PLANNED" },
    "taskRow": { "createdPrefix": "Created {0}", "stepsText": "{0}/{1} steps" },
    "tasksIsland": { "completedHeader": "COMPLETED", "completedHeaderCount": "COMPLETED · {0}", "runInteractiveFailed": "Run interactively failed: {0}", "planningOpenFailed": "Couldn't open planning session: {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)." },
    "merge": { "commitMessage": "Merge task: {0}", "workerOfflineBranches": "Worker offline — cannot list branches.", "loadBranchesFailed": "Failed to load branches: {0}", "merged": "Merged.", "conflict": "Merge conflict — target branch restored. Resolve manually or via Continue, then retry.", "blocked": "Blocked: {0}", "unknownStatus": "Unknown status: {0}", "mergeFailed": "Merge failed: {0}" },
    "conflictResolution": { "vsCodeError": "Could not launch VS Code: {0}. Paths are listed above — copy them manually.", "subtaskPrefix": "Conflicts in subtask: {0}", "targetPrefix": "Merging into: {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.", "generating": "Generating report…", "error": "Error: {0}" },
    "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}", "openFailed": "Open 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)." },
    "worktreesOverview": { "titleAll": "Worktrees", "titleList": "Worktrees — {0}", "listFallback": "list", "cleanupFailed": "Cleanup failed.", "removed": "Removed {0} worktree(s).", "discardFailed": "Failed to discard worktree.", "keepFailed": "Failed to keep worktree.", "cannotForceRunning": "Cannot force-remove a running task.", "forceRemoveFailed": "Force remove failed.", "batchProgress": "Merging {0}/{1}…", "batchDone": "Merged {0}, {1} need resolution." },
    "listSettings": { "untitled": "Untitled" },
    "lists": { "localSuffix": "{0} / local", "smartMyDay": "My Day", "smartImportant": "Important", "smartPlanned": "Planned", "virtualQueue": "Queue", "virtualRunning": "Running", "virtualReview": "Review", "newList": "New list" }
  }
}
