78f6e1be8e
- Repo mode adopts a directory as-is via /lanes/ensure (no worktree, no branch fields) - the right choice for a main repo you want stage detection on. Worktree mode (default) keeps the existing provisioning flow but now requires a manually-typed branch name instead of deriving one from the title. - POST /lanes/worktree accepts an optional `branch`, validated via `git check-ref-format --branch`; omitting it preserves the CLI's existing auto-derived-branch behavior. - New GET /lanes/browse lists a directory's immediate subdirectories, backing a small folder-browse modal on both path fields - browsers cannot expose an absolute path from a native picker, so this is server-backed instead, consistent with the tool's local-first model.
123 lines
7.9 KiB
JSON
123 lines
7.9 KiB
JSON
{
|
|
"action.clear": "dọn trạng thái",
|
|
"action.forget": "xóa làn",
|
|
"action.purge": "xóa lịch sử",
|
|
"action.remove": "xóa làn + worktree",
|
|
"action.reset": "đặt lại worktree",
|
|
"action.start": "bắt đầu",
|
|
"action.stop": "dừng",
|
|
"actionError": "Thao tác làn đường thất bại: {{message}}",
|
|
"actionErrorUnknown": "Lỗi không xác định",
|
|
"actions.agentsInstall": "Cài agent",
|
|
"actions.agentsInstallResult": "Đã cài: {{files}}",
|
|
"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}}",
|
|
"add": "Thêm lane",
|
|
"addLane": "Tạo lane từ một thư mục làm việc",
|
|
"addLaneBaseLabel": "Nhánh để tạo nhánh mới",
|
|
"addLaneBranchHint": "Phải là tên nhánh git hợp lệ và chưa tồn tại.",
|
|
"addLaneBranchLabel": "Tên nhánh mới",
|
|
"addLaneBranchPlaceholder": "feat/tinh-nang-cua-toi",
|
|
"addLaneNoBranches": "Repo này chưa có commit nào — worktree sẽ bắt đầu trống.",
|
|
"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ờ — lane vẫn tồn tại nhưng tự động thiết lập đã bị bỏ qua. Kiểm tra git facts của lane, 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 lane, 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",
|
|
"addLaneSetupAgents": "Agent",
|
|
"addLaneSetupMcp": "MCP server",
|
|
"addLaneSetupProfile": "Profile",
|
|
"addLaneSetupTitle": "Thiết lập",
|
|
"addLaneTitleLabel": "Tiêu đề",
|
|
"mode.repo": "Repo",
|
|
"mode.repoHint": "Gắn thẳng thư mục này làm lane, 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.",
|
|
"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",
|
|
"worktrees.heading_one": "{{count}} worktree",
|
|
"worktrees.heading_other": "{{count}} worktree",
|
|
"addLaneTitlePlaceholder": "Không bắt buộc",
|
|
"autoStage": "tự động: {{stage}}",
|
|
"cardId": "Làn đường {{id}}",
|
|
"confirmRemoveCancel": "Hủy",
|
|
"confirmRemoveConfirm": "Xóa",
|
|
"confirmRemoveMessage": "Hành động này không thể hoàn tác.",
|
|
"confirmRemoveTitle": "Xóa làn đường?",
|
|
"countDead": "đã chết",
|
|
"countNeedsYou": "cần bạn",
|
|
"countRunning": "đang chạy",
|
|
"countTotal": "làn đường",
|
|
"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 làn đường 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 làn đường 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 làn đường này vẫn đang hoạt động và sẽ được giữ lại, không bị dọn.",
|
|
"destructive.notice.adopted": "Làn đường 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 làn đường đã không còn. Việc xóa chỉ bỏ bản ghi trên bảng điều khiển và dọn mục worktree cũ trong Git; không tệp nào bị xóa khỏi đĩa.",
|
|
"destructive.notice.unreadable": "Không thể đọc thư mục làn đường như một Git worktree. Hệ thống sẽ thử xóa; nếu Git tự chối, mục ghi worktree của nó sẽ được dọn trực tiếp thay thế. Trong mọi trường hợp, thư mục vẫn không bị thay đổ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ử làn đường?",
|
|
"destructive.remove.confirm": "Xóa làn đường",
|
|
"destructive.remove.message": "Hãy xác nhận các số liệu hiện tại trước khi thực hiện thao tác này.",
|
|
"destructive.remove.title": "Xóa làn đường?",
|
|
"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.",
|
|
"emptyState": "Chưa có làn đường nào. Tạo một từ thư mục làm việc:",
|
|
"git.uncommitted": "{{dirty}} đã sửa · {{untracked}} chưa theo dõi",
|
|
"kind.adopted": "đã nhận",
|
|
"kind.managed": "được quản lý",
|
|
"laneHeader": "Làn đường {{id}} · {{title}} · {{pipeline}}",
|
|
"locks.held_one": "Đang giữ {{count}} khóa",
|
|
"locks.held_other": "Đang giữ {{count}} khóa",
|
|
"moreActions": "Thêm hành động",
|
|
"preflightError": "Không thể tải trạng thái làn đường hiện tại.",
|
|
"preflightErrorWithMessage": "Không thể tải trạng thái làn đường hiện tại: {{message}}",
|
|
"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 lane này (khác với phiên Claude của nó)",
|
|
"integrations.ci_wait": "CI wait",
|
|
"integrations.dev_qc": "dev QC",
|
|
"integrations.tracker": "tracker",
|
|
"stageUndeclared": "chưa khai báo",
|
|
"status.failed": "thất bại",
|
|
"status.idle": "rảnh",
|
|
"status.provisioning": "đang khởi tạo",
|
|
"status.running": "đang chạy",
|
|
"features.live": "Phiên bản trực tiếp",
|
|
"features.archived": "đã lưu trữ",
|
|
"features.viewingArchived": "Xem tính năng đã lưu trữ \"{{slug}}\" — lane tiếp tục chạy; đây là ảnh chụp nhanh chỉ đọc.",
|
|
"proof.ticketReport": "Báo cáo nhiệm vụ",
|
|
"statusDead": "ĐÃ CHẾT",
|
|
"title": "Làn đường",
|
|
"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"
|
|
}
|