c507d37baf
AI Router is a session's choice, not a workspace's: - an AI Router select beside the model picker in the workspace home and a pane's run form (RouterPicker.tsx; hidden off Claude/Codex or with only Native; last pick remembered in agenthub.session.router) - `router` on POST /api/lanes/:id/start and POST /api/run; Claude gets --settings=<data dir>/router-settings/<name>.json (0600, outranks project and user settings, key never in argv), Codex -p <name> + key via tmux -e - dashboard_runs.router; a resume naming none goes back to it - profile PATCH rewrites the session files, DELETE removes them - gone: POST /api/lanes/:id/router/apply, LaneRouterRow, the Add-workspace router radio, the claude-/codex-home `routers` answers; clearLaneRouters takes the old keys out of each workspace's settings.local.json at start Sidebar: Settings pinned to the foot, the collapse toggle beside it (stacked on the rail) instead of in the brand's corner. Icons: shipped SVG marks for claude, codex, openclaw and hermes (a black/white pair swapped by theme) in client/public/ai-tools/, used by AiToolIcon before the server's favicon.
385 lines
25 KiB
JSON
385 lines
25 KiB
JSON
{
|
|
"action.clear": "Dọn trạng thái",
|
|
"action.forget": "Xóa workspace",
|
|
"action.purge": "Xóa lịch sử",
|
|
"action.reset": "Đặt lại worktree",
|
|
"action.start": "Bắt đầu",
|
|
"action.stop": "Dừng",
|
|
"actionError": "Thao tác workspace thất bại: {{message}}",
|
|
"actionErrorUnknown": "Lỗi không xác định",
|
|
"actions.busy": "…",
|
|
"actions.mcpSync": "Đồng bộ MCP",
|
|
"actions.mcpSyncResult": "Đã đồng bộ: {{servers}}",
|
|
"actions.syncCheck": "Kiểm tra đồng bộ dev",
|
|
"actions.syncCheckClean": "DEV_DELTA: {{count}} file, trùng: {{overlap}}",
|
|
"actions.syncCheckCollision": "Trùng migration: {{file}} → đổi tên thành {{suggestion}}",
|
|
"actions.tools": "Công cụ",
|
|
"actions.writeDocs": "Tạo/cập nhật file readme",
|
|
"actions.writeDocsHint": "Mở terminal của workspace này và chạy skill /sg-all:sg-md-writing: tạo CLAUDE.md/AGENTS.md nếu chưa có, hoặc cập nhật ngắn gọn nếu đã có.",
|
|
"actions.writeDocsResult": "Đã chạy — xem terminal của workspace này.",
|
|
"add": "Thêm workspace",
|
|
"addLane": "Tạo workspace từ một thư mục làm việc",
|
|
"addLaneBaseLabel": "Nhánh để tạo nhánh mới",
|
|
"addLaneBranchBusy": "{{branch}} — đang được checkout tại {{path}}",
|
|
"addLaneBranchExistingHint": "Worktree checkout đúng nhánh này — không tạo nhánh mới, không cần nhánh gốc.",
|
|
"addLaneBranchExistingLabel": "Nhánh cần checkout",
|
|
"addLaneBranchHintAuto": "Để trống để server tự đặt tên nhánh theo tiêu đề.",
|
|
"addLaneBranchLabel": "Tên nhánh mới",
|
|
"addLaneBranchModeCurrent": "Nhánh hiện tại",
|
|
"addLaneBranchModeCurrentHint": "Làm thẳng trên nhánh repo đang mở (main) — không tạo worktree, không fork nhánh. Chuyển sang chế độ Repo.",
|
|
"addLaneBranchModeExisting": "Nhánh có sẵn",
|
|
"addLaneBranchModeNew": "Nhánh mới",
|
|
"addLaneBranchPlaceholder": "Tự động — đặt theo tiêu đề",
|
|
"addLaneNoBranches": "Repo này chưa có commit nào nên worktree không có gì để rẽ nhánh. Hãy thêm nó thành workspace Repo: commit trước, rồi publish từ bảng Changes.",
|
|
"addLaneNoBranchesUseRepo": "Dùng làm workspace Repo",
|
|
"addLaneNoFreeBranches": "Mọi nhánh của repo này đều đang nằm trong một worktree. Hãy tạo nhánh mới.",
|
|
"addLaneExists": "Thư mục này đã có workspace: #{{id}} {{title}}. Workspace đó đã được chọn; hãy chọn thư mục khác để thêm workspace mới.",
|
|
"addLaneNotARepo": "Chưa phải repo git (hoặc không có quyền đọc).",
|
|
"addLaneProvisionFailed": "Tạo worktree thất bại hoặc quá thời gian chờ — workspace vẫn tồn tại nhưng tự động thiết lập đã bị bỏ qua. Kiểm tra git facts của workspace, rồi chạy thiết lập agents/mcp thủ công.",
|
|
"addLaneRepoHint": "Một repo git có sẵn. Dashboard tự tạo worktree mới cho workspace, không phải thư mục bạn chọn.",
|
|
"addLaneRepoHintAdopt": "Một thư mục có sẵn. Dashboard theo dõi nguyên trạng — không tạo worktree, không tạo nhánh mới.",
|
|
"addLaneRepoLabel": "Repo nguồn",
|
|
"addLaneRepoLabelAdopt": "Thư mục",
|
|
"addLaneSetupClose": "Đóng",
|
|
"addLaneSetupMcp": "MCP server",
|
|
"addLaneSetupProfile": "Profile",
|
|
"addLaneSetupTitle": "Thiết lập",
|
|
"addLaneTitleLabel": "Tiêu đề",
|
|
"addLaneTitlePlaceholder": "Không bắt buộc",
|
|
"addLaneToolDefaultBadge": "Mặc định",
|
|
"addLaneNoTools": "Chưa có AI tool nào được cài và bật.",
|
|
"addLaneNoToolsLink": "Mở Cài đặt → AI Tools",
|
|
"addLaneToolHint": "CLI nào điều khiển workspace này. Không thể thay đổi sau này.",
|
|
"addLaneWorktreeDetached": "(detached)",
|
|
"addLaneWorktreesMore": "+{{count}} nữa",
|
|
"addLaneWorktreesTitle": "Worktree của repo này ({{count}})",
|
|
"browse.button": "Duyệt",
|
|
"browse.empty": "Thư mục này trống.",
|
|
"browse.select": "Chọn thư mục này",
|
|
"browse.title": "Duyệt chọn thư mục",
|
|
"changes.back": "Tất cả file",
|
|
"changes.bin": "bin",
|
|
"changes.binary": "File nhị phân — không hiển thị.",
|
|
"changes.collapse": "Thu gọn bảng thay đổi",
|
|
"changes.collapseAll": "Thu gọn tất cả file",
|
|
"changes.collapseAllFolders": "Thu gọn tất cả thư mục",
|
|
"changes.collapseContext": "Bớt dòng xung quanh",
|
|
"changes.collapseFile": "Thu gọn {{path}}",
|
|
"changes.commitPlaceholder": "Nội dung commit",
|
|
"changes.commitStaged": "Commit {{count}} file đã stage",
|
|
"changes.conflicted": "xung đột",
|
|
"changes.discard": "Bỏ thay đổi của file này",
|
|
"changes.discardConfirm": "Bấm lần nữa để bỏ — không thể hoàn tác",
|
|
"changes.empty.branch": "Nhánh này không khác nhánh gốc.",
|
|
"changes.empty.commit": "Commit này không đổi file nào.",
|
|
"changes.empty.work": "Không có gì chưa commit.",
|
|
"changes.expand": "Mở bảng thay đổi",
|
|
"changes.expandAll": "Mở tất cả file",
|
|
"changes.expandAllFolders": "Mở tất cả thư mục",
|
|
"changes.expandContext": "Hiện thêm dòng xung quanh",
|
|
"changes.expandFile": "Mở {{path}}",
|
|
"changes.fileGone": "File này không còn thay đổi nào trong phạm vi đang xem.",
|
|
"changes.fileTruncated": "Diff bị cắt bớt — mở file trong editor để xem phần còn lại.",
|
|
"changes.commentLine": "Comment dòng {{n}} — dán vào pane của workspace này",
|
|
"changes.commentOn": "Comment {{at}} — dán vào pane bạn dùng gần nhất; chưa gửi gì cho tới khi bạn nhấn Enter ở đó",
|
|
"changes.commentSend": "Dán vào pane",
|
|
"changes.commentCancel": "Huỷ",
|
|
"changes.commentNoPane": "Workspace này chưa mở pane nào — hãy mở session trước",
|
|
"changes.layout.split": "Hai cột",
|
|
"changes.layout.unified": "Một cột",
|
|
"changes.loading": "Đang đọc working copy…",
|
|
"changes.mode.browse": "Tệp",
|
|
"changes.mode.history": "Lịch sử",
|
|
"changes.mode.overview": "Tổng quan",
|
|
"changes.mode.review": "Xem toàn bộ",
|
|
"changes.noCommits": "Chưa có commit nào.",
|
|
"changes.noHunks": "Không có thay đổi nội dung.",
|
|
"changes.noMatches": "Không có file nào khớp.",
|
|
"changes.openFile": "Mở {{path}}",
|
|
"changes.quickOpen": "Tìm file theo đường dẫn…",
|
|
"changes.range.branch": "So nhánh gốc",
|
|
"changes.range.branchHint": "base...HEAD — toàn bộ phần nhánh của workspace này thêm vào so với nhánh gốc",
|
|
"changes.range.work": "Chưa commit",
|
|
"changes.range.workHint": "Working tree so với HEAD — những gì vừa sửa mà chưa commit",
|
|
"changes.refresh": "Tải lại",
|
|
"changes.resize": "Đổi độ rộng khung changes (kế tiếp: {{size}})",
|
|
"changes.size.compact": "Hẹp",
|
|
"changes.size.half": "Vừa",
|
|
"changes.size.full": "Toàn màn hình",
|
|
"changes.stageAll": "Stage tất cả ({{count}})",
|
|
"changes.unstageAll": "Bỏ stage tất cả ({{count}})",
|
|
"changes.dropEdits": "Bỏ các chỉnh sửa chưa lưu của file này?",
|
|
"changes.stagedGroup": "Đã stage",
|
|
"changes.unstagedGroup": "Thay đổi",
|
|
"changes.stage": "Đưa file này vào index",
|
|
"changes.title": "Thay đổi",
|
|
"changes.truncated": "Một phần thay đổi đã bị lược bớt để bảng này còn mượt.",
|
|
"changes.unavailable": "Thư mục của workspace này không phải repo git đọc được.",
|
|
"changes.unstage": "Bỏ file này khỏi index",
|
|
"changes.wholeFile": "Toàn bộ file",
|
|
"confirmRemoveCancel": "Hủy",
|
|
"confirmRemoveConfirm": "Xóa",
|
|
"confirmRemoveMessage": "Hành động này không thể hoàn tác.",
|
|
"confirmRemoveTitle": "Xóa workspace?",
|
|
"countDead": "đã chết",
|
|
"countNeedsYou": "cần bạn",
|
|
"countRunning": "đang chạy",
|
|
"countTotal": "workspace",
|
|
"destructive.blocked.adopted": "Đây là thư mục đã nhận và không thể thay đổi bằng thao tác worktree.",
|
|
"destructive.blocked.missing": "Thư mục workspace không còn, nên không thể tiếp tục thao tác này.",
|
|
"destructive.blocked.unreadable": "Không thể đọc thư mục workspace như một Git worktree, nên không thể tiếp tục thao tác này.",
|
|
"destructive.cancel": "Hủy",
|
|
"destructive.count.bytesEstimate": "Dung lượng giải phóng (ước tính)",
|
|
"destructive.count.dirty": "Tệp đã sửa",
|
|
"destructive.count.events": "Sự kiện",
|
|
"destructive.count.head": "HEAD",
|
|
"destructive.count.sessions": "Phiên",
|
|
"destructive.count.tokenRows": "Dòng token",
|
|
"destructive.count.unpushed": "Commit chưa đẩy",
|
|
"destructive.count.untracked": "Tệp chưa theo dõi",
|
|
"destructive.force": "Tôi hiểu các commit chưa đẩy này sẽ bị loại bỏ.",
|
|
"destructive.loading": "Đang tải trạng thái hiện tại…",
|
|
"destructive.notice.activeSessionSkipped": "Một hoặc nhiều phiên trong workspace này vẫn đang hoạt động và sẽ được giữ lại, không bị dọn.",
|
|
"destructive.notice.adopted": "Workspace này trỏ tới thư mục của bạn. Chỉ bản ghi trên bảng điều khiển bị xóa — thư mục và các tệp bên trong không bị thay đổi.",
|
|
"destructive.notice.missing": "Thư mục workspace đã không còn. Việc xóa chỉ bỏ bản ghi trên bảng điều khiển; không tệp nào trên đĩa và không bản ghi Git nào bị đụng tới.",
|
|
"destructive.notice.unreadable": "Không thể đọc thư mục workspace như một Git worktree. Điều đó không ảnh hưởng gì: chỉ bản ghi trên bảng điều khiển bị xóa, thư mục không bao giờ bị đụng tới.",
|
|
"destructive.purge.confirm": "Xóa lịch sử",
|
|
"destructive.purge.message": "Hãy xác nhận các số liệu hiện tại trước khi xóa lịch sử phiên đã lưu.",
|
|
"destructive.purge.title": "Xóa lịch sử workspace?",
|
|
"destructive.remove.confirm": "Xóa bản ghi workspace",
|
|
"destructive.remove.message": "Chỉ bản ghi của workspace trên bảng điều khiển bị xóa. Working tree, nhánh và cơ sở dữ liệu của workspace được giữ nguyên — bạn tự xóa nếu thực sự muốn bỏ chúng.",
|
|
"destructive.remove.title": "Xóa bản ghi workspace?",
|
|
"destructive.reset.confirm": "Đặt lại worktree",
|
|
"destructive.reset.message": "Hãy xác nhận các số liệu hiện tại trước khi đặt lại worktree này.",
|
|
"destructive.reset.survives": "Các tệp Git bỏ qua như node_modules và .env được giữ lại; các tệp chưa theo dõi sẽ bị xóa.",
|
|
"destructive.reset.title": "Đặt lại worktree được quản lý?",
|
|
"destructive.warning.no-remote": "Chưa cấu hình Git remote, nên không có bản sao lưu ở xa. Bạn vẫn có thể tiếp tục.",
|
|
"empty.body": "Mỗi workspace là một thư mục làm việc mà dashboard theo dõi — pipeline, session và terminal của nó. Bấm vào bất kỳ đâu trên ô này để thêm, hoặc từ terminal:",
|
|
"empty.title": "Chưa có workspace nào",
|
|
"features.archived": "đã lưu trữ",
|
|
"features.live": "Phiên bản trực tiếp",
|
|
"features.viewingArchived": "Xem tính năng đã lưu trữ \"{{slug}}\" — workspace tiếp tục chạy; đây là ảnh chụp nhanh chỉ đọc.",
|
|
"git.filesHeading_one": "{{count}} tệp thay đổi",
|
|
"git.filesHeading_other": "{{count}} tệp thay đổi",
|
|
"git.filesMore_one": "… và {{count}} tệp nữa",
|
|
"git.filesMore_other": "… và {{count}} tệp nữa",
|
|
"git.noDelta": "mới",
|
|
"git.uncommitted": "{{dirty}} đã sửa · {{untracked}} chưa theo dõi",
|
|
"gitBar.branchCreate": "Tạo",
|
|
"gitBar.branchCreateHint": "Tạo nhánh này mà không chuyển sang",
|
|
"gitBar.branchDelete": "Xoá",
|
|
"gitBar.branchDeleteHint": "Xoá nhánh đang chọn (git từ chối nếu còn commit chưa merge)",
|
|
"gitBar.branchNewPlaceholder": "Tên nhánh mới…",
|
|
"gitBar.fetch": "Fetch",
|
|
"gitBar.fetchHint": "git fetch --all --prune",
|
|
"gitBar.errNoRemote": "Không có remote để push hoặc pull. Hãy thêm remote, hoặc đặt upstream cho nhánh này, trong terminal.",
|
|
"gitBar.inSync": "đã đồng bộ",
|
|
"gitBar.newLane": "Tạo workspace mới",
|
|
"gitBar.newLaneHeld": "Nhánh đã được checkout tại {{path}} — git chỉ cho một worktree trên mỗi nhánh",
|
|
"gitBar.newLaneHint": "Mở Thêm workspace để tạo worktree anh em trên nhánh đang chọn",
|
|
"gitBar.noCommits": "chưa có commit",
|
|
"gitBar.noUpstream": "chưa push",
|
|
"gitBar.publish": "Publish…",
|
|
"gitBar.publishApply": "Publish",
|
|
"gitBar.publishBranch": "Publish nhánh",
|
|
"gitBar.publishBranchHint": "git push -u origin HEAD — nhánh này chưa có upstream",
|
|
"gitBar.publishHint": "Thêm remote tên origin rồi push nhánh này lên đó (git remote add origin + git push -u origin HEAD)",
|
|
"gitBar.publishUrl": "URL remote: https://host/owner/repo.git hoặc git@host:owner/repo.git",
|
|
"gitBar.pull": "Pull",
|
|
"gitBar.pullHint": "git pull --ff-only — nhánh đã rẽ nhánh thì báo lỗi chứ không merge",
|
|
"gitBar.push": "Push",
|
|
"gitBar.pushHint": "git push -u origin HEAD",
|
|
"gitBar.switch": "Nhánh",
|
|
"gitBar.switchApply": "Chuyển nhánh",
|
|
"gitBar.switchCurrent": "hiện tại",
|
|
"gitBar.switchDirty": "Hãy commit hoặc bỏ các thay đổi chưa commit trước",
|
|
"gitBar.switchHint": "Đổi worktree này sang nhánh local khác",
|
|
"gitBar.switchLabel": "Đổi nhánh…",
|
|
"gitBar.unbornHint": "Hãy commit trước, rồi publish repo này lên remote.",
|
|
"kind.adopted": "đã nhận",
|
|
"kind.managed": "được quản lý",
|
|
"laneDetail.hide": "Ẩn chi tiết",
|
|
"laneDetail.show": "Chi tiết workspace",
|
|
"locks.held_one": "Đang giữ {{count}} khóa",
|
|
"locks.held_other": "Đang giữ {{count}} khóa",
|
|
"mode.repo": "Repo",
|
|
"mode.repoHint": "Gắn thẳng thư mục này làm workspace, nguyên trạng — không worktree, không nhánh mới.",
|
|
"mode.worktree": "Worktree",
|
|
"mode.worktreeHint": "Tạo worktree git mới + nhánh mới từ repo nguồn.",
|
|
"moreActions": "Thêm hành động",
|
|
"pipelinePicker.label": "Mẫu pipeline",
|
|
"pipelinePicker.stageMismatch": "Stage \"{{stage}}\" không khớp node nào trong \"{{pipeline}}\" — khai báo một trong: {{nodes}}",
|
|
"preflightError": "Không thể tải trạng thái workspace hiện tại.",
|
|
"preflightErrorWithMessage": "Không thể tải trạng thái workspace hiện tại: {{message}}",
|
|
"proof.ticketReport": "Báo cáo nhiệm vụ",
|
|
"renameLabel": "Đổi tên workspace này",
|
|
"reorderHint": "Kéo để sắp xếp · Alt+←/→",
|
|
"router.native": "Native ({{tool}})",
|
|
"router.label": "AI Router",
|
|
"runtime.boot": "▶ chạy",
|
|
"runtime.busy.down": "đang dừng…",
|
|
"runtime.busy.up": "đang khởi động…",
|
|
"runtime.down": "tắt",
|
|
"runtime.healthy": "khoẻ",
|
|
"runtime.partial": "một phần",
|
|
"runtime.slot": "slot {{slot}}",
|
|
"runtime.steppedAsideTitle": "Đã lùi khỏi {{expected}} vì cổng đó đang bận",
|
|
"runtime.stop": "■ dừng",
|
|
"runtime.toggleTitle": "Chạy hoặc dừng stack ứng dụng của workspace này (khác với phiên Claude của nó)",
|
|
"splitView.emptyPane": "Chưa chọn workspace cho ô này.",
|
|
"splitView.paneCount": "{{count}} ô",
|
|
"splitView.paneLaneLabel": "Bộ chọn workspace cho ô",
|
|
"splitView.pickLane": "Chọn workspace",
|
|
"status.failed": "thất bại",
|
|
"status.idle": "rảnh",
|
|
"status.provisioning": "đang khởi tạo",
|
|
"status.running": "đang chạy",
|
|
"statusDead": "ĐÃ CHẾT",
|
|
"title": "Workspace",
|
|
"tooltipStart": "Tạo một lần chạy ở chế độ hội thoại mà không có lời nhắc ban đầu; được điều khiển từ CLI hoặc qua tin nhắn",
|
|
"worktrees.heading_one": "{{count}} worktree",
|
|
"worktrees.heading_other": "{{count}} worktree",
|
|
"changes.stageHunk": "Stage đoạn này",
|
|
"changes.undoHunk": "Hoàn tác đoạn này",
|
|
"changes.undoHunkConfirm": "Bấm lần nữa để hoàn tác đoạn này — không thể khôi phục",
|
|
"changes.stageHunkShort": "Giữ",
|
|
"changes.undoHunkShort": "Hoàn tác",
|
|
"changes.undoHunkShortConfirm": "Xác nhận",
|
|
"changes.edit": "Sửa",
|
|
"changes.save": "Lưu",
|
|
"changes.cancelEdit": "Huỷ",
|
|
"changes.clickToEdit": "Bấm vào nội dung để sửa",
|
|
"changes.preview": "Xem trước",
|
|
"changes.raw": "Mã nguồn",
|
|
"changes.editorLabel": "Sửa {{path}}",
|
|
"changes.prevHunk": "Thay đổi trước",
|
|
"changes.nextHunk": "Thay đổi sau",
|
|
"changes.hunkOf": "{{n}} / {{total}}",
|
|
"changes.noEditBinary": "File nhị phân — không sửa được ở đây",
|
|
"changes.noEditTooBig": "File quá lớn để sửa ở đây (trên 1 MB)",
|
|
"changes.noEdit": "Không sửa được ở đây",
|
|
"gitBar.loginTitle": "Git cần đăng nhập {{host}}",
|
|
"gitBar.loginRejected": "Máy chủ từ chối (rejected) tài khoản hoặc token này.",
|
|
"gitBar.loginUser": "Tên đăng nhập",
|
|
"gitBar.loginPassword": "Mật khẩu hoặc access token",
|
|
"gitBar.loginRemember": "Ghi nhớ cho mọi người dùng AgentHub",
|
|
"gitBar.loginTokenHint": "Trên Gitea: Settings → Applications → Generate token, cấp quyền đọc/ghi repository.",
|
|
"gitBar.loginInsecure": "Dashboard đang chạy http thường - token sẽ đi qua mạng không mã hoá.",
|
|
"gitBar.loginSubmit": "Đăng nhập và thử lại",
|
|
"gitBar.loginCancel": "Huỷ",
|
|
"gitBar.merge": "Merge vào nhánh hiện tại",
|
|
"gitBar.mergeHint": "Merge nhánh đang chọn vào nhánh workspace này đang đứng",
|
|
"gitBar.mergeUpstream": "Merge {{upstream}}",
|
|
"gitBar.mergeUpstreamHint": "Nhánh đã lệch với upstream: merge vào (conflict được giải quyết trong Changes panel)",
|
|
"gitBar.mergeConfirm": "Merge {{branch}} vào {{current}}? File trong workspace sẽ thay đổi ngay - nếu có agent đang làm việc trong workspace này, hãy để nó xong trước.",
|
|
"gitBar.mergeConflicts": "Merge dừng ở {{count}} file conflict - hãy giải quyết trong danh sách bên dưới.",
|
|
"gitBar.merging": "Đang merge: hãy hoàn tất hoặc huỷ merge trước",
|
|
"changes.conflictsGroup": "Conflict khi merge",
|
|
"changes.mergeBanner": "Đang merge - còn {{count}} file conflict",
|
|
"changes.mergeReady": "Đang merge - đã giải quyết hết conflict",
|
|
"changes.mergeCommit": "Hoàn tất merge",
|
|
"changes.mergeAbort": "Huỷ merge",
|
|
"changes.mergeAbortConfirm": "Bấm lần nữa để huỷ merge",
|
|
"changes.takeOurs": "Giữ bản của mình",
|
|
"changes.takeTheirs": "Lấy bản kia",
|
|
"changes.markResolved": "Đánh dấu đã xong (sau khi đã sửa hết dấu conflict)",
|
|
"conflict.left": "Còn {{left}}/{{total}} khối conflict",
|
|
"conflict.prev": "Khối trước",
|
|
"conflict.next": "Khối sau",
|
|
"conflict.allOurs": "Giữ hết của mình",
|
|
"conflict.allTheirs": "Lấy hết bản kia",
|
|
"conflict.editByHand": "Sửa tay",
|
|
"conflict.unbalanced": "Dấu conflict không khớp nhau (đã sửa tay?) - hãy dùng Sửa tay.",
|
|
"conflict.unusable": "Không hiển thị được file này ở đây (nhị phân hoặc quá lớn) - hãy dùng Giữ hết của mình / Lấy hết bản kia, hoặc terminal.",
|
|
"conflict.keepOurs": "Giữ của mình",
|
|
"conflict.takeTheirs": "Lấy bản kia",
|
|
"conflict.keepBoth": "Giữ cả hai",
|
|
"conflict.chose.ours": "Đã giữ của mình",
|
|
"conflict.chose.theirs": "Đã lấy bản kia",
|
|
"conflict.chose.both": "Đã giữ cả hai",
|
|
"conflict.undo": "Hoàn tác",
|
|
"conflict.ours": "Của mình ({{label}})",
|
|
"conflict.theirs": "Bản kia ({{label}})",
|
|
"conflict.reset": "Huỷ",
|
|
"conflict.save": "Lưu và đánh dấu đã xong",
|
|
"changes.takeOursHint": "Giữ bản của mình cho cả file",
|
|
"changes.takeTheirsHint": "Lấy bản kia cho cả file",
|
|
"row.actions": "Thao tác workspace",
|
|
"row.hint": "Nhấp đúp để đổi tên · kéo hoặc Alt+↑/↓ để sắp xếp · chuột phải để xem thao tác",
|
|
"menu.start": "Bắt đầu",
|
|
"menu.stop": "Dừng",
|
|
"menu.rename": "Đổi tên",
|
|
"menu.newHere": "Workspace mới tại đây…",
|
|
"menu.copyPath": "Sao chép đường dẫn",
|
|
"menu.reset": "Đặt lại worktree…",
|
|
"menu.remove": "Xóa workspace…",
|
|
"pane.slot": "ô {{n}}",
|
|
"pane.close": "Dừng phiên của ô này",
|
|
"panel.files": "Tệp",
|
|
"panel.changes": "Thay đổi",
|
|
"sessions.resume": "Tiếp tục",
|
|
"resume.openPane": "Mở pane",
|
|
"resume.hint": "Tiếp tục session này trong một pane của workspace — nạp lại toàn bộ transcript vào context",
|
|
"resume.title": "Tiếp tục session này?",
|
|
"resume.body": "Tiếp tục sẽ nạp lại toàn bộ transcript của session vào context của model, nên các lượt sau phải trả lại chi phí cho tất cả phần đó. Session mở ở pane trống đầu tiên của {{workspace}}. Nếu chỉ cần đọc, hãy ở lại trang này.",
|
|
"resume.confirm": "Tiếp tục session",
|
|
"resume.fork": "Fork",
|
|
"resume.forkHint": "Tiếp tục từ đây thành một session MỚI — session gốc giữ nguyên",
|
|
"resume.forkTitle": "Fork session này?",
|
|
"resume.forkBody": "Fork nạp lại toàn bộ transcript vào một session MỚI (id riêng), nên các lượt sau phải trả lại chi phí cho tất cả phần đó; session gốc không bị đụng tới. Session mở ở pane trống đầu tiên của {{workspace}}.",
|
|
"resume.forkConfirm": "Fork session",
|
|
"tree.title": "Không gian làm việc",
|
|
"tree.search": "Tìm workspace và session",
|
|
"tree.toolFilter": "Lọc theo tool",
|
|
"tree.allTools": "Mọi tool",
|
|
"tree.newSession": "Session mới",
|
|
"tree.noSessions": "Chưa có session",
|
|
"tree.transcriptHint": "Không còn pane — mở transcript",
|
|
"tree.splitHint": "Pane đang chạy — Ctrl/Cmd+click để mở ở pane thứ hai",
|
|
"tree.renameSession": "Đổi tên session",
|
|
"tree.archiveSession": "Lưu trữ — ẩn khỏi workspace này (không xoá gì)",
|
|
"tree.worktreeSession": "Trong worktree riêng: .claude/worktrees/{{name}}",
|
|
"tree.archiveWorktreeTitle": "Lưu trữ và gỡ worktree của session?",
|
|
"tree.archiveWorktreeBody": "Giống Claude Desktop, lưu trữ sẽ gỡ worktree .claude/worktrees/{{name}} của session cùng branch của nó. Git sẽ từ chối nếu còn thay đổi chưa commit, và branch có commit chưa merge vào đâu sẽ được giữ lại — không mất gì chưa lưu.",
|
|
"tree.archiveWorktreeConfirm": "Lưu trữ và gỡ",
|
|
"tree.archived_one": "{{count}} session đã lưu trữ",
|
|
"tree.archived_other": "{{count}} session đã lưu trữ",
|
|
"tree.unarchive": "Bỏ lưu trữ",
|
|
"home.breadcrumb": "Không gian làm việc",
|
|
"home.repoRoot": "Thư mục gốc của repo",
|
|
"home.mainBranch": "Branch của worktree chính",
|
|
"home.worktreeCount_one": "{{count}} worktree",
|
|
"home.worktreeCount_other": "{{count}} worktree",
|
|
"home.placeholder": "Tôi có thể giúp gì cho bạn hôm nay?",
|
|
"home.start": "Bắt đầu",
|
|
"home.worktree": "Worktree",
|
|
"home.worktreeHint": "Chạy session này trong worktree git riêng — <repo>/.claude/worktrees/, branch riêng, do Claude Code tạo và dọn",
|
|
"home.allBusy": "Cả bốn pane của workspace này đang bận — hãy dừng một pane trước khi mở session mới.",
|
|
"home.recents": "Gần đây",
|
|
"home.noRecents": "Chưa có session nào — bắt đầu ở ô phía trên.",
|
|
"home.instructions": "Hướng dẫn",
|
|
"home.instructionsEmpty": "Thêm hướng dẫn để điều chỉnh cách agent làm việc trong workspace này. Hướng dẫn được nối vào system prompt của mỗi session mới.",
|
|
"home.edit": "Sửa hướng dẫn",
|
|
"home.save": "Lưu",
|
|
"home.cancel": "Huỷ",
|
|
"home.memory": "Bộ nhớ",
|
|
"home.viewMemory": "Xem bộ nhớ",
|
|
"home.memoryCount_one": "{{count}} file agent đọc",
|
|
"home.memoryCount_other": "{{count}} file agent đọc",
|
|
"home.memoryEmpty": "Bộ nhớ hiện ở đây khi thư mục có CLAUDE.md hoặc AGENTS.md, hoặc Claude lưu bộ nhớ cho nó.",
|
|
"home.context": "Ngữ cảnh",
|
|
"home.contextEmpty": "Thêm PDF, tài liệu hoặc văn bản để tham chiếu trong workspace này.",
|
|
"home.addFile": "Thêm file",
|
|
"home.folder": "Thư mục",
|
|
"home.ownFolder": "Thư mục của workspace",
|
|
"home.addFolder": "Thêm thư mục",
|
|
"home.folderPath": "Đường dẫn tuyệt đối của thư mục",
|
|
"home.add": "Thêm",
|
|
"home.suggested": "Worktree chưa theo dõi",
|
|
"home.remove": "Gỡ",
|
|
"home.missing": "không còn",
|
|
"home.unsupported": "{{tool}} không nhận được hướng dẫn, file ngữ cảnh hay thư mục bổ sung: chúng vẫn được giữ, nhưng session của nó khởi động mà không có chúng.",
|
|
"home.back": "Quay lại trang workspace",
|
|
"home.close": "Đóng"
|
|
}
|