Files
AgentHub/client/src/i18n/locales/vi/ccConfig.json
T
nntrivi2001 56bf5bbf4d fix(codex-config): close fix-round-1 parity gaps against CcConfig
Isolate the codex-CLI-backed reads (mcp/plugins/marketplaces) from the
file-backed ones in fetchAll via two independent Promise.all groups, so a
missing `codex` binary degrades only the mcp/plugins tabs instead of
leaving the whole panel stuck on skeletons. Generalize EditorModal's
nameless-type detection behind a `namelessTypes` prop (defaulting to
Claude's own ["memory"]) so Codex's config.toml can be created without a
name. Port BackupsModal, disable the plugin/mcp Remove button when no
stable identifier resolved, hide the inert search box on memory/config,
drop a redundant empty state, and reword the delete-dialog copy to be
tool-neutral.

Co-authored-by: Nguyễn Ngọc Trí Vĩ <vinnt@smartgift.vn>
2026-09-08 21:34:06 +07:00

338 lines
17 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ủ."
},
"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",
"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."
},
"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."
},
"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": {
"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:",
"addCmd": "claude mcp add <name> <command> [args…]",
"remove": "Gỡ server này:",
"removeButton": "Sao chép lệnh gỡ"
},
"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"
},
"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}}.",
"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}}"
}
}