Files
AgentHub/client/src/i18n/locales/en/lanes.json
T
nntrivi2001 26952ae0d9 feat: avatar by link, loaded by the browser; Files nests workspaces under owners' homes
- POST /api/me/avatar/url stores the https link (users.avatar_link) instead
  of downloading it; GET /api/me/avatar and /api/users/:id/avatar answer 302
  to it (no referrer). Link rules: https, no userinfo, <= 2048 chars, no
  localhost or private/reserved IP literal. Upload and link replace each other.
- Settings -> Account first loads the link as an embedded image and refuses
  one this browser cannot show: a picture behind a login (Mattermost's
  /api/v4/users/<id>/image) gets no cookie cross-site and 401s.
- Files sidebar: each workspace under its owner's home, chevrons remembered
  per browser (agenthub.files.homesOpen); ownerless ones stay flat.
2026-10-22 14:34:50 +07:00

661 lines
37 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.
{
"action.reset": "reset worktree",
"actionError": "Workspace action failed: {{message}}",
"actionErrorUnknown": "Unknown error",
"add": "Add workspace",
"addLane": "Create a workspace from a working directory",
"addLaneBaseLabel": "Branch to fork from",
"addLaneBranchBusy": "{{branch}} — already checked out at {{path}}",
"addLaneBranchExistingHint": "The worktree checks this branch out as it is — no new branch, no base.",
"addLaneBranchExistingLabel": "Branch to check out",
"addLaneBranchHintAuto": "Leave empty to let the server name the branch from the title.",
"addLaneBranchLabel": "New branch name",
"addLaneBranchModeCurrent": "Current branch",
"addLaneBranchModeCurrentHint": "Work straight on this repo's checked-out branch (main) — no worktree, no fork. Switches to Repo mode.",
"addLaneBranchModeExisting": "Existing branch",
"addLaneBranchModeNew": "New branch",
"addLaneBranchPlaceholder": "Automatic — named from the title",
"addLaneNoBranches": "This repo has no commits yet, so a worktree has nothing to branch from. Add it as a Repo workspace: commit first, then publish it from the Changes panel.",
"addLaneNoBranchesUseRepo": "Use as a Repo workspace",
"addLaneNoFreeBranches": "Every branch in this repo is already checked out in a worktree. Create a new branch instead.",
"addLaneExists": "This folder already has a workspace: #{{id}} {{title}}. It is selected; pick another folder to add a new one.",
"addLaneNotARepo": "Not a git repository (or no read access) yet.",
"addLaneProvisionFailed": "Worktree provisioning failed or timed out — the workspace exists but auto-setup was skipped. Check the workspace's git facts, then run agents/mcp setup manually.",
"addLaneRepoHint": "An existing git repo. The dashboard creates a new worktree for the workspace, not a folder you pick.",
"addLaneRepoHintAdopt": "An existing directory. The dashboard tracks it as-is — no worktree, no new branch.",
"addLaneRepoLabel": "Source repository",
"addLaneRepoLabelAdopt": "Directory",
"addLaneSetupClose": "Close",
"addLaneSetupMcp": "MCP servers",
"addLaneSetupProfile": "Profile",
"addLaneSetupTitle": "Setup",
"addLaneTitleLabel": "Title",
"addLaneTitlePlaceholder": "Optional",
"addLaneNoTools": "No AI tool is installed and enabled.",
"addLaneNoToolsLink": "Open Settings → AI Tools",
"addLaneWorktreeDetached": "(detached)",
"addLaneWorktreesMore": "+{{count}} more",
"addLaneWorktreesTitle": "Worktrees of this repo ({{count}})",
"browse.button": "Browse",
"browse.empty": "This folder is empty.",
"browse.fileTitle": "Browse for a file",
"browse.select": "Select this folder",
"browse.back": "Back (Alt+←)",
"browse.create": "Create",
"browse.editPath": "Type a path (Ctrl+L)",
"browse.filter": "Filter…",
"browse.forward": "Forward (Alt+→)",
"browse.hint": "Double-click or Enter opens · Backspace goes up · type to jump",
"browse.home": "Home",
"browse.modified": "Modified",
"browse.name": "Name",
"browse.newFolder": "New folder",
"browse.newFolderName": "Folder name",
"browse.noMatch": "Nothing matches the filter.",
"browse.places": "Places",
"browse.recent": "Recent",
"browse.selectFile": "Select file",
"browse.showHidden": "Show hidden",
"browse.hostFolder": "Server folder",
"browse.hostFolderHint": "Browse the server account's own folder ({{path}}). A workspace there runs as the shared server account, which every admin uses — not as your own.",
"browse.up": "Up one level (Backspace)",
"browse.workspaces": "Workspaces",
"browse.title": "Browse for a folder",
"changes.back": "All files",
"changes.bin": "bin",
"changes.binary": "Binary file — not shown.",
"changes.collapse": "Collapse the changes panel",
"changes.closeRepo": "Close repository",
"changes.closeOtherRepos": "Close other repositories",
"changes.collapseAll": "Collapse every file",
"changes.collapseAllFolders": "Collapse all folders",
"changes.collapseContext": "Show fewer surrounding lines",
"changes.collapseFile": "Collapse {{path}}",
"changes.commitPlaceholder": "Commit message",
"changes.suggestMessage": "Suggest a commit message with AI (Claude, ticked files)",
"changes.conflicted": "conflict",
"changes.discard": "Discard this file's changes",
"changes.discardConfirm": "Click again to discard — this cannot be undone",
"changes.empty.branch": "This branch matches its base.",
"changes.empty.commit": "This commit changed no files.",
"changes.empty.work": "Nothing uncommitted.",
"changes.expand": "Show the changes panel",
"changes.expandAll": "Expand every file",
"changes.expandAllFolders": "Expand all folders",
"changes.download": "Download",
"changes.upload": "Upload files to the workspace root",
"changes.uploadHere": "Upload files here…",
"changes.uploaded_one": "Uploaded {{count}} file to {{dir}}",
"changes.uploaded_other": "Uploaded {{count}} files to {{dir}}",
"changes.uploadFailed": "Could not upload {{name}}: {{message}}",
"changes.expandContext": "Show more surrounding lines",
"changes.expandFile": "Expand {{path}}",
"changes.fileGone": "That file no longer has changes in this range.",
"changes.fileTruncated": "Diff cut short — open the file in an editor for the rest.",
"changes.commentLine": "Comment on line {{n}} — pasted into this workspace's pane",
"changes.commentOn": "Comment on {{at}} — pasted into the pane you used last; nothing is sent until you press Enter there",
"changes.commentSend": "Paste into pane",
"changes.addToChat": "Add to Chat",
"changes.commentCancel": "Cancel",
"changes.commentNoPane": "No terminal of this workspace is on screen — open its session (or narrow the Changes panel) first",
"changes.layout.split": "Side-by-side",
"changes.layout.unified": "Unified",
"changes.loading": "Reading the working copy…",
"changes.mode.browse": "Files",
"changes.mode.history": "History",
"changes.mode.overview": "Changes",
"changes.mode.review": "Review",
"changes.noCommits": "No commits yet.",
"changes.noHunks": "No textual change.",
"changes.noMatches": "No tracked file matches.",
"changes.openFile": "Open {{path}}",
"changes.quickOpen": "Find a file by path…",
"changes.range.branch": "Compared to {{base}}",
"changes.range.baseBranch": "base branch",
"changes.range.branchHint": "{{base}}...HEAD — everything this branch adds on top of {{base}}",
"changes.range.work": "Uncommitted",
"changes.range.workHint": "Working tree vs HEAD — what has been touched and not committed",
"changes.refresh": "Refresh",
"changes.size.full": "Full screen",
"changes.restore": "Restore size",
"changes.fileCount_one": "{{count}} file",
"changes.fileCount_other": "{{count}} files",
"changes.dropEdits": "Discard your unsaved edits to this file?",
"changes.stage": "Stage this file",
"changes.title": "Changes",
"changes.truncated": "Some changes were left out to keep this panel responsive.",
"changes.unavailable": "This workspace's directory is not a readable git repository.",
"changes.unavailableFolder": "This folder is not a readable git repository.",
"changes.unstage": "Unstage this file",
"changes.changesView": "Changes",
"changes.wholeFile": "Whole file",
"destructive.blocked.adopted": "This is an adopted directory and cannot be changed by a worktree action.",
"destructive.blocked.missing": "The workspace directory is missing, so this action cannot continue.",
"destructive.blocked.unreadable": "The workspace directory cannot be read as a Git worktree, so this action cannot continue.",
"destructive.cancel": "Cancel",
"destructive.count.bytesEstimate": "Estimated space freed",
"destructive.count.dirty": "Modified files",
"destructive.count.events": "Events",
"destructive.count.head": "HEAD",
"destructive.count.sessions": "Sessions",
"destructive.count.tokenRows": "Token rows",
"destructive.count.unpushed": "Unpushed commits",
"destructive.count.untracked": "Untracked files",
"destructive.force": "I understand these unpushed commits will be discarded.",
"destructive.loading": "Loading current facts…",
"destructive.notice.activeSessionSkipped": "One or more sessions in this workspace are still active and will be kept, not purged.",
"destructive.notice.adopted": "This workspace points at a directory you own. Only the dashboard's record of it is dropped — the directory and its files are left untouched.",
"destructive.notice.missing": "The workspace directory is already gone. Deleting the workspace drops the dashboard's record only; nothing on disk and no Git record is touched.",
"destructive.notice.unreadable": "The workspace directory cannot be read as a Git worktree. That changes nothing here: only the dashboard's record is deleted, the directory is never touched.",
"destructive.purge.confirm": "Purge history",
"destructive.purge.message": "Approve the current counts before deleting stored session history.",
"destructive.purge.title": "Purge workspace history?",
"destructive.remove.confirm": "Delete workspace record",
"destructive.remove.message": "Only the dashboard's record of this workspace is deleted. Its working tree, its branch and its database are left exactly as they are — delete them yourself if you want them gone.",
"destructive.remove.title": "Delete workspace record?",
"destructive.reset.confirm": "Reset worktree",
"destructive.reset.message": "Approve the current counts before resetting this worktree.",
"destructive.reset.survives": "Gitignored files such as node_modules and .env are kept; untracked files are deleted.",
"destructive.reset.title": "Reset managed worktree?",
"destructive.warning.no-remote": "No Git remote is configured, so nothing here is backed up remotely. You can still proceed.",
"features.archived": "archived",
"features.live": "Live",
"features.viewingArchived": "Viewing archived feature \"{{slug}}\" — the workspace keeps running; this is a read-only snapshot.",
"git.filesHeading_one": "{{count}} file changed",
"git.filesHeading_other": "{{count}} files changed",
"git.filesMore_one": "… and {{count}} more file",
"git.filesMore_other": "… and {{count}} more files",
"git.noDelta": "new",
"git.uncommitted": "{{dirty}} modified · {{untracked}} untracked",
"gitBar.branchCreate": "Create",
"gitBar.branchCreateHint": "Create this branch without switching to it",
"gitBar.branchDelete": "Delete",
"gitBar.branchDeleteHint": "Delete the selected branch (refused if it has unmerged commits)",
"gitBar.branchNewPlaceholder": "New branch name…",
"gitBar.fetch": "Fetch",
"gitBar.fetchHint": "git fetch --all --prune",
"gitBar.errNoRemote": "No remote to push to or pull from. Add one, or set this branch's upstream, in a terminal.",
"gitBar.inSync": "in sync",
"gitBar.newLane": "New workspace here",
"gitBar.newLaneHeld": "Already checked out at {{path}} — git allows one worktree per branch",
"gitBar.newLaneHint": "Open Add workspace for a sibling worktree on the selected branch",
"gitBar.noCommits": "no commits yet",
"gitBar.noUpstream": "not pushed",
"gitBar.publish": "Publish…",
"gitBar.publishApply": "Publish",
"gitBar.publishBranch": "Publish branch",
"gitBar.publishBranchHint": "git push -u origin HEAD — this branch has no upstream yet",
"gitBar.publishHint": "Add a remote named origin and push this branch to it (git remote add origin + git push -u origin HEAD)",
"gitBar.publishUrl": "Remote URL: https://host/owner/repo.git or git@host:owner/repo.git",
"gitBar.pull": "Pull",
"gitBar.pullHint": "git pull --ff-only — refuses instead of merging when the branch has diverged",
"gitBar.push": "Push",
"gitBar.nothingToPush": "Nothing to push — {{upstream}} already has every commit.",
"gitBar.pushHint": "git push -u origin HEAD",
"gitBar.switch": "Branch",
"gitBar.switchApply": "Switch branch",
"gitBar.switchCurrent": "current",
"gitBar.switchDirty": "Commit or discard the uncommitted changes first",
"gitBar.switchHint": "Switch this worktree to another local branch",
"gitBar.switchLabel": "Switch branch…",
"gitBar.unbornHint": "Commit first, then publish this repo to a remote.",
"locks.held_one": "{{count}} lock held",
"locks.held_other": "{{count}} locks held",
"mode.repo": "Repo",
"mode.repoHint": "Adopt this directory as a workspace, as-is — no worktree, no new branch.",
"mode.worktree": "Worktree",
"mode.worktreeHint": "Provision a new git worktree + branch from a source repo.",
"mode.clone": "Clone",
"mode.cloneHint": "Clone a repository over HTTPS or SSH into one of your folders, as a new workspace.",
"clone.urlLabel": "Repository URL",
"clone.urlHint": "https://host/owner/repo.git, git@host:owner/repo.git or ssh://… — SSH uses your own key (Settings → Git).",
"clone.parentLabel": "Clone into folder",
"clone.parentHint": "The repository is cloned to {{path}}",
"clone.nameLabel": "Folder name",
"clone.cloning": "Cloning…",
"clone.loginNeeded": "{{host}} needs a login: your username and a password or access token.",
"clone.loginRejected": "{{host}} rejected that username or token.",
"clone.username": "Username",
"clone.token": "Password or access token",
"clone.remember": "Remember this login for my account",
"clone.sshRefused": "{{host}} refused the SSH login. Add your public key to that host, or make one in Settings → Git.",
"clone.sshSettings": "Open Settings → Git",
"clone.partial": "Partial clone (faster for big repos)",
"clone.partialHint": "Downloads every commit but a file's contents only when it is checked out (--filter=blob:none). Checking out an old revision later fetches from the remote.",
"clone.queued": "Waiting in the clone queue — #{{position}} of {{waiting}} ({{running}}/{{limit}} clones running)",
"clone.connecting": "Connecting…",
"clone.phase.remote": "Server preparing",
"clone.phase.receiving": "Downloading",
"clone.phase.resolving": "Unpacking",
"clone.phase.checkout": "Writing files",
"clone.sshNoKey": "Not cloned: your account has no SSH key yet. Make one in Settings → Git, add its public key to {{host}}, then retry.",
"moreActions": "More actions",
"pipelinePicker.label": "Pipeline template",
"pipelinePicker.stageMismatch": "Stage \"{{stage}}\" matches no node in \"{{pipeline}}\" — declare one of: {{nodes}}",
"preflightError": "Could not load the current workspace facts.",
"preflightErrorWithMessage": "Could not load the current workspace facts: {{message}}",
"proof.ticketReport": "Task report",
"renameLabel": "Rename this workspace",
"proxy.native": "Native ({{tool}})",
"proxy.label": "AI Proxy",
"runtime.down": "down",
"runtime.healthy": "healthy",
"runtime.partial": "partial",
"runtime.slot": "slot {{slot}}",
"runtime.steppedAsideTitle": "Stepped aside from {{expected}}, which was already in use",
"status.failed": "failed",
"status.idle": "idle",
"status.provisioning": "provisioning",
"status.running": "running",
"title": "Workspaces",
"worktrees.heading_one": "{{count}} worktree",
"worktrees.heading_other": "{{count}} worktrees",
"changes.undoHunk": "Undo this hunk",
"changes.undoHunkConfirm": "Click again to undo this hunk — this cannot be undone",
"changes.undoHunkShort": "Undo",
"changes.undoHunkShortConfirm": "Confirm undo",
"changes.edit": "Edit",
"changes.save": "Save",
"changes.revertBlock": "Revert",
"changes.blockNotInDiff": "That change is no longer in git's diff; refresh and retry",
"changes.cancelEdit": "Cancel",
"changes.preview": "Preview",
"changes.raw": "Raw",
"changes.editorLabel": "Edit {{path}}",
"changes.prevHunk": "Previous change",
"changes.nextHunk": "Next change",
"changes.hunkOf": "{{n}} of {{total}}",
"changes.noEditBinary": "Binary file — not editable here",
"changes.imageFailed": "Could not show this image (deleted, or larger than 20 MB).",
"changes.noEditTooBig": "Too large to edit here (over 1 MB)",
"changes.noEdit": "Not editable here",
"gitBar.loginTitle": "Git needs a login for {{host}}",
"gitBar.loginRejected": "The server rejected that username or token.",
"gitBar.loginUser": "Username",
"gitBar.loginPassword": "Password or access token",
"gitBar.loginRemember": "Remember for everyone using this AgentHub",
"gitBar.loginTokenHint": "On Gitea: Settings → Applications → Generate token, with repository read/write.",
"gitBar.loginInsecure": "This dashboard is on plain http — the token crosses the network unencrypted.",
"gitBar.loginSubmit": "Log in and retry",
"gitBar.loginCancel": "Cancel",
"gitBar.merge": "Merge into current",
"gitBar.mergeHint": "Merge the selected branch into the branch this workspace is on",
"gitBar.mergeUpstream": "Merge {{upstream}}",
"gitBar.mergeUpstreamHint": "The branch has diverged from its upstream: merge it in (conflicts are resolved in the Changes panel)",
"gitBar.mergeConfirm": "Merge {{branch}} into {{current}}? Files in this workspace change now — if an agent is working in this workspace, let it finish first.",
"gitBar.pushConfirm": "Push {{count}} commit(s) from {{branch}} to {{upstream}}? Anyone with access to the remote will see them, and a push cannot be taken back from here.",
"gitBar.publishBranchConfirm": "Publish branch {{branch}} to the remote? Anyone with access to the remote will see it.",
"gitBar.publishConfirm": "Add {{url}} as this repo's remote and push {{branch}} to it? Anyone with access to that remote will see the code.",
"gitBar.branchDeleteConfirm": "Delete the local branch {{branch}}? Git refuses if it holds commits merged nowhere else.",
"gitBar.mergeConflicts": "Merge stopped on {{count}} conflicted file(s) — resolve them in the list below.",
"gitBar.merging": "A {{op}} is in progress: finish or abort it first",
"changes.conflictsGroup": "Merge conflicts",
"changes.mergeBanner": "A {{op}} is in progress — {{count}} file(s) still conflicted",
"changes.mergeReady": "A {{op}} is in progress — every conflict is resolved",
"changes.mergeCommit": "Complete {{op}}",
"changes.mergeAbort": "Abort {{op}}",
"changes.mergeAbortConfirm": "Click again to abort the {{op}}",
"changes.discardShortConfirm": "Discard?",
"changes.amend": "Amend",
"changes.amendPushed": "The last commit is already pushed; amending it would rewrite shared history. Revert it from History instead.",
"changes.amendHint": "Fold the ticked files into the last commit (only before it is pushed). Nothing ticked rewords it; leave the message empty to keep the old one.",
"changes.amendPlaceholder": "New message (empty = keep the old one)",
"changes.historyOf": "History of branch",
"changes.cherryPick": "Cherry-pick onto {{branch}}",
"changes.revertCommit": "Revert this commit",
"changes.undoCommit": "Undo commit (keep changes)",
"changes.undoCommitTitle": "Undo the last commit?",
"changes.undoCommitBody": "{{short}} \"{{subject}}\" is removed from the branch. Its changes stay staged, so you can edit them and commit again.",
"changes.undoCommitConfirm": "Undo commit",
"changes.undoCommitPushed": "The last commit is already on the remote branch (as of the last fetch); undoing it would rewrite shared history. Revert it instead — or Fetch first if the remote no longer has it.",
"changes.revertConfirm": "Add a commit on {{branch}} that undoes {{short}} \"{{subject}}\"? Files in this workspace change now.",
"changes.cherryPickConfirm": "Apply {{short}} \"{{subject}}\" from {{from}} onto {{branch}} as a new commit? Files in this workspace change now.",
"changes.amendTitle": "Amend the last commit?",
"changes.amendConfirm": "\"{{subject}}\" is replaced by a new commit with the staged changes folded in. The server refuses if it is already pushed.",
"changes.opConflicts": "The {{op}} stopped on {{count}} conflict(s) — resolve them in Changes",
"changes.opDone": "{{op}} done",
"changes.takeOurs": "Keep mine",
"changes.takeTheirs": "Take theirs",
"changes.markResolved": "Mark resolved (after editing out the markers)",
"conflict.left": "{{left}} of {{total}} conflicts left",
"conflict.prev": "Previous conflict",
"conflict.next": "Next conflict",
"conflict.allOurs": "Keep all mine",
"conflict.allTheirs": "Take all theirs",
"conflict.editByHand": "Edit by hand",
"conflict.unbalanced": "The conflict markers do not line up (edited by hand?) — use Edit by hand.",
"conflict.unusable": "This file cannot be shown here (binary or too large) — use Keep all mine / Take all theirs, or a terminal.",
"conflict.keepOurs": "Keep mine",
"conflict.takeTheirs": "Take theirs",
"conflict.keepBoth": "Keep both",
"conflict.chose.ours": "Kept mine",
"conflict.chose.theirs": "Took theirs",
"conflict.chose.both": "Kept both",
"conflict.undo": "Undo",
"conflict.ours": "Mine ({{label}})",
"conflict.theirs": "Theirs ({{label}})",
"conflict.reset": "Cancel",
"conflict.save": "Save and mark resolved",
"changes.takeOursHint": "Keep your version of the whole file",
"changes.takeTheirsHint": "Take the incoming version of the whole file",
"row.actions": "Workspace actions",
"row.hint": "Double-click to rename · drag or Alt+↑/↓ to reorder · right-click for actions",
"menu.rename": "Rename",
"menu.newHere": "New workspace here…",
"menu.copyPath": "Copy path",
"menu.reset": "Reset worktree…",
"menu.remove": "Delete workspace…",
"panel.changes": "Changes",
"panel.analyst": "Analyst",
"replay.placeholder": "Message to continue this session…",
"replay.hint": "Sending resumes the session in a free pane.",
"replay.send": "Send",
"sessions.resume": "Resume",
"resume.openPane": "Open pane",
"resume.hint": "Resume this session in a workspace pane — re-reads its whole transcript into context",
"resume.title": "Resume this session?",
"resume.body": "Resuming re-reads the session's whole transcript into the model's context, so its next turns pay for all of it again. It opens in the first free pane of {{workspace}}. To only read it, stay on this page.",
"resume.confirm": "Resume session",
"resume.fork": "Fork",
"resume.forkHint": "Continue from here as a NEW session — the original stays as it is",
"resume.forkTitle": "Fork this session?",
"resume.forkBody": "A fork re-reads the session's whole transcript into a NEW session (its own id), so its turns pay for all of it again; the original is left untouched. It opens in the first free pane of {{workspace}}.",
"resume.forkConfirm": "Fork session",
"tree.title": "Workspaces",
"tree.search": "Search workspaces and sessions",
"tree.toolFilter": "Filter by tool",
"tree.allTools": "All tools",
"tree.ownerYou": "{{name}} (you)",
"tree.noOwner": "No owner",
"tree.ownerToggle": "Show or hide {{name}}'s workspaces",
"tree.readOnly": "{{name}}'s workspace — read only. A session opens its analysis page.",
"tree.newSession": "New session",
"tree.noSessions": "No sessions yet",
"tree.transcriptHint": "No live pane — opens its conversation; a message you send resumes it",
"tree.splitHint": "Live pane — Ctrl/Cmd+click opens it in a split beside the focused pane",
"tree.renameSession": "Rename session",
"tree.archiveSession": "Archive — hide from this workspace (deletes nothing)",
"tree.pinSession": "Pin to the top of this workspace",
"tree.unpinSession": "Unpin",
"tree.pinned": "Pinned",
"tree.worktreeSession": "In its own worktree: .claude/worktrees/{{name}}",
"tree.archiveWorktreeTitle": "Archive and remove its worktree?",
"tree.archiveWorktreeBody": "Like Claude Desktop, archiving removes the session's worktree .claude/worktrees/{{name}} and its branch. Git refuses if it holds uncommitted changes, and a branch with commits merged nowhere is kept — nothing unsaved is lost.",
"tree.archiveWorktreeConfirm": "Archive and remove",
"tree.archived_one": "{{count}} archived session",
"tree.archived_other": "{{count}} archived sessions",
"tree.unarchive": "Unarchive",
"home.breadcrumb": "Workspaces",
"home.ai": "AI",
"home.openTerminal": "Open terminal",
"home.repoRoot": "Repository root",
"home.mainBranch": "Main worktree's branch",
"home.worktreeCount_one": "{{count}} worktree",
"home.worktreeCount_other": "{{count}} worktrees",
"home.placeholder": "How can I help you today?",
"home.start": "Start",
"home.permissionAuto": "Auto",
"home.permissionAcceptEdits": "Accept edits",
"home.permissionDefault": "Ask first",
"home.permissionPlan": "Plan",
"home.permissionBypass": "Bypass permissions",
"home.local": "Local",
"home.localHint": "Work in the workspace folder itself",
"home.worktree": "New worktree",
"home.worktreeHint": "Run this session in its own git worktree — <repo>/.claude/worktrees/, a branch of its own, made and cleaned up by Claude Code",
"home.allBusy": "All 10 sessions of this workspace are in use — stop one before starting another.",
"home.recents": "Recents",
"home.noRecents": "No sessions yet — start one above.",
"home.instructions": "Instructions",
"home.instructionsEmpty": "Add instructions to tailor how the agent works in this workspace. They are appended to every new session's system prompt.",
"home.edit": "Edit instructions",
"home.save": "Save",
"home.cancel": "Cancel",
"home.memory": "Memory",
"home.viewMemory": "View memory",
"home.memoryCount_one": "{{count}} file the agent reads",
"home.memoryCount_other": "{{count}} files the agent reads",
"home.memoryEmpty": "Memory shows here once the folder has a CLAUDE.md or AGENTS.md, or Claude saves memory for it.",
"home.context": "Context",
"home.contextEmpty": "Add PDFs, documents, or other text to reference in this workspace.",
"home.contextSnapshot": "Each file is copied when you add it — later edits to the original are not seen. Remove and add it again, or add its folder under Folder to always read the latest.",
"home.addFile": "Add files",
"home.folder": "Folder",
"home.ownFolder": "Workspace folder",
"home.addFolder": "Add folder",
"home.folderPath": "Absolute folder path",
"home.add": "Add",
"home.cloneFolders": "Or clone repositories",
"home.cloneHint": "One URL per line — each is cloned into {{path}} with your own git login (Settings → Git) and added here.",
"home.clonePlaceholder": "https://host/owner/repo.git\ngit@host:owner/other.git",
"home.cloneRun": "Clone",
"home.cloneRetry": "Retry the failed ones",
"home.cloneDone": "Added",
"home.cloneNeedSsh": "SSH links need an SSH key first — your account has none. Make one in Settings → Git and add its public key to {{hosts}} before cloning.",
"home.cloneNeedLogin": "No saved login for {{hosts}}. A private repository needs your username and an access token (or save one in Settings → Git).",
"home.cloneEnterLogin": "Enter a login",
"home.suggested": "Untracked worktrees",
"home.remove": "Remove",
"home.missing": "missing",
"home.unsupported": "{{tool}} cannot take instructions, context files or extra folders: they are kept, but its sessions start without them.",
"home.close": "Close",
"tabs.label": "Session tabs",
"tabs.new": "New tab",
"tabs.newTerminal": "New terminal",
"tabs.terminal": "Terminal",
"tabs.close": "Close tab (stops and archives its session)",
"tabs.full": "All 10 sessions are in use — stop one first",
"tabs.agentSettings": "Agent settings…",
"tabs.settings": "Settings",
"tabs.closeSettings": "Close Settings",
"tabs.splitHint": "Ctrl/Cmd+click: open in a split · drag onto a pane to place it",
"panes.drag": "Drag to move this pane — onto another pane's edge to split there, onto its middle to swap; hold it over another tab to open that tab",
"panes.drop.left": "Place on the left",
"panes.drop.right": "Place on the right",
"panes.drop.top": "Place on top",
"panes.drop.bottom": "Place below",
"panes.drop.swap": "Swap places",
"panes.drop.replace": "Show here — this pane moves to its own tab",
"panes.pick": "Show another session in this pane",
"panes.empty": "No session",
"panes.split.right": "Split right",
"panes.split.bottom": "Split down",
"panes.full": "A tab holds at most 4 panes",
"panes.newTerminal": "New terminal",
"panes.showChat": "Show as chat",
"panes.showTerminal": "Show the terminal",
"panes.close": "Move to its own tab (the session keeps running)",
"panes.resize": "Resize panes",
"tabs.home": "Workspace home",
"sessionMenu.open": "Open",
"sessionMenu.openSplit": "Open in split",
"sessionMenu.details": "Session details",
"sessionMenu.copyId": "Copy session ID",
"sessionMenu.archive": "Archive",
"sessionMenu.pin": "Pin",
"sessionMenu.unpin": "Unpin",
"panes.show": "Show {{name}} here",
"panes.splitNew.right": "Split right with a new terminal",
"panes.splitNew.bottom": "Split down with a new terminal",
"panes.closeShort": "Move to own tab",
"panes.stop": "Stop and archive session",
"panes.sleep": "Sleep session (stop, keep to resume later)",
"changes.copyPath": "Copy relative path",
"changes.viewCommit": "View commit",
"changes.copySha": "Copy commit SHA",
"changes.copySubject": "Copy commit message",
"replay.live": "This session is open in a tab — continue it there.",
"replay.noResume": "{{tool}} cannot resume a session by id, so this conversation is read-only here.",
"replay.newSession": "Start a new session",
"tabs.state.awaiting": "Waiting for you",
"tabs.state.error": "Error",
"tabs.state.running": "Running",
"tabs.renameHint": "Double-click to rename",
"tabs.stopTitle": "Stop “{{name}}”?",
"tabs.stopGroupTitle": "Stop the {{count}} sessions in this tab?",
"tabs.stopBody": "Stopping ends the session, even mid-turn, and archives it: it leaves this workspace's list (Unarchive brings it back). To keep it for later, use Sleep instead.",
"tabs.stopConfirm": "Stop session",
"tabs.sleep": "Sleep (stop, keep to resume later)",
"tabs.sleepTitle": "Sleep “{{name}}”?",
"tabs.sleepGroupTitle": "Sleep the {{count}} sessions in this tab?",
"tabs.sleepBody": "Sleep stops the session, even mid-turn, but keeps it in this workspace's list. Open it and send a message to resume it.",
"tabs.sleepConfirm": "Sleep",
"changes.loadMore": "Load more commits",
"changes.commentPasted": "Pasted into tab {{tab}} — press Enter there to send it",
"changes.splitter": "Resize the changes panel",
"tree.archiveLiveTitle": "Archive a live session?",
"tree.archiveLiveBody": "Its tab keeps running; archiving only hides it from this list. Unarchive it from the archived fold.",
"tree.state.awaiting": "waiting for you",
"tree.state.error": "error",
"tree.state.live": "live",
"tree.state.idle": "ended",
"tree.showMore_one": "Show {{count}} more",
"tree.showMore_other": "Show {{count}} more",
"tree.seeAll": "See all ({{count}} more)",
"tree.showLess": "Show less",
"home.contextPanel": "Workspace context",
"row.state.needsYou": "needs you",
"row.state.error": "error",
"row.state.running": "running",
"row.state.active": "active",
"row.state.idle": "idle",
"gitBar.done.fetch": "Fetched",
"gitBar.done.pull": "Pulled",
"gitBar.done.push": "Pushed",
"gitBar.done.publish": "Published",
"runtime.listening": "listening",
"runtime.notListening": "not listening",
"replay.pasted": "That session was already open in a tab — your message is pasted there; press Enter to send it.",
"replay.notPasted": "That session is open in a tab, but your message could not be pasted there: {{text}}",
"changes.changesGroup": "Changes",
"changes.unversionedGroup": "Unversioned Files",
"changes.commitTicked": "Commit ({{count}})",
"changes.commitAndPush": "Commit and Push",
"changes.discardAll": "Discard all",
"changes.discardAllTitle": "Discard all changes?",
"changes.discardAllConfirm": "Every change in {{count}} file(s) goes back to the last commit, and {{untracked}} new file(s) git does not track yet are deleted. This cannot be undone.",
"changes.amendAndPush": "Amend and Push",
"changes.pushFailed": "Committed, but the push failed: {{error}}",
"changes.tickFile": "Include {{path}} in the commit",
"changes.tickFolder": "Tick every file in {{path}}",
"changes.commitFile": "Commit File…",
"changes.jumpToSource": "Jump to Source",
"changes.copyPatch": "Copy as Patch to Clipboard",
"changes.noPatch": "This file has no text diff to copy",
"changes.addToVcs": "Add to VCS",
"changes.addToGitignore": "Add to .gitignore",
"changes.includeBlock": "Include this change in the commit",
"changes.prevDiff": "Previous difference (Shift+F7)",
"changes.nextDiff": "Next difference (F7)",
"changes.prevFile": "Previous file",
"changes.nextFile": "Next file",
"changes.showHistory": "Show History",
"changes.historyOfFile": "History of {{path}}",
"changes.historyWholeBranch": "Whole branch",
"changes.annotate": "Annotate",
"changes.noBlame": "Nothing to annotate: this file has no committed history yet",
"changes.notCommitted": "Not committed yet",
"fx.title": "Files",
"fx.workspace": "Workspace",
"fx.files": "Files",
"fx.trash": "Trash",
"fx.close": "Close",
"fx.up": "Parent folder",
"fx.refresh": "Refresh",
"fx.newFolder": "New folder",
"fx.newFile": "New file",
"fx.cloneRepo": "Clone repository",
"fx.cloneSubmit": "Clone",
"fx.cloned": "Cloned into {{path}} — opened as workspace “{{workspace}}”.",
"fx.uploadFiles": "Upload files",
"fx.uploadFolder": "Upload a folder",
"fx.download": "Download",
"fx.downloadZip": "Download as zip",
"fx.rename": "Rename",
"fx.copy": "Copy",
"fx.cut": "Cut",
"fx.paste": "Paste",
"fx.pasteInto": "Paste into this folder",
"fx.pasteFrom": "Paste {{count}} item(s) from {{workspace}}",
"fx.delete": "Move to Trash",
"fx.open": "Open",
"fx.location": "Location",
"fx.name": "Name",
"fx.size": "Size",
"fx.modified": "Modified",
"fx.empty": "This folder is empty — drop files here to upload.",
"fx.itemsCount": "{{count}} item(s)",
"fx.selectedCount": "{{count}} selected",
"fx.dropHint": "Drag files or folders here to upload · drag onto a folder to move (Ctrl: copy)",
"fx.uploading": "Uploading {{done}}/{{total}}…",
"fx.uploaded": "Uploaded {{count}} file(s).",
"fx.uploadFailed": "Could not upload {{name}}: {{message}}",
"fx.tooBig": "{{size}} is more than one upload may carry ({{max}}). Upload fewer files at a time.",
"fx.trashed": "Moved {{count}} item(s) to the Trash.",
"fx.copiedDone": "Copied {{count}} item(s) — open a folder (or another workspace) and Paste.",
"fx.cutDone": "Cut {{count}} item(s) — open a folder (or another workspace) and Paste.",
"fx.pasted": "Pasted.",
"fx.crossOnlyWorkspace": "These items can only be pasted where they came from (a session worktree, an extra folder, or between two homes).",
"fx.needsUpgrade": "This needs the updated server helper — ask an admin to run `agenthub server install-system` once.",
"fx.conflictTitle": "Already there",
"fx.conflictBody": "This name is taken in the destination: {{names}}",
"fx.conflictAll": "Do this for every remaining file",
"fx.cancel": "Cancel",
"fx.skip": "Skip",
"fx.keepBoth": "Keep both",
"fx.replace": "Replace",
"fx.trashHint": "Deleted files and folders, restorable for 7 days.",
"fx.emptyTrash": "Empty Trash",
"fx.restore": "Restore",
"fx.purge": "Delete forever",
"fx.restored": "Restored.",
"fx.trashEmpty": "The Trash is empty.",
"fx.trashOf": "{{name}}'s Trash",
"fx.myTrash": "My Trash",
"fx.trashAt": "Trash ({{name}})",
"fx.trashFoldersHint": "Each folder is one user's Trash — open it to restore or delete forever.",
"fx.trashFolderEmpty": "Empty",
"fx.openTrash": "Open Trash",
"fx.purged": "Deleted forever.",
"fx.emptyTrashTitle": "Empty the Trash?",
"fx.emptyTrashBody": "All {{count}} items in {{where}} will be deleted forever. This cannot be undone.",
"fx.purgeTitle": "Delete forever?",
"fx.purgeBody": "“{{name}}” in {{where}} will be deleted forever. This cannot be undone.",
"changes.openExplorer": "Open File Explorer — manage, upload and download files",
"changes.openInExplorer": "Open in File Explorer",
"fx.places": "Workspaces",
"fx.back": "Back",
"fx.forward": "Forward",
"fx.search": "Search (Ctrl+F)",
"fx.searchHere": "Search this folder…",
"fx.viewAs": "View as",
"fx.gridView": "Icons",
"fx.listView": "List",
"fx.new": "New",
"fx.upload": "Upload",
"fx.more": "More",
"fx.selectAll": "Select all",
"fx.showHidden": "Show hidden files (Ctrl+H)",
"fx.untitledFolder": "New folder",
"fx.untitledFile": "untitled.txt",
"fx.copyPath": "Copy path",
"fx.clearSelection": "Clear selection",
"fx.noMatch": "Nothing here matches.",
"fx.loading": "Loading…",
"fx.dropHere": "Drop to upload into {{folder}}",
"fx.nameField": "Name",
"fx.from": "From",
"fx.deletedAt": "Deleted",
"fx.unavailable": "The file manager is not available on this dashboard yet — it needs a restart after the update.",
"fx.noWorkspace": "There is no workspace yet. Add one first, then its files show here.",
"fx.myHome": "Home",
"fx.userHomes": "Users' homes",
"fx.users": "Users",
"fx.toggleWorkspaces": "Show or hide {{name}}’s workspaces",
"fx.readOnlyHome": "Another user's home — view and download only; their Trash can be restored or emptied",
"fx.readOnly": "Read-only",
"fx.readOnlyHint": "This is another user's home: you can view, copy and download, not change it.",
"fx.homeEmpty": "Nothing in your home yet — its hidden files (.bashrc, .claude…) are not shown here. Your workspaces are on the left.",
"tmuxUpgrade": "Upgrade tmux: {{advice}}"
}