c5aba094bd
- AI Tools moves from a Settings section into a modal behind a button at the Settings tab bar's right edge (AiToolsModal, `actions` on PageTabs, /settings#ai-tools); rows get an enable switch, Default badge, and an Update button for every tool whose catalog names an updater (no version lookup on open); not-installed tools fold behind a disclosure, a finished job's log folds to one line; shared AiToolIcon - codex updates through its own `codex update`, openclaw/hermes gain `update --yes`; update-all runs every installed updater and skips an npm one only when npm does not manage the binary - Add-lane tool picker is one button showing the chosen tool that opens the enabled tools as buttons - Claude Code / Codex AgentHub sub-tab folded into Overview (home editor, hooks, pricing); the path list drops CLAUDE_HOME/CODEX_HOME; HomeDirSetting shows the saved value only while the field differs - Preview/Raw toggle for markdown files in the config FileViewer and the Changes panel's whole-file view (MarkdownPreview: react-markdown + remark-gfm, raw HTML never run, frontmatter as a code block) - docs and the CLAUDE.md marker updated
389 lines
20 KiB
JSON
389 lines
20 KiB
JSON
{
|
|
"title": "Trình khám phá cấu hình Claude",
|
|
"subtitle": "Toàn cảnh thiết lập Claude Code của bạn - plugin, skill, subagent, máy chủ MCP, hook và cài đặt.",
|
|
"refresh": "Làm mới",
|
|
"refreshing": "Đang làm mới…",
|
|
"lastUpdated": "Cập nhật lần cuối {{time}}",
|
|
"loadError": "Tải thất bại: {{message}}",
|
|
"scope": {
|
|
"all": "Tất cả phạm vi",
|
|
"user": "Người dùng",
|
|
"project": "Dự án",
|
|
"projectLocal": "Dự án (cục bộ)",
|
|
"home": "Home"
|
|
},
|
|
"tabs": {
|
|
"overview": "Tổng quan",
|
|
"skills": "Skills",
|
|
"agents": "Subagent",
|
|
"commands": "Lệnh slash",
|
|
"outputStyles": "Kiểu xuất",
|
|
"plugins": "Plugin",
|
|
"marketplaces": "Marketplace",
|
|
"mcp": "Máy chủ MCP",
|
|
"hooks": "Hooks",
|
|
"keybindings": "Phím tắt",
|
|
"settings": "Cài đặt",
|
|
"memory": "Bộ nhớ"
|
|
},
|
|
"overview": {
|
|
"rootsTitle": "Thư mục gốc",
|
|
"claudeHome": "Claude home",
|
|
"projectClaudeDir": "Dự án .claude",
|
|
"projectRoot": "Thư mục dự án",
|
|
"claudeJson": "claude.json",
|
|
"summary": "Tóm tắt nhanh",
|
|
"user": "người dùng",
|
|
"project": "dự án",
|
|
"items": "mục"
|
|
},
|
|
"common": {
|
|
"search": "Tìm theo tên…",
|
|
"clearSearch": "Xóa tìm kiếm",
|
|
"empty": "Chưa có nội dung.",
|
|
"viewSource": "Xem nguồn",
|
|
"close": "Đóng",
|
|
"copyPath": "Sao chép đường dẫn",
|
|
"copied": "Đã sao chép",
|
|
"truncated": "(đã cắt bớt để xem trước)",
|
|
"size": "Kích thước",
|
|
"modified": "Đã sửa",
|
|
"scopeLabel": "Phạm vi",
|
|
"noFrontmatter": "Không có frontmatter",
|
|
"redactedNotice": "Các giá trị khớp /token|secret|password|key|auth/i đã được ẩn ở phía máy chủ.",
|
|
"preview": "Xem trước",
|
|
"raw": "Mã nguồn"
|
|
},
|
|
"skills": {
|
|
"name": "Tên",
|
|
"description": "Mô tả"
|
|
},
|
|
"agents": {
|
|
"name": "Tên",
|
|
"model": "Model",
|
|
"tools": "Công cụ"
|
|
},
|
|
"plugins": {
|
|
"manifest": "Manifest",
|
|
"marketplace": "Marketplace",
|
|
"version": "Phiên bản",
|
|
"installedAt": "Cài đặt lúc",
|
|
"lastUpdated": "Cập nhật",
|
|
"installPath": "Đường dẫn cài đặt",
|
|
"missing": "Thiếu đường dẫn cài đặt",
|
|
"manifestMissing": "Không tìm thấy installed_plugins.json tại {{path}}",
|
|
"enabled": "Đang bật",
|
|
"disabled": "Đã tắt",
|
|
"contributes": "Cung cấp",
|
|
"skills_other": "{{count}} skill",
|
|
"agents_other": "{{count}} agent",
|
|
"commands_other": "{{count}} lệnh",
|
|
"outputStyles_other": "{{count}} output style",
|
|
"hooks_other": "{{count}} hook script",
|
|
"author": "Tác giả",
|
|
"homepage": "Trang chủ",
|
|
"license": "Giấy phép",
|
|
"description": "Mô tả"
|
|
},
|
|
"marketplaces": {
|
|
"manifest": "Manifest marketplace đã biết",
|
|
"noMarketplaces": "Chưa đăng ký marketplace.",
|
|
"source": "Nguồn",
|
|
"lastUpdated": "Đồng bộ lần cuối",
|
|
"pluginCount": "Plugin",
|
|
"owner": "Chủ sở hữu",
|
|
"installLocation": "Đường dẫn cài",
|
|
"addCmd": "claude plugin marketplace add <repo>"
|
|
},
|
|
"keybindings": {
|
|
"file": "Tệp nguồn",
|
|
"missing": "Không tìm thấy keybindings.json tại {{path}}",
|
|
"context": "Ngữ cảnh",
|
|
"key": "Phím",
|
|
"action": "Hành động",
|
|
"docsLink": "Xem tài liệu phím tắt",
|
|
"contextPlaceholder": "Ngữ cảnh (vd: Global, Chat)",
|
|
"addContext": "Thêm ngữ cảnh",
|
|
"removeContext": "Xoá ngữ cảnh",
|
|
"addBinding": "Thêm phím tắt",
|
|
"removeBinding": "Xoá phím tắt",
|
|
"errContext": "Mỗi ngữ cảnh cần có tên.",
|
|
"errDupContext": "Ngữ cảnh trùng lặp: {{context}}",
|
|
"errEmpty": "Mỗi phím tắt trong \"{{context}}\" cần cả phím và hành động.",
|
|
"errDupKey": "Phím trùng lặp \"{{key}}\" trong ngữ cảnh \"{{context}}\"."
|
|
},
|
|
"statusline": {
|
|
"title": "Statusline",
|
|
"configured": "Lệnh statusline đã cấu hình",
|
|
"scripts": "Script statusline trong CLAUDE_HOME",
|
|
"noStatusline": "Chưa cấu hình statusline."
|
|
},
|
|
"hookScripts": {
|
|
"title": "Script ~/.claude/hooks/",
|
|
"subtitle": "Các script hỗ trợ được tham chiếu bởi lệnh hook của bạn. Chạy khi `hooks.<event>.hooks[].command` trong settings.json gọi đến.",
|
|
"empty": "Không có script trong ~/.claude/hooks/."
|
|
},
|
|
"mcp": {
|
|
"userScope": "Máy chủ phạm vi người dùng",
|
|
"projectScope": "Máy chủ phạm vi dự án",
|
|
"name": "Tên",
|
|
"scope": "Phạm vi",
|
|
"scopeUser": "Người dùng",
|
|
"scopeLocal": "Dự án này",
|
|
"command": "Lệnh",
|
|
"args": "Tham số",
|
|
"env": "Tên env",
|
|
"url": "URL",
|
|
"headers": "Tên Header",
|
|
"kind": "Loại",
|
|
"source": "Nguồn",
|
|
"noServers": "Không tìm thấy máy chủ MCP.",
|
|
"notRemovable": "Được cấu hình trong settings.json — hãy xóa ở đó; không có phạm vi CLI nào áp dụng cho mục này."
|
|
},
|
|
"hooks": {
|
|
"noHooks": "Chưa cấu hình hook.",
|
|
"matcher": "Bộ khớp",
|
|
"command": "Lệnh",
|
|
"type": "Loại",
|
|
"timeout": "Timeout",
|
|
"fileMissing": "(không có file settings trong phạm vi này)"
|
|
},
|
|
"settings": {
|
|
"fileMissing": "(không có file settings trong phạm vi này)"
|
|
},
|
|
"memory": {
|
|
"userScope": "Bộ nhớ người dùng",
|
|
"projectScope": "Bộ nhớ dự án",
|
|
"missing": "Không tìm thấy CLAUDE.md.",
|
|
"autoTitle": "Kho bộ nhớ dự án",
|
|
"autoSubtitle": "Bộ nhớ theo tệp cho từng dự án trong ~/.claude/projects/<dự-án>/memory/ — một chỉ mục MEMORY.md cùng một tệp cho mỗi sự kiện được ghi nhớ. Chỉ đọc tại đây.",
|
|
"noMatches": "Không có tệp bộ nhớ nào khớp với tìm kiếm.",
|
|
"indexFiles": "Chỉ mục",
|
|
"jumpTo": "Nhảy tới tệp",
|
|
"fileCount_one": "{{count}} tệp",
|
|
"fileCount_other": "{{count}} tệp",
|
|
"factFiles_one": "{{count}} sự kiện",
|
|
"factFiles_other": "{{count}} sự kiện",
|
|
"newFile": "Tệp mới",
|
|
"newFileTitle": "Tệp bộ nhớ mới trong {{project}}",
|
|
"namePlaceholder": "vd: my_fact.md",
|
|
"nameHelp": "Tên tệp kết thúc bằng .md (sẽ tự thêm .md nếu bạn bỏ qua).",
|
|
"projectLabel": "Dự án",
|
|
"projectHelp": "Được tạo trong thư mục bộ nhớ của dự án này."
|
|
},
|
|
"projectMemory": {
|
|
"newButton": "Memory cho project khác",
|
|
"title": "Tạo {{file}} cho một project khác",
|
|
"dirLabel": "Thư mục project",
|
|
"dirHelp": "Đường dẫn tuyệt đối tới một project đã có trên máy. {{file}} sẽ được tạo bên trong; file đã tồn tại thì không bao giờ bị ghi đè.",
|
|
"dirRequired": "Cần nhập thư mục project",
|
|
"createButton": "Tạo",
|
|
"created": "Đã tạo {{path}}",
|
|
"template": "# Project memory\n\nProject này là gì, và những gì agent cần biết trước khi đụng vào.\n\n## Stack\n\n## Quy ước\n\n## Lệnh thường dùng\n",
|
|
"contentLabel": "Nội dung",
|
|
"cancel": "Huỷ",
|
|
"saving": "Đang tạo…",
|
|
"close": "Đóng"
|
|
},
|
|
"edit": {
|
|
"newButton": "Tạo mới",
|
|
"editButton": "Sửa",
|
|
"deleteButton": "Xoá",
|
|
"save": "Lưu",
|
|
"cancel": "Huỷ",
|
|
"saving": "Đang lưu…",
|
|
"deleting": "Đang xoá…",
|
|
"newTitle": "Tạo mới {{type}}",
|
|
"editTitle": "Sửa {{name}}",
|
|
"namePlaceholder": "tên (kebab-case, không khoảng trắng)",
|
|
"nameLabel": "Tên",
|
|
"nameHelp": "Chữ, số, dấu chấm, gạch ngang, gạch dưới. Tối đa 64 ký tự.",
|
|
"contentLabel": "Nội dung",
|
|
"scopePicker": "Phạm vi",
|
|
"writeError": "Lưu thất bại: {{message}}",
|
|
"deleteError": "Xoá thất bại: {{message}}",
|
|
"saveSuccess": "Đã lưu · bản sao tại {{path}}",
|
|
"saveSuccessNew": "Đã tạo.",
|
|
"deleteSuccess": "Đã xoá · bản sao tại {{path}}",
|
|
"confirmDelete": "Xoá mục này?",
|
|
"confirmDeleteBody": "Tệp (hoặc thư mục skill cùng tài nguyên đi kèm) sẽ được sao lưu kèm dấu thời gian trước khi xoá. Bản sao nằm ngoài thư mục CLI quét, nên mục này sẽ biến mất khỏi CLI.",
|
|
"confirmDeletePath": "Đường dẫn: {{path}}",
|
|
"confirmDeleteAction": "Xác nhận sao lưu và xoá",
|
|
"templates": {
|
|
"skills": "---\nname: my-skill\ndescription: Mô tả ngắn gọn\n---\n\nNội dung - skill làm gì, khi nào dùng, ví dụ.\n",
|
|
"agents": "---\nname: my-agent\ndescription: Khi nào gọi subagent này\ntools: Read, Grep\nmodel: sonnet\n---\n\nSystem prompt cho subagent.\n",
|
|
"commands": "---\ndescription: Mô tả hiển thị trong menu /\n---\n\n/my-command làm gì.\n",
|
|
"output-styles": "---\nname: my-style\ndescription: Mô tả kiểu xuất\n---\n\nChỉ thị về kiểu.\n",
|
|
"memory": "# Bộ nhớ dự án\n\nClaude đọc tệp này khi bắt đầu phiên.\n",
|
|
"auto-memory": "---\nname: my-fact\ndescription: Tóm tắt một dòng về sự kiện được ghi nhớ\nmetadata:\n type: feedback\n---\n\nNội dung cần ghi nhớ.\n"
|
|
}
|
|
},
|
|
"backups": {
|
|
"title": "Bản sao lưu",
|
|
"empty": "Chưa có bản sao lưu - mỗi lần sửa hoặc xoá sẽ tạo bản sao có dấu thời gian.",
|
|
"viewLink": "Xem lịch sử sao lưu",
|
|
"openButton": "Bản sao lưu",
|
|
"subtitle": "Mỗi thao tác lưu / xoá đều ghi bản sao tới đây trước. Thư mục sao lưu nằm ngoài các vị trí Claude Code quét, nên không xuất hiện như mục thừa trong CLI.",
|
|
"restoreHint": "Khôi phục bằng cách đổi tên bản sao về vị trí cũ:",
|
|
"size": "Kích thước",
|
|
"created": "Tạo lúc",
|
|
"type": "Loại",
|
|
"scopeLabel": "Phạm vi",
|
|
"filterAll": "Tất cả loại"
|
|
},
|
|
"profiles": {
|
|
"usageCheck": "Kiểm tra quota",
|
|
"usageChecking": "Đang kiểm tra…",
|
|
"usageRefresh": "Làm mới",
|
|
"usageRetry": "Thử lại",
|
|
"usageFiveHour": "5h",
|
|
"usageSevenDay": "7 ngày",
|
|
"usageResets": "Reset lúc {{time}}",
|
|
"usageHint": "Hỏi Anthropic tài khoản này đã dùng bao nhiêu. Thao tác này làm mới token đăng nhập đã lưu của profile.",
|
|
"title": "Profile Claude Code",
|
|
"openButton": "Đổi profile",
|
|
"subtitle": "Mỗi profile là một tài khoản Anthropic - quota riêng. Khi đổi, chỉ phần đăng nhập (credentials + danh tính tài khoản) được hoán đổi; skills, subagent, memory, plugin, marketplace, MCP server và settings vẫn giữ nguyên.",
|
|
"warning": "Hãy đóng các phiên Claude Code đang chạy trước khi đổi - phiên đang chạy sẽ ghi lại config khi thoát và đưa tài khoản cũ quay về.",
|
|
"activeLabel": "Đang đăng nhập",
|
|
"noActive": "Chưa có tài khoản Claude nào đăng nhập trên máy này.",
|
|
"unsavedActive": "Tài khoản này chưa được lưu thành profile - hãy lưu lại, nếu không sẽ không thể đổi sang profile khác mà không mất credentials của nó.",
|
|
"saveButton": "Lưu tài khoản này thành profile",
|
|
"saveSuccess": "Đã lưu tài khoản đang đăng nhập. Bấm vào tên của nó để đổi tên.",
|
|
"empty": "Chưa có profile nào - hãy lưu tài khoản đang đăng nhập để bắt đầu.",
|
|
"activeBadge": "đang dùng",
|
|
"switchButton": "Chuyển sang",
|
|
"switching": "Đang chuyển…",
|
|
"switchSuccess": "Đã chuyển sang profile \"{{name}}\". Mở phiên Claude Code mới để áp dụng.",
|
|
"deleteButton": "Xoá profile",
|
|
"deleteSuccess": "Đã xoá profile \"{{name}}\".",
|
|
"savedAt": "Lưu lúc {{time}}",
|
|
"loginHint": "Thêm tài khoản khác bằng cách đăng nhập từ terminal trước:",
|
|
"saving": "Đang lưu…",
|
|
"renameLabel": "Tên profile",
|
|
"renameHint": "Bấm để đổi tên",
|
|
"renameSuccess": "Đã đổi tên thành \"{{name}}\"."
|
|
},
|
|
"explain": {
|
|
"hooks": {
|
|
"title": "Sửa hooks tức là ghi vào settings.json",
|
|
"body": "Hooks nằm trong khối `hooks` của các tệp `settings.json` mà Claude Code liên tục ghi vào. Lưu ở đây chỉ ghi đúng sự kiện bạn sửa, sao lưu file trước, và giữ nguyên mọi khoá khác — nhưng phiên `claude` đang chạy vẫn dùng hooks cũ cho tới khi khởi động lại. Cẩn thận với các mục tiếp nhận sự kiện của chính dashboard (lệnh `hook-handler.js` bên dưới).",
|
|
"howTo": "Bạn cũng có thể sửa bằng:",
|
|
"cmd1": "claude config /hooks",
|
|
"cmd1Note": "Trình chỉnh sửa hooks tương tác trong Claude Code",
|
|
"cmd2": "$EDITOR ~/.claude/settings.json",
|
|
"cmd2Note": "Sửa thủ công khối hooks ở phạm vi user",
|
|
"cmd3": "$EDITOR .claude/settings.json",
|
|
"cmd3Note": "Sửa thủ công khối hooks ở phạm vi dự án"
|
|
},
|
|
"settings": {
|
|
"title": "Sửa settings là gộp theo từng khoá",
|
|
"body": "Các tệp JSON này được CLI `claude` ghi đè mỗi khi đổi model, theme, bật plugin… Lưu ở đây sẽ đọc lại file và chỉ ghi những khoá bạn đổi (sau khi sao lưu kèm mốc thời gian), nên CLI ghi song song cũng không mất gì khác — nhưng phiên đang chạy có thể chỉ nhận thay đổi sau khi khởi động lại.",
|
|
"howTo": "Bạn cũng có thể sửa bằng:",
|
|
"cmd1": "claude config set <key> <value>",
|
|
"cmd1Note": "Đặt một khoá riêng lẻ an toàn",
|
|
"cmd2": "/config",
|
|
"cmd2Note": "Mở giao diện config tương tác trong CLI",
|
|
"cmd3": "$EDITOR ~/.claude/settings.json",
|
|
"cmd3Note": "Sửa thủ công (chỉ khi không có process claude nào đang chạy)"
|
|
},
|
|
"plugins": {
|
|
"title": "Plugin chạy qua CLI `claude`",
|
|
"body": "Plugin là các gói có registry riêng — `installed_plugins.json` cùng đường dẫn cài trong `plugins/cache/`. Các nút ở đây chạy đúng lệnh `claude plugin …` trên máy này nên registry luôn nhất quán. Cài plugin nghĩa là chạy mã của bên thứ ba: chỉ thêm marketplace mà bạn tin tưởng.",
|
|
"install": "Cài plugin:",
|
|
"installCmd": "claude plugin install <marketplace>/<plugin>",
|
|
"uninstall": "Gỡ plugin này:",
|
|
"uninstallButton": "Sao chép lệnh gỡ"
|
|
},
|
|
"mcp": {
|
|
"title": "MCP server được CLI quản lý",
|
|
"body": "Cấu hình MCP server nằm trong `~/.claude.json`, đúng tệp mà CLI đang chạy ghi liên tục. Ghi đồng thời từ dashboard sẽ phá hỏng trạng thái dự án, nên flow add/remove đi qua chính Claude Code.",
|
|
"list": "Liệt kê server đã cấu hình:",
|
|
"listCmd": "claude mcp list",
|
|
"add": "Thêm server:"
|
|
},
|
|
"marketplaces": {
|
|
"title": "Marketplace là nơi plugin đến từ đó",
|
|
"body": "Marketplace là một repo git (hoặc thư mục local) có `.claude-plugin/marketplace.json` liệt kê các plugin nó cung cấp. Thêm vào tức là đăng ký trong `known_marketplaces.json` và clone về máy; plugin của nó sẽ hiện ở tab Plugins để cài. Xóa marketplace không gỡ những plugin bạn đã cài từ nó."
|
|
}
|
|
},
|
|
"snippet": {
|
|
"copy": "Sao chép",
|
|
"copied": "Đã sao chép"
|
|
},
|
|
"updateAll": {
|
|
"title": "Cập nhật toàn bộ",
|
|
"help": "Làm mới mọi marketplace, rồi cập nhật tất cả plugin đã cài, sau đó yêu cầu các session Claude Code mà dashboard đang mở nạp lại thay đổi. AgentHub đứng cuối, vì cập nhật nó sẽ khởi động lại dashboard này.",
|
|
"button": "Cập nhật tất cả",
|
|
"working": "Đang cập nhật…",
|
|
"started": "Đã bắt đầu cập nhật {{count}} plugin.",
|
|
"failed": "Không khởi động được tiến trình cập nhật.",
|
|
"reloadButton": "Nạp lại session",
|
|
"reloaded": "Đã gửi lệnh nạp lại tới {{count}} session đang mở.",
|
|
"reloadedNone": "Không có session Claude Code nào đang mở để nạp lại.",
|
|
"reloadedCount": "— {{count}} session",
|
|
"restartWarning": "Giữ tab này mở. Nếu chính AgentHub được cập nhật, dashboard sẽ khởi động lại ở bước cuối và trang tự kết nối lại.",
|
|
"abandoned": "Đợt cập nhật trước dừng giữa đường — rất có thể do máy khởi động lại. Hãy chạy lại.",
|
|
"bootstrapFailed": "Dashboard đã bị dừng nhưng không sống lại: {{error}}. Chạy /agenthub-update để khôi phục."
|
|
},
|
|
"manage": {
|
|
"installTitle": "Cài plugin",
|
|
"installPlaceholder": "owner/repo, https://… hoặc plugin@marketplace",
|
|
"installButton": "Thêm",
|
|
"installHelp": "Dán link GitHub, URL hoặc đường dẫn local để đăng ký marketplace, hoặc gõ <plugin>@<marketplace> để cài thẳng plugin. Chạy CLI `claude plugin` trên máy này.",
|
|
"install": "Cài",
|
|
"installed": "Đã cài {{name}}.",
|
|
"availableTitle": "Có sẵn từ marketplace của bạn",
|
|
"cliUnavailable": "Không liệt kê được plugin: {{message}}",
|
|
"working": "Đang chạy…",
|
|
"enable": "Bật",
|
|
"enabled": "Đã bật {{name}}.",
|
|
"disable": "Tắt",
|
|
"disabled": "Đã tắt {{name}}.",
|
|
"update": "Cập nhật",
|
|
"updated": "Đã cập nhật {{name}}.",
|
|
"uninstall": "Gỡ",
|
|
"confirmUninstall": "Bấm lần nữa để gỡ",
|
|
"uninstalled": "Đã gỡ {{name}}.",
|
|
"remove": "Xóa",
|
|
"confirmRemove": "Bấm lần nữa để xóa",
|
|
"addMarketplaceTitle": "Thêm marketplace",
|
|
"addMarketplacePlaceholder": "owner/repo, https://github.com/… hoặc /đường/dẫn/tuyệt/đối",
|
|
"addMarketplaceButton": "Thêm",
|
|
"addMarketplaceHelp": "Đăng ký marketplace bằng `claude plugin marketplace add`; plugin của nó sẽ hiện ở tab Plugins.",
|
|
"marketplaceAdded": "Đã thêm marketplace {{name}}.",
|
|
"marketplaceUpdated": "Đã cập nhật marketplace {{name}}.",
|
|
"marketplaceRemoved": "Đã xóa marketplace {{name}}.",
|
|
"addMcpTitle": "Thêm máy chủ MCP",
|
|
"addMcpNamePlaceholder": "tên",
|
|
"addMcpTransportStdio": "Lệnh (stdio)",
|
|
"addMcpTransportHttp": "URL (http)",
|
|
"addMcpCommandPlaceholder": "npx -y @modelcontextprotocol/server-github",
|
|
"addMcpUrlPlaceholder": "https://mcp.example.com",
|
|
"addMcpButton": "Thêm",
|
|
"addMcpHelp": "Chạy lệnh `claude mcp add`. \"Dự án này\" giới hạn server trong checkout hiện tại — phạm vi `project` riêng của CLI (một `.mcp.json` dùng chung) không được cung cấp ở đây vì dashboard không thể thấy các server lưu ở đó.",
|
|
"mcpAdded": "Đã thêm máy chủ MCP {{name}}.",
|
|
"mcpRemoved": "Đã xóa máy chủ MCP {{name}}.",
|
|
"hookEvent": "Tên sự kiện (vd PreToolUse)",
|
|
"hookAddEvent": "Thêm sự kiện",
|
|
"hookRemoveEvent": "Xóa sự kiện",
|
|
"hookAddEntry": "Thêm hook",
|
|
"hookRemoveEntry": "Xóa hook",
|
|
"hookBadEvent": "“{{event}}” không phải tên sự kiện hợp lệ.",
|
|
"hookDupEvent": "Sự kiện {{event}} bị lặp hai lần.",
|
|
"hookEmptyCommand": "Mọi hook trong {{event}} đều cần có lệnh.",
|
|
"hooksSaved": "Đã lưu hook vào {{file}}.",
|
|
"hookUneditable": "Giữ nguyên (không đúng dạng sửa được): {{events}}",
|
|
"settingsKey": "Khóa",
|
|
"settingsKeyPlaceholder": "key hoặc dotted.path",
|
|
"settingsValue": "Giá trị (JSON)",
|
|
"settingsAddKey": "Thêm khóa",
|
|
"settingsRemoveKey": "Xóa khóa",
|
|
"settingsEmptyKey": "Tên khóa không được để trống.",
|
|
"settingsDupKey": "Khóa {{key}} bị lặp hai lần.",
|
|
"settingsBadJson": "Giá trị của {{key}} không phải JSON hợp lệ.",
|
|
"settingsSaved": "Đã lưu settings vào {{file}}.",
|
|
"settingsHelp": "Giá trị là JSON: \"opus\", true, 42, [\"a\"], {\"k\":1}. Chỉ những khóa bạn sửa mới được ghi; phần còn lại của file giữ nguyên.",
|
|
"settingsRedactedKeys": "Không sửa được ở đây vì giá trị đã bị che: {{keys}}"
|
|
}
|
|
}
|