/** * 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 = { files: 'Tệp', guideDescFiles: 'Duyệt cây tệp của workspace; bấm để xem trước hoặc chỉnh sửa', guideDescGit: 'Thay đổi Git và thay đổi tệp của phiên này trong một tab', guideDescSubagent: 'Sơ đồ subagent và tác vụ nền, theo thời gian thực', guideDescSidechat: 'Luồng hỏi tiếp độc lập kế thừa ngữ cảnh của phiên này', guideDescTerminal: 'Shell thật (xterm + pty), tự kết nối lại', guideDescBrowser: 'Trình duyệt nhúng, có thể mở link trong chat', changesSessionEmpty: 'Chưa có thao tác tệp nào trong phiên này', changesRead: 'Đọc', changesMdReading: 'Đọc', changesHtmlRender: "Kết xuất", changesHtmlRaw: "Nguyên văn", changesPdfRender: "Kết xuất", changesPdfRaw: "Nguyên văn", changesMdRaw: 'Gốc', changesWrite: 'Ghi', changesEdit: 'Chỉnh sửa', changesRunning: 'đang chạy', changesError: 'lỗi', changesFold: '{count} dòng… bấm để mở rộng', changesFoldLoading: 'Đang mở rộng…', changesFoldUnavailable: 'Không tải được ngữ cảnh', changesContext: 'ngữ cảnh', changesPriorUnknown: 'Nội dung trước thay đổi nằm ngoài cửa sổ; hiển thị như toàn bộ mới thêm', explorer: 'Trình khám phá', 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', floatDropHint: 'Thả để mở trong cửa sổ tự do', dockToSidebar: 'Quay lại thanh bên', pinTerminal: 'Ghim Terminal', pinAgentTerminal: 'Ghim Terminal Agent', pinToWorkspace: 'Ghim vào Workspace', pinToGlobal: 'Ghim Toàn cục', unpinTerminal: 'Bỏ ghim', pinnedTerminalTooltip: '{kind} · {scope} · {cwd}', pinnedTerminalKindUi: 'Terminal UI', pinnedTerminalKindAgent: 'Terminal Agent', pinnedTerminalScopeWorkspace: 'Đã ghim vào workspace', pinnedTerminalScopeGlobal: 'Đã ghim toàn cục', pinnedRailLabel: 'Terminal đã ghim', closePinnedTerminal: 'Đóng Terminal', 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', terminalWaitBanner: 'Agent đang chờ {needle}', terminalSkipWait: 'Bỏ qua thời gian chờ', 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})', terminalShellNotFound: 'Không tìm thấy shell đã cấu hình: {name} — kiểm tra đường dẫn shell trong Cài đặt → Side card → Terminal', preview: 'Xem trước', toc: 'Mục lụ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', showInFolder: 'Hiển thị trong thư mục', refreshUnsavedConfirm: 'Tệp đã thay đổi trên đĩa. Làm mới sẽ loại bỏ các chỉnh sửa chưa lưu. Tiếp tục?', 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', statusTruncated: 'Quá nhiều thay đổi; chỉ hiển thị 2000 mục đầu tiên', 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 tệp', changesGitLens: 'Git', changesSessionLens: 'Phiên', changesFilterAll: 'Tất cả', changesFilterEmpty: 'Không có thao tác thuộc loại này', changesOpenDiffTab: 'Mở trong tab diff riêng', changesClosePreview: 'Đóng xem trước', changesResizePreview: 'Điều chỉnh kích thước xem trước', changesLoadError: 'Bản ghi tệp phiên hiện không khả dụng', 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', rename: 'Đổi tên', renameInvalid: 'Tên không được để trống hoặc chứa dấu phân tách đường dẫn.', delete: 'Xóa', deleteTitle: 'Xóa "{name}"?', deleteDescFile: 'Thao tác này sẽ xóa vĩnh viễn tệp. Không thể hoàn tác.', deleteDescDir: 'Thao tác này sẽ xóa vĩnh viễn thư mục và toàn bộ nội dung của nó. Không thể hoàn tác.', dismiss: 'Đóng', 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', 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 kích hoạt 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, kích hoạt trang Quản lý tác vụ; trên màn hình rộng, thẻ bên cũng được mở rộng; trên màn hình hẹp, ngăn kéo toàn màn hình không bị ép mở; tắt để mở thủ công', settingsJobsTitle: 'Tự động kích hoạt trang Quản lý tác vụ khi có tác vụ nền mới', settingsJobsDesc: 'Mỗi khi phiên hiện tại có tác vụ nền mới, kích hoạt trang Quản lý tác vụ (mỗi tác vụ mới đều kích hoạt); trên màn hình rộng, thẻ bên cũng được mở rộng; trên màn hình hẹp, ngăn kéo toàn màn hình không bị ép mở; tắt để 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)', settingsFenceTitle: 'Kiểm tra đường dẫn workspace', settingsFenceDesc: 'Khi bật, các tính năng tệp của thanh bên chỉ truy cập đường dẫn trong workspace của phiên (mặc định); khi tắt, mọi tệp trên máy chủ đều có thể truy cập — script trong trang cũng có quyền tương ứng trong thời gian đó', fenceErrorReason: 'Đường dẫn này nằm ngoài workspace của phiên và đã bị chặn bởi kiểm tra', fenceDisableAction: 'Tắt kiểm tra workspace', 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', settingsBrowserLoopbackTitle: 'Địa chỉ cục bộ được phép', settingsBrowserLoopbackDesc: 'Danh sách cho phép phân tách bằng dấu phẩy của địa chỉ loopback (vd. localhost:5174 hoặc 127.0.0.1:8080) mà trình duyệt thanh bên có thể truy cập; để trống sẽ chặn tất cả địa chỉ cục bộ theo mặc định. Hộp cát vẫn áp dụng — các trang không thể đọc dữ liệu GUI', settingsBrowserLoopbackPlaceholder: 'vd. localhost:5174, 127.0.0.1:8080', 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}', sideChatTurnUsage: 'Vào {input} tok · Ra {output} tok', sideChatBlockCollapse: 'Thu gọn', sideChatBlockCollapseAria: 'Thu gọn', sideChatBlockExpand: 'Mở rộng {hidden} dòng', sideChatBlockExpandAria: 'Mở rộng thêm {hidden} dòng', sideChatBlockSignal: 'Kết thúc bởi tín hiệu: {signal}', sideChatBlockExitCode: 'Mã thoát {code}', sideChatBlockRunning: 'Đang chạy', sideChatBlockFailed: 'Thất bại', sideChatBlockDone: 'Hoàn tất', sideChatBlockNoOutput: '(không có đầu ra)', sideChatBlockFiles: '{count} tệp', sideChatBlockWindow: '{shown} trong {total} dòng', sideChatConnDisconnected: 'Mất kết nối', sideChatConnReconnect: 'Kết nối lại', sideChatConnConnecting: 'Đang kết nối lại…', sideChatConnRecovered: 'Đã khôi phục kết nối', sideChatConnReconnectAction: 'Kết nối lại ngay', sideChatConnRestartAction: 'Khởi động lại kết nối', 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', pluginGithubWorkbenchDesc: 'Tab GitHub Workbench: cây repo từ xa + Issues / Pull requests / Actions với hỗ trợ ghi đầy đủ — tạo Issue/PR, bình luận, chỉnh sửa, đóng/mở lại, merge squash·merge·rebase (xác nhận mạnh), chạy lại/hủy CI; bộ chuyển repo tự liệt kê các repo có quyền truy cập và tìm kiếm repo công khai; khi chưa cài better-sidebar sẽ tự động chuyển sang panel bên phải độc lập', pluginMdExportDesc: 'Thêm nút «Xuất» vào thanh công cụ Markdown của better-sidebar: một cú nhấp chuyển .md hiện tại thành HTML độc lập (bảng/khối mã/sơ đồ Mermaid nhúng, bố cục theo theme xem trước) và lưu cạnh tệp .md, hoặc xuất PDF qua hộp thoại in', pluginCodeNavDesc: 'Điều hướng xem trước mã: tự nhận diện ngôn ngữ theo loại tệp và tô sáng cú pháp, phác thảo ký hiệu (lọc lớp/phương thức/biến + nhảy một cú nhấp), tìm kiếm trong tệp (tô sáng mọi kết quả, trước/sau, phân biệt hoa thường) — đảm nhận xem trước tệp mã trong trình soạn thảo better-sidebar', pluginSuhuangScrollDesc: 'Kết nối Suhuang Scroll Runtime cục bộ với phần cài đặt DSH và better-sidebar để cấu hình mô hình, kiểm tra kết nối và điều khiển chấm bài liên tục; yêu cầu Suhuang Scroll Runtime và dsh-better-sidebar', pluginBetterOverleafDesc: 'Tab Overleaf cho better-sidebar: đăng nhập trực tiếp qua trình duyệt CDP (hỗ trợ Chromium bên thứ ba), danh sách/chuyển dự án, mirror git cục bộ trong /overleaf/, đồng bộ git hai chiều với dự phòng API chỉ đọc, xem trước tệp qua workbench của thanh bên', 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', pluginServerDeckDesc: 'Bảng điều khiển thẻ máy chủ: một thẻ cho mỗi host hiển thị trạng thái trực tuyến, hệ điều hành, thời gian hoạt động, mức dùng CPU/bộ nhớ/ổ đĩa và độ trễ; nhấp vào thẻ để mở terminal xterm.js tương tác; nhập ~/.ssh.config một chạm (tự bỏ qua bí danh dịch vụ lưu trữ Git). Đăng ký tab 「Máy chủ」 gốc khi better-sidebar được cài, ngược lại giữ ngăn kéo độc lập', 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ữ', pluginSidenoteDesc: 'Side chat kiểu Codex + chú thích vùng chọn: fork phiên hiện tại sang một panel bên cố định (được ẩn khỏi danh sách phiên bằng lưu trữ, chạy được nhiều thực thể cùng lúc, lệnh /side, tồn tại qua reload, mô hình bám theo phiên chính); chọn văn bản assistant → badge đánh số + trình soạn chú thích → chip "N chú thích" đính kèm theo tin nhắn tiếp theo, hoặc hỏi thẳng trong side chat', 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)', pluginEgoBrowserDesc: 'Trình duyệt agent cho DeepSeek Harness: 32 công cụ ego_* điều khiển Chromium thật; tab «ego browser» gốc trong thanh bên hiển thị trực tiếp mọi trang agent truy cập — bạn có thể bấm, kéo và gõ để tiếp quản. Tự động đăng ký tab khi có better-sidebar, nếu không thì rơi về bong bóng nổi', pluginBilingualReaderDesc: 'Đọc PDF trong thanh bên DSH: hiển thị PDF gốc, chọn văn bản để dịch bằng LLM, dùng ngữ cảnh và hoàn toàn tách biệt khỏi cuộc trò chuyện chính', changesRedactOn: "Đang làm mờ: giá trị nhạy cảm hiển thị [REDACTED]; nhấp để tắt (tự chịu rủi ro)", changesRedactOff: "Đã tắt làm mờ: nội dung hiển thị nguyên bản; nhấp để bật", changesRedactOnLabel: "Đang làm mờ", changesRedactOffLabel: "Không làm mờ", changesRedactBanner: "Đã làm mờ", pluginSentinelName: 'dsh-sentinel Hệ thống đánh thức', pluginEgoBrowserName: 'ego-browser Trình duyệt agent', pluginBetterOverleafName: 'dsh-better-overleaf Tab Overleaf', pluginDocsPanelName: 'dsh-docs-panel Tài liệu toàn cục', pluginFlowglassName: 'dsh-flowglass Flowglass', pluginGitForgeName: 'dsh-git-forge Thông tin đăng nhập Git', pluginGitRemotesName: 'dsh-git-remotes Remote Git', pluginGithubWorkbenchName: 'dsh-github-workbench Bàn làm việc GitHub', pluginSidebarQaName: 'dsh-sidebar-qa Chọn & hỏi', pluginSidenoteName: 'dsh-sidenote Trò chuyện bên', pluginServerDeckName: 'dsh-server-deck Bảng máy chủ', pluginSuhuangScrollName: 'dsh-suhuang-scroll Suhuang Scroll', pluginSshTunnelName: 'dsh-ssh-tunnel Đường hầm SSH', pluginTurnReviewName: 'dsh-turn-review Duyệt vòng', pluginBilingualReaderName: 'dsh-bilingual-reader Trình đọc song ngữ', pluginOfficeName: 'Xem trước Office', pluginMdExportName: 'Xuất Markdown', pluginCodeNavName: 'Trình điều hướng xem trước mã', pluginVideoPreviewName: 'Xem trước video', presetDshDesktopDesc: 'Chế độ Electron nâng cao (không viền): macOS dành 20px ở trên cùng; Windows dành 32px cho thanh tiêu đề khi không có WCO', }