New global Side card setting `agentOpenTools` (default off, 常规 group): when enabled, one `sidebar_open` tool is injected into the model so it can actively open a local file, a local folder (tree rooted there), or an HTTP(S) page in the calling session's sidebar. - host: AgentOpenRegistry + registerOpenTool (src/agent-opens.ts); the tool classifies http(s) URLs / stat-driven file/folder paths, refuses other schemes, resolves relative paths against the session cwd, and reports target-tab-disabled instead of silently no-oping. Gated like agentTerminalTools (register/drain on settings watch). - delivery: /sidebar/ws/agent-opens push (consume-on-send queue, replay on attach); the tool result reports `delivered` so queued opens for non-active sessions are honest. - client: Sidebar subscribes and routes pushes to editor (file), folder window (meta.dir, tree rooted at the folder — EditorHost), or browser (URL) tabs; settings row in 常规 + 20 locale dictionaries. - tests: agent-opens registry/tool spec, smoke gating + WS route list, prefs/plugin-shape defaults, editor-host folder window, side-card rows. - docs: design doc, AGENTS.md key lists + reference, README feature bullets.
352 lines
24 KiB
TypeScript
352 lines
24 KiB
TypeScript
/**
|
||
* The vi (Vietnamese) dictionary for the betterSidebar namespace.
|
||
*
|
||
* Mirrors the key set of `zh` in `locales.ts`. The sidebar's `t()`
|
||
* consults this dict when `attachBetterLocale(store)` has been called
|
||
* with an active better-locale store whose `active` is `'vi'`; absent
|
||
* that, the existing zh/en chain runs unchanged.
|
||
*
|
||
* Translation conventions:
|
||
* - Technical terms stay in English where appropriate (Git, SSH, HTTP, URL,
|
||
* Markdown, PDF, VS Code, API Key, Base URL, token, etc.).
|
||
* - Placeholders keep {name} verbatim (interpolation runs after lookup).
|
||
* - Formal Vietnamese appropriate for software UI.
|
||
* - Terminology is kept consistent with the DSH core vi dictionary.
|
||
*/
|
||
|
||
/** The vi dictionary (key-set-equal to zh, enforced by the type annotation in locales.ts). */
|
||
export const vi: Record<string, string> = {
|
||
files: 'Tệp',
|
||
explorer: 'Trình khám phá',
|
||
git: 'Quản lý mã nguồn',
|
||
terminal: 'Terminal',
|
||
editor: 'Trình soạn thảo',
|
||
editorExplorer: 'Cách mở tệp',
|
||
editorExplorerDesc: 'Kiểm soát cách mở tệp',
|
||
editorExplorerMerged: 'Gộp',
|
||
editorExplorerMergedDesc: 'Tệp chuyển tại chỗ trong cùng cửa sổ; cửa sổ mới mặc định mở cây tệp',
|
||
editorExplorerSplit: 'Riêng biệt',
|
||
editorExplorerSplitDesc: 'Cửa sổ không đường dẫn là trình khám phá (chỉ cây tệp); mỗi tệp mở cửa sổ riêng (có cây tệp, mặc định thu gọn)',
|
||
editorTreeToggle: 'Panel cây tệp',
|
||
editorPathPlaceholder: 'Nhập đường dẫn tệp (tương đối thư mục phiên hoặc tuyệt đối), Enter để mở',
|
||
editorSearchPlaceholder: 'Tìm theo tên tệp…',
|
||
editorSearchNoResults: 'Không có tệp phù hợp',
|
||
editorSearchTruncated: 'Quá nhiều kết quả, chỉ hiển thị một phần',
|
||
editorEmptyHint: 'Chọn tệp từ cây tệp bên phải hoặc ô nhập đường dẫn phía trên để xem trước',
|
||
openFileNewTab: 'Mở trong Tab mới',
|
||
openFileSide: 'Mở ở bên cạnh',
|
||
openWithMenu: 'Mở bằng',
|
||
openWithSshSuffix: ' (SSH)',
|
||
pinOpenWith: 'Ghim vào menu',
|
||
unpinOpenWith: 'Bỏ ghim',
|
||
openWithExplorer: 'Trình quản lý tệp',
|
||
openWithVscode: 'VS Code',
|
||
openWithCursor: 'Cursor',
|
||
openWithZed: 'Zed',
|
||
openWithSettingsSshTitle: 'Máy chủ từ xa SSH',
|
||
openWithSettingsSshDesc: 'Để trống cho không gian làm việc cục bộ; nhập user@host hoặc alias SSH, các trình mở họ VSCode sẽ chuyển sang giao thức vscode-remote/ssh-remote, Trình quản lý tệp / Zed / trình soạn thảo tùy chỉnh không phải VSCode sẽ ẩn khỏi menu',
|
||
openWithSettingsSshPlaceholder: 'user@host hoặc alias SSH',
|
||
openWithSettingsCustomTitle: 'Trình soạn thảo tùy chỉnh',
|
||
openWithSettingsCustomDesc: 'Tên + mẫu URL (placeholder {path}) + cờ họ VSCode; ở chế độ SSH chỉ họ VSCode mở được đường dẫn từ xa',
|
||
openWithSettingsAdd: 'Thêm',
|
||
openWithSettingsName: 'Tên',
|
||
openWithSettingsTemplate: 'vd: cursor://file/{path}',
|
||
openWithSettingsFamily: 'Họ VSCode',
|
||
openWithSettingsFamilyDesc: 'Trình soạn thảo này dùng giao thức URL của VSCode (hỗ trợ mở từ xa qua SSH)',
|
||
openWithSettingsRemove: 'Xóa',
|
||
openWithSettingsInvalidHint: 'Trình soạn thảo thiếu tên hoặc mẫu (cần chứa {path} và bắt đầu bằng scheme://) sẽ không xuất hiện trong menu',
|
||
newTab: 'Tab mới',
|
||
openExplorer: 'Trình khám phá',
|
||
brokenSymlink: 'Symlink hỏng',
|
||
openGit: 'Panel Git',
|
||
newTerminal: 'Terminal mới',
|
||
terminalLimit: 'Đã đạt giới hạn terminal (3)',
|
||
close: 'Đóng',
|
||
closeOtherTabs: 'Đóng các tab khác',
|
||
closeLeftTabs: 'Đóng tab bên trái',
|
||
closeRightTabs: 'Đóng tab bên phải',
|
||
moveToFreeWindow: 'Chuyển sang cửa sổ tự do',
|
||
floatDropHint: 'Thả để mở trong cửa sổ tự do',
|
||
dockToSidebar: 'Quay lại thanh bên',
|
||
collapse: 'Thu gọn thanh bên',
|
||
expand: 'Mở rộng thanh bên',
|
||
collapseBottomPanel: 'Thu gọn panel dưới',
|
||
expandBottomPanel: 'Mở rộng panel dưới',
|
||
terminalError: 'Kết nối terminal thất bại',
|
||
terminalConnectFailed: 'Terminal kết nối thất bại nhiều lần',
|
||
terminalRetry: 'Thử lại',
|
||
terminalDepsFailed: 'Dependency terminal node-pty tải thất bại',
|
||
terminalDepsHint: 'Chạy lệnh sau trong terminal hoặc cmd trên máy DSH để sửa, rồi nhấn thử lại (node-pty đồng bộ phiên bản với lõi DSH):',
|
||
terminalDepsProfile: ' (phát hiện profile: {profile})',
|
||
preview: 'Xem trước',
|
||
edit: 'Chỉnh sửa',
|
||
mermaidError: 'Render Mermaid thất bại',
|
||
mermaidZoomIn: 'Phóng to',
|
||
mermaidZoomOut: 'Thu nhỏ',
|
||
mermaidZoomReset: 'Đặt lại',
|
||
mermaidZoomHint: 'Cuộn để zoom · kéo để di chuyển · Esc để đóng',
|
||
refresh: 'Làm mới',
|
||
save: 'Lưu',
|
||
saved: 'Đã lưu',
|
||
unsaved: 'Chưa lưu',
|
||
saveFailed: 'Lưu thất bại',
|
||
truncation: 'Tệp quá lớn, chỉ hiển thị 512KB đầu',
|
||
binary: 'Tệp nhị phân, không xem trước được',
|
||
loading: 'Đang tải…',
|
||
error: 'Tải thất bại',
|
||
retry: 'Thử lại',
|
||
splitLeft: 'Chia bên trái',
|
||
splitRight: 'Chia bên phải',
|
||
splitUp: 'Chia lên trên',
|
||
splitDown: 'Chia xuống dưới',
|
||
notRepo: 'Thư mục hiện tại không phải repo git',
|
||
noChanges: 'Không có thay đổi',
|
||
stage: 'Stage',
|
||
unstage: 'Unstage',
|
||
stageAll: 'Stage tất cả',
|
||
unstageAll: 'Unstage tất cả',
|
||
commitPlaceholder: 'Thông điệp commit (Ctrl+Enter)',
|
||
commit: 'Commit',
|
||
commitError: 'Commit thất bại',
|
||
branch: 'Branch',
|
||
worktree: 'Worktree',
|
||
checkoutError: 'Chuyển branch thất bại',
|
||
history: 'Lịch sử',
|
||
changes: 'Thay đổi',
|
||
staged: 'Đã stage',
|
||
unstaged: 'Chưa stage',
|
||
cancel: 'Hủy',
|
||
diffEmpty: 'Không có khác biệt văn bản',
|
||
diffLoadError: 'Tải diff thất bại',
|
||
diffBinary: 'Nhị phân',
|
||
diffAdded: 'Thêm',
|
||
diffDeleted: 'Xóa',
|
||
diffRenamed: 'Đổi tên',
|
||
diffExpand: 'Mở rộng {count} dòng còn lại',
|
||
diffCollapse: 'Thu gọn',
|
||
discard: 'Bỏ thay đổi',
|
||
discardTitle: 'Bỏ thay đổi',
|
||
discardDesc: 'Sẽ hủy các thay đổi worktree của «{path}» (không thể khôi phục).',
|
||
viewCommitDiff: 'Xem diff commit',
|
||
copyShortHash: 'Sao chép hash ngắn',
|
||
copyFullHash: 'Sao chép hash đầy đủ',
|
||
copySubject: 'Sao chép thông điệp commit',
|
||
revertCommit: 'Revert commit',
|
||
revertTitle: 'Revert commit',
|
||
revertDesc: 'Sẽ tạo commit mới trên branch hiện tại đảo ngược «{subject}».',
|
||
cherryPickCommit: 'Cherry-pick commit',
|
||
cherryPickTitle: 'Cherry-pick commit',
|
||
cherryPickDesc: 'Áp dụng các thay đổi của «{subject}» lên branch hiện tại.',
|
||
timeJustNow: 'vừa xong',
|
||
timeMinutesAgo: '{n} phút trước',
|
||
timeHoursAgo: '{n} giờ trước',
|
||
timeYesterday: 'hôm qua',
|
||
loadMore: 'Tải thêm',
|
||
historyLoadError: 'Tải thêm lịch sử thất bại',
|
||
produced: 'Đã tạo',
|
||
producedOpen: 'Mở trong thanh bên',
|
||
disconnected: 'Terminal mất kết nối, đang kết nối lại…',
|
||
exited: 'Tiến trình terminal đã thoát',
|
||
noSession: 'Chọn một phiên để dùng thanh bên',
|
||
pluginNotLoaded: 'Plugin chưa tải, tab tạm không khả dụng:',
|
||
hiddenFiles: 'Tệp ẩn',
|
||
parent: 'Thư mục cha',
|
||
copied: 'Đã sao chép',
|
||
copy: 'Sao chép',
|
||
newFile: 'Tệp mới',
|
||
openEditor: 'Mở trình soạn thảo',
|
||
gitDetail: 'Xem chi tiết thay đổi',
|
||
referenceFile: '@tệp',
|
||
addToConversation: 'Thêm vào cuộc trò chuyện',
|
||
copyRelative: 'Sao chép đường dẫn tương đối',
|
||
copyAbsolute: 'Sao chép đường dẫn tuyệt đối',
|
||
download: 'Tải xuống',
|
||
uploadFiles: 'Tải tệp lên',
|
||
uploadFolder: 'Tải thư mục lên',
|
||
uploadHere: 'Tải lên đây',
|
||
uploadDropHint: 'Kéo tệp/thư mục vào đây để tải lên',
|
||
uploadDropChat: 'Kéo vào khu vực chat: thêm hình ảnh vào cuộc trò chuyện',
|
||
uploadTo: 'Tải lên {dir}',
|
||
uploadingTo: 'Đang tải lên {dir}…',
|
||
uploadProgress: 'Đang tải lên {done}/{total}: {name}',
|
||
uploadDone: 'Đã tải lên {count} tệp',
|
||
uploadFailed: 'Tải lên thất bại: {error}',
|
||
uploadFailedUnknown: 'Lỗi không xác định',
|
||
uploadTooLarge: 'Tệp quá lớn, vượt giới hạn tải lên',
|
||
uploadCancelled: 'Đã hủy tải lên',
|
||
settingsNav: 'Thẻ bên',
|
||
settingsIntro: 'Quản lý nội dung hiển thị và hành vi mặc định của thẻ bên',
|
||
settingsPopupDesc: 'Cấu hình tùy chọn cho «{feature}»',
|
||
settingsDone: 'Xong',
|
||
settingsOpenTitle: 'Mở mặc định cho phiên mới',
|
||
settingsOpenDesc: 'Tự động mở rộng thẻ bên cho phiên mới; phiên đã có giữ nguyên bố cục',
|
||
settingsWidthTitle: 'Tỷ lệ chiều rộng mặc định',
|
||
settingsWidthDesc: 'Tỷ lệ phần trăm chiều rộng cửa sổ mà thẻ bên chiếm cho phiên mới (20–60)',
|
||
settingsWidthSuffix: '%',
|
||
settingsOpenPathTitle: 'Mở tệp chat trong thanh bên',
|
||
settingsOpenPathDesc: 'Khi nhấp link tệp trong chat (dòng công cụ, danh sách sản phẩm, nhắc tệp), mở trong trình soạn thảo thanh bên thay vì ứng dụng mặc định hệ thống',
|
||
settingsOpenToolsTitle: 'Tiêm công cụ mở thanh bên cho mô hình',
|
||
settingsOpenToolsDesc: 'Khi bật, mô hình có thể mở tệp, thư mục và trang HTTP(S) trong thanh bên qua công cụ sidebar_open (mặc định tắt)',
|
||
settingsTitleBarTitle: 'Chế độ tương thích thanh tiêu đề',
|
||
settingsTitleBarDesc: 'Chọn phương án tương thích thanh tiêu đề: tự động phát hiện (mặc định, bảo thủ) / Web DSH chính thức / shell desktop đã biết / tùy chỉnh (khoảng dịch chuyển + CSS tùy chỉnh)',
|
||
settingsTitleBarStripTitle: 'Khoảng dịch chuyển',
|
||
settingsTitleBarStripDesc: 'Chiều cao dải thanh tiêu đề: số pixel dịch xuống của nút và nội dung thanh bên (0–120, mặc định 40; áp dụng trong chế độ tùy chỉnh)',
|
||
settingsSchemeAutoTitle: 'Tự động phát hiện',
|
||
settingsSchemeAutoDesc: 'Bảo thủ: chỉ nhường chỗ theo chiều cao thanh tiêu đề thật khi API Window Controls Overlay chuẩn khả dụng; môi trường web thuần không sửa gì',
|
||
settingsSchemeWebTitle: 'Web DSH chính thức',
|
||
settingsSchemeWebDesc: 'Khai báo tường minh chạy trên web chính thức: không điều chỉnh gì cả (kể cả hình học WCO chuẩn)',
|
||
settingsSchemeCustomTitle: 'Tùy chỉnh',
|
||
settingsSchemeCustomDesc: 'Toàn quyền kiểm soát: chèn CSS tùy chỉnh (có thể ghi đè style built-in), và chỉ định khoảng dịch chuyển thanh tiêu đề',
|
||
settingsSchemeDetectedSuffix: 'đã phát hiện',
|
||
settingsCustomCssTitle: 'CSS tùy chỉnh',
|
||
settingsCustomCssDesc: 'Style追加 vào cuối trang (cùng ưu tiên thì viết sau thắng; ghi đè biến inline JS cần !important)',
|
||
settingsCustomCssPlaceholder: '/* vd: dành sẵn 36px cho shell tự vẽ thanh tiêu đề */\nhtml[data-dsh-title-bar-height="36"] {\n --dsh-title-bar-strip: 36px !important;\n}',
|
||
settingsSaveFailed: 'Lưu thất bại',
|
||
settingsConflict: 'Cài đặt đã bị sửa bởi cửa sổ khác, vui lòng thử lại',
|
||
binaryNoPreview: 'Loại tệp này không hỗ trợ xem trước',
|
||
downloadToView: 'Tải xuống để xem',
|
||
settingsSubagentTitle: 'Tự động mở trang Quản lý tác vụ khi phát hiện tác nhân con',
|
||
settingsSubagentDesc: 'Khi phiên hiện tại tạo tác nhân con mới, tự động mở rộng thanh bên và mở trang Quản lý tác vụ; tắt thì phải mở thủ công',
|
||
settingsJobsTitle: 'Tự động mở trang Tác vụ nền khi có tác vụ nền mới',
|
||
settingsJobsDesc: 'Khi phiên hiện tại có tác vụ nền mới, tự động mở rộng thanh bên và mở trang Tác vụ nền (mỗi tác vụ mới đều kích hoạt); tắt thì phải mở thủ công',
|
||
settingsToolsTitle: 'Tiêm công cụ terminal cho mô hình',
|
||
settingsToolsDesc: 'Khi bật, mô hình có thể tạo và điều khiển terminal thanh bên qua 8 công cụ terminal_* (mặc định tắt)',
|
||
settingsBottomTerminalTitle: 'Tự động mở terminal khi panel dưới mở rộng lần đầu',
|
||
settingsBottomTerminalDesc: 'Khi panel dưới được mở rộng lần đầu trong phiên, thử mở một tab terminal mới ở panel dưới (giới hạn terminal vẫn áp dụng; mặc định bật)',
|
||
settingsFontFamilyTitle: 'Font terminal',
|
||
settingsFontFamilyDesc: 'Font terminal tùy chỉnh (CSS font-family, vd: "JetBrains Mono", monospace; để trống theo font mono của theme)',
|
||
settingsFontFamilyPlaceholder: '"JetBrains Mono", monospace',
|
||
settingsFontSizeTitle: 'Cỡ chữ terminal',
|
||
settingsFontSizeDesc: 'Cỡ chữ terminal (9–32, mặc định 13)',
|
||
settingsFontSizeSuffix: 'px',
|
||
settingsShellTitle: 'Đường dẫn shell',
|
||
settingsShellDesc: 'Shell khởi động cho terminal UI và mô hình (đường dẫn tuyệt đối hoặc tên thực thi). Để trống sẽ phân tích theo thứ tự: yaml config.shell → $SHELL / login shell / powershell.exe trên Windows. Áp dụng cho terminal mở sau đó',
|
||
settingsShellPlaceholder: 'vd: /bin/zsh (để trống = tự động)',
|
||
settingsShellArgsTitle: 'Tham số shell',
|
||
settingsShellArgsDesc: 'Tham số shell tường minh, phân tách bằng dấu cách; khi không trống sẽ thay thế hoàn toàn mặc định (đồng bộ với contract shellArgs yaml)',
|
||
settingsShellArgsPlaceholder: 'vd: -l (để trống = mặc định)',
|
||
settingsTabsTitle: 'Nội dung thanh bên',
|
||
settingsViewersTitle: 'Trình xem tệp',
|
||
settingsGeneralTitle: 'Chung',
|
||
settingsPopup: 'Cài đặt tính năng',
|
||
settingsViewerCatchAll: 'Catch-all: mọi tệp',
|
||
viewerImage: 'Hình ảnh',
|
||
viewerPdf: 'PDF',
|
||
viewerMarkdown: 'Markdown',
|
||
viewerCode: 'Mã',
|
||
viewerBinary: 'Tải nhị phân',
|
||
viewerHtml: 'HTML',
|
||
browser: 'Trình duyệt',
|
||
browserPlaceholder: 'Nhập URL, vd: example.com',
|
||
browserGo: 'Đi',
|
||
browserBack: 'Lùi',
|
||
browserForward: 'Tiến',
|
||
browserStart: 'Nhập URL để bắt đầu duyệt (chế độ sandbox)',
|
||
browserBlockedScheme: 'Đã chặn: chỉ cho phép link http/https',
|
||
browserBlockedLoopback: 'Đã chặn: không cho phép truy cập địa chỉ cục bộ hoặc nội bộ trong trình duyệt',
|
||
browserInvalid: 'URL không hợp lệ',
|
||
browserNoSandboxWarning: 'Sandbox đã tắt: trang hiện tại cùng nguồn với UI, có toàn quyền phiên (có thể bật lại trong cài đặt)',
|
||
htmlNoSandboxWarning: 'Sandbox đã tắt: HTML này cùng nguồn với UI, có thể đọc tệp phiên và API nội bộ (có thể bật lại trong cài đặt)',
|
||
sandboxStatusOn: 'Chế độ sandbox: đã bật · trang không thể truy cập dữ liệu UI và tệp cục bộ, đăng nhập và cookie bên thứ ba có thể không hoạt động',
|
||
sandboxUnlock: 'Mở khóa tạm (không an toàn)',
|
||
sandboxRestore: 'Khôi phục sandbox',
|
||
settingsHtmlDefaultUnsafeTitle: 'Mở xem trước HTML không sandbox mặc định (không an toàn)',
|
||
settingsHtmlDefaultUnsafeDesc: 'Khi bật, mỗi lần mở tệp HTML xem trước sẽ mặc định không sandbox (cùng nguồn UI, có thể đọc tệp phiên và API nội bộ); có thể khôi phục sandbox tạm thời trên thanh trạng thái',
|
||
settingsHtmlSandboxTitle: 'Tắt sandbox xem trước HTML (không an toàn)',
|
||
settingsHtmlSandboxDesc: 'Khi tắt, HTML xem trước sẽ chạy cùng nguồn với UI: có thể đọc tệp phiên, local storage và gọi API nội bộ. Chỉ bật cho tệp hoàn toàn đáng tin cậy',
|
||
settingsBrowserSandboxTitle: 'Tắt sandbox trình duyệt (không an toàn)',
|
||
settingsBrowserSandboxDesc: 'Khi tắt, mọi trang truy cập sẽ chạy cùng nguồn với UI: có thể đọc dữ liệu phiên và mạo danh phiên đăng nhập. Chỉ bật cho trang hoàn toàn đáng tin cậy',
|
||
settingsBrowserLinksTitle: 'Mở link ngoài trong chat ở thanh bên',
|
||
settingsBrowserLinksDesc: 'Khi bật, nhấp link ngoài trong chat hoặc UI sẽ mở trong thanh bên thay vì cửa sổ mới; HTTP và HTTPS được kiểm soát riêng bởi công tắc bên dưới; Ctrl/Cmd+nhấp luôn bỏ qua',
|
||
settingsBrowserHttpTitle: 'Mở trang HTTP trong thanh bên',
|
||
settingsBrowserHttpDesc: 'Khi bật, nhấp link HTTP ngoài trong chat hoặc UI sẽ mở trong thanh bên (trang plugin khai báo urlTarget ưu tiên); Ctrl/Cmd+nhấp luôn bỏ qua',
|
||
settingsBrowserHttpsTitle: 'Mở trang HTTPS trong thanh bên',
|
||
settingsBrowserHttpsDesc: 'Khi bật, nhấp link HTTPS ngoài trong chat hoặc UI sẽ mở trong thanh bên. Mặc định tắt: đa số trang HTTPS từ chối nhúng, trình duyệt hệ thống mượt mà hơn',
|
||
browserOpenExternal: 'Mở trong trình duyệt',
|
||
browserEmbedBlocked: '{host} từ chối nhúng',
|
||
browserEmbedBlockedDesc: 'Trang này cấm hiển thị trong trang khác qua X-Frame-Options / frame-ancestors, không thể tải trong thanh bên. Mở trực tiếp trong trình duyệt',
|
||
browserEmbedAnyway: 'Vẫn tải',
|
||
subagent: 'Quản lý tác vụ',
|
||
openSubagent: 'Quản lý tác vụ',
|
||
subagentMainAgent: 'Tác nhân chính',
|
||
subagentEmpty: 'Không có tác nhân con',
|
||
subagentEmptyDesc: 'Tác nhân con do tác nhân chính tạo ra sẽ hiển thị ở đây',
|
||
subagentRunning: 'Đang chạy',
|
||
subagentInactive: 'Nghỉ',
|
||
subagentModeOneShot: 'Một lần',
|
||
subagentModeContinuable: 'Có thể tiếp tục',
|
||
subagentCount: '{count} tác nhân con',
|
||
subagentCountRunning: '{count} tác nhân con · {running} đang chạy',
|
||
subagentDiagCorrupt: 'Bị hỏng',
|
||
subagentDiagUnsupported: 'Không hỗ trợ',
|
||
subagentDiagUnavailable: 'Không khả dụng',
|
||
subagentThinking: 'Đang suy nghĩ…',
|
||
sideChat: 'Chat bên (beta)',
|
||
sideChatNew: 'Luồng mới',
|
||
sideChatUntitled: 'Luồng mới',
|
||
sideChatEmpty: 'Không có cuộc trò chuyện bên',
|
||
sideChatEmptyDesc: 'Mỗi cuộc trò chuyện bên là một Tab riêng trong thanh tab, kế thừa ngữ cảnh phiên hiện tại, không vào phiên chính',
|
||
sideChatCreating: 'Đang tạo cuộc trò chuyện bên…',
|
||
sideChatRetry: 'Thử lại',
|
||
sideChatThreads: 'Chuyển luồng / mới',
|
||
sideChatSave: 'Lưu thành phiên mới',
|
||
sideChatSaveTitle: 'Nâng luồng này thành phiên cấp cao nhất, xuất hiện trong danh sách phiên chính',
|
||
sideChatSaved: 'Đã lưu thành phiên mới',
|
||
sideChatNoTurn: 'Cần hoàn thành ít nhất một vòng trò chuyện trước khi lưu',
|
||
sideChatPendingDrop: 'Tin nhắn theo dõi chưa hoàn thành cuối cùng sẽ không được đưa vào phiên đã lưu',
|
||
sideChatFirstPlaceholder: 'Hỏi câu đầu tiên — ngữ cảnh đã kế thừa…',
|
||
sideChatComposerPlaceholder: 'Hỏi tiếp…',
|
||
sideChatThinking: 'Đang đào sâu…',
|
||
sideChatThink: 'Suy nghĩ',
|
||
sideChatInjection: 'Đã tiêm ngữ cảnh',
|
||
sideChatSend: 'Gửi',
|
||
sideChatCancel: 'Dừng',
|
||
sideChatCancelTitle: 'Hủy vòng hiện tại (giữ hàng đợi)',
|
||
sideChatClose: 'Đóng luồng',
|
||
sideChatCloseTitle: 'Giải phóng agent của luồng (lịch sử được giữ)',
|
||
sideChatError: 'Lỗi chat bên: {message}',
|
||
jobs: 'Tác vụ nền',
|
||
jobsCount: '{count} tác vụ nền',
|
||
jobsCountRunning: '{count} tác vụ nền · {running} đang chạy',
|
||
jobStatusRunning: 'Đang chạy',
|
||
jobStatusStopping: 'Đang dừng',
|
||
jobStatusCompleted: 'Đã hoàn thành',
|
||
jobStatusKilled: 'Đã hủy',
|
||
jobStatusFailed: 'Thất bại',
|
||
jobDurationSeconds: '{seconds}s',
|
||
jobDurationMinutes: '{minutes}m {seconds}s',
|
||
jobDurationHours: '{hours}h {minutes}m',
|
||
jobViewOutput: 'Xem đầu ra',
|
||
jobHideOutput: 'Ẩn đầu ra',
|
||
jobNoOutput: 'Chưa có đầu ra',
|
||
jobNotReadYet: 'Đang chờ mô hình đọc đầu ra tác vụ này (sau khi mô hình chạy job_output, đầu ra sẽ hiển thị ở đây)',
|
||
jobOutputTruncated: 'Đầu ra quá dài, đã cắt bớt',
|
||
jobOutputError: 'Đọc đầu ra thất bại',
|
||
jobKill: 'Hủy',
|
||
jobKillConfirm: 'Nhấp lại để xác nhận hủy',
|
||
jobKillError: 'Hủy thất bại',
|
||
addPluginsTabCard: 'Thêm plugin tab',
|
||
addPluginsTabCardDesc: 'Đăng ký trang thanh bên mới',
|
||
addPluginsViewerCard: 'Thêm plugin xem trước',
|
||
addPluginsViewerCardDesc: 'Đăng ký xem trước loại tệp mới',
|
||
addPluginsTabDesc: 'Trang thanh bên (tab) có thể mở rộng qua plugin. Plugin đăng ký qua service ctx.betterSidebar; nhấp «Cài đặt» để sao chép lệnh cài, dán vào terminal nơi DSH chạy rồi thực thi.',
|
||
addPluginsViewerDesc: 'Trình xem tệp có thể mở rộng qua plugin. Plugin đăng ký qua service ctx.betterSidebar; nhấp «Cài đặt» để sao chép lệnh cài, dán vào terminal nơi DSH chạy rồi thực thi.',
|
||
addPluginsBrowseMore: 'Duyệt thêm plugin trên GitHub (topic: dsh-better-sidebar)',
|
||
addPluginsSearch: 'Tìm theo tên / mô tả plugin…',
|
||
addPluginsNoMatch: 'Không có plugin phù hợp',
|
||
addPluginsRecommended: 'Plugin đề xuất',
|
||
addPluginsEmpty: 'Chưa có plugin nào, hoan nghênh bạn publish plugin dưới GitHub topic',
|
||
openPlugin: 'Mở',
|
||
copyInstall: 'Sao chép lệnh cài',
|
||
pluginOfficeDesc: 'Xem trước bộ Office (.docx / .xlsx / .pptx) cho trình soạn thảo better-sidebar, tách thư viện render Office nặng ra khỏi bundle chính, cài theo nhu cầu',
|
||
pluginFlowglassDesc: 'Biểu đồ luồng phiên theo thời gian thực: ba lane cho user, assistant và tool call, hỗ trợ nhóm song song, nhánh tác nhân con, drill-down từng lớp và trạng thái trực tiếp; sau khi cài better-sidebar đăng ký tab «Flowglass» native, khi chưa cài giữ drawer riêng',
|
||
pluginGitForgeDesc: 'Tab «Git Forge» của better-sidebar: kho tài khoản GitHub/Gitea và Forge khác + cấp quyền theo project + chặn cứng chính sách push; token chỉ lưu secrets cục bộ, không vào ngữ cảnh mô hình; cung cấp công cụ GitForge chỉ đọc và HTTPS credential helper cho agent',
|
||
pluginGitRemotesDesc: 'Tab Git Remotes của better-sidebar: xem branch/upstream/ahead-behind, fetch (có thể prune), pull ff-only, push chỉ sau khi xác nhận trong tab. Không thay thế tab stage/commit Git built-in, cũng không cung cấp force-push hay công cụ auto-push cho mô hình',
|
||
pluginSentinelDesc: 'Hệ thống đánh thức agent theo điều kiện: cảm biến file/process/port/HTTP/command/webhook, khi điều kiện đạt sẽ tự đánh thức phiên ngủ; đăng ký tab «Sentinel» hiển thị bảng giám sát toàn server',
|
||
pluginSidebarQaDesc: 'Tab chọn-đoạn-hỏi dựa trên better-sidebar: chọn văn bản trò chuyện → hỏi ở panel phải → phiên theo dõi riêng trong cùng workspace (❓ theo dõi · chủ đề): mô hình nhanh không suy nghĩ nén ngữ cảnh chat chính rồi tiêm cùng trích dẫn, không gián đoạn chat chính; theo dõi có thể lồng nhau, tiếp tục, lưu trữ',
|
||
pluginSshTunnelDesc: 'Tab «SSH Tunnel» của better-sidebar: danh sách máy đa host + cấp quyền theo project + khóa lưu cục bộ; công cụ mô hình SSHManager (exec/SFTP/chiến lược phiên); terminal tương tác trung tâm và SFTP hai pane',
|
||
pluginTurnReviewDesc: 'Cổng duyệt người cho diff «vừa rồi»: Approve / Request changes theo path kèm comment tùy chọn; path nhóm theo phiên chính / tác nhân con / không rõ nguồn; nhấp file xem diff snapshot đầu vòng vs hiện tại. Không fork, không /rewind',
|
||
pluginVideoPreviewDesc: 'Xem trước video inline trong trình soạn thảo better-sidebar (.mp4/.webm/.mov/.mkv/.avi v.v.), có route host /video hỗ trợ HTTP Range (206), có thể tua tiến độ, không bị giới hạn mediaLimit 20MB',
|
||
pluginDocsPanelDesc: '«Tài liệu toàn cục» trong thanh bên DSH: ghi chú Markdown toàn cục, đọc từ bất kỳ workspace nào — danh sách chọn để đọc, outline hover để nhảy, mở ngoài trong Chrome / VS Code, sao chép code, thư mục cấu hình được (mặc định ~/.dsh/docs)',
|
||
}
|