2046 lines
121 KiB
JavaScript
2046 lines
121 KiB
JavaScript
document.addEventListener('DOMContentLoaded', () => {
|
|
let currentLang = "english_switch";
|
|
let isScanning = false;
|
|
|
|
const dict = {
|
|
"traditional_switch": {
|
|
"PYAS Security": "PYAS Security",
|
|
"此裝置已受到防護": "此裝置已受到防護",
|
|
"智能掃描": "智能掃描",
|
|
"此選項可以快速掃病毒": "此選項可以快速掃描病毒",
|
|
"日誌導出": "日誌導出",
|
|
"此選項可以篩選導出日誌": "此選項可以篩選導出日誌",
|
|
"病毒掃描": "病毒掃描",
|
|
"此選項可以選擇掃描方式": "此選項可以選擇掃描方式",
|
|
"刪除": "刪除",
|
|
"選擇": "選擇",
|
|
"智能": "智能",
|
|
"檔案": "檔案",
|
|
"路徑": "路徑",
|
|
"全盤": "全盤",
|
|
"停止": "停止",
|
|
"進程防護": "進程防護",
|
|
"此選項可以攔截進程病毒": "此選項可以攔截惡意進程",
|
|
"檔案防護": "檔案防護",
|
|
"此選項可以攔截檔案變更": "此選項可以攔截惡意檔案變更",
|
|
"系統防護": "系統防護",
|
|
"此選項可以攔截系統項目": "此選項可以防護系統關鍵項目",
|
|
"驅動防護": "驅動防護",
|
|
"此選項可以增強自身防護": "此選項可以增強自身防護",
|
|
"網路防護": "網路防護",
|
|
"此選項可以攔截網路通訊": "此選項可以攔截惡意網路連線",
|
|
"自訂防護": "自訂防護",
|
|
"此選項可以導入自訂防護": "此選項可以導入自訂防護規則",
|
|
"進程管理": "進程管理",
|
|
"此選項可以實時查看系統進程": "此選項可以實時查看系統進程",
|
|
"垃圾清理": "垃圾清理",
|
|
"此選項可以清理暫存垃圾檔案": "此選項可以清理暫存垃圾檔案",
|
|
"系統修復": "系統修復",
|
|
"此選項可以修復系統註冊項目": "此選項可以修復系統登錄檔項目",
|
|
"彈窗攔截": "彈窗攔截",
|
|
"此選項可以選擇指定窗口攔截": "此選項可以選擇指定窗口攔截",
|
|
"白名單": "白名單",
|
|
"此選項可以管理系統白名單": "此選項可以管理系統白名單",
|
|
"隔離區": "隔離區",
|
|
"此選項可以管理已隔離的檔案": "此選項可以管理已隔離的檔案",
|
|
"增強模式": "增強模式",
|
|
"此選項可以增強掃描引擎": "此選項可以增強掃描引擎",
|
|
"擴展引擎": "擴展引擎",
|
|
"此選項可以使用擴展引擎": "此選項可以使用擴展引擎",
|
|
"雲端服務": "雲端服務",
|
|
"此選項可以上報雲端引擎": "此選項可以將可疑檔案上報至雲端",
|
|
"顯色主題": "顯色主題",
|
|
"此選項可以選擇主題顏色": "此選項可以選擇主題顏色",
|
|
"白色主題": "白色主題",
|
|
"紅色主題": "紅色主題",
|
|
"黃色主題": "黃色主題",
|
|
"綠色主題": "綠色主題",
|
|
"藍色主題": "藍色主題",
|
|
"黑色主題": "黑色主題",
|
|
"顯示語言": "顯示語言",
|
|
"此選項可以選擇顯示語言": "此選項可以選擇顯示語言",
|
|
"重置選項": "重置選項",
|
|
"此選項可以重置所有設定": "此選項可以重置所有設定",
|
|
"執行": "執行",
|
|
"產品金鑰": "產品金鑰",
|
|
"此選項可以啟用產品金鑰": "此選項可以啟用產品金鑰",
|
|
"官方網站": "官方網站",
|
|
"此選項可以前往官方網站": "此選項可以前往官方網站",
|
|
"檢查更新": "檢查更新",
|
|
"此選項可以檢查可用更新": "此選項可以檢查可用更新",
|
|
"搜尋進程...": "搜尋進程...",
|
|
"查看": "查看",
|
|
"結束": "結束",
|
|
"白名單管理": "白名單管理",
|
|
"搜尋檔案...": "搜尋檔案...",
|
|
"加入": "加入",
|
|
"移除": "移除",
|
|
"隔離區管理": "隔離區管理",
|
|
"掃描": "掃描",
|
|
"搜尋窗口...": "搜尋窗口...",
|
|
"搜尋規則...": "搜尋規則...",
|
|
"搜尋日誌...": "搜尋日誌...",
|
|
"導出": "導出",
|
|
"正在初始化中": "正在初始化中",
|
|
"檢查更新失敗": "檢查更新失敗",
|
|
"發現新版本": "發現新版本",
|
|
"當前已是最新版本": "當前已是最新版本",
|
|
"請選擇要導出的日誌": "請選擇要導出的日誌",
|
|
"確定刪除選取的日誌記錄嗎?": "確定刪除選取的日誌記錄嗎?",
|
|
"選取的日誌已刪除。": "選取的日誌已刪除。",
|
|
"結束進程?": "結束進程?",
|
|
"確定要結束選取的進程嗎?": "確定要結束選取的進程嗎?",
|
|
"已清理 ": "已清理 ",
|
|
"設定已重置,請重新啟動程式以套用預設值。": "設定已重置,請重新啟動程式以套用預設值。",
|
|
"導出成功": "導出成功",
|
|
"選取進程路徑:\n": "選取進程路徑:\n",
|
|
"對 ": "對 ",
|
|
" 執行動作:\n1: 加入白名單\n2: 加入隔離區\n請輸入代碼:": " 執行動作:\n1: 加入白名單\n2: 加入隔離區\n請輸入代碼:",
|
|
"請在5秒內點擊目標視窗...": "請在5秒內點擊目標視窗...",
|
|
"確認攔截": "確認攔截",
|
|
"已修復選取項目": "已修復選取項目",
|
|
"修復": "修復",
|
|
"提示": "提示",
|
|
"錯誤": "錯誤",
|
|
"未知路徑": "未知路徑",
|
|
"修復系統 MBR": "修復系統 MBR",
|
|
"修復系統限制": "修復系統限制",
|
|
"修復檔案關聯": "修復檔案關聯",
|
|
"修復檔案圖標": "修復檔案圖標",
|
|
"修復映像劫持": "修復映像劫持",
|
|
"修復桌面壁紙": "修復桌面壁紙",
|
|
"正在掃描": "正在掃描",
|
|
"正在刪除": "正在刪除",
|
|
"選單掃描": "選單掃描",
|
|
"此選項可以加入右鍵掃描": "此選項可以加入右鍵掃描"
|
|
},
|
|
"simplified_switch": {
|
|
"PYAS Security": "PYAS Security",
|
|
"此裝置已受到防護": "此设备已受到防护",
|
|
"智能掃描": "智能扫描",
|
|
"此選項可以快速掃病毒": "此选项可以快速扫描病毒",
|
|
"日誌導出": "日志导出",
|
|
"此選項可以篩選導出日誌": "此选项可以筛选并导出日志",
|
|
"病毒掃描": "病毒扫描",
|
|
"此選項可以選擇掃描方式": "此选项可以选择扫描方式",
|
|
"刪除": "删除",
|
|
"選擇": "选择",
|
|
"智能": "智能",
|
|
"檔案": "文件",
|
|
"路徑": "路径",
|
|
"全盤": "全盘",
|
|
"停止": "停止",
|
|
"進程防護": "进程防护",
|
|
"此選項可以攔截進程病毒": "此选项可以拦截恶意进程",
|
|
"檔案防護": "文件防护",
|
|
"此選項可以攔截檔案變更": "此选项可以拦截恶意文件变更",
|
|
"系統防護": "系统防护",
|
|
"此選項可以攔截系統項目": "此选项可以防护系统关键项目",
|
|
"驅動防護": "驱动防护",
|
|
"此選項可以增強自身防護": "此选项可以增强自身防护",
|
|
"網路防護": "网络防护",
|
|
"此選項可以攔截網路通訊": "此选项可以拦截恶意网络连线",
|
|
"自訂防護": "自订防护",
|
|
"此選項可以導入自訂防護": "此选项可以导入自订防护规则",
|
|
"進程管理": "进程管理",
|
|
"此選項可以實時查看系統進程": "此选项可以实时查看系统进程",
|
|
"垃圾清理": "垃圾清理",
|
|
"此選項可以清理暫存垃圾檔案": "此选项可以清理暂存垃圾文件",
|
|
"系統修復": "系统修复",
|
|
"此選項可以修復系統註冊項目": "此选项可以修复系统注册表项目",
|
|
"彈窗攔截": "弹窗拦截",
|
|
"此選項可以選擇指定窗口攔截": "此选项可以选择指定窗口拦截",
|
|
"白名單": "白名单",
|
|
"此選項可以管理系統白名單": "此选项可以管理系统白名单",
|
|
"隔離區": "隔离区",
|
|
"此選項可以管理已隔離的檔案": "此选项可以管理已隔离的文件",
|
|
"增強模式": "增强模式",
|
|
"此選項可以增強掃描引擎": "此选项可以增强扫描引擎",
|
|
"擴展引擎": "扩展引擎",
|
|
"此選項可以使用擴展引擎": "此选项可以使用扩展引擎",
|
|
"雲端服務": "云端服务",
|
|
"此選項可以上報雲端引擎": "此选项可以将可疑文件上报至云端",
|
|
"顯色主題": "显色主题",
|
|
"此選項可以選擇主題顏色": "此选项可以选择主题颜色",
|
|
"白色主題": "白色主题",
|
|
"紅色主題": "红色主题",
|
|
"黃色主題": "黄色主题",
|
|
"綠色主題": "绿色主题",
|
|
"藍色主題": "蓝色主题",
|
|
"黑色主題": "黑色主题",
|
|
"顯示語言": "显示语言",
|
|
"此選項可以選擇顯示語言": "此选项可以选择显示语言",
|
|
"重置選項": "重置选项",
|
|
"此選項可以重置所有設定": "此选项可以重置所有设定",
|
|
"執行": "执行",
|
|
"產品金鑰": "产品密钥",
|
|
"此選項可以啟用產品金鑰": "此选项可以启用产品密钥",
|
|
"官方網站": "官方网站",
|
|
"此選項可以前往官方網站": "此选项可以前往官方网站",
|
|
"檢查更新": "检查更新",
|
|
"此選項可以檢查可用更新": "此选项可以检查可用更新",
|
|
"搜尋進程...": "搜索进程...",
|
|
"查看": "查看",
|
|
"結束": "结束",
|
|
"白名單管理": "白名单管理",
|
|
"搜尋檔案...": "搜索文件...",
|
|
"加入": "加入",
|
|
"移除": "移除",
|
|
"隔離區管理": "隔离区管理",
|
|
"掃描": "扫描",
|
|
"搜尋窗口...": "搜索窗口...",
|
|
"搜尋規則...": "搜索规则...",
|
|
"搜尋日誌...": "搜索日志...",
|
|
"導出": "导出",
|
|
"正在初始化中": "正在初始化中",
|
|
"檢查更新失敗": "检查更新失败",
|
|
"發現新版本": "发现新版本",
|
|
"當前已是最新版本": "当前已是最新版本",
|
|
"請選擇要導出的日誌": "请选择要导出的日志",
|
|
"確定刪除選取的日誌記錄嗎?": "确定删除选取的日志记录吗?",
|
|
"選取的日誌已刪除。": "选取的日志已删除。",
|
|
"結束進程?": "结束进程?",
|
|
"確定要結束選取的進程嗎?": "确定要结束选取的进程吗?",
|
|
"已清理 ": "已清理 ",
|
|
"設定已重置,請重新啟動程式以套用預設值。": "设定已重置,请重新启动程序以应用默认值。",
|
|
"導出成功": "导出成功",
|
|
"選取進程路徑:\n": "选取进程路径:\n",
|
|
"對 ": "对 ",
|
|
" 執行動作:\n1: 加入白名單\n2: 加入隔離區\n請輸入代碼:": " 执行动作:\n1: 加入白名单\n2: 加入隔离区\n请输入代码:",
|
|
"請在5秒內點擊目標視窗...": "请在5秒内点击目标窗口...",
|
|
"確認攔截": "确认拦截",
|
|
"已修復選取項目": "已修复选取项目",
|
|
"修復": "修复",
|
|
"提示": "提示",
|
|
"錯誤": "错误",
|
|
"未知路徑": "未知路径",
|
|
"修復系統 MBR": "修复系统 MBR",
|
|
"修復系統限制": "修复系统限制",
|
|
"修復檔案關聯": "修复文件关联",
|
|
"修復檔案圖標": "修复文件图标",
|
|
"修復映像劫持": "修复映像劫持",
|
|
"修復桌面壁紙": "修复桌面壁纸",
|
|
"正在掃描": "正在扫描",
|
|
"正在刪除": "正在删除",
|
|
"選單掃描": "菜单扫描",
|
|
"此選項可以加入右鍵掃描": "此选项可以加入右键扫描菜单"
|
|
},
|
|
"english_switch": {
|
|
"PYAS Security": "PYAS Security",
|
|
"此裝置已受到防護": "This Device is Protected",
|
|
"智能掃描": "Smart Scan",
|
|
"此選項可以快速掃病毒": "Quickly scan for viruses",
|
|
"日誌導出": "Export Logs",
|
|
"此選項可以篩選導出日誌": "Filter and export system logs",
|
|
"病毒掃描": "Virus Scan",
|
|
"此選項可以選擇掃描方式": "Select a scanning method",
|
|
"刪除": "Delete",
|
|
"選擇": "Select",
|
|
"智能": "Smart",
|
|
"檔案": "File",
|
|
"路徑": "Path",
|
|
"全盤": "Full",
|
|
"停止": "Stop",
|
|
"進程防護": "Process Protection",
|
|
"此選項可以攔截進程病毒": "Block malicious processes",
|
|
"檔案防護": "File Protection",
|
|
"此選項可以攔截檔案變更": "Block malicious file modifications",
|
|
"系統防護": "System Protection",
|
|
"此選項可以攔截系統項目": "Protect critical system components",
|
|
"驅動防護": "Driver Protection",
|
|
"此選項可以增強自身防護": "Enhance self-defense mechanisms",
|
|
"網路防護": "Network Protection",
|
|
"此選項可以攔截網路通訊": "Block malicious network connections",
|
|
"自訂防護": "Custom Protection",
|
|
"此選項可以導入自訂防護": "Import custom protection rules",
|
|
"進程管理": "Process Manager",
|
|
"此選項可以實時查看系統進程": "Monitor real-time system processes",
|
|
"垃圾清理": "Junk Cleanup",
|
|
"此選項可以清理暫存垃圾檔案": "Clean temporary and junk files",
|
|
"系統修復": "System Repair",
|
|
"此選項可以修復系統註冊項目": "Repair system registry items",
|
|
"彈窗攔截": "Popup Blocker",
|
|
"此選項可以選擇指定窗口攔截": "Block specific popup windows",
|
|
"白名單": "Whitelist",
|
|
"此選項可以管理系統白名單": "Manage system whitelist",
|
|
"隔離區": "Quarantine",
|
|
"此選項可以管理已隔離的檔案": "Manage quarantined files",
|
|
"增強模式": "Enhanced Mode",
|
|
"此選項可以增強掃描引擎": "Enhance the scanning engine",
|
|
"擴展引擎": "Extension Engine",
|
|
"此選項可以使用擴展引擎": "Enable external extension engines",
|
|
"雲端服務": "Cloud Service",
|
|
"此選項可以上報雲端引擎": "Report suspicious files to the cloud",
|
|
"顯色主題": "Color Theme",
|
|
"此選項可以選擇主題顏色": "Select application color theme",
|
|
"白色主題": "Light Mode",
|
|
"紅色主題": "Red Theme",
|
|
"黃色主題": "Yellow Theme",
|
|
"綠色主題": "Green Theme",
|
|
"藍色主題": "Blue Theme",
|
|
"黑色主題": "Dark Mode",
|
|
"顯示語言": "Display Language",
|
|
"此選項可以選擇顯示語言": "Select application display language",
|
|
"重置選項": "Reset Options",
|
|
"此選項可以重置所有設定": "Restore all settings to default",
|
|
"執行": "Execute",
|
|
"產品金鑰": "Product Key",
|
|
"此選項可以啟用產品金鑰": "Activate your product key",
|
|
"官方網站": "Official Website",
|
|
"此選項可以前往官方網站": "Visit our official website",
|
|
"檢查更新": "Check for Updates",
|
|
"此選項可以檢查可用更新": "Check for the latest updates",
|
|
"搜尋進程...": "Search processes...",
|
|
"查看": "View",
|
|
"結束": "End Task",
|
|
"白名單管理": "Whitelist Manager",
|
|
"搜尋檔案...": "Search files...",
|
|
"加入": "Add",
|
|
"移除": "Remove",
|
|
"隔離區管理": "Quarantine Manager",
|
|
"掃描": "Scan",
|
|
"搜尋窗口...": "Search windows...",
|
|
"搜尋規則...": "Search rules...",
|
|
"搜尋日誌...": "Search logs...",
|
|
"導出": "Export",
|
|
"正在初始化中": "Initializing...",
|
|
"檢查更新失敗": "Check update failed",
|
|
"發現新版本": "New version found",
|
|
"當前已是最新版本": "Currently at latest version",
|
|
"請選擇要導出的日誌": "Please select logs to export",
|
|
"確定刪除選取的日誌記錄嗎?": "Are you sure you want to delete selected logs?",
|
|
"選取的日誌已刪除。": "Selected logs have been deleted.",
|
|
"結束進程?": "End process?",
|
|
"確定要結束選取的進程嗎?": "Are you sure you want to end the selected processes?",
|
|
"已清理 ": "Cleaned ",
|
|
"設定已重置,請重新啟動程式以套用預設值。": "Settings reset. Please restart the application to apply defaults.",
|
|
"導出成功": "Export successful",
|
|
"選取進程路徑:\n": "Selected process paths:\n",
|
|
"對 ": "Action for ",
|
|
" 執行動作:\n1: 加入白名單\n2: 加入隔離區\n請輸入代碼:": ":\n1: Add to Whitelist\n2: Add to Quarantine\nEnter code:",
|
|
"請在5秒內點擊目標視窗...": "Click the target window within 5s...",
|
|
"確認攔截": "Confirm Block",
|
|
"已修復選取項目": "Selected items repaired",
|
|
"修復": "Repair",
|
|
"提示": "Prompt",
|
|
"錯誤": "Error",
|
|
"未知路徑": "Unknown Path",
|
|
"修復系統 MBR": "Repair System MBR",
|
|
"修復系統限制": "Repair System Restrictions",
|
|
"修復檔案關聯": "Repair File Associations",
|
|
"修復檔案圖標": "Repair File Icons",
|
|
"修復映像劫持": "Repair Image Hijacking",
|
|
"修復桌面壁紙": "Repair Desktop Wallpaper",
|
|
"正在掃描": "Scanning...",
|
|
"正在刪除": "Deleting...",
|
|
"選單掃描": "Context Menu Scan",
|
|
"此選項可以加入右鍵掃描": "Add scan option to right-click menu"
|
|
},
|
|
"japanese_switch": {
|
|
"PYAS Security": "PYAS Security",
|
|
"此裝置已受到防護": "このデバイスは保護されています",
|
|
"智能掃描": "スマートスキャン",
|
|
"此選項可以快速掃病毒": "ウイルスを迅速にスキャンします",
|
|
"日誌導出": "ログのエクスポート",
|
|
"此選項可以篩選導出日誌": "システムログをフィルタリングしてエクスポートします",
|
|
"病毒掃描": "ウイルススキャン",
|
|
"此選項可以選擇掃描方式": "スキャン方法を選択します",
|
|
"刪除": "削除",
|
|
"選擇": "選択",
|
|
"智能": "スマート",
|
|
"檔案": "ファイル",
|
|
"路徑": "パス",
|
|
"全盤": "フル",
|
|
"停止": "停止",
|
|
"進程防護": "プロセス保護",
|
|
"此選項可以攔截進程病毒": "悪意のあるプロセスをブロックします",
|
|
"檔案防護": "ファイル保護",
|
|
"此選項可以攔截檔案變更": "悪意のあるファイル変更をブロックします",
|
|
"系統防護": "システム保護",
|
|
"此選項可以攔截系統項目": "重要なシステムコンポーネントを保護します",
|
|
"驅動防護": "ドライバー保護",
|
|
"此選項可以增強自身防護": "自己防衛メカニズムを強化します",
|
|
"網路防護": "ネットワーク保護",
|
|
"此選項可以攔截網路通訊": "悪意のあるネットワーク接続をブロックします",
|
|
"自訂防護": "カスタム保護",
|
|
"此選項可以導入自訂防護": "カスタム保護ルールをインポートします",
|
|
"進程管理": "プロセス管理",
|
|
"此選項可以實時查看系統進程": "システムプロセスをリアルタイムで監視します",
|
|
"垃圾清理": "ジャンククリーンアップ",
|
|
"此選項可以清理暫存垃圾檔案": "一時ファイルやジャンクファイルをクリーンアップします",
|
|
"系統修復": "システム修復",
|
|
"此選項可以修復系統註冊項目": "システムレジストリ項目を修復します",
|
|
"彈窗攔截": "ポップアップブロック",
|
|
"此選項可以選擇指定窗口攔截": "特定のポップアップウィンドウをブロックします",
|
|
"白名單": "ホワイトリスト",
|
|
"此選項可以管理系統白名單": "システムのホワイトリストを管理します",
|
|
"隔離區": "隔離",
|
|
"此選項可以管理已隔離的檔案": "隔離されたファイルを管理します",
|
|
"增強模式": "拡張モード",
|
|
"此選項可以增強掃描引擎": "スキャンエンジンを強化します",
|
|
"擴展引擎": "拡張エンジン",
|
|
"此選項可以使用擴展引擎": "外部拡張エンジンを有効にします",
|
|
"雲端服務": "クラウドサービス",
|
|
"此選項可以上報雲端引擎": "疑わしいファイルをクラウドに報告します",
|
|
"顯色主題": "カラーテーマ",
|
|
"此選項可以選擇主題顏色": "アプリケーションのテーマカラーを選択します",
|
|
"白色主題": "ライトモード",
|
|
"紅色主題": "レッドテーマ",
|
|
"黃色主題": "イエローテーマ",
|
|
"綠色主題": "グリーンテーマ",
|
|
"藍色主題": "ブルーテーマ",
|
|
"黑色主題": "ダークモード",
|
|
"顯示語言": "表示言語",
|
|
"此選項可以選擇顯示語言": "アプリケーションの表示言語を選択します",
|
|
"重置選項": "オプションのリセット",
|
|
"此選項可以重置所有設定": "すべての設定をデフォルトに戻します",
|
|
"執行": "実行",
|
|
"產品金鑰": "プロダクトキー",
|
|
"此選項可以啟用產品金鑰": "プロダクトキーを有効にします",
|
|
"官方網站": "公式サイト",
|
|
"此選項可以前往官方網站": "当社の公式サイトにアクセスします",
|
|
"檢查更新": "アップデートの確認",
|
|
"此選項可以檢查可用更新": "利用可能なアップデートを確認します",
|
|
"搜尋進程...": "プロセスを検索...",
|
|
"查看": "表示",
|
|
"結束": "タスクの終了",
|
|
"白名單管理": "ホワイトリスト管理",
|
|
"搜尋檔案...": "ファイルを検索...",
|
|
"加入": "追加",
|
|
"移除": "削除",
|
|
"隔離區管理": "隔離管理",
|
|
"掃描": "スキャン",
|
|
"搜尋窗口...": "ウィンドウを検索...",
|
|
"搜尋規則...": "ルールを検索...",
|
|
"搜尋日誌...": "ログを検索...",
|
|
"導出": "エクスポート",
|
|
"正在初始化中": "初期化中...",
|
|
"檢查更新失敗": "アップデートの確認に失敗しました",
|
|
"發現新版本": "新しいバージョンが見つかりました",
|
|
"當前已是最新版本": "現在は最新バージョンです",
|
|
"請選擇要導出的日誌": "エクスポートするログを選択してください",
|
|
"確定刪除選取的日誌記錄嗎?": "選択したログを削除してもよろしいですか?",
|
|
"選取的日誌已刪除。": "選択したログが削除されました。",
|
|
"結束進程?": "プロセスを終了しますか?",
|
|
"確定要結束選取的進程嗎?": "選択したプロセスを終了してもよろしいですか?",
|
|
"已清理 ": "クリーンアップ完了 ",
|
|
"設定已重置,請重新啟動程式以套用預設值。": "設定がリセットされました。デフォルトを適用するにはプログラムを再起動してください。",
|
|
"導出成功": "エクスポート成功",
|
|
"選取進程路徑:\n": "選択されたプロセスのパス:\n",
|
|
"對 ": "",
|
|
" 執行動作:\n1: 加入白名單\n2: 加入隔離區\n請輸入代碼:": " に対するアクション:\n1: ホワイトリストに追加\n2: 隔離に追加\nコードを入力してください:",
|
|
"請在5秒內點擊目標視窗...": "5秒以内にターゲットウィンドウをクリックしてください...",
|
|
"確認攔截": "ブロックの確認",
|
|
"已修復選取項目": "選択された項目が修復されました",
|
|
"修復": "修復",
|
|
"提示": "プロンプト",
|
|
"錯誤": "エラー",
|
|
"未知路徑": "不明なパス",
|
|
"修復系統 MBR": "システム MBR の修復",
|
|
"修復系統限制": "システム制限の修復",
|
|
"修復檔案關聯": "ファイルの関連付けを修復",
|
|
"修復檔案圖標": "ファイルアイコンの修復",
|
|
"修復映像劫持": "イメージハイジャックの修復",
|
|
"修復桌面壁紙": "デスクトップの壁紙を修復",
|
|
"正在掃描": "スキャン中...",
|
|
"正在刪除": "削除中...",
|
|
"選單掃描": "コンテキストメニュースキャン",
|
|
"此選項可以加入右鍵掃描": "右クリックメニューにスキャンオプションを追加します"
|
|
},
|
|
"korean_switch": {
|
|
"PYAS Security": "PYAS Security",
|
|
"此裝置已受到防護": "이 장치는 보호되고 있습니다",
|
|
"智能掃描": "스마트 스캔",
|
|
"此選項可以快速掃病毒": "바이러스를 빠르게 스캔합니다",
|
|
"日誌導出": "로그 내보내기",
|
|
"此選項可以篩選導出日誌": "시스템 로그를 필터링하고 내보냅니다",
|
|
"病毒掃描": "바이러스 스캔",
|
|
"此選項可以選擇掃描方式": "스캔 방법을 선택합니다",
|
|
"刪除": "삭제",
|
|
"選擇": "선택",
|
|
"智能": "스마트",
|
|
"檔案": "파일",
|
|
"路徑": "경로",
|
|
"全盤": "전체",
|
|
"停止": "정지",
|
|
"進程防護": "프로세스 보호",
|
|
"此選項可以攔截進程病毒": "악성 프로세스를 차단합니다",
|
|
"檔案防護": "파일 보호",
|
|
"此選項可以攔截檔案變更": "악의적인 파일 변경을 차단합니다",
|
|
"系統防護": "시스템 보호",
|
|
"此選項可以攔截系統項目": "중요한 시스템 구성 요소를 보호합니다",
|
|
"驅動防護": "드라이버 보호",
|
|
"此選項可以增強自身防護": "자체 보호 메커니즘을 강화합니다",
|
|
"網路防護": "네트워크 보호",
|
|
"此選項可以攔截網路通訊": "악의적인 네트워크 연결을 차단합니다",
|
|
"自訂防護": "사용자 지정 보호",
|
|
"此選項可以導入自訂防護": "사용자 지정 보호 규칙을 가져옵니다",
|
|
"進程管理": "프로세스 관리",
|
|
"此選項可以實時查看系統進程": "실시간으로 시스템 프로세스를 모니터링합니다",
|
|
"垃圾清理": "정크 정리",
|
|
"此選項可以清理暫存垃圾檔案": "임시 파일 및 정크 파일을 정리합니다",
|
|
"系統修復": "시스템 복구",
|
|
"此選項可以修復系統註冊項目": "시스템 레지스트리 항목을 복구합니다",
|
|
"彈窗攔截": "팝업 차단",
|
|
"此選項可以選擇指定窗口攔截": "특정 팝업 창을 차단합니다",
|
|
"白名單": "화이트리스트",
|
|
"此選項可以管理系統白名單": "시스템 화이트리스트를 관리합니다",
|
|
"隔離區": "격리소",
|
|
"此選項可以管理已隔離的檔案": "격리된 파일을 관리합니다",
|
|
"增強模式": "고급 모드",
|
|
"此選項可以增強掃描引擎": "스캔 엔진을 강화합니다",
|
|
"擴展引擎": "확장 엔진",
|
|
"此選項可以使用擴展引擎": "외부 확장 엔진을 활성화합니다",
|
|
"雲端服務": "클라우드 서비스",
|
|
"此選項可以上報雲端引擎": "의심스러운 파일을 클라우드에 보고합니다",
|
|
"顯色主題": "색상 테마",
|
|
"此選項可以選擇主題顏色": "응용 프로그램 테마 색상을 선택합니다",
|
|
"白色主題": "라이트 모드",
|
|
"紅色主題": "레드 테마",
|
|
"黃色主題": "옐로우 테마",
|
|
"綠色主題": "그린 테마",
|
|
"藍色主題": "블루 테마",
|
|
"黑色主題": "다크 모드",
|
|
"顯示語言": "표시 언어",
|
|
"此選項可以選擇顯示語言": "응용 프로그램 표시 언어를 선택합니다",
|
|
"重置選項": "옵션 초기화",
|
|
"此選項可以重置所有設定": "모든 설정을 기본값으로 되돌립니다",
|
|
"執行": "실행",
|
|
"產品金鑰": "제품 키",
|
|
"此選項可以啟用產品金鑰": "제품 키를 활성화합니다",
|
|
"官方網站": "공식 웹사이트",
|
|
"此選項可以前往官方網站": "공식 웹사이트를 방문합니다",
|
|
"檢查更新": "업데이트 확인",
|
|
"此選項可以檢查可用更新": "사용 가능한 최신 업데이트를 확인합니다",
|
|
"搜尋進程...": "프로세스 검색...",
|
|
"查看": "보기",
|
|
"結束": "작업 끝내기",
|
|
"白名單管理": "화이트리스트 관리",
|
|
"搜尋檔案...": "파일 검색...",
|
|
"加入": "추가",
|
|
"移除": "제거",
|
|
"隔離區管理": "격리소 관리",
|
|
"掃描": "스캔",
|
|
"搜尋窗口...": "창 검색...",
|
|
"搜尋規則...": "규칙 검색...",
|
|
"搜尋日誌...": "로그 검색...",
|
|
"導出": "내보내기",
|
|
"正在初始化中": "초기화 중...",
|
|
"檢查更新失敗": "업데이트 확인 실패",
|
|
"發現新版本": "새 버전을 찾았습니다",
|
|
"當前已是最新版本": "현재 최신 버전입니다",
|
|
"請選擇要導出的日誌": "내보낼 로그를 선택하십시오",
|
|
"確定刪除選取的日誌記錄嗎?": "선택한 로그를 삭제하시겠습니까?",
|
|
"選取的日誌已刪除。": "선택한 로그가 삭제되었습니다.",
|
|
"結束進程?": "프로세스를 종료하시겠습니까?",
|
|
"確定要結束選取的進程嗎?": "선택한 프로세스를 종료하시겠습니까?",
|
|
"已清理 ": "정리 완료 ",
|
|
"設定已重置,請重新啟動程式以套用預設值。": "설정이 초기화되었습니다. 기본값을 적용하려면 프로그램을 다시 시작하십시오.",
|
|
"導出成功": "내보내기 성공",
|
|
"選取進程路徑:\n": "선택된 프로세스 경로:\n",
|
|
"對 ": "",
|
|
" 執行動作:\n1: 加入白名單\n2: 加入隔離區\n請輸入代碼:": "에 대한 작업:\n1: 화이트리스트에 추가\n2: 격리소에 추가\n코드를 입력하십시오:",
|
|
"請在5秒內點擊目標視窗...": "5초 이내에 대상 창을 클릭하십시오...",
|
|
"確認攔截": "차단 확인",
|
|
"已修復選取項目": "선택한 항목이 복구되었습니다",
|
|
"修復": "복구",
|
|
"提示": "프롬프트",
|
|
"錯誤": "오류",
|
|
"未知路徑": "알 수 없는 경로",
|
|
"修復系統 MBR": "시스템 MBR 복구",
|
|
"修復系統限制": "시스템 제한 복구",
|
|
"修復檔案關聯": "파일 연결 복구",
|
|
"修復檔案圖標": "파일 아이콘 복구",
|
|
"修復映像劫持": "이미지 하이재킹 복구",
|
|
"修復桌面壁紙": "바탕 화면 배경 무늬 복구",
|
|
"正在掃描": "스캔 중...",
|
|
"正在刪除": "삭제 중...",
|
|
"選單掃描": "컨텍스트 메뉴 스캔",
|
|
"此選項可以加入右鍵掃描": "마우스 우클릭 메뉴에 스캔 옵션을 추가합니다"
|
|
},
|
|
"french_switch": {
|
|
"PYAS Security": "PYAS Security",
|
|
"此裝置已受到防護": "Cet appareil est protégé",
|
|
"智能掃描": "Analyse intelligente",
|
|
"此選項可以快速掃病毒": "Analysez rapidement les virus",
|
|
"日誌導出": "Exporter les journaux",
|
|
"此選項可以篩選導出日誌": "Filtrer et exporter les journaux système",
|
|
"病毒掃描": "Analyse antivirus",
|
|
"此選項可以選擇掃描方式": "Sélectionnez une méthode d'analyse",
|
|
"刪除": "Supprimer",
|
|
"選擇": "Sélectionner",
|
|
"智能": "Intelligente",
|
|
"檔案": "Fichier",
|
|
"路徑": "Chemin",
|
|
"全盤": "Complète",
|
|
"停止": "Arrêter",
|
|
"進程防護": "Protection des processus",
|
|
"此選項可以攔截進程病毒": "Bloque les processus malveillants",
|
|
"檔案防護": "Protection des fichiers",
|
|
"此選項可以攔截檔案變更": "Bloque les modifications de fichiers malveillantes",
|
|
"系統防護": "Protection du système",
|
|
"此選項可以攔截系統項目": "Protège les composants critiques du système",
|
|
"驅動防護": "Protection des pilotes",
|
|
"此選項可以增強自身防護": "Améliore les mécanismes d'autodéfense",
|
|
"網路防護": "Protection réseau",
|
|
"此選項可以攔截網路通訊": "Bloque les connexions réseau malveillantes",
|
|
"自訂防護": "Protection personnalisée",
|
|
"此選項可以導入自訂防護": "Importer des règles de protection personnalisées",
|
|
"進程管理": "Gestionnaire de processus",
|
|
"此選項可以實時查看系統進程": "Surveille les processus système en temps réel",
|
|
"垃圾清理": "Nettoyage des déchets",
|
|
"此選項可以清理暫存垃圾檔案": "Nettoie les fichiers temporaires et inutiles",
|
|
"系統修復": "Réparation du système",
|
|
"此選項可以修復系統註冊項目": "Répare les éléments du registre système",
|
|
"彈窗攔截": "Bloqueur de fenêtres contextuelles",
|
|
"此選項可以選擇指定窗口攔截": "Bloque les fenêtres contextuelles spécifiques",
|
|
"白名單": "Liste blanche",
|
|
"此選項可以管理系統白名單": "Gérer la liste blanche du système",
|
|
"隔離區": "Quarantaine",
|
|
"此選項可以管理已隔離的檔案": "Gérer les fichiers mis en quarantaine",
|
|
"增強模式": "Mode amélioré",
|
|
"此選項可以增強掃描引擎": "Améliore le moteur d'analyse",
|
|
"擴展引擎": "Moteur d'extension",
|
|
"此選項可以使用擴展引擎": "Activer les moteurs d'extension externes",
|
|
"雲端服務": "Service cloud",
|
|
"此選項可以上報雲端引擎": "Signaler les fichiers suspects au cloud",
|
|
"顯色主題": "Thème de couleur",
|
|
"此選項可以選擇主題顏色": "Sélectionnez le thème de couleur de l'application",
|
|
"白色主題": "Mode clair",
|
|
"紅色主題": "Thème rouge",
|
|
"黃色主題": "Thème jaune",
|
|
"綠色主題": "Thème vert",
|
|
"藍色主題": "Thème bleu",
|
|
"黑色主題": "Mode sombre",
|
|
"顯示語言": "Langue d'affichage",
|
|
"此選項可以選擇顯示語言": "Sélectionnez la langue d'affichage",
|
|
"重置選項": "Réinitialiser",
|
|
"此選項可以重置所有設定": "Restaurer tous les paramètres par défaut",
|
|
"執行": "Exécuter",
|
|
"產品金鑰": "Clé de produit",
|
|
"此選項可以啟用產品金鑰": "Activer votre clé de produit",
|
|
"官方網站": "Site officiel",
|
|
"此選項可以前往官方網站": "Visitez notre site officiel",
|
|
"檢查更新": "Vérifier les mises à jour",
|
|
"此選項可以檢查可用更新": "Vérifier les dernières mises à jour",
|
|
"搜尋進程...": "Rechercher des processus...",
|
|
"查看": "Voir",
|
|
"結束": "Fin de tâche",
|
|
"白名單管理": "Gestionnaire de liste blanche",
|
|
"搜尋檔案...": "Rechercher des fichiers...",
|
|
"加入": "Ajouter",
|
|
"移除": "Retirer",
|
|
"隔離區管理": "Gestionnaire de quarantaine",
|
|
"掃描": "Analyser",
|
|
"搜尋窗口...": "Rechercher des fenêtres...",
|
|
"搜尋規則...": "Rechercher des règles...",
|
|
"搜尋日誌...": "Rechercher des journaux...",
|
|
"導出": "Exporter",
|
|
"正在初始化中": "Initialisation...",
|
|
"檢查更新失敗": "Échec de la vérification des mises à jour",
|
|
"發現新版本": "Nouvelle version trouvée",
|
|
"當前已是最新版本": "Actuellement à la dernière version",
|
|
"請選擇要導出的日誌": "Veuillez sélectionner les journaux à exporter",
|
|
"確定刪除選取的日誌記錄嗎?": "Êtes-vous sûr de vouloir supprimer les journaux sélectionnés ?",
|
|
"選取的日誌已刪除。": "Les journaux sélectionnés ont été supprimés.",
|
|
"結束進程?": "Terminer le processus ?",
|
|
"確定要結束選取的進程嗎?": "Êtes-vous sûr de vouloir terminer les processus sélectionnés ?",
|
|
"已清理 ": "Nettoyé ",
|
|
"設定已重置,請重新啟動程式以套用預設值。": "Paramètres réinitialisés. Veuillez redémarrer l'application.",
|
|
"導出成功": "Exportation réussie",
|
|
"選取進程路徑:\n": "Chemins des processus sélectionnés :\n",
|
|
"對 ": "Action pour ",
|
|
" 執行動作:\n1: 加入白名單\n2: 加入隔離區\n請輸入代碼:": " :\n1 : Ajouter à la liste blanche\n2 : Ajouter à la quarantaine\nEntrez le code :",
|
|
"請在5秒內點擊目標視窗...": "Cliquez sur la fenêtre cible dans les 5s...",
|
|
"確認攔截": "Confirmer le blocage",
|
|
"已修復選取項目": "Éléments sélectionnés réparés",
|
|
"修復": "Réparer",
|
|
"提示": "Indication",
|
|
"錯誤": "Erreur",
|
|
"未知路徑": "Chemin inconnu",
|
|
"修復系統 MBR": "Réparer le MBR du système",
|
|
"修復系統限制": "Réparer les restrictions du système",
|
|
"修復檔案關聯": "Réparer les associations de fichiers",
|
|
"修復檔案圖標": "Réparer les icônes de fichiers",
|
|
"修復映像劫持": "Réparer le détournement d'image",
|
|
"修復桌面壁紙": "Réparer le fond d'écran du bureau",
|
|
"正在掃描": "Analyse en cours...",
|
|
"正在刪除": "Suppression en cours...",
|
|
"選單掃描": "Analyse du menu contextuel",
|
|
"此選項可以加入右鍵掃描": "Ajouter l'option d'analyse au menu contextuel"
|
|
},
|
|
"spanish_switch": {
|
|
"PYAS Security": "PYAS Security",
|
|
"此裝置已受到防護": "Este dispositivo está protegido",
|
|
"智能掃描": "Escaneo inteligente",
|
|
"此選項可以快速掃病毒": "Escanea rápidamente en busca de virus",
|
|
"日誌導出": "Exportar registros",
|
|
"此選項可以篩選導出日誌": "Filtrer y exportar registros del sistema",
|
|
"病毒掃描": "Escaneo de virus",
|
|
"此選項可以選擇掃描方式": "Seleccione un método de escaneo",
|
|
"刪除": "Eliminar",
|
|
"選擇": "Seleccionar",
|
|
"智能": "Intelligente",
|
|
"檔案": "Archivo",
|
|
"路徑": "Ruta",
|
|
"全盤": "Completo",
|
|
"停止": "Detener",
|
|
"進程防護": "Protección de procesos",
|
|
"此選項可以攔截進程病毒": "Bloquea procesos maliciosos",
|
|
"檔案防護": "Protección de archivos",
|
|
"此選項可以攔截檔案變更": "Bloquea modificaciones de archivos maliciosos",
|
|
"系統防護": "Protección del sistema",
|
|
"此選項可以攔截系統項目": "Protege componentes críticos del sistema",
|
|
"驅動防護": "Protección de controladores",
|
|
"此選項可以增強自身防護": "Mejora los mecanismos de autodefensa",
|
|
"網路防護": "Protección de red",
|
|
"此選項可以攔截網路通訊": "Bloquea conexiones de red maliciosas",
|
|
"自訂防護": "Protección personalizada",
|
|
"此選項可以導入自訂防護": "Importar reglas de protección personalizadas",
|
|
"進程管理": "Administrador de procesos",
|
|
"此選項可以實時查看系統進程": "Monitorea procesos del sistema en tiempo real",
|
|
"垃圾清理": "Limpieza de basura",
|
|
"此選項可以清理暫存垃圾檔案": "Limpia archivos temporales y basura",
|
|
"系統修復": "Reparación del sistema",
|
|
"此選項可以修復系統註冊項目": "Repara elementos del registro del sistema",
|
|
"彈窗攔截": "Bloqueador de ventanas emergentes",
|
|
"此選項可以選擇指定窗口攔截": "Bloquea ventanas emergentes específicas",
|
|
"白名單": "Lista blanca",
|
|
"此選項可以管理系統白名單": "Gestionar la lista blanca del sistema",
|
|
"隔離區": "Cuarentena",
|
|
"此選項可以管理已隔離的檔案": "Gestionar archivos en cuarentena",
|
|
"增強模式": "Modo mejorado",
|
|
"此選項可以增強掃描引擎": "Mejora el motor de escaneo",
|
|
"擴展引擎": "Motor de extensión",
|
|
"此選項可以使用擴展引擎": "Habilitar motores de extensión externos",
|
|
"雲端服務": "Servicio en la nube",
|
|
"此選項可以上報雲端引擎": "Reportar archivos sospechosos a la nube",
|
|
"顯色主題": "Tema de color",
|
|
"此選項可以選擇主題顏色": "Seleccione el tema de color de la aplicación",
|
|
"白色主題": "Modo claro",
|
|
"紅色主題": "Tema rojo",
|
|
"黃色主題": "Tema amarillo",
|
|
"綠色主題": "Tema verde",
|
|
"藍色主題": "Tema azul",
|
|
"黑色主題": "Modo oscuro",
|
|
"顯示語言": "Idioma de visualización",
|
|
"此選項可以選擇顯示語言": "Seleccione el idioma de visualización",
|
|
"重置選項": "Restablecer",
|
|
"此選項可以重置所有設定": "Restaurar todos los ajustes predeterminados",
|
|
"執行": "Ejecutar",
|
|
"產品金鑰": "Clave de producto",
|
|
"此選項可以啟用產品金鑰": "Activar clave de producto",
|
|
"官方網站": "Sitio web oficial",
|
|
"此選項可以前往官方網站": "Visite nuestro sitio web oficial",
|
|
"檢查更新": "Buscar actualizaciones",
|
|
"此選項可以檢查可用更新": "Comprobar las últimas actualizaciones",
|
|
"搜尋進程...": "Buscar procesos...",
|
|
"查看": "Ver",
|
|
"結束": "Finalizar tarea",
|
|
"白名單管理": "Gestor de lista blanca",
|
|
"搜尋檔案...": "Buscar archivos...",
|
|
"加入": "Añadir",
|
|
"移除": "Eliminar",
|
|
"隔離區管理": "Gestor de cuarentena",
|
|
"掃描": "Escanear",
|
|
"搜尋窗口...": "Buscar ventanas...",
|
|
"搜尋規則...": "Buscar reglas...",
|
|
"搜尋日誌...": "Buscar registros...",
|
|
"導出": "Exportar",
|
|
"正在初始化中": "Inicializando...",
|
|
"檢查更新失敗": "Fallo al buscar actualizaciones",
|
|
"發現新版本": "Nueva versión encontrada",
|
|
"當前已是最新版本": "Actualmente en la última versión",
|
|
"請選擇要導出的日誌": "Seleccione los registros a exportar",
|
|
"確定刪除選取的日誌記錄嗎?": "¿Seguro que desea eliminar los registros seleccionados?",
|
|
"選取的日誌已刪除。": "Los registros seleccionados han sido eliminados.",
|
|
"結束進程?": "¿Finalizar proceso?",
|
|
"確定要結束選取的進程嗎?": "¿Seguro que desea finalizar los procesos seleccionados?",
|
|
"已清理 ": "Limpiado ",
|
|
"設定已重置,請重新啟動程式以套用預設值。": "Ajustes restablecidos. Reinicie la aplicación.",
|
|
"導出成功": "Exportación exitosa",
|
|
"選取進程路徑:\n": "Rutas de procesos seleccionados:\n",
|
|
"對 ": "Acción para ",
|
|
" 執行動作:\n1: 加入白名單\n2: 加入隔離區\n請輸入代碼:": ":\n1: Añadir a la lista blanca\n2: Añadir a la cuarentena\nIngrese código:",
|
|
"請在5秒內點擊目標視窗...": "Haga clic en la ventana objetivo en 5s...",
|
|
"確認攔截": "Confirmar bloqueo",
|
|
"已修復選取項目": "Elementos seleccionados reparados",
|
|
"修復": "Reparar",
|
|
"提示": "Aviso",
|
|
"錯誤": "Error",
|
|
"未知路徑": "Ruta desconocida",
|
|
"修復系統 MBR": "Reparar MBR del sistema",
|
|
"修復系統限制": "Reparar restricciones del sistema",
|
|
"修復檔案關聯": "Reparar asociaciones de archivos",
|
|
"修復檔案圖標": "Reparar iconos de archivos",
|
|
"修復映像劫持": "Reparar secuestro de imagen",
|
|
"修復桌面壁紙": "Reparar fondo de escritorio",
|
|
"正在掃描": "Escaneando...",
|
|
"正在刪除": "Eliminando...",
|
|
"選單掃描": "Escaneo de menú contextual",
|
|
"此選項可以加入右鍵掃描": "Añadir opción de escaneo al menú contextual"
|
|
},
|
|
"hindi_switch": {
|
|
"PYAS Security": "PYAS Security",
|
|
"此裝置已受到防護": "यह डिवाइस सुरक्षित है",
|
|
"智能掃描": "स्मार्ट स्कैन",
|
|
"此選項可以快速掃病毒": "वायरस के लिए जल्दी स्कैन करें",
|
|
"日誌導出": "लॉग निर्यात",
|
|
"此選項可以篩選導出日誌": "सिस्टम लॉग को फ़िल्टर और निर्यात करें",
|
|
"病毒掃描": "वायरस स्कैन",
|
|
"此選項可以選擇掃描方式": "एक स्कैनिंग विधि चुनें",
|
|
"刪除": "हटाएं",
|
|
"選擇": "चुनें",
|
|
"智能": "स्मार्ट",
|
|
"檔案": "फ़ाइल",
|
|
"路徑": "पथ",
|
|
"全盤": "पूर्ण",
|
|
"停止": "रोकें",
|
|
"進程防護": "प्रक्रिया सुरक्षा",
|
|
"此選項可以攔截進程病毒": "दुर्भावनापूर्ण प्रक्रियाओं को रोकें",
|
|
"檔案防護": "फ़ाइल सुरक्षा",
|
|
"此選項可以攔截檔案變更": "दुर्भावनापूर्ण फ़ाइल संशोधनों को रोकें",
|
|
"系統防護": "सिस्टम सुरक्षा",
|
|
"此選項可以攔截系統項目": "महत्वपूर्ण सिस्टम घटकों की रक्षा करें",
|
|
"驅動防護": "ड्राइवर सुरक्षा",
|
|
"此選項可以增強自身防護": "आत्मरक्षा तंत्र को बढ़ाएं",
|
|
"網路防護": "नेटवर्क सुरक्षा",
|
|
"此選項可以攔截網路通訊": "दुर्भावनापूर्ण नेटवर्क कनेक्शन को रोकें",
|
|
"自訂防護": "कस्टम सुरक्षा",
|
|
"此選項可以導入自訂防護": "कस्टम सुरक्षा नियम आयात करें",
|
|
"進程管理": "प्रक्रिया प्रबंधक",
|
|
"此選項可以實時查看系統進程": "रीयल-टाइम में सिस्टम प्रक्रियाओं की निगरानी करें",
|
|
"垃圾清理": "कचरा सफाई",
|
|
"此選項可以清理暫存垃圾檔案": "अस्थायी और कचरा फ़ाइलों को साफ़ करें",
|
|
"系統修復": "सिस्टम मरम्मत",
|
|
"此選項可以修復系統註冊項目": "सिस्टम रजिस्ट्री आइटम की मरम्मत करें",
|
|
"彈窗攔截": "पॉपअप ब्लॉकर",
|
|
"此選項可以選擇指定窗口攔截": "विशिष्ट पॉपअप विंडो ब्लॉक करें",
|
|
"白名單": "श्वेतसूची",
|
|
"此選項可以管理系統白名單": "सिस्टम श्वेतसूची प्रबंधित करें",
|
|
"隔離區": "संगरोध",
|
|
"此選項可以管理已隔離的檔案": "संगरोधित फ़ाइलों का प्रबंधन करें",
|
|
"增強模式": "उन्नत मोड",
|
|
"此選項可以增強掃描引擎": "स्कैनिंग इंजन को बढ़ाएं",
|
|
"擴展引擎": "विस्तार इंजन",
|
|
"此選項可以使用擴展引擎": "बाहरी विस्तार इंजन सक्षम करें",
|
|
"雲端服務": "क्लाउड सेवा",
|
|
"此選項可以上報雲端引擎": "संदिग्ध फ़ाइलों की क्लाउड पर रिपोर्ट करें",
|
|
"顯色主題": "रंग थीम",
|
|
"此選項可以選擇主題顏色": "एप्लिकेशन का रंग थीम चुनें",
|
|
"白色主題": "लाइट मोड",
|
|
"紅色主題": "लाल थीम",
|
|
"黃色主題": "पीला थीम",
|
|
"綠色主題": "हरा थीम",
|
|
"藍色主題": "नीला थीम",
|
|
"黑色主題": "डार्क मोड",
|
|
"顯示語言": "प्रदर्शन भाषा",
|
|
"此選項可以選擇顯示語言": "एप्लिकेशन प्रदर्शन भाषा चुनें",
|
|
"重置選項": "रीसेट विकल्प",
|
|
"此選項可以重置所有設定": "सभी सेटिंग्स को डिफ़ॉल्ट पर पुनर्स्थापित करें",
|
|
"執行": "निष्पादित करें",
|
|
"產品金鑰": "उत्पाद कुंजी",
|
|
"此選項可以啟用產品金鑰": "अपनी उत्पाद कुंजी सक्रिय करें",
|
|
"官方網站": "आधिकारिक वेबसाइट",
|
|
"此選項可以前往官方網站": "हमारी आधिकारिक वेबसाइट पर जाएँ",
|
|
"檢查更新": "अद्यतन जाँचे",
|
|
"此選項可以檢查可用更新": "नवीनतम अपडेट के लिए जाँचें",
|
|
"搜尋進程...": "प्रक्रियाएँ खोजें...",
|
|
"查看": "देखें",
|
|
"結束": "कार्य समाप्त करें",
|
|
"白名單管理": "श्वेतसूची प्रबंधक",
|
|
"搜尋檔案...": "फ़ाइलें खोजें...",
|
|
"加入": "जोड़ें",
|
|
"移除": "निकालें",
|
|
"隔離區管理": "संगरोध प्रबंधक",
|
|
"掃描": "स्कैन",
|
|
"搜尋窗口...": "विंडोज़ खोजें...",
|
|
"搜尋規則...": "नियम खोजें...",
|
|
"搜尋日誌...": "लॉग खोजें...",
|
|
"導出": "निर्यात",
|
|
"正在初始化中": "प्रारंभ हो रहा है...",
|
|
"檢查更新失敗": "अपडेट की जाँच विफल रही",
|
|
"發現新版本": "नया संस्करण मिला",
|
|
"當前已是最新版本": "वर्तमान में नवीनतम संस्करण है",
|
|
"請選擇要導出的日誌": "कृपया निर्यात करने के लिए लॉग चुनें",
|
|
"確定刪除選取的日誌記錄嗎?": "क्या आप वाकई चयनित लॉग हटाना चाहते हैं?",
|
|
"選取的日誌已刪除。": "चयनित लॉग हटा दिए गए हैं।",
|
|
"結束進程?": "प्रक्रिया समाप्त करें?",
|
|
"確定要結束選取的進程嗎?": "क्या आप वाकई चयनित प्रक्रियाओं को समाप्त करना चाहते हैं?",
|
|
"已清理 ": "साफ़ किया गया ",
|
|
"設定已重置,請重新啟動程式以套用預設值。": "सेटिंग्स रीसेट कर दी गईं। डिफ़ॉल्ट लागू करने के लिए एप्लिकेशन पुनः आरंभ करें।",
|
|
"導出成功": "सफलतापूर्वक निर्यात किया गया",
|
|
"選取進程路徑:\n": "चयनित प्रक्रिया पथ:\n",
|
|
"對 ": "कार्रवाई ",
|
|
" 執行動作:\n1: 加入白名單\n2: 加入隔離區\n請輸入代碼:": " के लिए:\n1: श्वेतसूची में जोड़ें\n2: संगरोध में जोड़ें\nकोड दर्ज करें:",
|
|
"請在5秒內點擊目標視窗...": "5 सेकंड के भीतर लक्ष्य विंडो पर क्लिक करें...",
|
|
"確認攔截": "ब्लॉक की पुष्टि करें",
|
|
"已修復選取項目": "चयनित आइटम मरम्मत किए गए",
|
|
"修復": "मरम्मत",
|
|
"提示": "सुझाव",
|
|
"錯誤": "त्रुटि",
|
|
"未知路徑": "अज्ञात पथ",
|
|
"修復系統 MBR": "सिस्टम MBR की मरम्मत",
|
|
"修復系統限制": "सिस्टम प्रतिबंधों की मरम्मत",
|
|
"修復檔案關聯": "फ़ाइल संघों की मरम्मत",
|
|
"修復檔案圖標": "फ़ाइल आइकन की मरम्मत",
|
|
"修復映像劫持": "छवि अपहरण की मरम्मत",
|
|
"修復桌面壁紙": "डेस्कटॉप वॉलपेपर की मरम्मत",
|
|
"正在掃描": "स्कैन कर रहा है...",
|
|
"正在刪除": "हटा रहा है...",
|
|
"選單掃描": "संदर्भ मेनू स्कैन",
|
|
"此選項可以加入右鍵掃描": "राइट-क्लिक मेनू में स्कैन विकल्प जोड़ें"
|
|
},
|
|
"arabic_switch": {
|
|
"PYAS Security": "PYAS Security",
|
|
"此裝置已受到防護": "هذا الجهاز محمي",
|
|
"智能掃描": "فحص ذكي",
|
|
"此選項可以快速掃病毒": "فحص سريع للفيروسات",
|
|
"日誌導出": "تصدير السجلات",
|
|
"此選項可以篩選導出日誌": "تصفية وتصدير سجلات النظام",
|
|
"病毒掃描": "فحص الفيروسات",
|
|
"此選項可以選擇掃描方式": "حدد طريقة الفحص",
|
|
"刪除": "حذف",
|
|
"選擇": "تحديد",
|
|
"智能": "ذكي",
|
|
"檔案": "ملف",
|
|
"路徑": "مسار",
|
|
"全盤": "شامل",
|
|
"停止": "إيقاف",
|
|
"進程防護": "حماية العمليات",
|
|
"此選項可以攔截進程病毒": "يمنع العمليات الخبيثة",
|
|
"檔案防護": "حماية الملفات",
|
|
"此選項可以攔截檔案變更": "يمنع التعديلات الخبيثة على الملفات",
|
|
"系統防護": "حماية النظام",
|
|
"此選項可以攔截系統項目": "يحمي مكونات النظام الحيوية",
|
|
"驅動防護": "حماية برامج التشغيل",
|
|
"此選項可以增強自身防護": "يعزز آليات الدفاع الذاتي",
|
|
"網路防護": "حماية الشبكة",
|
|
"此選項可以攔截網路通訊": "يمنع اتصالات الشبكة الخبيثة",
|
|
"自訂防護": "حماية مخصصة",
|
|
"此選項可以導入自訂防護": "استيراد قواعد حماية مخصصة",
|
|
"進程管理": "مدير العمليات",
|
|
"此選項可以實時查看系統進程": "مراقبة عمليات النظام في الوقت الفعلي",
|
|
"垃圾清理": "تنظيف المخلفات",
|
|
"此選項可以清理暫存垃圾檔案": "تنظيف الملفات المؤقتة والمخلفات",
|
|
"系統修復": "إصلاح النظام",
|
|
"此選項可以修復系統註冊項目": "إصلاح عناصر سجل النظام",
|
|
"彈窗攔截": "حظر النوافذ المنبثقة",
|
|
"此選項可以選擇指定窗口攔截": "حظر نوافذ منبثقة معينة",
|
|
"白名單": "القائمة البيضاء",
|
|
"此選項可以管理系統白名單": "إدارة القائمة البيضاء للنظام",
|
|
"隔離區": "الحجر الصحي",
|
|
"此選項可以管理已隔離的檔案": "إدارة الملفات المحجوزة",
|
|
"增強模式": "وضع محسن",
|
|
"此選項可以增強掃描引擎": "يعزز محرك الفحص",
|
|
"擴展引擎": "محرك الإضافات",
|
|
"此選項可以使用擴展引擎": "تفعيل محركات الإضافات الخارجية",
|
|
"雲端服務": "خدمة السحابة",
|
|
"此選項可以上報雲端引擎": "الإبلاغ عن الملفات المشبوهة للسحابة",
|
|
"顯色主題": "سمة اللون",
|
|
"此選項可以選擇主題顏色": "تحديد سمة ألوان التطبيق",
|
|
"白色主題": "الوضع الفاتح",
|
|
"紅色主題": "سمة حمراء",
|
|
"黃色主題": "سمة صفراء",
|
|
"綠色主題": "سمة خضراء",
|
|
"藍色主題": "سمة زرقاء",
|
|
"黑色主題": "الوضع الداكن",
|
|
"顯示語言": "لغة العرض",
|
|
"此選項可以選擇顯示語言": "تحديد لغة عرض التطبيق",
|
|
"重置選項": "إعادة تعيين الخيارات",
|
|
"此選項可以重置所有設定": "استعادة جميع الإعدادات الافتراضية",
|
|
"執行": "تنفيذ",
|
|
"產品金鑰": "مفتاح المنتج",
|
|
"此選項可以啟用產品金鑰": "تنشيط مفتاح المنتج",
|
|
"官方網站": "الموقع الرسمي",
|
|
"此選項可以前往官方網站": "قم بزيارة موقعنا الرسمي",
|
|
"檢查更新": "التحقق من التحديثات",
|
|
"此選項可以檢查可用更新": "التحقق من أحدث التحديثات",
|
|
"搜尋進程...": "البحث في العمليات...",
|
|
"查看": "عرض",
|
|
"結束": "إنهاء المهمة",
|
|
"白名單管理": "مدير القائمة البيضاء",
|
|
"搜尋檔案...": "البحث عن الملفات...",
|
|
"加入": "إضافة",
|
|
"移除": "إزالة",
|
|
"隔離區管理": "مدير الحجر الصحي",
|
|
"掃描": "فحص",
|
|
"搜尋窗口...": "البحث عن النوافذ...",
|
|
"搜尋規則...": "البحث في القواعد...",
|
|
"搜尋日誌...": "البحث في السجلات...",
|
|
"導出": "تصدير",
|
|
"正在初始化中": "جاري التهيئة...",
|
|
"檢查更新失敗": "فشل التحقق من التحديثات",
|
|
"發現新版本": "تم العثور على إصدار جديد",
|
|
"當前已是最新版本": "أنت تستخدم أحدث إصدار حاليًا",
|
|
"請選擇要導出的日誌": "يرجى تحديد السجلات لتصديرها",
|
|
"確定刪除選取的日誌記錄嗎?": "هل أنت متأكد من حذف السجلات المحددة؟",
|
|
"選取的日誌已刪除。": "تم حذف السجلات المحددة.",
|
|
"結束進程?": "إنهاء العملية؟",
|
|
"確定要結束選取的進程嗎?": "هل أنت متأكد من إنهاء العمليات المحددة؟",
|
|
"已清理 ": "تم التنظيف ",
|
|
"設定已重置,請重新啟動程式以套用預設值。": "تم إعادة تعيين الإعدادات. يرجى إعادة تشغيل التطبيق لتطبيق الافتراضيات.",
|
|
"導出成功": "تم التصدير بنجاح",
|
|
"選取進程路徑:\n": "مسارات العمليات المحددة:\n",
|
|
"對 ": "إجراء لـ ",
|
|
" 執行動作:\n1: 加入白名單\n2: 加入隔離區\n請輸入代碼:": ":\n1: إضافة للقائمة البيضاء\n2: إضافة للحجر الصحي\nأدخل الرمز:",
|
|
"請在5秒內點擊目標視窗...": "انقر على النافذة المستهدفة خلال 5 ثوانٍ...",
|
|
"確認攔截": "تأكيد الحظر",
|
|
"已修復選取項目": "تم إصلاح العناصر المحددة",
|
|
"修復": "إصلاح",
|
|
"提示": "تلميح",
|
|
"錯誤": "خطأ",
|
|
"未知路徑": "مسار غير معروف",
|
|
"修復系統 MBR": "إصلاح MBR للنظام",
|
|
"修復系統限制": "إصلاح قيود النظام",
|
|
"修復檔案關聯": "إصلاح اقترانات الملفات",
|
|
"修復檔案圖標": "إصلاح رموز الملفات",
|
|
"修復映像劫持": "إصلاح اختطاف الصور",
|
|
"修復桌面壁紙": "إصلاح خلفية سطح المكتب",
|
|
"正在掃描": "جاري الفحص...",
|
|
"正在刪除": "جاري الحذف...",
|
|
"選單掃描": "فحص قائمة السياق",
|
|
"此選項可以加入右鍵掃描": "إضافة خيار الفحص إلى قائمة النقر الأيمن"
|
|
},
|
|
"russian_switch": {
|
|
"PYAS Security": "PYAS Security",
|
|
"此裝置已受到防護": "Это устройство защищено",
|
|
"智能掃描": "Умное сканирование",
|
|
"此選項可以快速掃病毒": "Быстрое сканирование на наличие вирусов",
|
|
"日誌導出": "Экспорт журналов",
|
|
"此選項可以篩選導出日誌": "Фильтрация и экспорт системных журналов",
|
|
"病毒掃描": "Сканирование на вирусы",
|
|
"此選項可以選擇掃描方式": "Выберите метод сканирования",
|
|
"刪除": "Удалить",
|
|
"選擇": "Выбрать",
|
|
"智能": "Умный",
|
|
"檔案": "Файл",
|
|
"路徑": "Путь",
|
|
"全盤": "Полный",
|
|
"停止": "Остановить",
|
|
"進程防護": "Защита процессов",
|
|
"此選項可以攔截進程病毒": "Блокирует вредоносные процессы",
|
|
"檔案防護": "Защита файлов",
|
|
"此選項可以攔截檔案變更": "Блокирует вредоносные изменения файлов",
|
|
"系統防護": "Защита системы",
|
|
"此選項可以攔截系統項目": "Защищает критические системные компоненты",
|
|
"驅動防護": "Защита драйверов",
|
|
"此選項可以增強自身防護": "Усиливает механизмы самозащиты",
|
|
"網路防護": "Сетевая защита",
|
|
"此選項可以攔截網路通訊": "Блокирует вредоносные сетевые подключения",
|
|
"自訂防護": "Пользовательская защита",
|
|
"此選項可以導入自訂防護": "Импорт пользовательских правил защиты",
|
|
"進程管理": "Диспетчер процессов",
|
|
"此選項可以實時查看系統進程": "Мониторинг системных процессов в реальном времени",
|
|
"垃圾清理": "Очистка мусора",
|
|
"此選項可以清理暫存垃圾檔案": "Очистка временных и ненужных файлов",
|
|
"系統修復": "Восстановление системы",
|
|
"此選項可以修復系統註冊項目": "Восстановление элементов системного реестра",
|
|
"彈窗攔截": "Блокировщик всплывающих окон",
|
|
"此選項可以選擇指定窗口攔截": "Блокировка определенных всплывающих окон",
|
|
"白名單": "Белый список",
|
|
"此選項可以管理系統白名單": "Управление системным белым списком",
|
|
"隔離區": "Карантин",
|
|
"此選項可以管理已隔離的檔案": "Управление файлами в карантине",
|
|
"增強模式": "Расширенный режим",
|
|
"此選項可以增強掃描引擎": "Усиление механизма сканирования",
|
|
"擴展引擎": "Модули расширения",
|
|
"此選項可以使用擴展引擎": "Включение внешних модулей расширения",
|
|
"雲端服務": "Облачный сервис",
|
|
"此選項可以上報雲端引擎": "Сообщить о подозрительных файлах в облако",
|
|
"顯色主題": "Цветовая тема",
|
|
"此選項可以選擇主題顏色": "Выберите цветовую тему приложения",
|
|
"白色主題": "Светлый режим",
|
|
"紅色主題": "Красная тема",
|
|
"黃色主題": "Желтая тема",
|
|
"綠色主題": "Зеленая тема",
|
|
"藍色主題": "Синяя тема",
|
|
"黑色主題": "Темный режим",
|
|
"顯示語言": "Язык интерфейса",
|
|
"此選項可以選擇顯示語言": "Выберите язык приложения",
|
|
"重置選項": "Сброс настроек",
|
|
"此選項可以重置所有設定": "Восстановить все настройки по умолчанию",
|
|
"執行": "Выполнить",
|
|
"產品金鑰": "Ключ продукта",
|
|
"此選項可以啟用產品金鑰": "Активировать ключ продукта",
|
|
"官方網站": "Официальный сайт",
|
|
"此選項可以前往官方網站": "Посетите наш официальный сайт",
|
|
"檢查更新": "Проверить обновления",
|
|
"此選項可以檢查可用更新": "Проверить наличие последних обновлений",
|
|
"搜尋進程...": "Поиск процессов...",
|
|
"查看": "Просмотр",
|
|
"結束": "Завершить",
|
|
"白名單管理": "Управление белым списком",
|
|
"搜尋檔案...": "Поиск файлов...",
|
|
"加入": "Добавить",
|
|
"移除": "Удалить",
|
|
"隔離區管理": "Управление карантином",
|
|
"掃描": "Сканировать",
|
|
"搜尋窗口...": "Поиск окон...",
|
|
"搜尋規則...": "Поиск правил...",
|
|
"搜尋日誌...": "Поиск журналов...",
|
|
"導出": "Экспорт",
|
|
"正在初始化中": "Инициализация...",
|
|
"檢查更新失敗": "Ошибка проверки обновлений",
|
|
"發現新版本": "Найдена новая версия",
|
|
"當前已是最新版本": "Установлена последняя версия",
|
|
"請選擇要導出的日誌": "Пожалуйста, выберите журналы для экспорта",
|
|
"確定刪除選取的日誌記錄嗎?": "Вы уверены, что хотите удалить выбранные журналы?",
|
|
"選取的日誌已刪除。": "Выбранные журналы удалены.",
|
|
"結束進程?": "Завершить процесс?",
|
|
"確定要結束選取的進程嗎?": "Вы уверены, что хотите завершить выбранные процессы?",
|
|
"已清理 ": "Очищено ",
|
|
"設定已重置,請重新啟動程式以套用預設值。": "Настройки сброшены. Перезапустите программу.",
|
|
"導出成功": "Успешный экспорт",
|
|
"選取進程路徑:\n": "Пути выбранных процессов:\n",
|
|
"對 ": "Действие для ",
|
|
" 執行動作:\n1: 加入白名單\n2: 加入隔離區\n請輸入代碼:": ":\n1: Добавить в белый список\n2: Добавить в карантин\nВведите код:",
|
|
"請在5秒內點擊目標視窗...": "Нажмите на целевое окно в течение 5 сек...",
|
|
"確認攔截": "Подтвердить блокировку",
|
|
"已修復選取項目": "Выбранные элементы восстановлены",
|
|
"修復": "Восстановить",
|
|
"提示": "Подсказка",
|
|
"錯誤": "Ошибка",
|
|
"未知路徑": "Неизвестный путь",
|
|
"修復系統 MBR": "Восстановление MBR системы",
|
|
"修復系統限制": "Снятие системных ограничений",
|
|
"修復檔案關聯": "Восстановление ассоциаций файлов",
|
|
"修復檔案圖標": "Восстановление значков файлов",
|
|
"修復映像劫持": "Восстановление Image Hijacking",
|
|
"修復桌面壁紙": "Восстановление обоев рабочего стола",
|
|
"正在掃描": "Сканирование...",
|
|
"正在刪除": "Удаление...",
|
|
"選單掃描": "Сканирование из контекстного меню",
|
|
"此選項可以加入右鍵掃描": "Добавить опцию сканирования в контекстное меню"
|
|
},
|
|
"slovenian_switch": {
|
|
"PYAS Security": "PYAS Security",
|
|
"此裝置已受到防護": "Ta naprava je zaščitena",
|
|
"智能掃描": "Pametno skeniranje",
|
|
"此選項可以快速掃病毒": "Hitro skeniranje za viruse",
|
|
"日誌導出": "Izvoz dnevnikov",
|
|
"此選項可以篩選導出日誌": "Filtriranje in izvoz sistemskih dnevnikov",
|
|
"病毒掃描": "Skeniranje virusov",
|
|
"此選項可以選擇掃描方式": "Izberite metodo skeniranja",
|
|
"刪除": "Izbriši",
|
|
"選擇": "Izberi",
|
|
"智能": "Pametno",
|
|
"檔案": "Datoteka",
|
|
"路徑": "Pot",
|
|
"全盤": "Celotno",
|
|
"停止": "Ustavi",
|
|
"進程防護": "Zaščita procesov",
|
|
"此選項可以攔截進程病毒": "Blokira zlonamerne procese",
|
|
"檔案防護": "Zaščita datotek",
|
|
"此選項可以攔截檔案變更": "Blokira zlonamerne spremembe datotek",
|
|
"系統防護": "Sistemska zaščita",
|
|
"此選項可以攔截系統項目": "Ščiti kritične sistemske komponente",
|
|
"驅動防護": "Zaščita gonilnikov",
|
|
"此選項可以增強自身防護": "Krepi samoobrambne mehanizme",
|
|
"網路防護": "Omrežna zaščita",
|
|
"此選項可以攔截網路通訊": "Blokira zlonamerne omrežne povezave",
|
|
"自訂防護": "Zaščita po meri",
|
|
"此選項可以導入自訂防護": "Uvozi pravila zaščite po meri",
|
|
"進程管理": "Upravitelj procesov",
|
|
"此選項可以實時查看系統進程": "Spremlja sistemske procese v realnem času",
|
|
"垃圾清理": "Čiščenje nesnage",
|
|
"此選項可以清理暫存垃圾檔案": "Čisti začasne in nepotrebne datoteke",
|
|
"系統修復": "Popravilo sistema",
|
|
"此選項可以修復系統註冊項目": "Popravlja elemente sistemskega registra",
|
|
"彈窗攔截": "Blokator pojavnih oken",
|
|
"此選項可以選擇指定窗口攔截": "Blokira določena pojavna okna",
|
|
"白名單": "Seznam dovoljenih",
|
|
"此選項可以管理系統白名單": "Upravlja sistemski seznam dovoljenih",
|
|
"隔離區": "Karantena",
|
|
"此選項可以管理已隔離的檔案": "Upravlja datoteke v karanteni",
|
|
"增強模式": "Izboljšan način",
|
|
"此選項可以增強掃描引擎": "Izboljša mehanizem skeniranja",
|
|
"擴展引擎": "Razširitveni pogon",
|
|
"此選項可以使用擴展引擎": "Omogoči zunanje razširitvene pogone",
|
|
"雲端服務": "Storitev v oblaku",
|
|
"此選項可以上報雲端引擎": "Poroča sumljive datoteke v oblak",
|
|
"顯色主題": "Barvna tema",
|
|
"此選項可以選擇主題顏色": "Izberite barvno temo aplikacije",
|
|
"白色主題": "Svetel način",
|
|
"紅色主題": "Rdeča tema",
|
|
"黃色主題": "Rumena tema",
|
|
"綠色主題": "Zelena tema",
|
|
"藍色主題": "Modra tema",
|
|
"黑色主題": "Temen način",
|
|
"顯示語言": "Jezik prikaza",
|
|
"此選項可以選擇顯示語言": "Izberite jezik prikaza aplikacije",
|
|
"重置選項": "Ponastavitev",
|
|
"此選項可以重置所有設定": "Obnovi vse privzete nastavitve",
|
|
"執行": "Izvedi",
|
|
"產品金鑰": "Ključ izdelka",
|
|
"此選項可以啟用產品金鑰": "Aktivira ključ izdelka",
|
|
"官方網站": "Uradna stran",
|
|
"此選項可以前往官方網站": "Obiščite našo uradno spletno stran",
|
|
"檢查更新": "Preveri posodobitve",
|
|
"此選項可以檢查可用更新": "Preveri zadnje posodobitve",
|
|
"搜尋進程...": "Išči procese...",
|
|
"查看": "Poglej",
|
|
"結束": "Končaj opravilo",
|
|
"白名單管理": "Upravitelj seznama dovoljenih",
|
|
"搜尋檔案...": "Išči datoteke...",
|
|
"加入": "Dodaj",
|
|
"移除": "Odstrani",
|
|
"隔離區管理": "Upravitelj karantene",
|
|
"掃描": "Skeniraj",
|
|
"搜尋窗口...": "Išči okna...",
|
|
"搜尋規則...": "Išči pravila...",
|
|
"搜尋日誌...": "Išči dnevnike...",
|
|
"導出": "Izvozi",
|
|
"正在初始化中": "Inicializacija...",
|
|
"檢查更新失敗": "Preverjanje posodobitev ni uspelo",
|
|
"發現新版本": "Najdena nova različica",
|
|
"當前已是最新版本": "Trenutno imate najnovejšo različico",
|
|
"請選擇要導出的日誌": "Prosimo, izberite dnevnike za izvoz",
|
|
"確定刪除選取的日誌記錄嗎?": "Ali ste prepričani, da želite izbrisati izbrane dnevnike?",
|
|
"選取的日誌已刪除。": "Izbrani dnevniki so bili izbrisani.",
|
|
"結束進程?": "Končam proces?",
|
|
"確定要結束選取的進程嗎?": "Ali ste prepričani, da želite končati izbrane procese?",
|
|
"已清理 ": "Počiščeno ",
|
|
"設定已重置,請重新啟動程式以套用預設值。": "Nastavitve so ponastavljene. Znova zaženite program.",
|
|
"導出成功": "Izvoz uspešen",
|
|
"選取進程路徑:\n": "Poti izbranih procesov:\n",
|
|
"對 ": "Dejanje za ",
|
|
" 執行動作:\n1: 加入白名單\n2: 加入隔離區\n請輸入代碼:": ":\n1: Dodaj na seznam dovoljenih\n2: Dodaj v karanteno\nVnesite kodo:",
|
|
"請在5秒內點擊目標視窗...": "Kliknite na ciljno okno v 5s...",
|
|
"確認攔截": "Potrdi blokado",
|
|
"已修復選取項目": "Izbrani predmeti popravljeni",
|
|
"修復": "Popravi",
|
|
"提示": "Namig",
|
|
"錯誤": "Napaka",
|
|
"未知路徑": "Neznana pot",
|
|
"修復系統 MBR": "Popravilo sistemskega MBR",
|
|
"修復系統限制": "Popravilo sistemskih omejitev",
|
|
"修復檔案關聯": "Popravilo asociacij datotek",
|
|
"修復檔案圖標": "Popravilo ikon datotek",
|
|
"修復映像劫持": "Popravilo ugrabitve slike",
|
|
"修復桌面壁紙": "Popravilo ozadja namizja",
|
|
"正在掃描": "Skeniranje...",
|
|
"正在刪除": "Brisanje...",
|
|
"選單掃描": "Skeniranje iz kontekstnega menija",
|
|
"此選項可以加入右鍵掃描": "Dodaj možnost skeniranja v kontekstni meni"
|
|
}
|
|
};
|
|
|
|
const themes = {
|
|
"white_switch": { "--bg-window": "245, 245, 247", "--bg-nav": "255, 255, 255", "--bg-panel": "255, 255, 255", "--bg-hover": "rgba(0,0,0,0.05)", "--text-primary": "29, 29, 31", "--text-secondary": "134, 134, 139", "--border-color":"210, 210, 215", "--accent-color":"0, 122, 255", "--accent-alpha":"rgba(0, 122, 255, 0.1)", "--accent-shadow":"rgba(0, 122, 255, 0.2)", "--accent-hover":"rgba(0, 122, 255, 0.3)" },
|
|
"black_switch": { "--bg-window": "0, 0, 0", "--bg-nav": "28, 28, 30", "--bg-panel": "28, 28, 30", "--bg-hover": "rgba(255,255,255,0.1)", "--text-primary": "245, 245, 247", "--text-secondary": "134, 134, 139", "--border-color":"44, 44, 46", "--accent-color":"10, 132, 255", "--accent-alpha":"rgba(10, 132, 255, 0.1)", "--accent-shadow":"rgba(10, 132, 255, 0.2)", "--accent-hover":"rgba(10, 132, 255, 0.3)" },
|
|
"red_switch": { "--bg-window": "253, 246, 246", "--bg-nav": "255, 240, 240", "--bg-panel": "255, 255, 255", "--bg-hover": "rgba(255,59,48,0.05)", "--text-primary": "29, 29, 31", "--text-secondary": "134, 134, 139", "--border-color":"250, 220, 220", "--accent-color":"255, 59, 48", "--accent-alpha":"rgba(255, 59, 48, 0.1)", "--accent-shadow":"rgba(255, 59, 48, 0.2)", "--accent-hover":"rgba(255, 59, 48, 0.3)" },
|
|
"yellow_switch": { "--bg-window": "254, 251, 243", "--bg-nav": "255, 248, 230", "--bg-panel": "255, 255, 255", "--bg-hover": "rgba(255,149,0,0.05)", "--text-primary": "29, 29, 31", "--text-secondary": "134, 134, 139", "--border-color":"250, 240, 215", "--accent-color":"255, 149, 0", "--accent-alpha":"rgba(255, 149, 0, 0.1)", "--accent-shadow":"rgba(255, 149, 0, 0.2)", "--accent-hover":"rgba(255, 149, 0, 0.3)" },
|
|
"green_switch": { "--bg-window": "246, 253, 248", "--bg-nav": "235, 250, 240", "--bg-panel": "255, 255, 255", "--bg-hover": "rgba(52,199,89,0.05)", "--text-primary": "29, 29, 31", "--text-secondary": "134, 134, 139", "--border-color":"220, 240, 225", "--accent-color":"52, 199, 89", "--accent-alpha":"rgba(52, 199, 89, 0.1)", "--accent-shadow":"rgba(52, 199, 89, 0.2)", "--accent-hover":"rgba(52, 199, 89, 0.3)" },
|
|
"blue_switch": { "--bg-window": "246, 249, 253", "--bg-nav": "235, 244, 255", "--bg-panel": "255, 255, 255", "--bg-hover": "rgba(0,122,255,0.05)", "--text-primary": "29, 29, 31", "--text-secondary": "134, 134, 139", "--border-color":"220, 230, 250", "--accent-color":"0, 122, 255", "--accent-alpha":"rgba(0, 122, 255, 0.1)", "--accent-shadow":"rgba(0, 122, 255, 0.2)", "--accent-hover":"rgba(0, 122, 255, 0.3)" }
|
|
};
|
|
|
|
const getMsg = (key) => (dict[currentLang] || dict["english_switch"])[key] || key;
|
|
|
|
function initCustomSelects() {
|
|
document.querySelectorAll('select.modern-select').forEach(select => {
|
|
select.style.display = 'none';
|
|
const wrapper = document.createElement('div');
|
|
wrapper.className = 'custom-select-wrapper';
|
|
const trigger = document.createElement('div');
|
|
trigger.className = 'custom-select-trigger';
|
|
const triggerText = document.createElement('span');
|
|
triggerText.className = 'custom-select-text';
|
|
const selectedOpt = select.options[select.selectedIndex];
|
|
if(selectedOpt) {
|
|
triggerText.textContent = selectedOpt.textContent;
|
|
if(selectedOpt.hasAttribute('data-i18n')) triggerText.setAttribute('data-i18n', '');
|
|
if(selectedOpt.hasAttribute('data-origin-text')) triggerText.dataset.originText = selectedOpt.dataset.originText;
|
|
}
|
|
trigger.appendChild(triggerText);
|
|
const icon = document.createElement('div');
|
|
icon.className = 'custom-select-icon';
|
|
icon.innerHTML = `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg>`;
|
|
trigger.appendChild(icon);
|
|
const optionsContainer = document.createElement('ul');
|
|
optionsContainer.className = 'custom-select-options';
|
|
|
|
Array.from(select.options).forEach(option => {
|
|
if(option.disabled) return;
|
|
const li = document.createElement('li');
|
|
li.className = 'custom-select-option';
|
|
li.textContent = option.textContent;
|
|
li.dataset.value = option.value;
|
|
if(option.hasAttribute('data-i18n')) li.setAttribute('data-i18n', '');
|
|
if(option.hasAttribute('data-origin-text')) li.dataset.originText = option.dataset.originText;
|
|
if(option.selected) li.classList.add('selected');
|
|
|
|
li.addEventListener('click', (e) => {
|
|
e.stopPropagation();
|
|
select.value = option.value;
|
|
select.dispatchEvent(new Event('change'));
|
|
triggerText.textContent = li.textContent;
|
|
if(li.hasAttribute('data-origin-text')) {
|
|
triggerText.dataset.originText = li.dataset.originText;
|
|
}
|
|
wrapper.classList.remove('open');
|
|
optionsContainer.querySelectorAll('.custom-select-option').forEach(el => el.classList.remove('selected'));
|
|
li.classList.add('selected');
|
|
});
|
|
optionsContainer.appendChild(li);
|
|
});
|
|
wrapper.appendChild(trigger);
|
|
wrapper.appendChild(optionsContainer);
|
|
select.parentNode.insertBefore(wrapper, select.nextSibling);
|
|
|
|
trigger.addEventListener('click', (e) => {
|
|
e.stopPropagation();
|
|
const isOpen = wrapper.classList.contains('open');
|
|
document.querySelectorAll('.custom-select-wrapper').forEach(w => w.classList.remove('open'));
|
|
if (!isOpen) wrapper.classList.add('open');
|
|
});
|
|
});
|
|
|
|
document.addEventListener('click', () => {
|
|
document.querySelectorAll('.custom-select-wrapper').forEach(w => w.classList.remove('open'));
|
|
});
|
|
}
|
|
|
|
initCustomSelects();
|
|
|
|
document.querySelectorAll("[data-i18n]").forEach(el => { el.dataset.originText = el.textContent.trim(); });
|
|
document.querySelectorAll("[data-i18n-placeholder]").forEach(el => { el.dataset.originPlaceholder = el.getAttribute('placeholder'); });
|
|
document.querySelectorAll("option[data-i18n]").forEach(el => { el.dataset.originText = el.textContent.trim(); });
|
|
|
|
const langMap = {
|
|
traditional_switch: "zh-Hant",
|
|
simplified_switch: "zh-Hans",
|
|
english_switch: "en",
|
|
japanese_switch: "ja",
|
|
korean_switch: "ko",
|
|
french_switch: "fr",
|
|
spanish_switch: "es",
|
|
hindi_switch: "hi",
|
|
arabic_switch: "ar",
|
|
russian_switch: "ru",
|
|
slovenian_switch: "sl"
|
|
};
|
|
|
|
const translateText = (lang) => {
|
|
currentLang = lang;
|
|
const currentDict = dict[lang] || dict["english_switch"];
|
|
document.querySelectorAll("[data-i18n]").forEach(el => {
|
|
const originText = el.dataset.originText;
|
|
el.textContent = currentDict[originText] || originText;
|
|
});
|
|
document.querySelectorAll("[data-i18n-placeholder]").forEach(el => {
|
|
const originText = el.dataset.originPlaceholder;
|
|
el.setAttribute('placeholder', currentDict[originText] || originText);
|
|
});
|
|
|
|
document.documentElement.lang = langMap[currentLang] || "en";
|
|
};
|
|
|
|
const applyTheme = (theme) => {
|
|
const themeVars = themes[theme];
|
|
if (themeVars) {
|
|
for (const [key, value] of Object.entries(themeVars)) {
|
|
document.documentElement.style.setProperty(key, value.startsWith("rgba") ? value : `rgb(${value})`);
|
|
}
|
|
}
|
|
};
|
|
|
|
function updateCustomSelectUI(selectId, val) {
|
|
const select = document.getElementById(selectId);
|
|
if (!select) return;
|
|
select.value = val;
|
|
const wrapper = select.nextElementSibling;
|
|
if (wrapper && wrapper.classList.contains('custom-select-wrapper')) {
|
|
const triggerText = wrapper.querySelector('.custom-select-text');
|
|
const selectedOpt = select.options[select.selectedIndex];
|
|
if(selectedOpt) {
|
|
triggerText.textContent = selectedOpt.textContent;
|
|
if(selectedOpt.hasAttribute('data-origin-text')) {
|
|
triggerText.dataset.originText = selectedOpt.dataset.originText;
|
|
}
|
|
}
|
|
wrapper.querySelectorAll('.custom-select-option').forEach(el => {
|
|
el.classList.toggle('selected', el.dataset.value === val);
|
|
});
|
|
}
|
|
}
|
|
|
|
let processInterval = null;
|
|
const switchPage = (targetId) => {
|
|
const oldActive = document.querySelector('.page.active');
|
|
if (oldActive && oldActive.id !== targetId) {
|
|
if (oldActive.id === 'junk_window') {
|
|
currentJunkList = [];
|
|
const list = document.querySelector('#junk_window .manage-list');
|
|
if (list) list.innerHTML = '';
|
|
const searchInput = document.querySelector('#junk_window .search-box input');
|
|
if (searchInput) searchInput.value = '';
|
|
} else if (oldActive.id === 'repair_window') {
|
|
const list = document.querySelector('#repair_window .manage-list');
|
|
if (list) list.innerHTML = '';
|
|
}
|
|
}
|
|
|
|
document.querySelectorAll('.page').forEach(page => page.classList.remove('active'));
|
|
document.querySelectorAll('.nav-btn').forEach(btn => btn.classList.remove('active'));
|
|
const targetPage = document.getElementById(targetId);
|
|
if (targetPage) targetPage.classList.add('active');
|
|
const activeNav = document.querySelector(`aside .nav-btn[data-target="${targetId}"]`);
|
|
if (activeNav) activeNav.classList.add('active');
|
|
|
|
if (targetId === 'taskmgr_window') {
|
|
const fetchProcs = () => {
|
|
if (window.pywebview && document.querySelectorAll('#taskmgr_window .manage-list-item input[type="checkbox"]:checked').length === 0) {
|
|
window.pywebview.api.get_process_list().then(updateProcessList);
|
|
}
|
|
};
|
|
fetchProcs();
|
|
if (!processInterval) processInterval = setInterval(fetchProcs, 2000);
|
|
} else {
|
|
if (processInterval) {
|
|
clearInterval(processInterval);
|
|
processInterval = null;
|
|
}
|
|
}
|
|
|
|
if (['whitelist_window', 'quarantine_window', 'popup_window', 'custom_protect_window'].includes(targetId)) {
|
|
refreshConfigLists();
|
|
}
|
|
|
|
if (targetId === 'log_export_window' && window.pywebview) {
|
|
window.pywebview.api.get_logs().then(logs => {
|
|
const logList = logs.reverse().map(log => {
|
|
let displayStr = `[${log.time_str}] ${log.level} | ${log.action}`;
|
|
if (log.source) displayStr += ` | ${log.source.split('\\').pop().split('/').pop()}`;
|
|
if (log.detail) displayStr += ` | ${log.detail}`;
|
|
return {
|
|
display: displayStr,
|
|
value: log.id
|
|
};
|
|
});
|
|
renderManageList('#log_export_window', logList, 'display', 'value', true);
|
|
});
|
|
}
|
|
};
|
|
|
|
document.querySelectorAll('[data-target]').forEach(btn => {
|
|
btn.addEventListener('click', (e) => {
|
|
const targetId = e.currentTarget.getAttribute('data-target');
|
|
if (targetId) switchPage(targetId);
|
|
});
|
|
});
|
|
|
|
document.getElementById('quick_scan_btn')?.addEventListener('click', () => {
|
|
switchPage('scan_window');
|
|
if (window.pywebview) {
|
|
triggerScan('smart');
|
|
}
|
|
});
|
|
|
|
const scanMethodSelect = document.getElementById('scan_method_select');
|
|
const stopBtn = document.getElementById('stop_btn');
|
|
const solveBtn = document.getElementById('solve_btn');
|
|
const progressText = document.getElementById('progress_text');
|
|
const progressTitle = document.querySelector('#scan_window .section-title');
|
|
const virusList = document.getElementById('virus_list');
|
|
|
|
const virusState = new Map();
|
|
|
|
window.addVirusResult = (label, path) => {
|
|
if (!virusState.has(path)) {
|
|
virusState.set(path, true);
|
|
const li = document.createElement('li');
|
|
li.className = 'manage-list-item';
|
|
li.dataset.path = path;
|
|
li.innerHTML = `
|
|
<input type="checkbox" value="${path}" checked>
|
|
<div class="manage-list-item-content"><strong>${label}</strong> | ${path}</div>
|
|
`;
|
|
virusList.appendChild(li);
|
|
}
|
|
};
|
|
|
|
virusList.addEventListener('click', (e) => {
|
|
const li = e.target.closest('.manage-list-item');
|
|
if (!li) return;
|
|
|
|
const cb = li.querySelector('input');
|
|
if (e.target.tagName !== 'INPUT') {
|
|
cb.checked = !cb.checked;
|
|
}
|
|
virusState.set(li.dataset.path, cb.checked);
|
|
});
|
|
|
|
virusList.addEventListener('contextmenu', (e) => {
|
|
e.preventDefault();
|
|
const li = e.target.closest('.manage-list-item');
|
|
if (!li || !window.pywebview) return;
|
|
|
|
const path = li.dataset.path;
|
|
window.pywebview.api.prompt_virus_action(path).then(action => {
|
|
if (action === '1') {
|
|
window.pywebview.api.manage_named_list('white_list', [path], 'add').then(() => {
|
|
window.pywebview.api.remove_virus_result([path]).then(() => {
|
|
virusState.delete(path);
|
|
li.remove();
|
|
if (virusState.size === 0) solveBtn.classList.add('hidden');
|
|
});
|
|
});
|
|
} else if (action === '2') {
|
|
window.pywebview.api.manage_named_list('quarantine', [path], 'add').then(() => {
|
|
window.pywebview.api.remove_virus_result([path]).then(() => {
|
|
virusState.delete(path);
|
|
li.remove();
|
|
if (virusState.size === 0) solveBtn.classList.add('hidden');
|
|
});
|
|
});
|
|
}
|
|
});
|
|
});
|
|
|
|
solveBtn?.addEventListener('click', () => {
|
|
if (!window.pywebview) return;
|
|
|
|
const paths = Array.from(virusState.entries())
|
|
.filter(([_, isChecked]) => isChecked)
|
|
.map(([path, _]) => path);
|
|
|
|
if (paths.length === 0) return;
|
|
|
|
solveBtn.disabled = true;
|
|
window.pywebview.api.solve_scan(paths).then((deletedPaths) => {
|
|
solveBtn.disabled = false;
|
|
|
|
const deletedSet = new Set(deletedPaths);
|
|
deletedPaths.forEach(p => virusState.delete(p));
|
|
|
|
Array.from(virusList.children).forEach(li => {
|
|
if (deletedSet.has(li.dataset.path)) {
|
|
li.remove();
|
|
}
|
|
});
|
|
|
|
if (virusState.size === 0) solveBtn.classList.add('hidden');
|
|
});
|
|
});
|
|
|
|
window.updateScanProgress = (path) => {
|
|
if (progressTitle) progressTitle.textContent = getMsg("正在掃描");
|
|
progressText.textContent = path;
|
|
};
|
|
|
|
window.updateDeleteProgress = (path) => {
|
|
if (progressTitle) progressTitle.textContent = getMsg("正在刪除");
|
|
progressText.textContent = path;
|
|
};
|
|
|
|
window.finishScan = (msg, count) => {
|
|
isScanning = false;
|
|
if (progressTitle) progressTitle.textContent = getMsg("病毒掃描");
|
|
progressText.textContent = msg;
|
|
stopBtn.classList.add('hidden');
|
|
scanMethodSelect.classList.remove('hidden');
|
|
updateCustomSelectUI('scan_method_select', 'none');
|
|
if (count > 0) solveBtn.classList.remove('hidden');
|
|
};
|
|
|
|
function triggerScan(method) {
|
|
if (!window.pywebview) return;
|
|
isScanning = true;
|
|
virusState.clear();
|
|
virusList.innerHTML = '';
|
|
scanMethodSelect.classList.add('hidden');
|
|
stopBtn.classList.remove('hidden');
|
|
stopBtn.disabled = false;
|
|
solveBtn.classList.add('hidden');
|
|
if (progressTitle) progressTitle.textContent = getMsg("正在掃描");
|
|
progressText.textContent = getMsg("正在初始化中");
|
|
window.pywebview.api.trigger_scan(method);
|
|
}
|
|
|
|
scanMethodSelect?.addEventListener('change', () => {
|
|
if (!isScanning && scanMethodSelect.value !== 'none') {
|
|
triggerScan(scanMethodSelect.value);
|
|
}
|
|
});
|
|
|
|
stopBtn?.addEventListener('click', () => {
|
|
if (window.pywebview) window.pywebview.api.stop_scan();
|
|
stopBtn.disabled = true;
|
|
});
|
|
|
|
document.getElementById('theme_select').addEventListener('change', (e) => {
|
|
applyTheme(e.target.value);
|
|
if (window.pywebview) window.pywebview.api.update_config('theme', e.target.value);
|
|
});
|
|
|
|
document.getElementById('lang_select').addEventListener('change', (e) => {
|
|
translateText(e.target.value);
|
|
if (window.pywebview) window.pywebview.api.update_config('language', e.target.value);
|
|
});
|
|
|
|
window.revertSwitch = (switchKey) => {
|
|
const switchMap = ["process_switch", "document_switch", "system_switch", "driver_switch", "network_switch", "sensitive_switch", "extension_switch", "cloud_switch", "context_switch"];
|
|
const index = switchMap.indexOf(switchKey);
|
|
if (index !== -1) {
|
|
const toggle = document.querySelectorAll('.toggle-switch input')[index];
|
|
if (toggle) {
|
|
toggle.checked = false;
|
|
}
|
|
}
|
|
};
|
|
|
|
document.querySelectorAll('.toggle-switch input').forEach((toggle, index) => {
|
|
toggle.addEventListener('change', async (e) => {
|
|
const switchMap = ["process_switch", "document_switch", "system_switch", "driver_switch", "network_switch", "sensitive_switch", "extension_switch", "cloud_switch", "context_switch"];
|
|
const key = switchMap[index];
|
|
if (window.pywebview && key) {
|
|
toggle.disabled = true;
|
|
try {
|
|
const result = await window.pywebview.api.update_config(key, e.target.checked);
|
|
if (result !== undefined && result !== null) {
|
|
toggle.checked = result;
|
|
}
|
|
} catch (err) {
|
|
toggle.checked = !e.target.checked;
|
|
} finally {
|
|
toggle.disabled = false;
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
window.triggerContextScan = (path) => {
|
|
if (isScanning) return;
|
|
switchPage('scan_window');
|
|
if (window.pywebview) {
|
|
isScanning = true;
|
|
virusState.clear();
|
|
virusList.innerHTML = '';
|
|
scanMethodSelect.classList.add('hidden');
|
|
stopBtn.classList.remove('hidden');
|
|
solveBtn.classList.add('hidden');
|
|
if (progressTitle) progressTitle.textContent = getMsg("正在掃描");
|
|
progressText.textContent = getMsg("正在初始化中");
|
|
window.pywebview.api.start_scan([path]);
|
|
}
|
|
};
|
|
|
|
window.addEventListener('pywebviewready', () => {
|
|
window.pywebview.api.get_config().then(cfg => {
|
|
const theme = cfg.theme || "white_switch";
|
|
const lang = cfg.language || "english_switch";
|
|
applyTheme(theme);
|
|
translateText(lang);
|
|
updateCustomSelectUI('theme_select', theme);
|
|
updateCustomSelectUI('lang_select', lang);
|
|
|
|
const switchMap = ["process_switch", "document_switch", "system_switch", "driver_switch", "network_switch", "sensitive_switch", "extension_switch", "cloud_switch", "context_switch"];
|
|
document.querySelectorAll('.toggle-switch input').forEach((toggle, index) => {
|
|
if (switchMap[index]) {
|
|
toggle.checked = !!cfg[switchMap[index]];
|
|
}
|
|
});
|
|
});
|
|
window.pywebview.api.init_ui_ready();
|
|
});
|
|
|
|
function renderManageList(containerSelector, dataList, displayKey, valKey, defaultChecked = false) {
|
|
const container = document.querySelector(`${containerSelector} .manage-list`);
|
|
const searchInput = document.querySelector(`${containerSelector} .search-box input`);
|
|
if (!container) return;
|
|
|
|
container.renderData = (filterText = "") => {
|
|
container.innerHTML = '';
|
|
dataList.forEach(item => {
|
|
const displayStr = typeof item === 'object' ? item[displayKey] : item;
|
|
const valueStr = typeof item === 'object' ? item[valKey] : item;
|
|
|
|
if (filterText && !String(displayStr).toLowerCase().includes(filterText.toLowerCase())) return;
|
|
|
|
const li = document.createElement('li');
|
|
li.className = 'manage-list-item';
|
|
const checkedAttr = defaultChecked ? 'checked' : '';
|
|
li.innerHTML = `
|
|
<input type="checkbox" value="${valueStr}" ${checkedAttr}>
|
|
<div class="manage-list-item-content">${displayStr}</div>
|
|
`;
|
|
|
|
li.addEventListener('click', (e) => {
|
|
if (e.target.tagName !== 'INPUT') {
|
|
const cb = li.querySelector('input');
|
|
cb.checked = !cb.checked;
|
|
}
|
|
});
|
|
container.appendChild(li);
|
|
});
|
|
};
|
|
|
|
container.renderData(searchInput ? searchInput.value : "");
|
|
|
|
if (searchInput) {
|
|
searchInput.oninput = (e) => container.renderData(e.target.value);
|
|
}
|
|
}
|
|
|
|
function getCheckedValues(containerSelector) {
|
|
const checkboxes = document.querySelectorAll(`${containerSelector} .manage-list-item input[type="checkbox"]:checked`);
|
|
return Array.from(checkboxes).map(cb => cb.value);
|
|
}
|
|
|
|
function formatSize(bytes) {
|
|
if (bytes === 0) return '0 B';
|
|
const k = 1024;
|
|
const sizes = ['B', 'KB', 'MB', 'GB'];
|
|
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
|
|
}
|
|
|
|
let currentJunkList = [];
|
|
|
|
document.querySelector('#junk_window .primary-btn')?.addEventListener('click', () => {
|
|
if (!window.pywebview) return;
|
|
const btn = document.querySelector('#junk_window .primary-btn');
|
|
btn.textContent = getMsg("正在初始化中");
|
|
|
|
window.pywebview.api.scan_system_junk().then(list => {
|
|
currentJunkList = list.map(item => ({
|
|
display: `${item.path} (${formatSize(item.size)})`,
|
|
value: item.path
|
|
}));
|
|
renderManageList('#junk_window', currentJunkList, 'display', 'value', true);
|
|
btn.textContent = getMsg("掃描");
|
|
});
|
|
});
|
|
|
|
document.querySelector('#junk_window .danger-btn')?.addEventListener('click', () => {
|
|
if (!window.pywebview) return;
|
|
const checkedPaths = getCheckedValues('#junk_window');
|
|
if (checkedPaths.length === 0) return;
|
|
|
|
window.pywebview.api.clean_system_junk(checkedPaths).then(deletedSize => {
|
|
const msg = getMsg("已清理 ");
|
|
window.pywebview.api.show_alert(getMsg("提示"), `${msg}${formatSize(deletedSize)}`, "info");
|
|
currentJunkList = currentJunkList.filter(item => !checkedPaths.includes(item.value));
|
|
renderManageList('#junk_window', currentJunkList, 'display', 'value', true);
|
|
});
|
|
});
|
|
|
|
function refreshConfigLists() {
|
|
if (!window.pywebview) return;
|
|
window.pywebview.api.get_config().then(cfg => {
|
|
renderManageList('#whitelist_window', cfg.white_list || [], 'file', 'file');
|
|
renderManageList('#quarantine_window', cfg.quarantine || [], 'file', 'file');
|
|
renderManageList('#custom_protect_window', cfg.custom_rule || [], 'file', 'file');
|
|
|
|
const popupRules = (cfg.block_list || []).map(item => ({
|
|
display: `${item.exe || '*'} | ${item.class || '*'} | ${item.title || '*'}`,
|
|
value: item.exe || item.title
|
|
}));
|
|
renderManageList('#popup_window', popupRules, 'display', 'value');
|
|
});
|
|
}
|
|
|
|
document.querySelector('#whitelist_window .modern-btn:not(.primary-btn)')?.addEventListener('click', () => {
|
|
if (!window.pywebview) return;
|
|
const checked = getCheckedValues('#whitelist_window');
|
|
if (checked.length > 0) {
|
|
window.pywebview.api.remove_list_items('white_list', checked).then(refreshConfigLists);
|
|
}
|
|
});
|
|
|
|
document.querySelector('#quarantine_window .modern-btn:not(.primary-btn)')?.addEventListener('click', () => {
|
|
if (!window.pywebview) return;
|
|
const checked = getCheckedValues('#quarantine_window');
|
|
if (checked.length > 0) {
|
|
window.pywebview.api.remove_list_items('quarantine', checked).then(refreshConfigLists);
|
|
}
|
|
});
|
|
|
|
document.querySelector('#popup_window .modern-btn:not(.primary-btn)')?.addEventListener('click', () => {
|
|
if (!window.pywebview) return;
|
|
const checked = getCheckedValues('#popup_window');
|
|
if (checked.length > 0) {
|
|
window.pywebview.api.remove_list_items('block_list', checked).then(refreshConfigLists);
|
|
}
|
|
});
|
|
|
|
document.querySelector('#custom_protect_window .modern-btn:not(.primary-btn)')?.addEventListener('click', () => {
|
|
if (!window.pywebview) return;
|
|
const checked = getCheckedValues('#custom_protect_window');
|
|
if (checked.length > 0) {
|
|
window.pywebview.api.remove_list_items('custom_rule', checked).then(refreshConfigLists);
|
|
}
|
|
});
|
|
|
|
document.querySelector('#whitelist_window .primary-btn')?.addEventListener('click', () => {
|
|
window.pywebview?.api.select_files().then(files => {
|
|
if (files && files.length > 0) {
|
|
window.pywebview.api.manage_named_list('white_list', files, 'add').then(refreshConfigLists);
|
|
}
|
|
});
|
|
});
|
|
|
|
document.querySelector('#quarantine_window .primary-btn')?.addEventListener('click', () => {
|
|
window.pywebview?.api.select_files().then(files => {
|
|
if (files && files.length > 0) {
|
|
window.pywebview.api.manage_named_list('quarantine', files, 'add').then(refreshConfigLists);
|
|
}
|
|
});
|
|
});
|
|
|
|
document.querySelector('#custom_protect_window .primary-btn')?.addEventListener('click', () => {
|
|
window.pywebview?.api.select_files().then(files => {
|
|
if (files && files.length > 0) {
|
|
window.pywebview.api.manage_named_list('custom_rule', files, 'add').then(refreshConfigLists);
|
|
}
|
|
});
|
|
});
|
|
|
|
document.querySelector('#repair_window .primary-btn')?.addEventListener('click', () => {
|
|
if (!window.pywebview) return;
|
|
window.pywebview.api.scan_system_repair().then(list => {
|
|
const translatedList = list.map(item => ({
|
|
display: getMsg(item.display),
|
|
value: item.value
|
|
}));
|
|
renderManageList('#repair_window', translatedList, 'display', 'value', true);
|
|
});
|
|
});
|
|
|
|
document.querySelector('#repair_window .danger-btn')?.addEventListener('click', () => {
|
|
if (!window.pywebview) return;
|
|
const checkedPaths = getCheckedValues('#repair_window');
|
|
if (checkedPaths.length === 0) return;
|
|
window.pywebview.api.execute_system_repair(checkedPaths).then(() => {
|
|
const msg = getMsg("已修復選取項目");
|
|
window.pywebview.api.show_alert(getMsg("提示"), msg, "info");
|
|
document.querySelector('#repair_window .manage-list').innerHTML = '';
|
|
});
|
|
});
|
|
|
|
document.getElementById('minimize_button')?.addEventListener('click', () => window.pywebview?.api.minimize());
|
|
document.getElementById('close_button')?.addEventListener('click', () => window.pywebview?.api.hide_window());
|
|
|
|
window.updateLogs = (entry) => {
|
|
const logWidget = document.querySelector('.log-text');
|
|
if (logWidget) {
|
|
let parts = [`[${entry.time_str}]`, entry.level, entry.action];
|
|
if (entry.source) parts.push(`Src: ${entry.source}`);
|
|
if (entry.target) parts.push(`Tgt: ${entry.target}`);
|
|
if (entry.code) parts.push(`Code: ${entry.code}`);
|
|
if (entry.pid) parts.push(`PID: ${entry.pid}`);
|
|
if (entry.hash) parts.push(`Hash: ${entry.hash}`);
|
|
if (entry.detail) parts.push(`Detail: ${entry.detail}`);
|
|
if (entry.operate !== null) parts.push(`Op: ${entry.operate}`);
|
|
parts.push(`Success: ${entry.success}`);
|
|
|
|
logWidget.value += parts.join(' | ') + '\n';
|
|
logWidget.scrollTop = logWidget.scrollHeight;
|
|
}
|
|
|
|
const exportWindow = document.getElementById('log_export_window');
|
|
if (exportWindow && exportWindow.classList.contains('active')) {
|
|
if (window.pywebview) {
|
|
window.pywebview.api.get_logs().then(logs => {
|
|
const logList = logs.reverse().map(log => {
|
|
let displayStr = `[${log.time_str}] ${log.level} | ${log.action}`;
|
|
if (log.source) displayStr += ` | ${log.source.split('\\').pop().split('/').pop()}`;
|
|
if (log.detail) displayStr += ` | ${log.detail}`;
|
|
return { display: displayStr, value: log.id };
|
|
});
|
|
renderManageList('#log_export_window', logList, 'display', 'value', true);
|
|
});
|
|
}
|
|
}
|
|
|
|
if ((entry.action === 'System' && entry.detail === 'Engine Initialization Complete') ||
|
|
(entry.level === 'WARN' && entry.action === 'init_engine_thread')) {
|
|
const overlay = document.getElementById('loading_overlay');
|
|
const appContainer = document.querySelector('.app-container');
|
|
if (overlay && !overlay.classList.contains('fade-out')) {
|
|
overlay.classList.add('fade-out');
|
|
setTimeout(() => {
|
|
if (appContainer) appContainer.classList.add('fade-in');
|
|
}, 400);
|
|
}
|
|
}
|
|
};
|
|
|
|
const websiteBtn = Array.from(document.querySelectorAll('#about_window .list-item')).find(el => el.textContent.includes('官方網站') || el.textContent.includes('Website'));
|
|
if (websiteBtn) {
|
|
websiteBtn.querySelector('button').addEventListener('click', () => {
|
|
if (window.pywebview) window.pywebview.api.open_website();
|
|
});
|
|
}
|
|
|
|
const updateBtn = Array.from(document.querySelectorAll('#about_window .list-item')).find(el => el.textContent.includes('檢查更新') || el.textContent.includes('Update'));
|
|
if (updateBtn) {
|
|
updateBtn.querySelector('button').addEventListener('click', () => {
|
|
if (window.pywebview) {
|
|
window.pywebview.api.check_update().then(res => {
|
|
if (res.error) {
|
|
window.pywebview.api.show_alert(getMsg("錯誤"), getMsg("檢查更新失敗"), "error");
|
|
} else if (res.has_update) {
|
|
const msg = getMsg("發現新版本");
|
|
window.pywebview.api.show_confirm(getMsg("提示"), `${msg} ${res.latest}\n(${res.current} -> ${res.latest})`).then(confirmRes => {
|
|
if (confirmRes) window.pywebview.api.open_url(res.url);
|
|
});
|
|
} else {
|
|
const msg = getMsg("當前已是最新版本");
|
|
window.pywebview.api.show_alert(getMsg("提示"), `${msg} ${res.current}`, "info");
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
const resetBtn = Array.from(document.querySelectorAll('#setting_window .list-item')).find(el => el.textContent.includes('重置選項') || el.textContent.includes('Reset'));
|
|
if (resetBtn) {
|
|
resetBtn.querySelector('button').addEventListener('click', () => {
|
|
const confirmMsg = getMsg("此選項可以重置所有設定");
|
|
if (window.pywebview) {
|
|
window.pywebview.api.show_confirm(getMsg("提示"), confirmMsg).then(res => {
|
|
if (res) {
|
|
window.pywebview.api.reset_config().then(() => {
|
|
window.pywebview.api.show_alert(getMsg("提示"), getMsg("設定已重置,請重新啟動程式以套用預設值。"), "info");
|
|
});
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
document.querySelector('#log_export_window .primary-btn')?.addEventListener('click', () => {
|
|
if (window.pywebview) {
|
|
const checkedIds = getCheckedValues('#log_export_window');
|
|
if (checkedIds.length === 0) {
|
|
window.pywebview.api.show_alert(getMsg("提示"), getMsg("請選擇要導出的日誌"), "warning");
|
|
return;
|
|
}
|
|
window.pywebview.api.export_logs(checkedIds).then(res => {
|
|
if (res) window.pywebview.api.show_alert(getMsg("提示"), getMsg("導出成功"), "info");
|
|
});
|
|
}
|
|
});
|
|
|
|
document.querySelector('#log_export_window .danger-btn')?.addEventListener('click', () => {
|
|
const checkedIds = getCheckedValues('#log_export_window');
|
|
if (checkedIds.length === 0) return;
|
|
|
|
const confirmMsg = getMsg("確定刪除選取的日誌記錄嗎?");
|
|
if (window.pywebview) {
|
|
window.pywebview.api.show_confirm(getMsg("提示"), confirmMsg).then(res => {
|
|
if (res) {
|
|
window.pywebview.api.clear_logs(checkedIds).then(() => {
|
|
window.pywebview.api.get_logs().then(logs => {
|
|
const logList = logs.reverse().map(log => {
|
|
let displayStr = `[${log.time_str}] ${log.level} | ${log.action}`;
|
|
if (log.source) displayStr += ` | ${log.source.split('\\').pop().split('/').pop()}`;
|
|
if (log.detail) displayStr += ` | ${log.detail}`;
|
|
return { display: displayStr, value: log.id };
|
|
});
|
|
renderManageList('#log_export_window', logList, 'display', 'value', true);
|
|
});
|
|
const successMsg = getMsg("選取的日誌已刪除。");
|
|
window.pywebview.api.show_alert(getMsg("提示"), successMsg, "info");
|
|
});
|
|
}
|
|
});
|
|
}
|
|
});
|
|
|
|
let currentProcessList = [];
|
|
function renderProcessList(filterText = "") {
|
|
const list = document.querySelector('#taskmgr_window .manage-list');
|
|
if (!list) return;
|
|
list.innerHTML = '';
|
|
currentProcessList.forEach(p => {
|
|
if (filterText && !p.name.toLowerCase().includes(filterText.toLowerCase())) return;
|
|
const li = document.createElement('li');
|
|
li.className = 'manage-list-item';
|
|
const unknownPathText = getMsg("未知路徑");
|
|
const pathText = p.path && p.path !== "None" ? p.path : unknownPathText;
|
|
li.innerHTML = `
|
|
<input type="checkbox" value="${p.pid}" data-path="${p.path || ''}">
|
|
<div class="manage-list-item-content">${p.name} | PID: ${p.pid} | ${pathText}</div>
|
|
`;
|
|
li.addEventListener('click', (e) => {
|
|
if (e.target.tagName !== 'INPUT') {
|
|
const cb = li.querySelector('input');
|
|
cb.checked = !cb.checked;
|
|
}
|
|
});
|
|
li.addEventListener('contextmenu', (e) => {
|
|
e.preventDefault();
|
|
const confirmMsg = getMsg("結束進程?");
|
|
if (window.pywebview) {
|
|
window.pywebview.api.show_confirm(getMsg("提示"), confirmMsg).then(res => {
|
|
if (res) {
|
|
window.pywebview.api.kill_process(p.pid).then(() => window.pywebview.api.get_process_list().then(updateProcessList));
|
|
}
|
|
});
|
|
}
|
|
});
|
|
list.appendChild(li);
|
|
});
|
|
}
|
|
|
|
function updateProcessList(procs) {
|
|
currentProcessList = procs;
|
|
const searchInput = document.querySelector('#taskmgr_window .search-box input');
|
|
renderProcessList(searchInput ? searchInput.value : "");
|
|
}
|
|
|
|
const procSearchInput = document.querySelector('#taskmgr_window .search-box input');
|
|
if (procSearchInput) {
|
|
procSearchInput.addEventListener('input', (e) => renderProcessList(e.target.value));
|
|
}
|
|
|
|
document.querySelector('#taskmgr_window .primary-btn')?.addEventListener('click', () => {
|
|
const cbs = document.querySelectorAll('#taskmgr_window .manage-list-item input[type="checkbox"]:checked');
|
|
if (cbs.length > 0 && window.pywebview) {
|
|
cbs.forEach(cb => {
|
|
const path = cb.dataset.path;
|
|
if (path && path !== "Unknown" && path !== "None") {
|
|
window.pywebview.api.open_file_location(path);
|
|
}
|
|
});
|
|
}
|
|
});
|
|
|
|
document.querySelector('#popup_window .primary-btn')?.addEventListener('click', () => {
|
|
if (!window.pywebview) return;
|
|
const btn = document.querySelector('#popup_window .primary-btn');
|
|
const originalText = btn.textContent;
|
|
const waitText = getMsg("請在5秒內點擊目標視窗...");
|
|
|
|
btn.textContent = waitText;
|
|
btn.disabled = true;
|
|
|
|
window.pywebview.api.capture_popup_window().then(rule => {
|
|
btn.textContent = originalText;
|
|
btn.disabled = false;
|
|
if (rule) {
|
|
window.pywebview.api.add_popup_rule(rule).then(success => {
|
|
if (success) refreshConfigLists();
|
|
});
|
|
}
|
|
});
|
|
});
|
|
|
|
document.querySelector('#taskmgr_window .danger-btn')?.addEventListener('click', () => {
|
|
const cbs = document.querySelectorAll('#taskmgr_window .manage-list-item input[type="checkbox"]:checked');
|
|
const confirmMsg = getMsg("確定要結束選取的進程嗎?");
|
|
if (cbs.length > 0 && window.pywebview) {
|
|
window.pywebview.api.show_confirm(getMsg("提示"), confirmMsg).then(res => {
|
|
if (res) {
|
|
const promises = Array.from(cbs).map(cb => window.pywebview.api.kill_process(parseInt(cb.value)));
|
|
Promise.all(promises).then(() => {
|
|
window.pywebview.api.get_process_list().then(updateProcessList);
|
|
});
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}); |