7a88b74016
- Artifacts hub: upload a file from the computer; make a skill by uploading a Markdown file, files, a folder or a .zip/.skill, or by writing it in the dialog; add plugins by picking from the list a marketplace link answers (POST /api/artifacts/plugin/inspect); Settings → AI tools → Artifacts Hub. - Console tabs are combos of up to four split panes (ConsoleTabs, PaneGrid). - Accounts: an own avatar (PUT/DELETE /api/me/avatar, raster only, ≤ 1 MB, <data dir>/avatars/), shown with name and role at the sidebar's foot and on the workspace owner groups (GET /api/users/:id/avatar, owner_avatar_at). - Users page: per-user storage (GET /api/users/storage, measured in a worker) and account-pool spend/tokens per account (server/lib/pool-usage.js). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
209 lines
10 KiB
JSON
209 lines
10 KiB
JSON
{
|
||
"title": "Người dùng",
|
||
"description": "Mọi tài khoản trên server này, kèm workspace, phiên và mức dùng gần đây.",
|
||
"name": "Người dùng",
|
||
"role": "Vai trò",
|
||
"workspaces": "Workspace",
|
||
"sessions": "Phiên",
|
||
"last7d": "7 ngày",
|
||
"last30d": "30 ngày",
|
||
"storage": "Dung lượng",
|
||
"storageHint": "{{files}} tệp · đo lúc {{at}}",
|
||
"storagePartial": "ít nhất — một phần thư mục chưa đọc được kịp",
|
||
"storageNone": "Không có thư mục home riêng",
|
||
"storageMeasuring": "Đang đo…",
|
||
"disabled": "đã khoá",
|
||
"you": "bạn",
|
||
"tokens": "{{n}} token",
|
||
"actions": "Thao tác",
|
||
"roles": {
|
||
"admin": "Admin",
|
||
"analyst": "Analyst",
|
||
"developer": "Developer"
|
||
},
|
||
"roleHint": {
|
||
"admin": "Toàn quyền, kể cả cấu hình của server và dữ liệu của mọi người",
|
||
"analyst": "Xem được dữ liệu của mọi người; chỉ làm việc trong workspace của mình, không đổi cài đặt",
|
||
"developer": "Chỉ workspace của chính mình; không đổi cài đặt"
|
||
},
|
||
"add": "Thêm người dùng",
|
||
"username": "Tên đăng nhập",
|
||
"usernameHint": "Chữ, số, '.', '_' hoặc '-'",
|
||
"password": "Mật khẩu",
|
||
"passwordHint": "Không giới hạn độ dài tối thiểu",
|
||
"newPassword": "Mật khẩu mới",
|
||
"changeRole": "Đổi vai trò",
|
||
"disable": "Khoá",
|
||
"enable": "Mở khoá",
|
||
"resetPassword": "Đặt lại mật khẩu",
|
||
"assignWorkspace": "Giao workspace",
|
||
"workspace": "Workspace",
|
||
"noOwner": "chưa có chủ",
|
||
"ownedBy": "của {{name}}",
|
||
"noWorkspaces": "Chưa có workspace nào.",
|
||
"yourPassword": "Mật khẩu của bạn",
|
||
"yourPasswordHint": "Nhập mật khẩu của chính bạn để xác nhận thay đổi này.",
|
||
"save": "Lưu",
|
||
"dialog": {
|
||
"add": "Thêm người dùng",
|
||
"role": "Đổi vai trò của {{name}}",
|
||
"disable": "Khoá {{name}}?",
|
||
"disableBody": "{{name}} bị đăng xuất khỏi mọi nơi và không đăng nhập được cho tới khi mở khoá. Workspace và lịch sử vẫn giữ nguyên.",
|
||
"enable": "Mở khoá {{name}}?",
|
||
"password": "Đặt lại mật khẩu cho {{name}}",
|
||
"passwordBody": "{{name}} bị đăng xuất khỏi mọi nơi và đăng nhập lại bằng mật khẩu mới.",
|
||
"workspace": "Giao workspace cho {{name}}",
|
||
"workspaceBody": "Các phiên và chi phí của workspace chuyển sang {{name}}. Developer chỉ thấy workspace của chính mình."
|
||
},
|
||
"done": {
|
||
"created": "Đã thêm {{name}}",
|
||
"role": "{{name}} giờ là {{role}}",
|
||
"disabled": "Đã khoá {{name}}",
|
||
"enabled": "Đã mở khoá {{name}}",
|
||
"password": "Đã đặt lại mật khẩu cho {{name}}",
|
||
"workspace": "Đã giao workspace cho {{name}}",
|
||
"updated": "Đã cập nhật {{name}}",
|
||
"deleted": "Đã xoá {{name}}."
|
||
},
|
||
"errors": {
|
||
"EBADIMAGE": "Chỉ nhận ảnh PNG, JPEG, GIF hoặc WebP",
|
||
"ETOOBIG": "Ảnh tối đa 1 MB",
|
||
"EREAUTH": "Mật khẩu của bạn không đúng.",
|
||
"ETOOMANY": "Nhập sai mật khẩu quá nhiều lần. Thử lại sau 15 phút.",
|
||
"ESELF": "Bạn không thể tự đổi vai trò hay tự khoá chính mình.",
|
||
"EEXISTS": "Tên đăng nhập này đã có người dùng.",
|
||
"EBADUSER": "Tên đăng nhập: chữ, số, '.', '_' hoặc '-' (tối đa 64 ký tự).",
|
||
"EBADPASSWORD": "Mật khẩu không được để trống.",
|
||
"EBADEMAIL": "Địa chỉ email không hợp lệ.",
|
||
"EBADFIELD": "Có một giá trị không hợp lệ.",
|
||
"ENOLANE": "Workspace đó không còn tồn tại.",
|
||
"ENOTOWNED": "Workspace đó không còn thuộc người này.",
|
||
"EOWNERFOLDER": "Thư mục của workspace đó thuộc tài khoản của người dùng khác.",
|
||
"EBADROLE": "Vai trò không hợp lệ.",
|
||
"ELOCALMODE": "Chỉ quản lý tài khoản được ở chế độ server.",
|
||
"ELASTADMIN": "Không thể xoá admin cuối cùng."
|
||
},
|
||
"readOnly": "Analyst chỉ xem được tài khoản, không thay đổi được.",
|
||
"auditTitle": "Nhật ký audit",
|
||
"auditDescription": "Các thay đổi tài khoản thực hiện ở đây, và mỗi lần admin hoặc analyst mở phiên của một developer.",
|
||
"auditEmpty": "Chưa ghi nhận gì.",
|
||
"activeCount": "{{n}} đang hoạt động",
|
||
"cost30d": "Chi phí · 30 ngày",
|
||
"displayName": "Tên hiển thị",
|
||
"displayNameHint": "Hiện cạnh tên đăng nhập. Không bắt buộc.",
|
||
"email": "Email",
|
||
"edit": {
|
||
"button": "Sửa người dùng",
|
||
"title": "Sửa {{name}}",
|
||
"created": "Ngày tạo",
|
||
"lastLogin": "Đăng nhập gần nhất",
|
||
"never": "Chưa bao giờ",
|
||
"logins": "Phiên đăng nhập",
|
||
"profile": "Hồ sơ",
|
||
"access": "Quyền truy cập",
|
||
"status": "Trạng thái",
|
||
"active": "Đang hoạt động",
|
||
"statusHint": "Người dùng bị vô hiệu hoá không thể đăng nhập; workspace và lịch sử vẫn được giữ.",
|
||
"selfRole": "Bạn không thể đổi vai trò của chính mình.",
|
||
"selfDisable": "Bạn không thể tự vô hiệu hoá mình.",
|
||
"password": "Mật khẩu",
|
||
"passwordHint": "Để trống để giữ mật khẩu hiện tại. Mật khẩu mới sẽ đăng xuất họ ở mọi nơi.",
|
||
"show": "Hiện mật khẩu",
|
||
"hide": "Ẩn mật khẩu",
|
||
"copy": "Sao chép mật khẩu",
|
||
"generate": "Tạo ngẫu nhiên",
|
||
"loading": "Đang tải…",
|
||
"noOwned": "Chưa sở hữu workspace nào.",
|
||
"undo": "Hoàn tác",
|
||
"removeWorkspace": "Bỏ {{name}}",
|
||
"removeWorkspaceHint": "Workspace sẽ không còn chủ sở hữu",
|
||
"addWorkspace": "Thêm workspace",
|
||
"chooseWorkspace": "Chọn một workspace…",
|
||
"sessions": "Phiên đăng nhập",
|
||
"signOut": "Đăng xuất ở mọi nơi",
|
||
"signOutHint": "Kết thúc {{n}} phiên đăng nhập đang hoạt động của người này; họ đăng nhập lại bằng mật khẩu.",
|
||
"noChanges": "Chưa có thay đổi."
|
||
},
|
||
"pool": {
|
||
"title": "Pool tài khoản",
|
||
"description": "Các tài khoản Claude và Codex mà phiên mới của mọi user chạy trên đó — tự chọn tài khoản ít tải nhất, server ghi login vào home của user, không ai phải đăng nhập riêng.",
|
||
"refresh": "Đọc lại quota",
|
||
"add": "Thêm tài khoản",
|
||
"empty": "Chưa có tài khoản nào. Khi chưa thêm, phiên của mỗi người dùng cần chính người đó đăng nhập.",
|
||
"account": "Tài khoản",
|
||
"tool": "Công cụ",
|
||
"livePanes": "Đang chạy",
|
||
"quota": "Quota",
|
||
"spend": "5 giờ",
|
||
"spend7d": "{{cost}} · {{tokens}} tokens trong 7 ngày",
|
||
"tokens": "{{tokens}} tokens",
|
||
"added": "thêm lúc {{at}}",
|
||
"expired": "hết hạn",
|
||
"full": "đầy",
|
||
"kind": {
|
||
"token": "Claude · setup-token",
|
||
"login": "Claude · login",
|
||
"apikey": "Codex · API key",
|
||
"chatgpt": "Codex · ChatGPT"
|
||
},
|
||
"name": "Tên",
|
||
"nameHint": "Nhãn tuỳ ý để bạn nhận ra: chữ, số, '.', '_' hoặc '-'",
|
||
"remove": "Xoá {{name}}",
|
||
"removeHint": "Phiên mới sẽ không dùng tài khoản này nữa. Các phiên đang chạy trên nó vẫn chạy tiếp.",
|
||
"removeButton": "Xoá",
|
||
"done": {
|
||
"added": "Đã thêm {{name}} vào pool",
|
||
"removed": "Đã xoá {{name}} khỏi pool"
|
||
},
|
||
"errors": {
|
||
"EREAUTH": "Mật khẩu của bạn không đúng.",
|
||
"ETOOMANY": "Nhập sai mật khẩu quá nhiều lần. Thử lại sau 15 phút.",
|
||
"EBADNAME": "Tên: 1–64 ký tự chữ, số, '.', '_' hoặc '-'.",
|
||
"EBADTOKEN": "Token không hợp lệ cho công cụ này.",
|
||
"EEXISTS": "Đã có tài khoản trùng tên trong pool.",
|
||
"ENOACCOUNT": "Tài khoản đó không còn trong pool.",
|
||
"ELOCALMODE": "Ở chế độ local, pool được thay đổi từ shell của máy (agenthub accounts).",
|
||
"EACTIVE": "Claude Code của server giữ login này trong macOS Keychain. Hãy chuyển nó sang profile khác trước.",
|
||
"ENOTFOUND": "Login đã lưu đó không còn nữa.",
|
||
"ESTALE": "Login này đã được làm mới ở nơi khác. Đăng nhập lại và lưu lại.",
|
||
"EUPSTREAM": "Không kết nối được Anthropic. Thử lại."
|
||
},
|
||
"source": "Nguồn",
|
||
"sources": {
|
||
"profile": "Login đã lưu (profile Switch account)",
|
||
"credentials": "Dán .credentials.json / Keychain",
|
||
"token": "claude setup-token"
|
||
},
|
||
"sourceHint": {
|
||
"profile": "Login được chuyển vào pool: profile rời khỏi trình đổi tài khoản, và server ghi nó vào home của từng user khi phiên của họ bắt đầu.",
|
||
"credentials": "Lấy từ ~/.claude/.credentials.json, hoặc trên Mac: `security find-generic-password -s \"Claude Code-credentials\" -w`. Đừng dùng tiếp login đó ở nơi đã copy — hai bản sẽ làm nhau bị đăng xuất.",
|
||
"token": "Token 1 năm từ `claude setup-token`, đưa vào mọi phiên qua biến môi trường."
|
||
},
|
||
"profile": "Profile",
|
||
"profileHint": "Lưu ở Settings → Claude config → Switch account. Profile mà Claude Code của server đang dùng cũng chuyển được: server vẫn chạy trên nó và tự làm mới cho mọi người.",
|
||
"chooseProfile": "Chọn login đã lưu…",
|
||
"noProfiles": "Chưa có login nào — lưu ở Settings → Claude config → Switch account",
|
||
"loadingProfiles": "Đang tải…",
|
||
"activeHere": "server đang dùng — vẫn chạy tiếp",
|
||
"nameFromProfile": "Để trống để dùng tên profile",
|
||
"secret": {
|
||
"credentials": "Credentials JSON",
|
||
"token": "Token",
|
||
"codex": "API key hoặc auth.json"
|
||
},
|
||
"secretHint": {
|
||
"credentials": "Toàn bộ file: {\"claudeAiOauth\": {…}}",
|
||
"token": "Chuỗi sk-ant-… mà `claude setup-token` in ra.",
|
||
"codex": "OpenAI API key (sk-…), hoặc toàn bộ ~/.codex/auth.json sau khi `codex login` bằng tài khoản ChatGPT."
|
||
},
|
||
"refreshFailed": "làm mới lỗi"
|
||
},
|
||
"delete": {
|
||
"button": "Xoá user",
|
||
"title": "Xoá {{name}}?",
|
||
"body": "Thao tác này xoá vĩnh viễn {{name}}: tài khoản đăng nhập, {{count}} workspace, và tài khoản Linux cùng toàn bộ thư mục home (/srv/agenthub/users/{{user}}) — mọi file và source code trong đó. Không thể khôi phục. Lịch sử session và audit log vẫn được giữ.",
|
||
"confirm": "Xoá vĩnh viễn",
|
||
"needsPassword": "Hãy nhập mật khẩu của bạn ở ô bên dưới trước."
|
||
}
|
||
}
|