Files
Termix/plugins/snippets/locales/translated/vi_VN.json
T
Luke GustafsonandZacharyZcR 6b708106e1 release-2.9.1 (#1557)
* fix(sso): send the PKCE verifier for GitHub login (#1534)

* fix(remote-desktop): clip cursor overflow without disabling zoom (#1535)

* test(remote-desktop): preserve sessions beyond one hour (#1536)

* fix(hosts): expose controls for overflowing editor tabs (#1537)

* fix(hosts): expose controls for overflowing editor tabs

* test(hosts): mock resize observation in admin panel tests

* fix(status): skip TCP probes while host sessions are active (#1538)

* fix(database): batch session activity persistence (#1539)

* docs(api): describe cookie and API key authentication (#1540)

* fix(snippets): repair missing note column on SQLite upgrades (#1541)

* fix(docker): retain stored SSH credential association (#1543)

* fix(file-manager): render transfer toasts without plugin hooks (#1546)

* feat(hosts): keep compact row actions inline (#1547)

* fix(auth): allow retrying unavailable second-factor interfaces (#1549)

* fix(auth): reject unresolved legacy identity provisioning (#1550)

* fix(desktop): ship the plugin SDK inside Mac App Store builds (#1551)

* fix(tmux): pass full session info to the terminal's session picker (#1552)

The tmux.sessions service reduced detected sessions to bare names, but the
picker reads session.name, so every entry rendered blank and selecting one
sent an empty name, which created a new session instead of attaching.

* fix(ssh): read force keyboard-interactive as a boolean when resolving hosts (#1553)

The column holds the text "true"/"false", and the resolver passed it
through as-is. The string "false" is truthy, so the password provider
treated every saved host as forced keyboard-interactive and left the
password out. Jump hops are built straight from the resolved host, so a
password hop whose server doesn't offer keyboard-interactive failed with
"All configured authentication methods failed".

* fix(database): batch database saves for bulk host writes (#1554)

* fix(database): yield to the event loop between database saves

Each SQLite save serializes and encrypts the whole database into new
buffers, which V8 only releases once the event loop turns. Boot
migrations and bulk host import write plugin settings per host and per
key in an awaited loop, so hundreds of full copies piled up and the
container ran out of memory.

* fix(database): save once per bulk host write instead of once per row

On SQLite every repository write force-saves the whole database. Boot
plugin data migrations, host defaults materialization and the bulk
host routes write one row per host per setting, so they serialized and
encrypted the full database hundreds of times in a row.

DatabaseSaveTrigger.batched wraps a function so force saves made while
it runs collapse into a single save when it finishes. Nested scopes fold
into the outer one, and work that outlives its scope saves normally.

* feat(hosts): add instance-wide predefined tag suggestions (#1548)

* feat(hosts): add shared predefined tag suggestions

* style(hosts): format tag catalog routes

* test(database): advance fake timers past the save yield (#1555)

* fix(i18n): complete Simplified Chinese core and plugin translations (#1542)

* fix(i18n): complete Chinese onboarding and navigation labels

* fix(i18n): translate remaining Chinese core and plugin interfaces

* fix(i18n): translate host editor tab overflow controls

* fix(i18n): use consistent Chinese fleet terminology

* fix(i18n): localize hardcoded controls and plugin views

* fix(i18n): translate built-in homepage widget catalog

* test(homepage): follow translated timezone placeholder

* fix(i18n): translate plugin-provided homepage widgets

* fix(i18n): localize feature settings section titles

* fix: 2.8 oidc accounts unable to sign in after upgrading (#1381)

* fix: plugins losing the saved ssh login when copying a host (#1391)

* fix: fleets, proxmox and automations not getting the host sudo password

* fix: host imports running a defaults pass and metrics restart per host (#1384)

* fix: high cpu from status probes and full database saves on every sample (#1300)

* fix: user data export freezing the server (#1393)

* fix: op:// secret references rejected as ssh keys on credentials (#1394)

* fix: slow file deletes from the trash lookups on every delete (#1390)

* fix: add openapi docs and error handling to host tag routes

* test: compare download stream buffers directly so it stops timing out

* chore: drop em dash from host row comment

* chore: update release notes for 2.9.1

* fix: restore space to add host tags and redesign predefined tags editor

* fix: host key silently accepted when the host is missing from the database (#1397)

* fix: clearer host login failed status label and fix its translations (#1396)

* chore: add host key and status label fixes to release notes

* fix: sso and ldap provider dialogs overflowing the screen and using mismatched toggles

* chore: increment ver

* fix(audit): store plugin entries with no acting user as a null user_id (#1556)

Plugin audit entries written outside a request used the literal "system"
as user_id. That column references users.id, so the insert was refused
(Postgres logs it as an FK violation) and the entry was silently dropped.
Write null instead and keep "system" / plugin:<id> in username.

* chore: add sso/ldap dialog and audit log fixes to release notes

* fix: tunnels and host settings missing from shared hosts on desktop

* fix: remote desktop logins missing from shared hosts on desktop

* fix: simplify host status to online/offline and keep it live without a refresh

* chore: sync Crowdin translations for 2.9.1

---------

Co-authored-by: ZacharyZcR <zacharyzcr1984@gmail.com>
2026-10-04 15:11:41 -05:00

239 lines
11 KiB
JSON

{
"nav": {
"snippets": "Đoạn mã"
},
"onboarding": {
"feature_snippets": "Đoạn mã",
"feature_snippets_desc": "Lưu lại các lệnh bạn thường xuyên sử dụng và gửi chúng đến cửa sổ dòng lệnh chỉ với một cú nhấp chuột."
},
"permissions": {
"view": {
"title": "Xem đoạn trích",
"description": "Xem các đoạn trích, ghi chú và đoạn trích được chia sẻ của riêng bạn."
},
"create": {
"title": "Tạo đoạn mã",
"description": "Tạo đoạn văn bản, ghi chú và thư mục mới."
},
"edit": {
"title": "Chỉnh sửa đoạn mã",
"description": "Đổi tên hoặc thay đổi nội dung các đoạn mã và thư mục hiện có."
},
"delete": {
"title": "Xóa đoạn mã",
"description": "Xóa các đoạn mã và thư mục."
},
"share": {
"title": "Chia sẻ đoạn trích",
"description": "Chia sẻ các đoạn mã và thư mục với người dùng hoặc vai trò khác."
}
},
"settings": {
"foldersCollapsed": {
"label": "Mặc định thu gọn thư mục",
"description": "Khi mở bảng Điều khiển Đoạn mã, mỗi thư mục đoạn mã sẽ được thu gọn lại."
},
"showCommands": {
"label": "Hiển thị lệnh",
"description": "Hiển thị dòng đầu tiên của lệnh trong mỗi đoạn mã, ngay bên dưới tên của nó."
},
"confirmExecution": {
"label": "Xác nhận trước khi chạy.",
"description": "Hãy hỏi trước khi chạy một đoạn mã lệnh trong cửa sổ dòng lệnh."
}
},
"cancel": "Hủy",
"loading": "Đang tải...",
"searchPlaceholder": "Tìm kiếm snippet",
"newFolder": "Thư mục mới",
"newSnippet": "Đoạn mã mới",
"noFolder": "Không có thư mục",
"noSnippetsInFolder": "Không có snippet nào trong thư mục này",
"noTerminalTabsOpen": "Không có tab terminal nào đang mở.",
"run": "Chạy",
"pasteToTerminal": "Dán vào cửa sổ terminal",
"copySuccess": "Đã sao chép vào bộ nhớ tạm",
"importExport": "Nhập / Xuất",
"importFailed": "Nhập đoạn mã thất bại",
"nameLabel": "Tên",
"namePlaceholder": "Tên đoạn mã",
"descriptionLabel": "Mô tả",
"descriptionPlaceholder": "Mô tả tùy chọn",
"folderLabel": "Thư mục",
"typeLabel": "Loại",
"typeCommand": "Lệnh",
"typeNote": "Ghi chú",
"commandLabel": "Lệnh",
"commandPlaceholder": "Lệnh cần chạy, ví dụ: systemctl status $HOST",
"noteLabel": "Ghi chú",
"notePlaceholder": "Văn bản cần dán vào cửa sổ terminal",
"createSnippetTitle": "Tạo đoạn mã",
"createSnippetButton": "Tạo đoạn mã",
"createSuccess": "Đoạn mã được tạo",
"createFailed": "Tạo snippet thất bại",
"editSnippetTitle": "Chỉnh sửa đoạn mã",
"saveSnippetButton": "Lưu đoạn mã",
"updateSuccess": "Đoạn mã đã được cập nhật",
"updateFailed": "Cập nhật snippet thất bại",
"deleteFailed": "Xóa snippet thất bại",
"createFolderTitle": "Tạo thư mục",
"createFolderButton": "Tạo thư mục",
"folderCreateSuccess": "Thư mục đã được tạo",
"folderCreateFailed": "Tạo thư mục thất bại",
"editFolderTitle": "Sửa thư mục",
"saveFolderButton": "Lưu thư mục",
"folderEditSuccess": "Thư mục đã được cập nhật",
"folderEditFailed": "Cập nhật thư mục thất bại",
"folderNameLabel": "Tên thư mục",
"folderNamePlaceholder": "Tên thư mục",
"folderIconLabel": "Biểu tượng",
"folderDeleteSuccess": "Thư mục đã bị xóa",
"folderDeleteFailed": "Xóa thư mục thất bại",
"confirmRunMessage": "Chạy \"{{name}}\"?",
"confirmRunButton": "Chạy",
"runSuccess": "Ran \"{{name}}\" on {{count}} terminal(s)",
"pasteSuccess": "Đã dán \"{{name}}\" vào {{count}} thiết bị đầu cuối",
"admin": {
"tabTitle": "Đoạn mã",
"count": "{{count}} đoạn mã",
"add": "Thêm đoạn mã",
"namePlaceholder": "Tên đoạn mã",
"contentPlaceholder": "Nội dung lệnh",
"folderPlaceholder": "Thư mục (tùy chọn)",
"empty": "Người dùng này không có đoạn mã nào",
"deleteConfirm": "Xóa đoạn mã \"{{name}}\" của {{username}}?",
"deleted": "Đã xóa đoạn mã",
"deleteFailed": "Xóa snippet thất bại",
"requiredFields": "Cần tên và nội dung đoạn mã",
"saved": "Đã lưu đoạn mã",
"saveFailed": "Lưu đoạn mã thất bại",
"saving": "Đang lưu...",
"save": "Lưu"
},
"backToSnippets": "Quay lại các đoạn trích",
"settingsTitle": "Cài đặt đoạn mã",
"settingsDisplayTitle": "Trưng bày",
"settingsBehaviorTitle": "Hành vi",
"typeCommandHint": "Chạy trong cửa sổ dòng lệnh đang hoạt động.",
"typeNoteHint": "Sao chép vào cửa sổ terminal đang hoạt động mà không chạy.",
"variablesHint": "Biến: $HOST, $USER, $PORT, $NAME, ${INPUT_1:Label}",
"doubleClickToRun": "Nhấp đúp để chạy",
"sharedBadge": "Đã chia sẻ",
"copyToClipboard": "Sao chép vào clipboard",
"copyFailed": "Không thể sao chép vào bảng tạm",
"moreOptions": "Nhiều tùy chọn hơn",
"moreActions": "Thao tác khác",
"moveToFolder": "Di chuyển vào thư mục",
"deleteSnippet": "Xóa đoạn mã",
"deleteSnippetConfirm": "Xóa đoạn mã \"{{name}}\"?",
"deleteSuccess": "Đã xóa đoạn mã",
"delete": "Xóa",
"folderActions": "Thao tác thư mục",
"addSnippetHere": "Đoạn mã mới ở đây",
"deleteFolder": "Xóa thư mục",
"deleteFolderConfirm": "Xóa thư mục \"{{name}}\"? Các đoạn mã của nó sẽ được chuyển ra khỏi thư mục.",
"createFolderDescription": "Gom các đoạn văn bản có liên quan lại với nhau.",
"editFolderDescription": "Thay đổi tên, màu sắc hoặc biểu tượng của thư mục này.",
"folderColorLabel": "Màu sắc",
"loadFailed": "Không thể tải đoạn mã.",
"importSkipExisting": "Nhập (bỏ qua mục đã có)",
"importOverwrite": "Nhập khẩu (ghi đè lên nội dung hiện có)",
"importInvalidFile": "Tệp đó không phải là tệp xuất đoạn mã hợp lệ.",
"importSuccess": "Đã nhập {{imported}}, đã cập nhật {{updated}}, đã bỏ qua {{skipped}}",
"exportSnippets": "Xuất đoạn mã",
"exportSuccess": "Các đoạn mã đã xuất",
"exportFailed": "Xuất đoạn mã thất bại",
"expandAll": "Mở rộng tất cả thư mục",
"collapseAll": "Thu gọn tất cả thư mục",
"docsLink": "Tài liệu",
"clearSearch": "Xóa tìm kiếm",
"noSearchResults": "Không có kết quả nào phù hợp với tìm kiếm của bạn",
"emptyTitle": "Chưa có đoạn trích nào.",
"emptyDescription": "Lưu lại các lệnh bạn thường xuyên sử dụng, sau đó chạy chúng trong cửa sổ dòng lệnh chỉ với một cú nhấp chuột.",
"shareSnippet": "Chia sẻ đoạn trích",
"shareFolder": "Chia sẻ thư mục",
"shareExpiry": "Hết hạn",
"shareExpiryOptions": {
"h0": "Chưa bao giờ",
"h1": "Trong 1 giờ",
"h24": "Trong 1 ngày",
"h168": "Trong 7 ngày",
"h720": "Trong 30 ngày"
},
"shareButton": "Chia sẻ",
"shareSuccess": "Đã chia sẻ với {{count}}",
"shareFailed": "Không thể chia sẻ",
"shareLoadFailed": "Không thể tải thông tin chia sẻ.",
"currentAccess": "Truy cập hiện tại",
"notSharedYet": "Chưa chia sẻ với ai cả.",
"revokeAccess": "Thu hồi",
"revokeSuccess": "Đã thu hồi quyền truy cập",
"revokeFailed": "Thu hồi quyền truy cập thất bại",
"close": "Đóng",
"targetHostsLabel": "Mục tiêu chủ nhà",
"targetHostsHint": "Chọn các máy chủ để chạy lệnh này trực tiếp, không cần mở cửa sổ terminal. Để trống nếu muốn chạy lệnh trong cửa sổ terminal đang hoạt động.",
"clearTargetHosts": "Xóa",
"noHostsAvailable": "Hiện không có máy chủ nào khả dụng",
"searchHosts": "Tìm kiếm máy chủ",
"runOnTargets": "Chạy trên máy chủ mục tiêu",
"executionResultTitle": "Kết quả cho \"{{name}}\"",
"executionResultDescription": "Kết quả đầu ra từ mỗi máy chủ mục tiêu.",
"executionSuccess": "Thành công",
"executionFailed": "Thất bại",
"directRunSuccess": "Đã chạy \"{{name}}\" trên {{count}} máy chủ",
"directRunPartialFail": "\"{{name}}\" bị lỗi trên một số máy chủ",
"reorderFailed": "Không thể sắp xếp lại các đoạn mã.",
"dropToRemoveFromFolder": "Kéo thả vào đây để di chuyển ra khỏi thư mục.",
"shareSnippetTitle": "Chia sẻ \"{{name}}\"",
"shareFolderTitle": "Chia sẻ thư mục \"{{name}}\"",
"shareWith": "Chia sẻ với",
"usersTab": "Người dùng",
"rolesTab": "Vai trò",
"shareSearchPlaceholder": "Tìm kiếm người dùng hoặc vai trò",
"shareNoMatches": "Không có kết quả phù hợp",
"shareWithCount": "Chia sẻ với {{count}}",
"shareFolderHint": "Chia sẻ tất cả các đoạn mã trong thư mục này. Các đoạn mã được thêm vào sau sẽ không được chia sẻ tự động.",
"shareFolderSummary": "Đã chia sẻ {{count}} đoạn mã trong thư mục này",
"grantedBy": "Được cấp bởi",
"expired": "Đã hết hạn",
"variablesDialogTitle": "Chạy \"{{name}}\"",
"variablesDialogDescription": "Hãy điền đầy đủ các giá trị cần thiết cho đoạn mã này trước khi chạy.",
"variablesPreviewLabel": "Xem trước",
"variablesConfirmButton": "Chạy",
"keybindings": {
"runSnippet": "Chạy đoạn mã hiện có",
"snippetLabel": "Đoạn trích",
"selectSnippet": "Chọn một đoạn trích",
"snippetMissing": "Không tìm thấy đoạn mã.",
"snippetRequired": "Chọn một đoạn trích"
},
"paletteHintRun": "Chạy trong tab cửa sổ terminal đang hoạt động",
"host": {
"startupTitle": "Đoạn mã khởi động",
"quickActionsTitle": "Hành động nhanh",
"quickActionsDescription": "Hành động nhanh xuất hiện dưới dạng nút trên thanh công cụ Chỉ số máy để thực thi lệnh một lần nhấp.",
"noQuickActions": "Chưa có hành động nhanh nào.",
"buttonLabel": "Nhãn nút",
"selectSnippet": "Chọn đoạn mã...",
"addQuickAction": "Thêm hành động",
"tabTitle": "Đoạn mã",
"startupDescription": "Đoạn mã này chạy trong terminal mỗi khi kết nối với máy chủ này. Các biến như $HOST được điền vào; đoạn mã yêu cầu nhập liệu sẽ bị bỏ qua.",
"none": "Không chọn",
"removeQuickAction": "Loại bỏ thao tác nhanh"
},
"quickActions": {
"running": "Đang thực thi {{name}}...",
"succeeded": "{{name}} đã hoàn tất thành công",
"failed": "{{name}} thất bại",
"error": "Thực thi {{name}} thất bại"
},
"paletteHintPaste": "Dán vào tab cửa sổ terminal đang hoạt động.",
"targetTerminals": "Chạy vào",
"targetTerminalsHint": "tùy chọn, nếu không thì tab đang hoạt động",
"selectAll": "Tất cả",
"selectNone": "Không chọn",
"plugin": {
"name": "Snippets"
}
}