Files
AgentHub/client/src/i18n/locales/vi/artifacts.json
T
nntrivi2001 c946b73d11 chore: v2.8.71 — remote clients (company hub), artifacts shared with chosen people, folders and viewable copies, fixes
Remote clients (docs/plans/remote-clients/README.md, B1–B3 for the Claude pool):
- server/hub/ holds the hub-only code (devices, remote sessions, upload ingest,
  LAN gateway), required only in server mode; hub-boundary.test.js keeps local
  code from importing it.
- A local install enrolls with `agenthub remote login` or Settings → AI tools →
  Company hub; the "Company account" AI Proxy (reserved name agenthub.company)
  sends a session through the hub's gateway, which adds a pool account's token —
  no credential reaches the machine. Only those sessions are uploaded, hourly
  and at their end; secret-shaped strings are redacted on the client.
- Gateway refuses: unknown device (401), a message without a session id, an
  unregistered session under AGENTHUB_REMOTE_GATE=block, a user over quota
  (EQUOTA), a purged session (410). Device tokens 90 days, conversations 30.
- New alert rule type remote_unmonitored: a company-account session its device
  never registered; a late registration clears the flag instead.
- The hub imports a session once per upload round (chunks carry `more`),
  not once per chunk.

Artifacts:
- Share an artifact with chosen people (artifact_shares, PATCH sharedWith,
  GET /api/artifacts/people) besides everyone; a "Shared with you" tab.
  Only the owner or an admin sees or edits who it is shared with; audited.
- Folders: each account's own arrangement (agenthub.artifacts.folders pref).
- A claude.ai page keeps a copy viewable without the publishing account: its
  HTML file (and supporting files) snapshotted at publish, or the copy Claude
  saves for a Doc / Slides / Design in artifacts-export/ (a synchronous
  PostToolUse hint hook, scripts/artifact-export-hint.js, admin switch),
  attached to the page at Stop. Viewed in HtmlFrame's sandbox, Markdown, or
  pdf.js (pdfjs-dist 6.4.299, legacy build, loaded only for a PDF).

Fixes:
- tmux: a cached /proc/<pid>/exe of an exited server falls back to PATH's
  tmux (stop the last pane, start again within 10 s failed with ENOENT).
- shelves: a shelf restores beside changes in other files.
- chat: a finished reply ends the turn even with no hook at all.
- Settings → AI tools: profile list display tweaks.
2026-11-04 15:16:49 +07:00

278 lines
16 KiB
JSON

{
"title": "Artifacts",
"subtitle": "Những gì agent đã tạo ra — trang claude.ai, file, skill và plugin — gom một chỗ.",
"subtitleServer": "Những gì agent đã tạo ra — trang claude.ai, file, skill và plugin. Chia sẻ một mục là nó hiện trong Hub cho mọi người.",
"tab.mine": "Thư viện của tôi",
"tab.hub": "Hub",
"kind.all": "Tất cả",
"kind.page": "Trang",
"kind.file": "File",
"kind.skill": "Skill",
"kind.plugin": "Plugin",
"kindOne.page": "Trang",
"kindOne.file": "File",
"kindOne.skill": "Skill",
"kindOne.plugin": "Plugin",
"search": "Tìm artifact…",
"add": "Thêm",
"add.page": "Link claude.ai",
"add.file": "File từ workspace",
"add.skill": "Skill",
"add.plugin": "Plugin",
"empty.mine": "Chưa có gì. Trang mà phiên publish sẽ tự xuất hiện; thêm file, skill và plugin bằng nút Thêm.",
"empty.hub": "Chưa ai chia sẻ gì.",
"loading": "Đang tải…",
"by": "của {{name}}",
"shared": "Đã chia sẻ",
"share": "Chia sẻ",
"unshare": "Bỏ chia sẻ",
"shareDone": "Đã chia sẻ lên Hub",
"unshareDone": "Đã ngừng chia sẻ",
"reshare": "Share lại",
"reshareDone": "Đã share bản mới — người đã cài sẽ thấy nút Cập nhật",
"reshareSame": "Đã là bản mới nhất — đã share",
"reshareAskTitle": "Chọn lại thư mục {{name}}",
"reshareAskBody": "Server không có bản của {{name}}. Chọn thư mục của skill (thư mục chứa SKILL.md): bản này sẽ được thay, và người đã cài sẽ thấy nút Cập nhật. Với file .zip, tải lên qua Thêm skill → Tải lên: skill trùng tên sẽ cập nhật mục bạn đã có.",
"resharePick": "Chọn thư mục",
"open": "Mở",
"copyLink": "Sao chép link",
"preview": "Xem",
"download": "Tải về",
"noPreview": "Không xem trước được loại file này — hãy tải về để mở.",
"install": "Cài",
"installs": "{{count}} lượt cài",
"installed": "Đã cài vào {{path}}",
"installedPlugin": "Đã cài {{name}} — mở phiên mới (hoặc /reload-plugins) để dùng",
"rename": "Sửa",
"delete": "Xoá",
"deleteTitle": "Xoá “{{title}}”?",
"deleteBody": "Mục này bị gỡ khỏi thư viện của bạn và Hub. Những bản người khác đã cài vẫn giữ nguyên.",
"deleteConfirm": "Xoá",
"installTitle": "Cài “{{title}}”?",
"installSkillBody": "Các file này được ghi vào ~/.claude/skills/{{name}}/ và ~/.agents/skills/{{name}}/ của chính bạn, để mọi AI tool và mọi phiên đều dùng được. Skill có thể kèm script mà agent sẽ chạy — chỉ cài thứ bạn tin:",
"installPluginBody": "Chạy dưới tài khoản của bạn: claude plugin marketplace add {{market}} và claude plugin install {{name}} --scope user. Chỉ cài thứ bạn tin.",
"installConfirm": "Cài",
"replaceTitle": "Thay skill “{{name}}” của bạn?",
"replaceBody": "Bạn đã có skill trùng tên. Bản cũ được chuyển vào ~/.claude/agenthub-replaced-skills/, không bị xoá.",
"replaceConfirm": "Thay",
"installsOff": "Đang tắt cài đặt",
"installsSwitch": "Cho phép cài từ Hub",
"installsSwitchHint": "Tắt: không ai cài được skill hay plugin chia sẻ vào tài khoản của mình.",
"form.url": "Link claude.ai",
"form.title": "Tiêu đề (tuỳ chọn)",
"form.description": "Mô tả (tuỳ chọn)",
"form.workspace": "Workspace",
"form.pickWorkspace": "Chọn workspace…",
"form.noCandidates": "Các phiên của workspace này chưa ghi tài liệu nào.",
"form.pinned": "Đã ghim",
"form.pin": "Ghim",
"form.missing": "đã mất",
"form.skillFrom": "Skill",
"form.fromUser": "của tôi",
"form.fromWorkspace": "workspace",
"form.noSkills": "Không thấy skill nào trong ~/.claude/skills của bạn hay .claude/skills của workspace này.",
"form.pluginKey": "Plugin (tên@marketplace)",
"form.market": "Marketplace (owner/repo hoặc git URL)",
"form.save": "Thêm",
"form.cancel": "Huỷ",
"added": "Đã thêm",
"files_one": "{{count}} file",
"files_other": "{{count}} file",
"close": "Đóng",
"fromSession": "Từ một phiên",
"form.saveEdit": "Lưu",
"skill.tab.upload": "Tải file lên",
"skill.tab.write": "Viết mới",
"skill.tab.existing": "Từ skill có sẵn",
"skill.name": "Tên skill",
"skill.slugHint": "Cài vào ~/.claude/skills/{{slug}}/ (và ~/.agents/skills/) và gọi bằng /{{slug}}",
"skill.slugBad": "Chỉ dùng chữ, số, '.', '_' hoặc '-'",
"skill.description": "Mô tả — khi nào Claude nên dùng skill này",
"skill.descriptionHint": "VD: Dùng khi viết release notes từ git log",
"skill.content": "Hướng dẫn (nội dung SKILL.md)",
"skill.contentHint": "Viết các bước Claude cần làm. Có thể dán nguyên một file SKILL.md, kể cả frontmatter.",
"skill.dropHint": "Kéo thả vào đây: SKILL.md, một file Markdown bất kỳ, thư mục skill, nhiều file hoặc file .zip/.skill",
"skill.pickFiles": "Chọn file",
"skill.pickFolder": "Chọn thư mục",
"skill.clear": "Bỏ chọn",
"skill.uploading": "Đang tải lên…",
"skill.shape.none": "Chưa có gì để tải lên",
"skill.shape.single-md": "File Markdown này sẽ thành SKILL.md của skill",
"skill.shape.archive": "File nén — sẽ được giải nén; mỗi thư mục có SKILL.md thành một skill",
"skill.shape.one": "Một thư mục skill",
"skill.shape.many": "{{count}} skill — mỗi skill được thêm riêng, đặt tên theo thư mục",
"skill.shape.no-skill-md": "Không có SKILL.md — thêm một file SKILL.md, hoặc chỉ tải lên một file Markdown",
"skill.manyHint": "Nhiều skill: mỗi skill giữ tên thư mục và mô tả trong SKILL.md của nó.",
"skill.addedMany": "Đã thêm {{count}} skill",
"plugin.link": "Link marketplace",
"plugin.linkHint": "Repo git có .claude-plugin/marketplace.json (link https, link trang web của repo, hoặc owner/repo với GitHub), hoặc link tới file marketplace.json.",
"plugin.read": "Đọc danh sách plugin",
"plugin.reading": "Đang đọc…",
"plugin.none": "Marketplace này không có plugin nào.",
"plugin.all": "Chọn tất cả",
"plugin.have": "đã thêm",
"plugin.addPicked": "Thêm {{count}} plugin",
"plugin.addedMany": "Đã thêm {{count}} plugin",
"plugin.manual": "Nhập tay name@marketplace (link ssh, repo riêng tư…)",
"file.fromComputer": "Từ máy tính (≤ 25 MB)",
"file.upload": "Tải lên",
"file.tooBig": "File lớn hơn 25 MB.",
"file.fromWorkspace": "Hoặc ghim tài liệu do các phiên của workspace đã ghi",
"editTitle": "Sửa “{{title}}”",
"edit.title": "Tiêu đề",
"edit.description": "Mô tả",
"previewFailed": "Không tải được file này.",
"truncated": "Chỉ hiển thị 1 MB đầu — tải file về để xem toàn bộ.",
"section.hub.own": "Tôi đã share",
"section.hub.ownHint": "Của bạn, mọi người dùng đều thấy",
"section.hub.others": "Người khác share",
"section.hub.othersHint": "Những gì người dùng khác đã share — cài cái bạn cần",
"section.mine.own": "Của tôi",
"section.mine.ownHint": "Những gì bạn đã thêm",
"section.mine.others": "Đã cài từ người khác",
"section.mine.othersHint": "Người dùng khác share, đã cài vào tài khoản của bạn",
"section.all.others": "Người khác share",
"section.all.othersHint": "Những gì người dùng khác đã share",
"section.all.own": "Của tôi",
"section.all.ownHint": "Những gì bạn đã thêm, đã share hoặc chưa",
"pages": "Trang",
"section.empty": "Chưa có gì.",
"tab.all": "Tất cả",
"installedBadge": "Đã cài",
"installsTitle": "Lượt cài",
"installsYou": "Bạn",
"installsUnknown": "Người dùng đã xoá",
"installsReplaced": "thay bản cũ",
"versionAt": "Cập nhật {{ago}}",
"versionAtFull": "Cập nhật lần cuối {{date}}",
"installState.latest": "Bản mới nhất",
"installState.outdated": "Bản cũ",
"installState.removed": "Đã gỡ",
"installsPluginWhere": "claude plugin install --scope user",
"installsUnrecorded": "{{count}} lượt cài trước đây chỉ được đếm, không lưu chi tiết",
"installsNoneOfYours": "Bạn chưa cài — chỉ hiện các lượt cài của bạn.",
"uninstall": "Gỡ cài đặt",
"uninstallTitle": "Gỡ cài đặt “{{title}}”?",
"uninstallSkillBody": "~/.claude/skills/{{name}}/ và ~/.agents/skills/{{name}}/ sẽ được chuyển vào ~/.claude/agenthub-replaced-skills/, không bị xoá. Các phiên đang mở vẫn giữ nó cho tới khi tải lại.",
"uninstallPluginBody": "Chạy claude plugin uninstall {{name}} cho tài khoản của bạn; thư mục dữ liệu của plugin được giữ lại. Các phiên đang mở vẫn giữ nó cho tới khi /reload-plugins.",
"uninstalled": "Đã gỡ {{name}}",
"deleteBodyShared": "Mục này đang được chia sẻ nên cũng sẽ biến mất khỏi Hub với mọi người. Muốn giữ lại nhưng thôi chia sẻ thì dùng Bỏ chia sẻ. Những gì đã cài từ nó vẫn được giữ.",
"deleteBodyKeep": "Mục này rời khỏi thư viện của bạn nhưng vẫn ở trên Hub vì đang được chia sẻ. Muốn gỡ khỏi Hub luôn thì sau đó bấm Gỡ khỏi Hub (hoặc Bỏ chia sẻ trước).",
"deleteKept": "Đã xoá khỏi thư viện — vẫn còn trên Hub",
"hubOnly": "Chỉ trên Hub",
"hubOnlyHint": "Bạn đã xoá khỏi thư viện; mục này vẫn được chia sẻ trên Hub",
"hubRemove": "Gỡ khỏi Hub",
"hubRemoveTitle": "Gỡ “{{title}}” khỏi Hub?",
"hubRemoveBody": "Mục này không còn trong thư viện của bạn nên sẽ bị xoá hẳn. Những gì đã cài từ nó vẫn được giữ.",
"edit.otherFiles": "{{count}} file khác của skill được giữ nguyên.",
"edit.reinstallNote": "Bản bạn đã cài vẫn là bản cũ cho đến khi bạn gỡ cài đặt rồi cài lại.",
"preview.instructions": "Hướng dẫn",
"preview.frontmatter": "Frontmatter (phần đầu SKILL.md)",
"preview.whenUsed": "Khi nào Claude dùng",
"preview.noDescription": "Chưa có mô tả",
"preview.installsAs": "Cài vào ~/.claude/skills/{{slug}}/ và ~/.agents/skills/{{slug}}/",
"blurb.skill": "Bộ hướng dẫn tái sử dụng cho Claude",
"blurb.plugin": "Gói skill, lệnh và hook",
"blurb.page": "Trang mà phiên đã publish lên claude.ai",
"blurb.file": "Tài liệu và kết quả đáng giữ lại",
"clearSearch": "Xoá tìm kiếm",
"categories": "Danh mục",
"seeAll": "Xem tất cả",
"results_one": "{{count}} kết quả",
"results_other": "{{count}} kết quả",
"empty.title": "Thư viện đang trống",
"empty.hubTitle": "Hub chưa có gì",
"empty.searchTitle": "Không tìm thấy",
"empty.search": "Không có mục nào khớp tìm kiếm hoặc danh mục này — thử từ khác, hoặc chọn Tất cả.",
"details": "Chi tiết",
"more": "Thao tác khác",
"about": "Giới thiệu",
"stat.kind": "Loại",
"stat.installs": "Lượt cài",
"stat.files": "File",
"stat.size": "Dung lượng",
"stat.updated": "Cập nhật lần cuối",
"detail.runAs": "Gọi bằng",
"detail.market": "Marketplace",
"detail.added": "Thêm lúc {{date}}",
"tab.unowned": "Vô chủ",
"tab.suggested": "Có phải của bạn?",
"auto": "Tự động",
"autoHint": "Tự thêm khi phiên làm việc dừng: file tài liệu phiên đã tạo hoặc sửa",
"unowned.hint": "Những mục không thuộc workspace nào nhưng được tạo trong thư mục của bạn — xác nhận có phải của bạn không",
"unowned.hintAdmin": "Những mục chưa có chủ: phiên không thuộc workspace nào, chạy bằng tài khoản host",
"unowned.mine": "Của tôi",
"unowned.takeIt": "Nhận về tôi",
"unowned.notMine": "Không phải của tôi",
"unowned.assign": "Gán cho…",
"unowned.claimed": "Đã nhận về thư viện của bạn",
"unowned.declined": "Đã bỏ khỏi danh sách của bạn",
"unowned.assigned": "Đã gán chủ",
"unowned.empty": "Không có mục nào chưa có chủ.",
"private": "Riêng tư",
"privateHint": "Chưa chia sẻ: chỉ bạn (và admin) thấy. Bấm Chia sẻ để đưa lên Hub.",
"showMore": "Xem thêm {{count}}",
"view.label": "Cách hiển thị",
"view.list": "Dạng danh sách",
"view.grid": "Dạng lưới",
"pack.title": "Bộ {{prefix}}-*",
"pack.count": "{{count}} skill",
"pack.installAll": "Cài tất cả",
"pack.installRest": "Cài {{count}} còn lại",
"pack.installTitle": "Cài {{count}} skill của bộ {{prefix}}-*?",
"pack.installBody": "Mỗi skill được ghi vào tài khoản của bạn. Skill nào bạn đã có cùng tên thì giữ nguyên:",
"pack.installed": "Đã cài {{ok}} · đã có sẵn {{skipped}} · lỗi {{failed}}",
"section.unshared": "Chủ chưa chia sẻ",
"section.unsharedHint": "Mục riêng tư của người khác — chỉ admin thấy",
"update": "Cập nhật",
"updateHint": "Người tạo đã sửa skill này từ khi bạn cài",
"updateTitle": "Cập nhật “{{title}}”?",
"updateBody": "Bản {{name}} của bạn sẽ được thay bằng phiên bản mới nhất. Bản hiện tại được chuyển sang ~/.claude/agenthub-replaced-skills/, không bị xóa.",
"updated": "Đã cập nhật {{name}}",
"pack.updateN": "Cập nhật {{count}}",
"pack.updateTitle": "Cập nhật {{count}} skill của bộ {{prefix}}-*?",
"pack.updateBody": "Mỗi bản sẽ được thay bằng phiên bản mới nhất; bản hiện tại được chuyển sang ~/.claude/agenthub-replaced-skills/:",
"pack.updated": "Đã cập nhật {{ok}} · lỗi {{failed}}",
"tab.withme": "Chia sẻ với bạn",
"sharing": "Chia sẻ…",
"shareTitle": "Chia sẻ “{{title}}”",
"shareMode.people": "Chỉ những người tôi chọn",
"shareMode.peopleHint": "Chỉ họ (và admin) thấy; người khác không thấy trên Hub.",
"shareMode.everyone": "Mọi người (Hub)",
"shareMode.everyoneHint": "Mọi người dùng đều thấy trên Hub.",
"shareMode.nobody": "Ngừng chia sẻ",
"shareMode.nobodyHint": "Chỉ bạn (và admin) thấy như trước.",
"sharePeople.search": "Tìm người",
"sharePeople.none": "Không có ai khớp.",
"sharePeople.picked_one": "Đã chọn {{count}} người",
"sharePeople.picked_other": "Đã chọn {{count}} người",
"shareSave": "Lưu",
"sharePeopleDone_one": "Đã chia sẻ với {{count}} người",
"sharePeopleDone_other": "Đã chia sẻ với {{count}} người",
"sharedWithCount_one": "Chia sẻ với {{count}} người",
"sharedWithCount_other": "Chia sẻ với {{count}} người",
"sharedWithMe": "Chia sẻ với bạn",
"withme.empty": "Chưa có ai chia sẻ riêng với bạn.",
"folders.all": "Tất cả thư mục",
"folders.new": "Thư mục mới",
"folders.newName": "Tên thư mục",
"folders.rename": "Đổi tên",
"folders.delete": "Xóa thư mục",
"folders.deleteTitle": "Xóa thư mục “{{name}}”?",
"folders.deleteBody": "Chỉ xóa thư mục; các artifact bên trong vẫn giữ nguyên.",
"folders.empty": "Thư mục này trống. Đưa artifact vào bằng ⋯ → Chuyển vào thư mục.",
"folders.move": "Chuyển vào thư mục…",
"folders.moveTitle": "Chuyển “{{title}}” vào thư mục",
"folders.private": "Thư mục là của riêng bạn: người khác không thấy.",
"folders.createHere": "Thư mục mới",
"folders.takeOut": "Bỏ khỏi thư mục",
"page.view": "Xem",
"page.viewHint": "Bản sao xem được ngay tại đây, không cần tài khoản claude.ai đã tạo trang",
"page.noCopy": "Chưa có bản xem: file gốc của trang này không còn. Hãy mở trên claude.ai.",
"pdf.page": "Trang {{n}}",
"pdf.failed": "Không hiển thị được PDF này. Hãy tải về.",
"pdf.more": "Đang hiện {{shown}}/{{total}} trang đầu — tải về để xem hết.",
"exportsSwitch": "Giữ bản xem được của Docs và Slides",
"exportsSwitchHint": "Khi Claude tạo một Claude Docs, slide hoặc design trong phiên AgentHub, Claude được nhắc lưu thêm một bản sao (Markdown, PDF hoặc HTML) để Hub hiển thị cho người được chia sẻ — họ không cần quyền trên claude.ai. Áp dụng cho các phiên mở sau đó."
}