{ "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", "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": { "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}} trong 7 ngày", "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." } }