feat: move snippets, keybinding actions and macros out of core into plugins

This commit is contained in:
LukeGus committed 2026-09-29 11:39:14 -05:00
1 parent d9bba10612
commit e0c30a4e6f
262 files changed
+9091 -10744

No files matched your search

+1 -229
View File
@@ -409,7 +409,6 @@
"sidebarSettings": "Cài đặt thanh bên...",
"hosts": "Máy chủ",
"snippets": "Đoạn mã",
"macros": "Macro",
"hostManager": "Quản lý máy chủ",
"credentials": "Thông tin đăng nhập",
"connections": "Kết nối",
@@ -869,7 +868,6 @@
"groupTags": "Thẻ & ghim",
"groupTunnels": "Đường hầm",
"groupJumpHosts": "Người dẫn chương trình Jump",
"groupQuickActions": "Hành động nhanh chóng",
"groupFeatureFlags": "Cờ tính năng",
"groupAdvanced": "Cấu hình nâng cao",
"preview": "Xem trước",
@@ -1068,9 +1066,6 @@
"addCredentialDesc": "Lưu trữ khóa SSH hoặc mật khẩu",
"tmuxMonitor": "Giám sát Tmux",
"tmuxMonitorDesc": "Giám sát phiên tmux trên các máy chủ",
"snippets": "Những đoạn trích",
"runSnippetDesc": "Chạy trong tab cửa sổ terminal đang hoạt động",
"noSnippetsFound": "Không tìm thấy đoạn mã nào khớp với \"{{search}}\"",
"recentActivity": "Hoạt động gần đây",
"serversAndHosts": "Máy chủ & Host",
"noHostsFound": "Không tìm thấy máy chủ nào khớp với \"{{search}}\"",
@@ -1864,119 +1859,6 @@
"hotkeysPrevTab": "Tab trước",
"hotkeysJumpTab": "Chuyển đến tab"
},
"snippets": {
"title": "Đoạn mã",
"createSnippetTitle": "Tạo đoạn mã",
"createSnippetDescription": "Tạo đoạn mã lệnh mới để thực thi nhanh",
"nameLabel": "Tên",
"namePlaceholder": "Ví dụ: Khởi động lại Nginx",
"descriptionLabel": "Mô tả",
"descriptionPlaceholder": "Mô tả tùy chọn",
"optional": "Tùy chọn",
"folderLabel": "Thư mục",
"noFolder": "Không thư mục (Chưa phân loại)",
"commandLabel": "Lệnh",
"commandPlaceholder": "Ví dụ: sudo systemctl restart nginx",
"typeLabel": "Kiểu",
"typeCommand": "Yêu cầu",
"typeNote": "Ghi chú",
"noteLabel": "Ghi chú",
"notePlaceholder": "Ví dụ: một lời nhắc hoặc văn bản nhắc nhở có thể tái sử dụng.",
"cancel": "Hủy",
"createSnippetButton": "Tạo đoạn mã",
"createFolderTitle": "Tạo thư mục",
"createFolderDescription": "Sắp xếp đoạn mã vào các thư mục",
"folderNameLabel": "Tên thư mục",
"folderNamePlaceholder": "Ví dụ: Lệnh hệ thống, Docker Scripts",
"folderColorLabel": "Màu thư mục",
"folderIconLabel": "Biểu tượng thư mục",
"previewLabel": "Xem trước",
"folderNameFallback": "Tên thư mục",
"createFolderButton": "Tạo thư mục",
"targetTerminals": "Terminal đích",
"selectAll": "Tất cả",
"selectNone": "Không chọn",
"noTerminalTabsOpen": "Không có tab terminal nào mở",
"searchPlaceholder": "Tìm kiếm snippet...",
"newSnippet": "Snippet mới",
"newFolder": "Thư mục mới",
"run": "Chạy",
"noSnippetsInFolder": "Không có snippet nào trong thư mục này",
"uncategorized": "Chưa phân loại",
"editSnippetTitle": "Chỉnh sửa snippet",
"editSnippetDescription": "Cập nhật snippet lệnh này",
"saveSnippetButton": "Lưu thay đổi",
"createSuccess": "Đã tạo snippet thành công",
"createFailed": "Tạo snippet thất bại",
"updateSuccess": "Đã cập nhật snippet thành công",
"updateFailed": "Cập nhật snippet thất bại",
"deleteFailed": "Xóa snippet thất bại",
"folderCreateSuccess": "Đã tạo thư mục thành công",
"folderCreateFailed": "Tạo thư mục thất bại",
"editFolderTitle": "Chỉnh sửa thư mục",
"editFolderDescription": "Đổi tên hoặc thay đổi hình thức của thư mục này",
"saveFolderButton": "Lưu thay đổi",
"editFolder": "Chỉnh sửa thư mục",
"deleteFolder": "Xóa thư mục",
"folderDeleteSuccess": "Đã xóa thư mục \"{{name}}\"",
"folderDeleteFailed": "Xóa thư mục thất bại",
"folderEditSuccess": "Đã cập nhật thư mục thành công",
"folderEditFailed": "Cập nhật thư mục thất bại",
"confirmRunMessage": "Chạy \"{{name}}\"?",
"confirmRunButton": "Chạy",
"runSuccess": "Đã chạy \"{{name}}\" trên {{count}} terminal",
"pasteSuccess": "Đã dán \"{{name}}\" vào {{count}} thiết bị đầu cuối",
"pasteToTerminal": "Dán",
"copySuccess": "Đã sao chép \"{{name}}\" vào clipboard",
"shareTitle": "Chia sẻ snippet",
"shareUser": "Người dùng",
"shareRole": "Vai trò",
"selectUser": "Chọn người dùng...",
"selectRole": "Chọn vai trò...",
"shareSuccess": "Đã chia sẻ đoạn mã thành công",
"shareFailed": "Chia sẻ đoạn mã thất bại",
"revokeSuccess": "Đã thu hồi quyền truy cập",
"revokeFailed": "Thu hồi quyền truy cập thất bại",
"currentAccess": "Quyền truy cập hiện tại",
"shareLoadError": "Tải dữ liệu chia sẻ thất bại",
"loading": "Đang tải...",
"close": "Đóng",
"reorderFailed": "Lưu thứ tự đoạn mã thất bại",
"importExport": "Nhập / Xuất",
"exportBtn": "Xuất JSON",
"importBtn": "Nhập JSON",
"exportSuccess": "Đã xuất đoạn mã thành công",
"exportFailed": "Xuất đoạn mã thất bại",
"importTitle": "Nhập đoạn mã",
"importDescription": "Nhập đoạn mã và thư mục từ tệp JSON được Termix xuất ra",
"importDropOrClick": "Kéo thả tệp JSON vào đây hoặc nhấn để duyệt",
"importSelectedFile": "Đã chọn: {{name}}",
"importOverwrite": "Ghi đè đoạn mã hiện có cùng tên và thư mục",
"importStartBtn": "Nhập",
"importSuccess": "Nhập xong: đã thêm {{snippets}} đoạn mã, cập nhật {{updated}}, bỏ qua {{skipped}}, thêm {{folders}} thư mục",
"importFailed": "Nhập đoạn mã thất bại",
"importInvalidFile": "Tệp không hợp lệ: cần một đối tượng JSON với mảng đoạn mã hoặc thư mục",
"targetHostsLabel": "Máy chủ đích",
"targetHostsHint": "Gán máy chủ để chạy đoạn mã này trực tiếp mà không cần mở terminal.",
"noHostsAvailable": "Chưa cấu hình máy chủ nào",
"clearTargetHosts": "Xóa tất cả",
"hasTargetHosts": "Có máy chủ đích",
"runOnTargets": "Chạy trên máy đích",
"directRunSuccess": "Đã chạy \"{{name}}\" trên {{count}} máy chủ",
"directRunPartialFail": "\"{{name}}\" chạy thất bại trên một hoặc nhiều máy chủ",
"executionResultTitle": "Kết quả thực thi: {{name}}",
"executionResultDescription": "Kết quả từ việc chạy đoạn mã trên từng máy đích.",
"executionSuccess": "Thành công",
"executionFailed": "Thất bại",
"expandAll": "Mở rộng tất cả các thư mục",
"collapseAll": "Thu gọn tất cả các thư mục",
"settings": "Cài đặt đoạn mã",
"variablesHint": "Biến: $HOST, $USER, $PORT, $NAME, ${INPUT_1:Label}",
"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": {
"title": "Phím tắt",
"description": "Tùy chỉnh các phím tắt sao chép, dán và điều khiển trong terminal, hoặc gán phím để gửi văn bản hoặc chạy một đoạn mã.",
@@ -2000,26 +1882,11 @@
"pressKeysPlaceholder": "Nhấp chuột và nhấn phím",
"recording": "Nhấn các phím...",
"comboRequiredError": "Trước tiên, hãy nhấn tổ hợp phím.",
"textRequiredError": "Nhập văn bản cần gửi",
"controlCodeRequiredError": "Nhập một chữ cái duy nhất cho mã điều khiển.",
"snippetRequiredError": "Chọn một đoạn trích",
"conflictWarning": "Sự kết hợp này đã được liên kết với {{combo}}. Lưu lại sẽ khiến cả hai đều bốc cháy.",
"actionLabel": "Hoạt động",
"actionCopy": "Sao chép lựa chọn",
"actionPaste": "Dán",
"actionSendControlCode": "Gửi tín hiệu Ctrl+chữ cái",
"actionSendText": "Gửi tin nhắn",
"actionRunSnippet": "Chạy đoạn mã hiện có",
"actionNextTab": "Chuyển sang tab tiếp theo",
"actionPreviousTab": "Chuyển về tab trước",
"actionOpenCommandPalette": "Mở tìm kiếm nhanh",
"controlCodeLabel": "Thư",
"textLabel": "Văn bản để gửi",
"appendEnterLabel": "Nhấn Enter sau khi gửi",
"snippetLabel": "Đoạn trích",
"selectSnippetPlaceholder": "Chọn một đoạn trích",
"orphanedSnippetWarning": "Không tìm thấy đoạn mã.",
"clipboardPermissionNote": "Một số trình duyệt có thể yêu cầu quyền truy cập clipboard khi sử dụng lần đầu."
"actionOpenCommandPalette": "Mở tìm kiếm nhanh"
},
"userProfile": {
"donateTitle": "Duy trì Termix",
@@ -2240,100 +2107,5 @@
"ntfyTopicRequired": "Chủ đề là bắt buộc",
"ntfyToken": "Mã truy cập (tùy chọn)",
"channelSaveFailed": "Lỗi khi lưu kênh"
},
"macros": {
"title": "Macro",
"description": "Chạy một chuỗi lệnh đã lưu trong cửa sổ dòng lệnh và phản hồi lại những gì máy chủ gửi về.",
"target": "Mục tiêu",
"noTerminal": "Không có thiết bị đầu cuối nào đang mở",
"empty": "Chưa có macro nào.",
"emptyHint": "Tạo macro để tự động hóa quy trình trên thiết bị đầu cuối, chẳng hạn như đăng nhập, khởi động lại dịch vụ hoặc trả lời các lời nhắc.",
"create": "Macro mới",
"back": "Quay lại phần macro",
"name": "Tên",
"namePlaceholder": "Khởi động lại máy chủ web",
"nameRequired": "Đặt tên cho macro trước khi lưu.",
"descriptionLabel": "Sự miêu tả",
"descriptionPlaceholder": "Chức năng của macro này (tùy chọn)",
"unsaved": "Thay đổi chưa được lưu",
"save": "Cứu",
"saved": "Macro đã được lưu",
"saveFailed": "Không thể lưu macro",
"delete": "Xóa bỏ",
"deleteTitle": "Xóa macro này?",
"deleteBody": "\"{{name}}\" sẽ bị xóa vĩnh viễn. Không thể hoàn tác.",
"deleted": "Macro đã bị xóa",
"cancel": "Hủy bỏ",
"run": "Chạy",
"stop": "Dừng lại",
"running": "Đang chạy...",
"completed": "Macro đã hoàn thành",
"failed": "Macro bị lỗi",
"loadFailed": "Không thể tải macro",
"needTerminal": "Trước tiên hãy mở và kết nối thiết bị đầu cuối.",
"noSteps": "Macro này chưa có bước nào. Hãy thêm một bước bên dưới.",
"addStep": "Thêm bước",
"stepNumber": "Bước {{number}}",
"removeStep": "Xóa bước",
"confirmRunTitle": "Chạy macro này?",
"confirmRunBody": "\"{{name}}\" sẽ gửi lệnh đến {{host}}.",
"confirmRunAction": "Chạy macro",
"stepTypes": {
"send": {
"label": "Gửi lệnh",
"help": "Nhập văn bản vào cửa sổ dòng lệnh, giống như khi bạn tự nhập văn bản."
},
"wait": {
"label": "Chờ kết quả đầu ra",
"help": "Tạm dừng cho đến khi máy chủ in ra đoạn văn bản bạn đã đặt tên, ví dụ như lời nhắc nhập mật khẩu."
},
"delay": {
"label": "Tạm dừng",
"help": "Chờ một khoảng thời gian cố định trước khi thực hiện bước tiếp theo."
},
"if": {
"label": "Nếu đầu ra chứa",
"help": "Kiểm tra tất cả những gì máy chủ đã in ra cho đến nay, sau đó chạy một trong hai nhánh."
},
"repeat": {
"label": "Lặp lại",
"help": "Thực thi các bước bên trong nó một số lần nhất định."
}
},
"send": {
"text": "Lệnh hoặc văn bản",
"textPlaceholder": "systemctl restart nginx",
"pressEnter": "Nhấn Enter sau khi gửi",
"pressEnterHelp": "Tắt tùy chọn này để nhập văn bản mà không cần gửi đi."
},
"wait": {
"pattern": "Chờ cho đến khi đầu ra chứa",
"patternPlaceholder": "mật khẩu:",
"timeout": "Bỏ cuộc sau",
"onTimeout": "Nếu nó không bao giờ xuất hiện",
"stop": "Dừng macro",
"continue": "Cứ tiếp tục đi"
},
"delay": {
"duration": "Chờ đợi"
},
"ifStep": {
"pattern": "Nếu đầu ra chứa",
"patternPlaceholder": "Đang hoạt động: đang hoạt động (đang chạy)",
"then": "Sau đó hãy làm như thế này",
"else": "Nếu không thì hãy làm như thế này",
"emptyBranch": "Không có bước nào"
},
"repeat": {
"count": "Số lần",
"times": "lần"
},
"match": {
"useRegex": "So khớp với biểu thức chính quy",
"useRegexHelp": "Bỏ phần này đi để văn bản khớp chính xác với nội dung đã viết.",
"invalidRegex": "Đây không phải là biểu thức chính quy hợp lệ, nó sẽ được so khớp như văn bản thuần túy."
},
"seconds": "giây",
"secondsShort": "{{count}}s"
}
}