From f5bc0f1579c4fa8a1a83a4bd30b09866d9eef06d Mon Sep 17 00:00:00 2001 From: YrChen1001 <99790174+YrChen1001@users.noreply.github.com> Date: Wed, 21 Oct 2026 13:09:16 +0800 Subject: [PATCH] l10n: complete Traditional Chinese (Taiwan) translations --- PureMac.xcodeproj/project.pbxproj | 4 + PureMac/zh-Hant.lproj/InfoPlist.strings | 8 + PureMac/zh-Hant.lproj/Localizable.strings | 1282 +++++++++--------- PureMac/zh-Hant.lproj/ServicesMenu.strings | 2 + PureMacTests/LocalizationFilesTests.swift | 35 +- PureMacTests/PerformanceInspectorTests.swift | 8 +- PureMacTests/ProtectionAuditTests.swift | 6 +- docs/README.zh-Hant.md | 16 +- 8 files changed, 709 insertions(+), 652 deletions(-) create mode 100644 PureMac/zh-Hant.lproj/InfoPlist.strings create mode 100644 PureMac/zh-Hant.lproj/ServicesMenu.strings diff --git a/PureMac.xcodeproj/project.pbxproj b/PureMac.xcodeproj/project.pbxproj index f842455..4445018 100644 --- a/PureMac.xcodeproj/project.pbxproj +++ b/PureMac.xcodeproj/project.pbxproj @@ -145,6 +145,7 @@ 3A8D39C3C250F26302EC45AB /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = ""; }; 3BBCB7D8C9A325A7FFEEF391 /* ProcessResourceMonitorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProcessResourceMonitorTests.swift; sourceTree = ""; }; 3D4FD34378988D430A582ED0 /* OnboardingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingView.swift; sourceTree = ""; }; + 409E15E7364CABDF1435C153 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/InfoPlist.strings"; sourceTree = ""; }; 40A3F22FCEF534DE4A2CAD0E /* Haptics.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Haptics.swift; sourceTree = ""; }; 40CD4855FB5FA866CAA52C10 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 4144A1B8F1D52D44A6E8E726 /* SimilarPhotoFinderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimilarPhotoFinderTests.swift; sourceTree = ""; }; @@ -224,6 +225,7 @@ F270D47D1DD94D4577482B90 /* ProtectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProtectionView.swift; sourceTree = ""; }; F31F91226CDCFBB8E303B7DA /* AppConstants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppConstants.swift; sourceTree = ""; }; F3C3342D6386FBB6DE3D18BC /* SimilarPhotosView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimilarPhotosView.swift; sourceTree = ""; }; + F42864F392371F26932F20B8 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/ServicesMenu.strings"; sourceTree = ""; }; F661A0F64CF93E482CB1728F /* DashboardView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DashboardView.swift; sourceTree = ""; }; F77B9D7D5353CD42BD03ADBB /* ApplicationUpdaterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApplicationUpdaterTests.swift; sourceTree = ""; }; F9DCBD97CC88D77AE8DB01A4 /* PermissionCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PermissionCoordinator.swift; sourceTree = ""; }; @@ -713,6 +715,7 @@ 6ED5C9C10C69C3143B1F5CA6 /* ru */, 374A3BE46E71E54B6927E9EF /* uk */, 1B8BE07AD70610A91E735E78 /* zh-Hans */, + F42864F392371F26932F20B8 /* zh-Hant */, ); name = ServicesMenu.strings; sourceTree = ""; @@ -727,6 +730,7 @@ ED0C4D8912DA94F81B2AEF8F /* ru */, DFC4A1FD7DB92C82725B4314 /* uk */, AD97E55BA95BE2AEA858A80B /* zh-Hans */, + 409E15E7364CABDF1435C153 /* zh-Hant */, ); name = InfoPlist.strings; sourceTree = ""; diff --git a/PureMac/zh-Hant.lproj/InfoPlist.strings b/PureMac/zh-Hant.lproj/InfoPlist.strings new file mode 100644 index 0000000..605cc30 --- /dev/null +++ b/PureMac/zh-Hant.lproj/InfoPlist.strings @@ -0,0 +1,8 @@ +/* macOS 權限提示與版權資訊(台灣繁體中文) */ +"NSAppleEventsUsageDescription" = "PureMac 會使用 Apple Events 與 Finder 互動,以顯示檔案位置。"; +"NSDesktopFolderUsageDescription" = "PureMac 需要存取「桌面」,以尋找垃圾檔案與殘留檔案。"; +"NSDocumentsFolderUsageDescription" = "PureMac 需要存取「文件」,以尋找垃圾檔案與殘留檔案。"; +"NSDownloadsFolderUsageDescription" = "PureMac 需要存取「下載項目」,以尋找垃圾檔案與殘留檔案。"; +"NSRemovableVolumesUsageDescription" = "PureMac 需要存取卸除式儲存裝置,以掃描垃圾檔案。"; +"NSSystemAdministrationUsageDescription" = "PureMac 需要管理者權限,才能清理快取並完整解除安裝應用程式。"; +"NSHumanReadableCopyright" = "版權所有 © 2026。採用 MIT 授權條款。"; diff --git a/PureMac/zh-Hant.lproj/Localizable.strings b/PureMac/zh-Hant.lproj/Localizable.strings index 7c79fed..9e20623 100644 --- a/PureMac/zh-Hant.lproj/Localizable.strings +++ b/PureMac/zh-Hant.lproj/Localizable.strings @@ -1,71 +1,71 @@ -/* Sidebar (MainWindow) */ +/* 側邊欄(主視窗) */ "Overview" = "概覽"; "Applications" = "應用程式"; "Cleanup" = "清理"; "Dashboard" = "儀表板"; "Installed Apps" = "已安裝的應用程式"; -"Orphaned Files" = "孤立檔案"; +"Orphaned Files" = "殘留檔案"; "PureMac" = "PureMac"; -"Ready to clean" = "可以清理"; +"Ready to clean" = "準備清理"; "Limited access" = "存取受限"; -"Full Disk Access granted" = "已授予完整磁碟取用權"; -"Grant FDA in Settings" = "在「設定」中授予完整磁碟取用權"; +"Full Disk Access granted" = "已授予完整磁碟存取權"; +"Grant FDA in Settings" = "在「系統設定」中授予完整磁碟存取權"; "Select a category from the sidebar to get started." = "從側邊欄選擇一個類別以開始使用。"; -/* FDA toast + clean error alert (MainWindow) */ +/* 完整磁碟存取權提示與清理錯誤 */ "Couldn't clean everything" = "無法清理所有項目"; -"Open System Settings" = "打開「系統設定」"; +"Open System Settings" = "開啟「系統設定」"; "OK" = "好"; -"Full Disk Access required" = "需要完整磁碟取用權"; -"macOS blocks PureMac from cleaning caches and uninstalling apps until you grant access." = "在你授予取用權之前,macOS 會阻止 PureMac 清理快取與解除安裝應用程式。"; -"Grant Access" = "授予取用"; +"Full Disk Access required" = "需要完整磁碟存取權"; +"macOS blocks PureMac from cleaning caches and uninstalling apps until you grant access." = "授予存取權之前,macOS 會阻止 PureMac 清理快取與解除安裝應用程式。"; +"Grant Access" = "授予存取權"; -/* Dashboard */ +/* 儀表板 */ "Storage" = "儲存空間"; "Smart Scan" = "智慧掃描"; -"free of %@" = "%@ 中的可用空間"; +"free of %@" = "可用空間,總容量 %@"; "%lld%% used" = "已使用 %lld%%"; -"Used" = "已用"; -"Junk" = "垃圾"; +"Used" = "已使用"; +"Junk" = "可清理項目"; "Purgeable" = "可清除"; -"USED" = "已用"; +"USED" = "已使用"; "SCANNING" = "掃描中"; "Free Space" = "可用空間"; -"Junk Found" = "發現的垃圾"; +"Junk Found" = "找到的可清理項目"; "Apps" = "應用程式"; "of %@ · %lld%% used" = "共 %@ · 已使用 %lld%%"; "Run a scan" = "執行掃描"; -"across %lld categories" = "跨越 %lld 個類別"; +"across %lld categories" = "涵蓋 %lld 個類別"; "installed" = "已安裝"; -"APFS reclaimable" = "APFS 可回收"; -"Suggested for you" = "為你建議"; +"APFS reclaimable" = "APFS 可回收空間"; +"Suggested for you" = "建議項目"; "Found so far" = "目前找到"; "By category" = "依類別"; "Category" = "類別"; "%@ is using %@" = "%@ 正在使用 %@"; -"Grant Full Disk Access for full results" = "授予完整磁碟取用權以取得完整結果"; -"Without it, most caches and uninstall flows fail." = "若沒有它,多數快取清理與解除安裝流程會失敗。"; +"Grant Full Disk Access for full results" = "授予完整磁碟存取權以取得完整結果"; +"Without it, most caches and uninstall flows fail." = "缺少此權限,多數快取清理與解除安裝作業將無法完成。"; "Action" = "動作"; "Scanning your Mac" = "正在掃描你的 Mac"; -"Currently in: %@" = "目前: %@"; +"Currently in: %@" = "目前位置:%@"; "found" = "已找到"; "Your Mac is clean" = "你的 Mac 很乾淨"; "Scan Again" = "重新掃描"; "Clean %@" = "清理 %@"; -"Clean %@?" = "清理 %@?"; +"Clean %@?" = "要清理 %@ 嗎?"; "Cleaning…" = "正在清理…"; "%lld%% complete" = "已完成 %lld%%"; "freed" = "已釋出"; "Done" = "完成"; "%lld items" = "%lld 個項目"; -/* Common destructive dialog */ +/* 永久刪除確認視窗 */ "Clean" = "清理"; "Cancel" = "取消"; "This will permanently delete the selected files. This cannot be undone." = "這會永久刪除所選檔案。此動作無法復原。"; -/* Category Detail */ -"All Clean" = "全部乾淨"; +/* 清理類別詳情 */ +"All Clean" = "已清理乾淨"; "No junk files found in this category." = "此類別中未發現垃圾檔案。"; "Not Scanned" = "尚未掃描"; "Run a scan to analyze this category." = "執行掃描以分析此類別。"; @@ -74,60 +74,60 @@ "Scan" = "掃描"; "Select All" = "全選"; "Deselect All" = "取消全選"; -"Largest First" = "最大優先"; -"Smallest First" = "最小優先"; -"Sorted: Largest First" = "排序:最大優先"; -"Sorted: Smallest First" = "排序:最小優先"; +"Largest First" = "由大到小"; +"Smallest First" = "由小到大"; +"Sorted: Largest First" = "排序:由大到小"; +"Sorted: Smallest First" = "排序:由小到大"; "Clean %lld items" = "清理 %lld 個項目"; "%lld items · %@" = "%lld 個項目 · %@"; "Scanning…" = "掃描中…"; "Rescan" = "重新掃描"; -"%lld of %lld selected" = "已選 %lld / %lld"; +"%lld of %lld selected" = "已選取 %lld/%lld 個"; "Reveal in Finder" = "在 Finder 中顯示"; "Copy Path" = "複製路徑"; -"Move to Trash" = "移到垃圾桶"; +"Move to Trash" = "移至垃圾桶"; -/* Apps (AppListView) */ +/* 應用程式清單 */ "Search apps" = "搜尋應用程式"; "Refresh" = "重新整理"; "Installed Apps (%lld)" = "已安裝的應用程式 (%lld)"; "Uninstall (%lld files)" = "解除安裝 (%lld 個檔案)"; -"Loading installed apps..." = "正在載入已安裝的應用程式..."; +"Loading installed apps..." = "正在載入已安裝的應用程式…"; "No Apps Found" = "找不到應用程式"; "Could not find any installed applications." = "找不到任何已安裝的應用程式。"; -"Retry" = "重試"; +"Retry" = "再試一次"; "Application" = "應用程式"; "Size" = "大小"; "Select an App" = "選擇應用程式"; "Select an app from the list to see all its related files across your system." = "從清單中選擇一個應用程式以查看系統中所有相關檔案。"; -/* App Files (AppFilesView) */ +/* 應用程式相關檔案 */ "%lld files" = "%lld 個檔案"; -"1 folder" = "1 個檔案夾"; +"1 folder" = "1 個資料夾"; "1 file" = "1 個檔案"; -"Scanning for related files..." = "正在掃描相關檔案..."; -"Checking %lld locations..." = "正在檢查 %lld 個位置..."; +"Scanning for related files..." = "正在掃描相關檔案…"; +"Checking %lld locations..." = "正在檢查 %lld 個位置…"; "No Related Files" = "沒有相關檔案"; "No additional files found for %@." = "找不到 %@ 的額外檔案。"; "Remove %lld files (%@)" = "移除 %lld 個檔案 (%@)"; "Removal Failed" = "移除失敗"; "Remove this file" = "移除此檔案"; -"Remove %@?" = "移除 %@?"; +"Remove %@?" = "要移除 %@ 嗎?"; "Remove" = "移除"; "This will permanently delete this file. This action cannot be undone." = "這會永久刪除此檔案。此動作無法復原。"; -/* Orphans */ -"Scanning for orphaned files..." = "正在掃描孤立檔案..."; -"No Orphaned Files" = "沒有孤立檔案"; +/* 殘留檔案 */ +"Scanning for orphaned files..." = "正在掃描殘留檔案…"; +"No Orphaned Files" = "沒有殘留檔案"; "No leftover files from uninstalled apps were found." = "未發現已解除安裝應用程式的殘留檔案。"; -"Scan for Orphans" = "掃描孤立檔案"; -"Orphaned Files (%lld)" = "孤立檔案 (%lld)"; -"Remove Selected (%lld)" = "移除所選 (%lld)"; +"Scan for Orphans" = "掃描殘留檔案"; +"Orphaned Files (%lld)" = "殘留檔案 (%lld)"; +"Remove Selected (%lld)" = "移除所選項目(%lld)"; "Some files could not be removed" = "部分檔案無法移除"; -"blocked by safety policy" = "已被安全性原則阻擋"; +"blocked by safety policy" = "已遭安全性原則阻擋"; "%lld item(s) failed to delete.\n\n%@" = "有 %lld 個項目刪除失敗。\n\n%@"; -/* Onboarding */ +/* 初次使用導覽 */ "Back" = "返回"; "Next" = "下一步"; "Get Started" = "開始使用"; @@ -136,40 +136,40 @@ "Find junk files across your system" = "在系統中尋找垃圾檔案"; "App Uninstaller" = "應用程式解除安裝"; "Remove apps and all their files" = "移除應用程式及其所有檔案"; -"Orphan Finder" = "孤立檔案搜尋"; -"Find leftovers from deleted apps" = "尋找已刪除應用程式的殘留"; -"Full Disk Access" = "完整磁碟取用權"; -"PureMac needs Full Disk Access to uninstall apps, find leftover files, and clean protected caches." = "PureMac 需要完整磁碟取用權以解除安裝應用程式、尋找殘留檔案,以及清理受保護的快取。"; +"Orphan Finder" = "殘留檔案搜尋"; +"Find leftovers from deleted apps" = "尋找已刪除應用程式留下的檔案"; +"Full Disk Access" = "完整磁碟存取權"; +"PureMac needs Full Disk Access to uninstall apps, find leftover files, and clean protected caches." = "PureMac 需要完整磁碟存取權以解除安裝應用程式、尋找殘留檔案,以及清理受保護的快取。"; "We'll guide you through the next steps." = "我們將引導你完成接下來的步驟。"; -"In System Settings, do this:" = "在「系統設定」中執行以下步驟:"; -"Privacy & Security → Full Disk Access" = "隱私權與安全性 → 完整磁碟取用權"; -"Find **PureMac** and turn the toggle on" = "找到 **PureMac** 並開啟開關"; -"Authenticate with Touch ID or your password" = "使用觸控 ID 或密碼進行驗證"; -"Reopen Settings" = "重新打開「設定」"; -"PureMac isn't in the list — reveal it" = "PureMac 不在清單中 — 顯示它"; -"Reset permissions and re-prompt" = "重置權限並重新提示"; +"In System Settings, do this:" = "請在「系統設定」中依下列步驟操作:"; +"Privacy & Security → Full Disk Access" = "隱私權與安全性 → 完整磁碟存取權"; +"Find **PureMac** and turn the toggle on" = "找到 **PureMac** 並開啟切換按鈕"; +"Authenticate with Touch ID or your password" = "使用 Touch ID 或密碼驗證身分"; +"Reopen Settings" = "重新開啟「設定」"; +"PureMac isn't in the list — reveal it" = "清單中沒有 PureMac?在 Finder 中顯示"; +"Reset permissions and re-prompt" = "重設權限並重新要求授權"; "Hide diagnostics" = "隱藏診斷"; "Show diagnostics" = "顯示診斷"; -"Trouble?" = "遇到問題?"; +"Trouble?" = "遇到問題?"; "Waiting for permission…" = "等待授權…"; "Permission granted." = "已授予權限。"; "PureMac can now manage protected files." = "PureMac 現在可以管理受保護的檔案。"; -"You're Ready" = "已就緒"; -"%lld/%lld protected locations accessible" = "可存取的受保護位置 %lld/%lld"; -"Some features will be limited without Full Disk Access. You can grant it later in Settings." = "沒有完整磁碟取用權時,部分功能將受到限制。你可以稍後在設定中授予該權限。"; +"You're Ready" = "準備就緒"; +"%lld/%lld protected locations accessible" = "可存取 %lld/%lld 個受保護的位置"; +"Some features will be limited without Full Disk Access. You can grant it later in Settings." = "沒有完整磁碟存取權時,部分功能將受到限制。你可以稍後在設定中授予該權限。"; "Trash" = "垃圾桶"; -"Mail Data" = "Mail 資料"; +"Mail Data" = "郵件資料"; "Safari Data" = "Safari 資料"; "Desktop" = "桌面"; "Documents" = "文件"; "TCC Database" = "TCC 資料庫"; "Blocked" = "已阻擋"; -/* FDA demo system apps */ +/* 權限設定示範中的系統應用程式 */ "Finder" = "Finder"; "Terminal" = "終端機"; -/* Settings */ +/* 設定 */ "General" = "一般"; "Cleaning" = "清理"; "Schedule" = "排程"; @@ -181,9 +181,9 @@ "Strict" = "嚴格"; "Enhanced" = "加強"; "Deep" = "深度"; -"Exact bundle ID and name matches only. Safest option." = "僅精確比對套件 ID 與名稱。最安全選項。"; -"Includes partial name matching and bundle ID components." = "包含部分名稱比對與套件 ID 組件。"; -"Includes company name, entitlements, and team identifier matching." = "包含公司名稱、授權與團隊識別碼的比對。"; +"Exact bundle ID and name matches only. Safest option." = "僅精確比對套件識別碼與名稱,最為安全。"; +"Includes partial name matching and bundle ID components." = "也比對部分名稱與套件識別碼的組成部分。"; +"Includes company name, entitlements, and team identifier matching." = "也比對公司名稱、權限宣告與團隊識別碼。"; "Language" = "語言"; "Restart PureMac to apply the selected language." = "請重新啟動 PureMac 以套用所選語言。"; "Relaunch Now" = "立即重新啟動"; @@ -196,7 +196,7 @@ "Japanese" = "日文"; "Arabic" = "阿拉伯文"; "Polish" = "波蘭文"; -"Portuguese (Brazil)" = "葡萄牙文(巴西)"; +"Portuguese (Brazil)" = "葡萄牙文(巴西)"; "Russian" = "俄文"; "Ukrainian" = "烏克蘭文"; "Chinese (Simplified)" = "簡體中文"; @@ -206,8 +206,8 @@ "File Discovery" = "檔案探索"; "Skip hidden files during scan" = "掃描時略過隱藏檔案"; "Large Files" = "大型檔案"; -"Minimum size: %lld MB" = "最小大小: %lld MB"; -"Files older than: %lld months" = "早於: %lld 個月的檔案"; +"Minimum size: %lld MB" = "最小檔案大小:%lld MB"; +"Files older than: %lld months" = "檔案時間早於:%lld 個月前"; "Automatic Scanning" = "自動掃描"; "Enable scheduled scanning" = "啟用排程掃描"; "Scan interval" = "掃描間隔"; @@ -223,11 +223,11 @@ "Updates" = "更新"; "Check for Updates" = "檢查更新"; -/* Cleaning categories (CleaningCategory.rawValue) */ +/* 清理類別 */ "System Junk" = "系統垃圾"; "User Cache" = "使用者快取"; "AI Apps" = "AI 應用程式"; -"Mail Files" = "Mail 檔案"; +"Mail Files" = "郵件檔案"; "Trash Bins" = "垃圾桶"; "Large & Old Files" = "大型與舊檔案"; "Purgeable Space" = "可清除空間"; @@ -238,41 +238,41 @@ "Universal Binaries" = "通用二進位檔案"; "Language Files" = "語言檔案"; -/* Cleaning category descriptions */ +/* 清理類別說明 */ "Scan everything at once" = "一次掃描所有項目"; "System caches, logs, and temporary files" = "系統快取、紀錄與暫存檔案"; "Application caches and browser data" = "應用程式快取與瀏覽器資料"; -"Local AI app logs, caches, and optional history" = "本地 AI 應用程式的紀錄、快取與選用記錄"; +"Local AI app logs, caches, and optional history" = "本機 AI 應用程式的記錄檔、快取與選用的歷史記錄"; "Downloaded mail attachments" = "已下載的郵件附件"; "Files in your Trash" = "垃圾桶中的檔案"; "Files over 100 MB or older than 1 year" = "超過 100 MB 或一年以上的檔案"; "APFS purgeable disk space" = "APFS 可清除的磁碟空間"; -"Derived data, archives, and simulator runtimes" = "衍生資料、封存與模擬器"; +"Derived data, archives, and simulator runtimes" = "衍生資料、封存檔與模擬器執行環境"; "Homebrew download cache" = "Homebrew 下載快取"; "npm, yarn, and pnpm download caches" = "npm、yarn 與 pnpm 下載快取"; "Docker images, containers, and build cache" = "Docker 映像檔、容器與建置快取"; "Unused CPU architecture slices in app binaries" = "應用程式二進位檔中未使用的 CPU 架構程式碼"; -"Unused app localizations" = "未使用的應用程式本地化檔案"; +"Unused app localizations" = "未使用的應用程式語系檔"; -/* AI Apps scan item names */ -"Ollama Logs" = "Ollama 日誌"; +/* AI 應用程式的掃描項目 */ +"Ollama Logs" = "Ollama 記錄檔"; "Ollama Cache" = "Ollama 快取"; "Ollama Electron Cache" = "Ollama Electron 快取"; "Ollama WebKit Data" = "Ollama WebKit 資料"; "Ollama Saved State" = "Ollama 已儲存狀態"; "Ollama CLI Prompt History (Optional)" = "Ollama CLI 提示詞歷史記錄(選用)"; -"LM Studio Server Logs" = "LM Studio 伺服器日誌"; +"LM Studio Server Logs" = "LM Studio 伺服器記錄檔"; "LM Studio Conversations (Optional)" = "LM Studio 對話(選用)"; -/* Node Cache subcategories */ +/* Node 快取分類 */ "npm cache" = "npm 快取"; -"yarn classic cache" = "yarn 經典快取"; +"yarn classic cache" = "Yarn Classic 快取"; "pnpm content-addressable store" = "pnpm 內容定址儲存庫"; -/* Docker Cache helper */ -"Docker prune (stopped containers, dangling images, build cache)" = "Docker 清理(已停止的容器、懸空映像檔和建置快取)"; +/* Docker 清理說明 */ +"Docker prune (stopped containers, dangling images, build cache)" = "Docker 清理(已停止的容器、未標記的映像檔與建置快取)"; -/* Schedule intervals (ScheduleInterval.rawValue) */ +/* 排程間隔 */ "Every Hour" = "每小時"; "Every 3 Hours" = "每 3 小時"; "Every 6 Hours" = "每 6 小時"; @@ -282,34 +282,34 @@ "Every 2 Weeks" = "每 2 週"; "Monthly" = "每月"; -/* Schedule status */ +/* 排程狀態 */ "Never" = "從未"; "Not scheduled" = "未排程"; -/* Appearance modes (AppearanceMode.label) */ +/* 外觀模式 */ "System" = "系統"; "Light" = "淺色"; "Dark" = "深色"; -/* Notifications */ +/* 通知 */ "Found %@ of junk files." = "找到 %@ 的垃圾檔案。"; -/* Permission Sheet */ -"Grant Full Disk Access" = "授予完整磁碟存取權限"; -"%lld item(s) need Full Disk Access" = "%lld 個項目需要完整磁碟存取權限"; -"Uninstalling %@: %lld file(s) need Full Disk Access" = "解除安裝 %@:%lld 個檔案需要完整磁碟存取權限"; -"%lld item(s) need Full Disk Access to remove. Tap Grant Access to fix in one step." = "%lld 個項目需要完整磁碟存取權限才能移除。輕點「授予存取權限」一步解決。"; +/* 權限設定視窗 */ +"Grant Full Disk Access" = "授予完整磁碟存取權"; +"%lld item(s) need Full Disk Access" = "%lld 個項目需要完整磁碟存取權"; +"Uninstalling %@: %lld file(s) need Full Disk Access" = "解除安裝 %@:%lld 個檔案需要完整磁碟存取權"; +"%lld item(s) need Full Disk Access to remove. Tap Grant Access to fix in one step." = "需要完整磁碟存取權才能移除 %lld 個項目。按一下「授予存取權」即可進行設定。"; "Couldn't remove %@%@. They may be in use or protected by macOS." = "無法移除 %@%@。它們可能正在使用或受 macOS 保護。"; -" and %lld more" = " 還有 %lld 個"; -"Access granted. Retrying…" = "已授予存取權限。正在重試…"; -"1-tap setup. We'll detect the change automatically." = "一鍵設定。我們會自動偵測變更。"; +" and %lld more" = ",以及其他 %lld 個項目"; +"Access granted. Retrying…" = "已授予存取權,正在重試…"; +"1-tap setup. We'll detect the change automatically." = "一鍵設定,系統會自動偵測權限變更。"; "Open Settings & reveal PureMac" = "開啟「系統設定」並顯示 PureMac"; "We'll open both windows side-by-side." = "我們會並排開啟兩個視窗。"; -"Turn on PureMac" = "開啟 PureMac"; -"Toggle the row that appears." = "打開出現的那一列。"; +"Turn on PureMac" = "開啟 PureMac 的權限"; +"Toggle the row that appears." = "開啟清單中 PureMac 旁的切換按鈕。"; "Authenticate" = "驗證身分"; "Touch ID or password." = "Touch ID 或密碼。"; -"We auto-retry — no need to come back." = "我們會自動重試 - 不需返回。"; +"We auto-retry — no need to come back." = "系統會自動重試,不必返回此畫面。"; "Watching for permission change…" = "正在等待權限變更…"; "PureMac not in the list?" = "PureMac 不在清單裡?"; "Hide help" = "隱藏說明"; @@ -317,15 +317,15 @@ "Reveal app" = "顯示 App"; "Drag PureMac.app into the list" = "將 PureMac.app 拖到清單"; "Reset + reprompt" = "重設並重新提示"; -"Clear stale TCC entry" = "清除過時的 TCC 條目"; -"+ %lld more" = "+ 還有 %lld 個"; +"Clear stale TCC entry" = "清除過期的 TCC 記錄"; +"+ %lld more" = "另有 %lld 個"; "%lld blocked path(s)" = "%lld 個被封鎖的路徑"; -"Access granted" = "已授予存取權限"; +"Access granted" = "已授予存取權"; "Retrying the operation now." = "正在重試此操作。"; "Skip for now" = "暫時略過"; -"I granted it — retry" = "我已授予 - 重試"; +"I granted it — retry" = "已授權,重新嘗試"; -/* Dashboard polish */ +/* 儀表板狀態 */ "Low space" = "空間不足"; "CLEANING" = "正在清理"; "Quick Setup" = "快速設定"; @@ -335,69 +335,69 @@ "Fix" = "修正"; "Set up" = "設定"; -/* Onboarding v2 */ -"Reclaim your Mac" = "奪回你的 Mac"; -"Apple sells you small disks. We help you keep them clean." = "蘋果賣給你小硬碟。我們幫你保持整潔。"; +/* 新版初次使用導覽 */ +"Reclaim your Mac" = "釋出 Mac 空間"; +"Apple sells you small disks. We help you keep them clean." = "Mac 的磁碟空間有限,我們幫你妥善整理。"; "Free. Open source. MIT licensed." = "免費。開放原始碼。MIT 授權。"; -"What's inside" = "裡面有什麼"; -"Three things, done well." = "三件事,做到極致。"; -"Find caches, logs, broken installs, and the AI-app history hiding in your library." = "找出快取、日誌、損壞的安裝檔,以及隱藏在資料庫中的 AI App 紀錄。"; -"Drag an app, see every file it dropped, remove all of it. No leftovers." = "拖入一個 App,看到它留下的每個檔案,全部清除。不留殘餘。"; -"Surfaces files that outlived the apps that created them." = "顯示比建立它們的 App 更長壽的檔案。"; +"What's inside" = "主要功能"; +"Three things, done well." = "專注做好三件事。"; +"Find caches, logs, broken installs, and the AI-app history hiding in your library." = "找出資源庫中的快取、記錄檔、不完整的安裝項目,以及 AI 應用程式的歷史記錄。"; +"Drag an app, see every file it dropped, remove all of it. No leftovers." = "拖入應用程式,查看並移除相關檔案,清除殘留資料。"; +"Surfaces files that outlived the apps that created them." = "找出應用程式移除後仍留在磁碟上的檔案。"; "One permission, then we're done" = "一個權限,就夠了"; "Permission granted" = "已授予權限"; "PureMac can now reach the locations macOS protects by default." = "PureMac 現在可以存取 macOS 預設保護的位置。"; -"macOS hides certain folders from every app until you say otherwise. We need them to find caches and uninstall cleanly." = "在你允許之前,macOS 對所有 App 隱藏某些檔案夾。我們需要它們才能找到快取並乾淨地解除安裝。"; -"All set — moving you to the next step." = "一切就緒 - 進入下一步。"; +"macOS hides certain folders from every app until you say otherwise. We need them to find caches and uninstall cleanly." = "授權前,macOS 會限制所有應用程式存取特定資料夾。PureMac 需要這些位置的存取權,才能找出快取並完整解除安裝。"; +"All set — moving you to the next step." = "一切就緒,正在前往下一步。"; "Reveal app again" = "再次顯示 App"; "Reset permissions" = "重設權限"; "You're ready" = "已準備就緒"; -"Ready when you are" = "隨時為你準備好"; -"Hit Start to run your first Smart Scan." = "按開始執行你的第一次智慧掃描。"; +"Ready when you are" = "隨時可以開始"; +"Hit Start to run your first Smart Scan." = "按一下「開始」,執行第一次智慧掃描。"; "Skip" = "略過"; "Start" = "開始"; "Continue" = "繼續"; -/* Drag handle */ +/* 拖曳圖示 */ "Drag to the Settings list" = "拖到設定清單"; -"Drag this icon into the Full Disk Access list in System Settings." = "將此圖示拖入系統設定中的完整磁碟存取清單。"; +"Drag this icon into the Full Disk Access list in System Settings." = "將此圖示拖入「系統設定」的「完整磁碟存取權」清單。"; "Tip: drag the icon on the left straight into the list." = "提示:把左側圖示直接拖入清單。"; "Or drag the icon on the left straight into Settings." = "或者把左側圖示直接拖入設定。"; -/* Dashboard storage composition (v2.7.0) */ +/* 儲存空間組成 */ "Storage composition" = "儲存空間組成"; "total" = "總計"; "Free" = "可用"; -/* UI polish (v2.8.0): leftover groups + sound toggle */ +/* 殘留檔案群組與音效 */ "Caches" = "快取"; "Application Support" = "應用程式支援"; "Preferences" = "偏好設定"; -"Logs" = "日誌"; +"Logs" = "記錄檔"; "Containers" = "容器"; "Launch Agents" = "啟動代理"; "Other Files" = "其他檔案"; "Sound" = "聲音"; "Play sound effects" = "播放音效"; -/* v2.8.1: purgeable honesty */ +/* 由 macOS 管理的可清除空間 */ "Managed by macOS" = "由 macOS 管理"; -"Reserved by macOS - freed automatically when space is needed" = "由 macOS 保留 - 需要空間時自動釋放"; +"Reserved by macOS - freed automatically when space is needed" = "由 macOS 保留,需要空間時會自動釋出"; -/* v2.8.2: large-file folder exclusions (#121) */ +/* 大型檔案掃描的資料夾排除設定 */ "Excluded Folders" = "排除的資料夾"; "Files inside these folders are skipped from the Large & Old Files scan (Downloads, Documents, Desktop)." = "這些資料夾中的檔案會在「大型與舊檔案」掃描(下載、文件、桌面)中被略過。"; "Remove from exclusions" = "從排除項目中移除"; "Add Folder…" = "加入資料夾…"; -/* v2.8.2: orphan ignore list (#114) */ +/* 殘留檔案忽略清單 */ "Always Ignore" = "永遠忽略"; -"Ignore Selected (%lld)" = "忽略所選 (%lld)"; -"Ignored orphans: %lld" = "已忽略的孤立檔案:%lld"; -"Forget Ignored" = "清除已忽略"; -"Ignored files won't appear in future orphan scans." = "已忽略的檔案不會出現在日後的孤立檔案掃描中。"; +"Ignore Selected (%lld)" = "忽略所選項目(%lld)"; +"Ignored orphans: %lld" = "已忽略的殘留檔案:%lld"; +"Forget Ignored" = "重設忽略清單"; +"Ignored files won't appear in future orphan scans." = "已忽略的檔案不會出現在日後的殘留檔案掃描中。"; -/* v2.8.3: menu-bar system monitor */ +/* 選單列系統監視器 */ "System Monitor" = "系統監視器"; "Show system monitor in menu bar" = "在選單列中顯示系統監視器"; "Live CPU, memory, and disk meters in the menu bar. PureMac keeps running in the background while this is on." = "在選單列中即時顯示 CPU、記憶體和磁碟使用情況。開啟時 PureMac 會在背景持續執行。"; @@ -407,523 +407,523 @@ "Open PureMac" = "開啟 PureMac"; "Quit PureMac" = "結束 PureMac"; -/* Finder Service */ +/* Finder 服務 */ "Select an application (.app) to uninstall." = "請選取要解除安裝的應用程式(.app)。"; -/* Smart Care dashboard hero + Care areas — English fallback, pending translation */ -"%@ free" = "%@ free"; -"%lld checks" = "%lld checks"; -"%lld items found" = "%lld items found"; -"%lld selected" = "%lld selected"; -"%lld-POINT LOCAL SCAN" = "%lld-POINT LOCAL SCAN"; -"%lld/%lld checked" = "%lld/%lld checked"; -"ALL CLEAR" = "ALL CLEAR"; -"Advanced Tools" = "Advanced Tools"; -"All clear" = "All clear"; -"App leftovers to inspect" = "App leftovers to inspect"; -"Appearance" = "Appearance"; -"Caches, mail, trash, and large files" = "Caches, mail, trash, and large files"; -"Care areas" = "Care areas"; -"Checks every cleanup category without deleting files" = "Checks every cleanup category without deleting files"; -"Choose what to keep, then clean everything in one controlled pass." = "Choose what to keep, then clean everything in one controlled pass."; -"Cleaning safely…" = "Cleaning safely…"; -"Cleanup complete" = "Cleanup complete"; -"Cleanup complete. Your storage summary is refreshing." = "Cleanup complete. Your storage summary is refreshing."; -"Clear" = "Clear"; -"Complete" = "Complete"; -"Developer" = "Developer"; -"Installed apps" = "Installed apps"; -"LOW SPACE" = "LOW SPACE"; -"Last clean: %@" = "Last clean: %@"; -"Local" = "Local"; -"Make room.\nKeep control." = "Make room.\nKeep control."; -"No cleanup run yet" = "No cleanup run yet"; -"No known leftovers" = "No known leftovers"; -"No removable junk was found in the areas PureMac checked." = "No removable junk was found in the areas PureMac checked."; -"One scan checks every cleanup tool and prepares a plan for your review." = "One scan checks every cleanup tool and prepares a plan for your review."; -"Private" = "Private"; -"PureMac builds a reviewable cleanup plan on your Mac. Nothing is removed until you approve it." = "PureMac builds a reviewable cleanup plan on your Mac. Nothing is removed until you approve it."; -"PureMac is checking your Mac without removing anything." = "PureMac is checking your Mac without removing anything."; -"Ready" = "Ready"; -"Ready for review" = "Ready for review"; -"Ready to reclaim" = "Ready to reclaim"; -"Review" = "Review"; -"Review ready" = "Review ready"; -"Review scan results" = "Review scan results"; -"Review what was found" = "Review what was found"; -"Reviewable" = "Reviewable"; -"SCAN COMPLETE" = "SCAN COMPLETE"; -"Scan My Mac" = "Scan My Mac"; -"Scan first.\nDecide what goes." = "Scan first.\nDecide what goes."; -"Scanning" = "Scanning"; -"Selected items are being removed safely." = "Selected items are being removed safely."; -"Smart Care" = "Smart Care"; -"Twelve-layer storage inspection model" = "Twelve-layer storage inspection model"; -"Xcode and package tools" = "Xcode and package tools"; -"Your Mac is in good shape." = "Your Mac is in good shape."; - -/* Simulator runtimes */ +/* 智慧維護主畫面與維護範圍 */ +"%@ free" = "可用空間 %@"; +"%lld checks" = "%lld 項檢查"; +"%lld items found" = "找到 %lld 個項目"; +"%lld selected" = "已選取 %lld 個項目"; +"%lld-POINT LOCAL SCAN" = "%lld 項本機掃描"; +"%lld/%lld checked" = "已檢查 %lld/%lld 項"; +"ALL CLEAR" = "一切正常"; +"Advanced Tools" = "進階工具"; +"All clear" = "一切正常"; +"App leftovers to inspect" = "待檢查的應用程式殘留檔案"; +"Appearance" = "外觀"; +"Caches, mail, trash, and large files" = "快取、郵件、垃圾桶與大型檔案"; +"Care areas" = "維護範圍"; +"Checks every cleanup category without deleting files" = "檢查所有清理類別,掃描時不會刪除檔案"; +"Choose what to keep, then clean everything in one controlled pass." = "選擇要保留的項目,再一次清理其餘項目。"; +"Cleaning safely…" = "正在安全地清理…"; +"Cleanup complete" = "清理完成"; +"Cleanup complete. Your storage summary is refreshing." = "清理完成,正在更新儲存空間資訊。"; +"Clear" = "清除選取項目"; +"Complete" = "完成"; +"Developer" = "開發工具"; +"Installed apps" = "已安裝的應用程式"; +"LOW SPACE" = "空間不足"; +"Last clean: %@" = "上次清理:%@"; +"Local" = "本機"; +"Make room.\nKeep control." = "釋出空間。\n由你決定。"; +"No cleanup run yet" = "尚未執行清理"; +"No known leftovers" = "未發現殘留檔案"; +"No removable junk was found in the areas PureMac checked." = "PureMac 檢查的範圍內未發現可移除的垃圾檔案。"; +"One scan checks every cleanup tool and prepares a plan for your review." = "一次掃描所有清理類別,整理成清理計畫供你確認。"; +"Private" = "保護隱私"; +"PureMac builds a reviewable cleanup plan on your Mac. Nothing is removed until you approve it." = "PureMac 會在你的 Mac 上建立清理計畫供你確認,取得同意後才會移除項目。"; +"PureMac is checking your Mac without removing anything." = "PureMac 正在檢查你的 Mac,過程中不會移除任何項目。"; +"Ready" = "就緒"; +"Ready for review" = "可供檢視"; +"Ready to reclaim" = "可釋出空間"; +"Review" = "檢視"; +"Review ready" = "可供檢視"; +"Review scan results" = "檢視掃描結果"; +"Review what was found" = "檢視找到的項目"; +"Reviewable" = "可供檢視"; +"SCAN COMPLETE" = "掃描完成"; +"Scan My Mac" = "掃描我的 Mac"; +"Scan first.\nDecide what goes." = "先掃描。\n再決定清理項目。"; +"Scanning" = "掃描中"; +"Selected items are being removed safely." = "正在安全地移除所選項目。"; +"Smart Care" = "智慧維護"; +"Twelve-layer storage inspection model" = "十二層儲存空間檢查機制"; +"Xcode and package tools" = "Xcode 與套件管理工具"; +"Your Mac is in good shape." = "你的 Mac 狀態良好。"; + +/* 模擬器執行環境 */ "Simulator runtime" = "模擬器執行環境"; -/* Current dashboard, tools, and cleanup review — English fallback until translated */ -"\nAnd %lld more." = "\nAnd %lld more."; -"%@ %@ to %@" = "%@ %@ to %@"; -"%@ available" = "%@ available"; -"%@ could not be removed because PureMac does not have Full Disk Access. Grant Full Disk Access in System Settings, then try again." = "%@ could not be removed because PureMac does not have Full Disk Access. Grant Full Disk Access in System Settings, then try again."; -"%@ did not finish within the allowed time." = "%@ did not finish within the allowed time."; -"%@ exited with status %d%@" = "%@ exited with status %d%@"; -"%@ files inspected" = "%@ files inspected"; -"%@ found across %lld categories." = "%@ found across %lld categories."; -"%@ found before the scan stopped. Results may be incomplete." = "%@ found before the scan stopped. Results may be incomplete."; -"%@ of %@" = "%@ of %@"; -"%@ of %@ candidates · %@ verified" = "%@ of %@ candidates · %@ verified"; -"%@ reviewable" = "%@ reviewable"; -"%@ selected. This permanently removes the selected files or runs the listed cleanup actions. It cannot be undone." = "%@ selected. This permanently removes the selected files or runs the listed cleanup actions. It cannot be undone."; -"%@ will move to Trash" = "%@ will move to Trash"; -"%lld analyzed" = "%lld analyzed"; -"%lld apps selected" = "%lld apps selected"; -"%lld areas" = "%lld areas"; -"%lld compared" = "%lld compared"; -"%lld exact copies · %@ each" = "%lld exact copies · %@ each"; -"%@ could not be removed with administrator privileges. The items may have changed or macOS denied access." = "%@ could not be removed with administrator privileges. The items may have changed or macOS denied access."; -"%@ could not be removed. Check that the items still exist and are not in use." = "%@ could not be removed. Check that the items still exist and are not in use."; -"%lld files totaling %@ were moved. Every protected copy remains in place." = "%lld files totaling %@ were moved. Every protected copy remains in place."; -"%lld files totaling %@ will be moved to Trash. The protected copy in every group stays in place." = "%lld files totaling %@ will be moved to Trash. The protected copy in every group stays in place."; -"%lld folders" = "%lld folders"; -/* Additional interface strings. */ -"%lld found" = "%lld found"; -"%lld inaccessible" = "%lld inaccessible"; -"%lld items · %@ found" = "%lld items · %@ found"; -"%lld matched" = "%lld matched"; -"%lld of %lld items shown" = "%lld of %lld items shown"; -"%lld percent" = "%lld percent"; -"%lld photos" = "%lld photos"; -"%lld photos · %@" = "%lld photos · %@"; -"%lld selected items will be permanently deleted. Review the list before continuing." = "%lld selected items will be permanently deleted. Review the list before continuing."; -"%lld selected · %@" = "%lld selected · %@"; -"%lld skipped" = "%lld skipped"; -"%lld unsafe or unavailable items were not scanned" = "%lld unsafe or unavailable items were not scanned"; -"%lld unsafe or unavailable items were skipped." = "%lld unsafe or unavailable items were skipped."; -"%lld updates available" = "%lld updates available"; -"%lld%% visual score" = "%lld%% visual score"; -", and %lld more" = ", and %lld more"; -"1 app selected" = "1 app selected"; -"1 update available" = "1 update available"; -"500 photo limit" = "500 photo limit"; -"A clear view of reclaimable storage and the tools that manage it." = "A clear view of reclaimable storage and the tools that manage it."; -"A selected file is missing or changed: %@" = "A selected file is missing or changed: %@"; -"A selected file no longer matches its kept copy: %@" = "A selected file no longer matches its kept copy: %@"; -"Access denied" = "Access denied"; -"Administrator removal failed: %@" = "Administrator removal failed: %@"; -"Always exclude from cleanup" = "Always exclude from cleanup"; -"Any age" = "Any age"; -"Any size" = "Any size"; -"App Updates" = "App Updates"; -"App and document packages are excluded: %@" = "App and document packages are excluded: %@"; -"App bundle missing" = "App bundle missing"; -"App downloads are checked before opening." = "App downloads are checked before opening."; -"App permissions" = "App permissions"; -"Apple Guide" = "Apple Guide"; -"Apple's built-in malware protection is installed. Update recency is managed by macOS." = "Apple's built-in malware protection is installed. Update recency is managed by macOS."; -"Application Firewall" = "Application Firewall"; -"Apps outside Homebrew" = "Apps outside Homebrew"; -"At login" = "At login"; -"Available" = "Available"; -"Available to review" = "Available to review"; -"Browser controls must be reviewed inside each browser. PureMac does not change cookies, history, site permissions, or extensions." = "Browser controls must be reviewed inside each browser. PureMac does not change cookies, history, site permissions, or extensions."; -"Browser privacy" = "Browser privacy"; -"Building visual signatures" = "Building visual signatures"; -"Camera" = "Camera"; -"Care" = "Care"; -"Changed during scan" = "Changed during scan"; -"Check Again" = "Check Again"; -"Check again" = "Check again"; -"Check built-in safeguards" = "Check built-in safeguards"; -"Check installed apps for new versions" = "Check installed apps for new versions"; -"Check installed cask apps" = "Check installed cask apps"; -"Checked %@. Unknown means the setting could not be confirmed." = "Checked %@. Unknown means the setting could not be confirmed."; -"Checking" = "Checking"; -"Checking Homebrew casks" = "Checking Homebrew casks"; -"Checking asks Homebrew to refresh its package data as needed and contacts Homebrew's configured sources. PureMac only lists cask apps managed by this Homebrew installation." = "Checking asks Homebrew to refresh its package data as needed and contacts Homebrew's configured sources. PureMac only lists cask apps managed by this Homebrew installation."; -"Checking your Mac. Nothing is removed during a scan." = "Checking your Mac. Nothing is removed during a scan."; -"Choose Another Folder" = "Choose Another Folder"; -"Choose Folder" = "Choose Folder"; -"Choose a Folder" = "Choose a Folder"; -"Choose a folder of photos" = "Choose a folder of photos"; -"Choose a folder to check for duplicate files" = "Choose a folder to check for duplicate files"; -"Choose a folder to inspect" = "Choose a folder to inspect"; -"Choose a folder. PureMac compares file sizes first, then verifies matching files byte for byte. Nothing is selected or removed automatically." = "Choose a folder. PureMac compares file sizes first, then verifies matching files byte for byte. Nothing is selected or removed automatically."; -"Choose a photo folder" = "Choose a photo folder"; -"Choose where to look" = "Choose where to look"; -"Chrome privacy guide" = "Chrome privacy guide"; -"Clean selected items" = "Clean selected items"; -"Cleaning selected items" = "Cleaning selected items"; -"Cleanup Exclusions" = "Cleanup Exclusions"; -"Cleanup finished and disk information is refreshing." = "Cleanup finished and disk information is refreshing."; -"Cleanup plan" = "Cleanup plan"; -"Clear Selection" = "Clear Selection"; -"Clear filters" = "Clear filters"; -"Clear search" = "Clear search"; -"Clear selection" = "Clear selection"; -"Cloud-only file" = "Cloud-only file"; -"Collapse duplicate group" = "Collapse duplicate group"; -"Compare visually similar photos" = "Compare visually similar photos"; -"Conditional keep alive" = "Conditional keep alive"; -"Copy path" = "Copy path"; -"Could not inspect %@" = "Could not inspect %@"; -"Could not list Time Machine snapshots" = "Could not list Time Machine snapshots"; -"Could not read" = "Could not read"; -"Could not read %@" = "Could not read %@"; -"Couldn't check for updates" = "Couldn't check for updates"; -"Current scan path" = "Current scan path"; -"Delete" = "Delete"; -"Delete Snapshot" = "Delete Snapshot"; -"Delete local snapshot?" = "Delete local snapshot?"; -"Deselect visible" = "Deselect visible"; -"Developer Cleanup" = "Developer Cleanup"; -"Disabled" = "Disabled"; -"Downloaded apps are not being assessed by Gatekeeper." = "Downloaded apps are not being assessed by Gatekeeper."; -"Drag to tilt" = "Drag to tilt"; -"Duplicate Finder" = "Duplicate Finder"; -"Duplicate groups" = "Duplicate groups"; -"Every %lld seconds" = "Every %lld seconds"; -"Every eligible file was checked." = "Every eligible file was checked."; -"Exact-match cleanup with a protected copy in every group" = "Exact-match cleanup with a protected copy in every group"; -"Excluded paths and folders containing them stay out of manual and scheduled cleanup. Right-click a cleanup result to exclude it." = "Excluded paths and folders containing them stay out of manual and scheduled cleanup. Right-click a cleanup result to exclude it."; -"Expand duplicate group" = "Expand duplicate group"; -"File" = "File"; +/* 主畫面、工具與清理確認 */ +"\nAnd %lld more." = "\n以及其他 %lld 個項目。"; +"%@ %@ to %@" = "%@:%@ → %@"; +"%@ available" = "可用空間 %@"; +"%@ could not be removed because PureMac does not have Full Disk Access. Grant Full Disk Access in System Settings, then try again." = "PureMac 沒有完整磁碟存取權,無法移除 %@。請在「系統設定」中授予完整磁碟存取權後再試一次。"; +"%@ did not finish within the allowed time." = "%@ 未在指定時間內完成。"; +"%@ exited with status %d%@" = "%@ 已結束,狀態碼為 %d%@"; +"%@ files inspected" = "已檢查 %@ 個檔案"; +"%@ found across %lld categories." = "在 %2$lld 個類別中找到 %1$@。"; +"%@ found before the scan stopped. Results may be incomplete." = "掃描停止前找到 %@,結果可能不完整。"; +"%@ of %@" = "%@/%@"; +"%@ of %@ candidates · %@ verified" = "已檢查 %@/%@ 個候選項目・已驗證 %@ 個"; +"%@ reviewable" = "可檢視 %@"; +"%@ selected. This permanently removes the selected files or runs the listed cleanup actions. It cannot be undone." = "已選取 %@。這會永久移除所選檔案,或執行列出的清理動作,且無法復原。"; +"%@ will move to Trash" = "%@ 將移至垃圾桶"; +"%lld analyzed" = "已分析 %lld 個"; +"%lld apps selected" = "已選取 %lld 個應用程式"; +"%lld areas" = "%lld 個範圍"; +"%lld compared" = "已比對 %lld 個"; +"%lld exact copies · %@ each" = "%lld 份完全相同的副本・每份 %@"; +"%@ could not be removed with administrator privileges. The items may have changed or macOS denied access." = "即使使用管理者權限,仍無法移除 %@。項目可能已變更,或 macOS 拒絕存取。"; +"%@ could not be removed. Check that the items still exist and are not in use." = "無法移除 %@。請確認項目仍然存在,且未在使用中。"; +"%lld files totaling %@ were moved. Every protected copy remains in place." = "已移動 %lld 個檔案,共 %@。各組受保護的副本皆保留在原處。"; +"%lld files totaling %@ will be moved to Trash. The protected copy in every group stays in place." = "將有 %lld 個檔案移至垃圾桶,共 %@。各組受保護的副本會保留在原處。"; +"%lld folders" = "%lld 個資料夾"; +/* 其他介面文字 */ +"%lld found" = "找到 %lld 個"; +"%lld inaccessible" = "%lld 個無法存取"; +"%lld items · %@ found" = "%lld 個項目・共找到 %@"; +"%lld matched" = "%lld 個符合條件"; +"%lld of %lld items shown" = "顯示 %lld/%lld 個項目"; +"%lld percent" = "百分之 %lld"; +"%lld photos" = "%lld 張照片"; +"%lld photos · %@" = "%lld 張照片・%@"; +"%lld selected items will be permanently deleted. Review the list before continuing." = "將永久刪除所選的 %lld 個項目。請先確認清單再繼續。"; +"%lld selected · %@" = "已選取 %lld 個・%@"; +"%lld skipped" = "已略過 %lld 個"; +"%lld unsafe or unavailable items were not scanned" = "有 %lld 個不安全或無法存取的項目未掃描"; +"%lld unsafe or unavailable items were skipped." = "已略過 %lld 個不安全或無法存取的項目。"; +"%lld updates available" = "有 %lld 個可用更新"; +"%lld%% visual score" = "視覺相似度 %lld%%"; +", and %lld more" = ",以及其他 %lld 個項目"; +"1 app selected" = "已選取 1 個應用程式"; +"1 update available" = "有 1 個可用更新"; +"500 photo limit" = "上限為 500 張照片"; +"A clear view of reclaimable storage and the tools that manage it." = "掌握可釋出的儲存空間,並使用工具進行管理。"; +"A selected file is missing or changed: %@" = "所選檔案已遺失或變更:%@"; +"A selected file no longer matches its kept copy: %@" = "所選檔案已與保留的副本不同:%@"; +"Access denied" = "存取遭拒"; +"Administrator removal failed: %@" = "使用管理者權限移除失敗:%@"; +"Always exclude from cleanup" = "一律排除,不進行清理"; +"Any age" = "不限時間"; +"Any size" = "不限大小"; +"App Updates" = "應用程式更新"; +"App and document packages are excluded: %@" = "已排除應用程式與文件套件:%@"; +"App bundle missing" = "找不到應用程式套件"; +"App downloads are checked before opening." = "開啟下載的應用程式前會先進行檢查。"; +"App permissions" = "應用程式權限"; +"Apple Guide" = "Apple 使用指南"; +"Apple's built-in malware protection is installed. Update recency is managed by macOS." = "已安裝 Apple 內建的惡意軟體防護功能,更新時程由 macOS 管理。"; +"Application Firewall" = "應用程式防火牆"; +"Apps outside Homebrew" = "非由 Homebrew 管理的應用程式"; +"At login" = "登入時"; +"Available" = "可用"; +"Available to review" = "可供檢視"; +"Browser controls must be reviewed inside each browser. PureMac does not change cookies, history, site permissions, or extensions." = "請在各瀏覽器內檢視相關設定。PureMac 不會變更 Cookie、瀏覽記錄、網站權限或擴充功能。"; +"Browser privacy" = "瀏覽器隱私權"; +"Building visual signatures" = "正在建立影像特徵"; +"Camera" = "相機"; +"Care" = "維護"; +"Changed during scan" = "掃描期間已變更"; +"Check Again" = "重新檢查"; +"Check again" = "重新檢查"; +"Check built-in safeguards" = "檢查內建防護功能"; +"Check installed apps for new versions" = "檢查已安裝應用程式的新版本"; +"Check installed cask apps" = "檢查已安裝的 cask 應用程式"; +"Checked %@. Unknown means the setting could not be confirmed." = "已於 %@ 檢查。「未知」表示無法確認該設定。"; +"Checking" = "檢查中"; +"Checking Homebrew casks" = "正在檢查 Homebrew cask 應用程式"; +"Checking asks Homebrew to refresh its package data as needed and contacts Homebrew's configured sources. PureMac only lists cask apps managed by this Homebrew installation." = "檢查時會請 Homebrew 視需要更新套件資訊,並連線至 Homebrew 設定的來源。PureMac 僅列出由此 Homebrew 安裝環境管理的 cask 應用程式。"; +"Checking your Mac. Nothing is removed during a scan." = "正在檢查你的 Mac。掃描過程不會移除任何項目。"; +"Choose Another Folder" = "選擇其他資料夾"; +"Choose Folder" = "選擇資料夾"; +"Choose a Folder" = "選擇資料夾"; +"Choose a folder of photos" = "選擇照片資料夾"; +"Choose a folder to check for duplicate files" = "選擇要檢查重複檔案的資料夾"; +"Choose a folder to inspect" = "選擇要檢查的資料夾"; +"Choose a folder. PureMac compares file sizes first, then verifies matching files byte for byte. Nothing is selected or removed automatically." = "選擇資料夾。PureMac 會先比對檔案大小,再逐位元組驗證符合條件的檔案,不會自動選取或移除任何項目。"; +"Choose a photo folder" = "選擇照片資料夾"; +"Choose where to look" = "選擇搜尋位置"; +"Chrome privacy guide" = "Chrome 隱私權指南"; +"Clean selected items" = "清理所選項目"; +"Cleaning selected items" = "正在清理所選項目"; +"Cleanup Exclusions" = "清理排除項目"; +"Cleanup finished and disk information is refreshing." = "清理已完成,正在更新磁碟資訊。"; +"Cleanup plan" = "清理計畫"; +"Clear Selection" = "清除選取項目"; +"Clear filters" = "清除篩選條件"; +"Clear search" = "清除搜尋內容"; +"Clear selection" = "清除選取項目"; +"Cloud-only file" = "僅存於雲端的檔案"; +"Collapse duplicate group" = "收合重複檔案群組"; +"Compare visually similar photos" = "比對外觀相似的照片"; +"Conditional keep alive" = "符合條件時保持執行"; +"Copy path" = "複製路徑"; +"Could not inspect %@" = "無法檢查 %@"; +"Could not list Time Machine snapshots" = "無法列出 Time Machine 快照"; +"Could not read" = "無法讀取"; +"Could not read %@" = "無法讀取 %@"; +"Couldn't check for updates" = "無法檢查更新"; +"Current scan path" = "目前掃描路徑"; +"Delete" = "刪除"; +"Delete Snapshot" = "刪除快照"; +"Delete local snapshot?" = "要刪除本機快照嗎?"; +"Deselect visible" = "取消選取目前顯示的項目"; +"Developer Cleanup" = "開發工具清理"; +"Disabled" = "已停用"; +"Downloaded apps are not being assessed by Gatekeeper." = "Gatekeeper 未檢查下載的應用程式。"; +"Drag to tilt" = "拖曳以傾斜"; +"Duplicate Finder" = "重複檔案搜尋"; +"Duplicate groups" = "重複檔案群組"; +"Every %lld seconds" = "每 %lld 秒"; +"Every eligible file was checked." = "已檢查所有符合條件的檔案。"; +"Exact-match cleanup with a protected copy in every group" = "清理完全相同的副本,每組保留一份受保護的副本"; +"Excluded paths and folders containing them stay out of manual and scheduled cleanup. Right-click a cleanup result to exclude it." = "排除的路徑及包含這些路徑的資料夾,都不會納入手動或排程清理。以滑鼠右鍵按一下清理結果,即可將其排除。"; +"Expand duplicate group" = "展開重複檔案群組"; +"File" = "檔案"; "FileVault" = "FileVault"; -"FileVault Settings" = "FileVault Settings"; -"Files will be moved to the Trash. Items requiring administrator authorization may be permanently deleted. App matching is a best-effort estimate; review files you recognize before removing them." = "Files will be moved to the Trash. Items requiring administrator authorization may be permanently deleted. App matching is a best-effort estimate; review files you recognize before removing them."; -"Filter cleanup files" = "Filter cleanup files"; -"Find a file or path" = "Find a file or path"; -"Find copies that are exactly the same" = "Find copies that are exactly the same"; -"Find space to reclaim." = "Find space to reclaim."; -"Find visually related shots in a folder and review them side by side." = "Find visually related shots in a folder and review them side by side."; -"Find what uses the most disk space" = "Find what uses the most disk space"; -"Finding local photos" = "Finding local photos"; -"Firewall Settings" = "Firewall Settings"; -"Focused utilities for storage, apps, and system maintenance" = "Focused utilities for storage, apps, and system maintenance"; -"Folder could not be inspected" = "Folder could not be inspected"; -"Full Disk Access is off" = "Full Disk Access is off"; -"Full access" = "Full access"; +"FileVault Settings" = "FileVault 設定"; +"Files will be moved to the Trash. Items requiring administrator authorization may be permanently deleted. App matching is a best-effort estimate; review files you recognize before removing them." = "檔案將移至垃圾桶。需要管理者授權的項目可能會永久刪除。應用程式關聯比對屬於推測結果,移除前請逐一確認檔案。"; +"Filter cleanup files" = "篩選清理檔案"; +"Find a file or path" = "搜尋檔案或路徑"; +"Find copies that are exactly the same" = "找出完全相同的副本"; +"Find space to reclaim." = "找出可釋出的空間。"; +"Find visually related shots in a folder and review them side by side." = "找出資料夾中外觀相似的照片,並排檢視。"; +"Find what uses the most disk space" = "找出最占磁碟空間的項目"; +"Finding local photos" = "正在搜尋本機照片"; +"Firewall Settings" = "防火牆設定"; +"Focused utilities for storage, apps, and system maintenance" = "管理儲存空間、應用程式與系統維護的實用工具"; +"Folder could not be inspected" = "無法檢查資料夾"; +"Full Disk Access is off" = "完整磁碟存取權已關閉"; +"Full access" = "完整存取權"; "Gatekeeper" = "Gatekeeper"; -"Group %lld" = "Group %lld"; -"Grouping similar shots" = "Grouping similar shots"; -"Hard-linked copy" = "Hard-linked copy"; -"Homebrew apps are up to date" = "Homebrew apps are up to date"; -"Homebrew did not finish before the operation timed out." = "Homebrew did not finish before the operation timed out."; -"Homebrew finished, but %lld selected apps still report updates." = "Homebrew finished, but %lld selected apps still report updates."; -"Homebrew finished, but 1 selected app still reports an update." = "Homebrew finished, but 1 selected app still reports an update."; -"Homebrew finished. Check again to verify installed versions." = "Homebrew finished. Check again to verify installed versions."; -"Homebrew not found" = "Homebrew not found"; -"Homebrew produced more output than PureMac could safely retain." = "Homebrew produced more output than PureMac could safely retain."; -"Homebrew returned an invalid cask identifier: %@" = "Homebrew returned an invalid cask identifier: %@"; -"Homebrew returned update information PureMac could not read." = "Homebrew returned update information PureMac could not read."; -"Homebrew updated the %lld selected apps." = "Homebrew updated the %lld selected apps."; -"Homebrew updated the selected app." = "Homebrew updated the selected app."; -"Homebrew was not found in a standard installation location." = "Homebrew was not found in a standard installation location."; -"Homebrew will upgrade %@. It may quit running apps and remove superseded cask versions as part of its normal upgrade process." = "Homebrew will upgrade %@. It may quit running apps and remove superseded cask versions as part of its normal upgrade process."; -"Includes %lld selected items hidden by filters." = "Includes %lld selected items hidden by filters."; -"Incoming network connections are filtered." = "Incoming network connections are filtered."; -"Inspect" = "Inspect"; -"Inspect a folder by allocated disk space. Your files are never changed." = "Inspect a folder by allocated disk space. Your files are never changed."; -"Inspect memory and background activity" = "Inspect memory and background activity"; -"Inspect startup items and local snapshots again" = "Inspect startup items and local snapshots again"; -"Inspected %@ files in %@. %@" = "Inspected %@ files in %@. %@"; -"Inspecting startup items and local snapshots…" = "Inspecting startup items and local snapshots…"; -"Inspection stopped" = "Inspection stopped"; -"Install Homebrew to check cask apps here. Apps from the App Store and direct downloads use their own update channels." = "Install Homebrew to check cask apps here. Apps from the App Store and direct downloads use their own update channels."; -"Installed" = "Installed"; -"Installed %@" = "Installed %@"; -"Keep" = "Keep"; -"Keep PureMac open until this pass finishes." = "Keep PureMac open until this pass finishes."; -"Keep alive" = "Keep alive"; -"Largest first" = "Largest first"; -"Largest items" = "Largest items"; -"Last activity: %@" = "Last activity: %@"; -"Last checked" = "Last checked"; -"Launch agents and daemons installed outside macOS system folders" = "Launch agents and daemons installed outside macOS system folders"; -"Leftovers" = "Leftovers"; -"Live" = "Live"; -"Live resources" = "Live resources"; -"Local and private" = "Local and private"; -"Local files" = "Local files"; -"Local snapshot" = "Local snapshot"; -"Local snapshots" = "Local snapshots"; -"Location" = "Location"; -"Login Items Settings" = "Login Items Settings"; -"Looking through files" = "Looking through files"; -"Mac storage" = "Mac storage"; -"Managed cleanup action" = "Managed cleanup action"; -"Matching files" = "Matching files"; -"Measuring allocated space" = "Measuring allocated space"; -"Memory pressure use" = "Memory pressure use"; -"Microphone" = "Microphone"; -"Modified" = "Modified"; -"Move selected duplicates to Trash?" = "Move selected duplicates to Trash?"; -"Moved to Trash" = "Moved to Trash"; -"Name" = "Name"; -"Needs attention" = "Needs attention"; -"Network state" = "Network state"; -"No exact duplicates found" = "No exact duplicates found"; -"No excluded paths" = "No excluded paths"; -"No files found" = "No files found"; -"No files were changed. Rescan this folder when you are ready." = "No files were changed. Rescan this folder when you are ready."; -"No launchd items found" = "No launchd items found"; -"No local snapshots reported" = "No local snapshots reported"; -"No matching files" = "No matching files"; -"No measurable items" = "No measurable items"; -"No photos were changed. You can scan the folder again at any time." = "No photos were changed. You can scan the folder again at any time."; -"No reclaimable items were found before the scan stopped." = "No reclaimable items were found before the scan stopped."; -"No reclaimable items were found in the areas checked." = "No reclaimable items were found in the areas checked."; -"No results yet" = "No results yet"; -"No scan run yet" = "No scan run yet"; -"No similar groups found" = "No similar groups found"; -"No updates are currently available for the cask apps Homebrew manages." = "No updates are currently available for the cask apps Homebrew manages."; -"Nothing selected" = "Nothing selected"; -"Nothing to clean" = "Nothing to clean"; -"Nothing was moved" = "Nothing was moved"; -"Off" = "Off"; -"Older than 30 days" = "Older than 30 days"; -"Older than 6 months" = "Older than 6 months"; -"Older than a year" = "Older than a year"; -"Oldest first" = "Oldest first"; -"On" = "On"; -"Open Activity Monitor" = "Open Activity Monitor"; -"Open App Store Updates" = "Open App Store Updates"; -"Open Folder" = "Open Folder"; -"Open a category to review individual items" = "Open a category to review individual items"; -"Open folder" = "Open folder"; -"Open the App Store updates page. Direct-download apps may provide their own updater." = "Open the App Store updates page. Direct-download apps may provide their own updater."; -"Opens a folder picker" = "Opens a folder picker"; -"Over 1 GB" = "Over 1 GB"; -"Over 10 GB" = "Over 10 GB"; -"Over 100 MB" = "Over 100 MB"; -"Package" = "Package"; -"Package contents" = "Package contents"; -"Package · %@" = "Package · %@"; -"Partial result" = "Partial result"; -"Partial results" = "Partial results"; -"Performance" = "Performance"; -"Permanently delete %@?" = "Permanently delete %@?"; -"Permanently remove %lld items" = "Permanently remove %lld items"; -"Personal data or an optional cleanup action. Left unselected by default." = "Personal data or an optional cleanup action. Left unselected by default."; -"Photos could not be compared" = "Photos could not be compared"; -"Pinned" = "Pinned"; -"Preparing scan" = "Preparing scan"; -"Preparing the next area…" = "Preparing the next area…"; -"Preparing visual comparison" = "Preparing visual comparison"; -"Program not declared in this plist" = "Program not declared in this plist"; -"Protected caches and app containers will be skipped." = "Protected caches and app containers will be skipped."; -"Protected copy" = "Protected copy"; -"Protected system locations and processes are restricted." = "Protected system locations and processes are restricted."; -"Protection" = "Protection"; -"PureMac builds small local thumbnails, compares their visual structure and color, then groups likely matches for review." = "PureMac builds small local thumbnails, compares their visual structure and color, then groups likely matches for review."; -"PureMac checks caches, logs, developer data, downloads, and Trash. You review the result before anything is removed." = "PureMac checks caches, logs, developer data, downloads, and Trash. You review the result before anything is removed."; -"PureMac compares local image thumbnails without changing your photos." = "PureMac compares local image thumbnails without changing your photos."; -"PureMac could not confirm the local XProtect installation." = "PureMac could not confirm the local XProtect installation."; -"PureMac could not read this setting." = "PureMac could not read this setting."; -"PureMac did not find removable items in the selected scan areas." = "PureMac did not find removable items in the selected scan areas."; -"PureMac measures allocated disk space without changing files." = "PureMac measures allocated disk space without changing files."; -"PureMac reads the selected folder and does not change anything during a scan." = "PureMac reads the selected folder and does not change anything during a scan."; -"PureMac will ask Homebrew for available versions when you start the check." = "PureMac will ask Homebrew for available versions when you start the check."; -"PureMac will move the selected app and related files to the Trash. Items requiring administrator authorization may be permanently deleted. Review the selection before continuing." = "PureMac will move the selected app and related files to the Trash. Items requiring administrator authorization may be permanently deleted. Review the selection before continuing."; +"Group %lld" = "第 %lld 組"; +"Grouping similar shots" = "正在將相似照片分組"; +"Hard-linked copy" = "硬連結副本"; +"Homebrew apps are up to date" = "Homebrew 應用程式皆為最新版本"; +"Homebrew did not finish before the operation timed out." = "操作逾時,Homebrew 未能完成。"; +"Homebrew finished, but %lld selected apps still report updates." = "Homebrew 已執行完畢,但所選項目中仍有 %lld 個應用程式顯示可更新。"; +"Homebrew finished, but 1 selected app still reports an update." = "Homebrew 已執行完畢,但所選項目中仍有 1 個應用程式顯示可更新。"; +"Homebrew finished. Check again to verify installed versions." = "Homebrew 已執行完畢,請重新檢查以確認已安裝的版本。"; +"Homebrew not found" = "找不到 Homebrew"; +"Homebrew produced more output than PureMac could safely retain." = "Homebrew 的輸出內容超出 PureMac 可安全保留的範圍。"; +"Homebrew returned an invalid cask identifier: %@" = "Homebrew 傳回無效的 cask 識別碼:%@"; +"Homebrew returned update information PureMac could not read." = "PureMac 無法讀取 Homebrew 傳回的更新資訊。"; +"Homebrew updated the %lld selected apps." = "Homebrew 已更新所選的 %lld 個應用程式。"; +"Homebrew updated the selected app." = "Homebrew 已更新所選的應用程式。"; +"Homebrew was not found in a standard installation location." = "在標準安裝位置找不到 Homebrew。"; +"Homebrew will upgrade %@. It may quit running apps and remove superseded cask versions as part of its normal upgrade process." = "Homebrew 將升級 %@。正常升級過程可能會結束執行中的應用程式,並移除已被取代的舊版 cask。"; +"Includes %lld selected items hidden by filters." = "包含因篩選條件而隱藏的 %lld 個已選取項目。"; +"Incoming network connections are filtered." = "已篩選傳入的網路連線。"; +"Inspect" = "檢查"; +"Inspect a folder by allocated disk space. Your files are never changed." = "依實際占用的磁碟空間檢查資料夾,不會變更檔案。"; +"Inspect memory and background activity" = "查看記憶體與背景活動"; +"Inspect startup items and local snapshots again" = "重新檢查啟動項目與本機快照"; +"Inspected %@ files in %@. %@" = "已檢查 %2$@ 中的 %1$@ 個檔案。%3$@"; +"Inspecting startup items and local snapshots…" = "正在檢查啟動項目與本機快照…"; +"Inspection stopped" = "檢查已停止"; +"Install Homebrew to check cask apps here. Apps from the App Store and direct downloads use their own update channels." = "安裝 Homebrew 後,即可在此檢查 cask 應用程式。來自 App Store 或自行下載的應用程式,請使用各自的更新方式。"; +"Installed" = "已安裝"; +"Installed %@" = "已安裝 %@"; +"Keep" = "保留"; +"Keep PureMac open until this pass finishes." = "請保持 PureMac 開啟,直到本次作業完成。"; +"Keep alive" = "保持執行"; +"Largest first" = "由大到小"; +"Largest items" = "最大的項目"; +"Last activity: %@" = "上次活動:%@"; +"Last checked" = "上次檢查"; +"Launch agents and daemons installed outside macOS system folders" = "安裝於 macOS 系統資料夾以外的啟動代理與背景服務"; +"Leftovers" = "殘留檔案"; +"Live" = "即時"; +"Live resources" = "即時資源用量"; +"Local and private" = "在本機處理,保護隱私"; +"Local files" = "本機檔案"; +"Local snapshot" = "本機快照"; +"Local snapshots" = "本機快照"; +"Location" = "位置"; +"Login Items Settings" = "登入項目設定"; +"Looking through files" = "正在檢查檔案"; +"Mac storage" = "Mac 儲存空間"; +"Managed cleanup action" = "專用工具清理動作"; +"Matching files" = "符合條件的檔案"; +"Measuring allocated space" = "正在計算實際占用空間"; +"Memory pressure use" = "記憶體使用率"; +"Microphone" = "麥克風"; +"Modified" = "修改時間"; +"Move selected duplicates to Trash?" = "要將所選的重複檔案移至垃圾桶嗎?"; +"Moved to Trash" = "已移至垃圾桶"; +"Name" = "名稱"; +"Needs attention" = "需要留意"; +"Network state" = "網路狀態"; +"No exact duplicates found" = "未找到完全相同的檔案"; +"No excluded paths" = "沒有排除的路徑"; +"No files found" = "找不到檔案"; +"No files were changed. Rescan this folder when you are ready." = "未變更任何檔案。準備好後,可以重新掃描此資料夾。"; +"No launchd items found" = "找不到 launchd 項目"; +"No local snapshots reported" = "未取得本機快照"; +"No matching files" = "沒有符合條件的檔案"; +"No measurable items" = "沒有可計算大小的項目"; +"No photos were changed. You can scan the folder again at any time." = "未變更任何照片,你可以隨時重新掃描資料夾。"; +"No reclaimable items were found before the scan stopped." = "掃描停止前未找到可釋出空間的項目。"; +"No reclaimable items were found in the areas checked." = "檢查範圍內未找到可釋出空間的項目。"; +"No results yet" = "尚無結果"; +"No scan run yet" = "尚未執行掃描"; +"No similar groups found" = "未找到相似照片群組"; +"No updates are currently available for the cask apps Homebrew manages." = "目前由 Homebrew 管理的 cask 應用程式皆無可用更新。"; +"Nothing selected" = "尚未選取項目"; +"Nothing to clean" = "沒有可清理的項目"; +"Nothing was moved" = "未移動任何項目"; +"Off" = "關閉"; +"Older than 30 days" = "超過 30 天"; +"Older than 6 months" = "超過 6 個月"; +"Older than a year" = "超過 1 年"; +"Oldest first" = "由舊到新"; +"On" = "開啟"; +"Open Activity Monitor" = "開啟「活動監視器」"; +"Open App Store Updates" = "開啟 App Store 更新"; +"Open Folder" = "開啟資料夾"; +"Open a category to review individual items" = "開啟類別以檢視個別項目"; +"Open folder" = "開啟資料夾"; +"Open the App Store updates page. Direct-download apps may provide their own updater." = "開啟 App Store 的更新頁面。自行下載的應用程式可能提供各自的更新工具。"; +"Opens a folder picker" = "開啟資料夾選擇視窗"; +"Over 1 GB" = "超過 1 GB"; +"Over 10 GB" = "超過 10 GB"; +"Over 100 MB" = "超過 100 MB"; +"Package" = "套件"; +"Package contents" = "套件內容"; +"Package · %@" = "套件・%@"; +"Partial result" = "部分結果"; +"Partial results" = "部分結果"; +"Performance" = "效能"; +"Permanently delete %@?" = "要永久刪除 %@ 嗎?"; +"Permanently remove %lld items" = "永久移除 %lld 個項目"; +"Personal data or an optional cleanup action. Left unselected by default." = "個人資料或選用的清理動作,預設不勾選。"; +"Photos could not be compared" = "無法比對照片"; +"Pinned" = "已固定"; +"Preparing scan" = "正在準備掃描"; +"Preparing the next area…" = "正在準備下一個掃描範圍…"; +"Preparing visual comparison" = "正在準備影像比對"; +"Program not declared in this plist" = "此 plist 未指定要執行的程式"; +"Protected caches and app containers will be skipped." = "將略過受保護的快取與應用程式容器。"; +"Protected copy" = "受保護的副本"; +"Protected system locations and processes are restricted." = "受保護的系統位置與程序有存取限制。"; +"Protection" = "安全防護"; +"PureMac builds small local thumbnails, compares their visual structure and color, then groups likely matches for review." = "PureMac 會在本機建立小型縮圖,比對影像結構與色彩,再將可能相似的照片分組供你檢視。"; +"PureMac checks caches, logs, developer data, downloads, and Trash. You review the result before anything is removed." = "PureMac 會檢查快取、記錄檔、開發工具資料、下載項目與垃圾桶。移除任何項目前,會先讓你確認結果。"; +"PureMac compares local image thumbnails without changing your photos." = "PureMac 會比對本機影像縮圖,不會變更照片。"; +"PureMac could not confirm the local XProtect installation." = "PureMac 無法確認本機 XProtect 的安裝狀態。"; +"PureMac could not read this setting." = "PureMac 無法讀取此設定。"; +"PureMac did not find removable items in the selected scan areas." = "PureMac 在所選的掃描範圍內未找到可移除的項目。"; +"PureMac measures allocated disk space without changing files." = "PureMac 會計算實際占用的磁碟空間,不會變更檔案。"; +"PureMac reads the selected folder and does not change anything during a scan." = "PureMac 會讀取所選資料夾,掃描過程不會變更任何項目。"; +"PureMac will ask Homebrew for available versions when you start the check." = "開始檢查時,PureMac 會向 Homebrew 查詢可用版本。"; +"PureMac will move the selected app and related files to the Trash. Items requiring administrator authorization may be permanently deleted. Review the selection before continuing." = "PureMac 將把所選的應用程式與相關檔案移至垃圾桶。需要管理者授權的項目可能會永久刪除。請先確認所選項目再繼續。"; "PureMac.app" = "PureMac.app"; -"Ready for protected locations" = "Ready for protected locations"; -"Refresh disk information" = "Refresh disk information"; -"Refreshing package data and comparing installed versions." = "Refreshing package data and comparing installed versions."; -"Refused to delete %lld protected item(s) (home credential directory or similar)." = "Refused to delete %lld protected item(s) (home credential directory or similar)."; -"Remove %lld files" = "Remove %lld files"; -"Remove %lld items" = "Remove %lld items"; -"Remove apps and their related files" = "Remove apps and their related files"; -"Remove selected app files?" = "Remove selected app files?"; -"Remove selected files?" = "Remove selected files?"; -"Remove selected leftovers?" = "Remove selected leftovers?"; -"Removing the items you selected." = "Removing the items you selected."; -"Reveal %@ in Finder" = "Reveal %@ in Finder"; -"Reveal plist in Finder" = "Reveal plist in Finder"; -"Reveal skipped item in Finder" = "Reveal skipped item in Finder"; -"Review and update apps installed as Homebrew casks." = "Review and update apps installed as Homebrew casks."; -"Review built-in privacy and safety checks" = "Review built-in privacy and safety checks"; -"Review matching files side by side" = "Review matching files side by side"; -"Review only" = "Review only"; -"Review removal" = "Review removal"; -"Review the groups before acting" = "Review the groups before acting"; -"Review the macOS safeguards that protect apps, disks, network access, and system files." = "Review the macOS safeguards that protect apps, disks, network access, and system files."; -"Review the results and choose exactly what to remove." = "Review the results and choose exactly what to remove."; -"Review which apps can access private data and hardware." = "Review which apps can access private data and hardware."; -"Run audit" = "Run audit"; -"Run the scan again when you are ready to check every area." = "Run the scan again when you are ready to check every area."; -"Safari privacy guide" = "Safari privacy guide"; -"Safari: Settings > Privacy" = "Safari: Settings > Privacy"; -"Sample limit reached" = "Sample limit reached"; -"Scan Another Folder" = "Scan Another Folder"; -"Scan Folder" = "Scan Folder"; -"Scan Photos" = "Scan Photos"; -"Scan again" = "Scan again"; -"Scan complete" = "Scan complete"; -"Scan could not finish" = "Scan could not finish"; -"Scan first, then review the exact files before removing anything." = "Scan first, then review the exact files before removing anything."; -"Scan stopped" = "Scan stopped"; -"Scan this Mac" = "Scan this Mac"; -"Scan this category" = "Scan this category"; -"Scanning %@…" = "Scanning %@…"; -"Scheduled" = "Scheduled"; -"Security Settings" = "Security Settings"; -"See current resource use and review what starts in the background." = "See current resource use and review what starts in the background."; -"See what is taking up space" = "See what is taking up space"; -"Select %@" = "Select %@"; -"Select a tool from the sidebar." = "Select a tool from the sidebar."; -"Select any folder to see which files and subfolders occupy the most disk space." = "Select any folder to see which files and subfolders occupy the most disk space."; -"Select apps to update" = "Select apps to update"; -"Select at least one app to update." = "Select at least one app to update."; -"Select copies" = "Select copies"; -"Select the apps Homebrew should upgrade." = "Select the apps Homebrew should upgrade."; -"Select the extra copies you want to review" = "Select the extra copies you want to review"; -"Select visible" = "Select visible"; -"Selected" = "Selected"; -"Selected cleanup items are permanently removed." = "Selected cleanup items are permanently removed."; -"Share of scanned space" = "Share of scanned space"; -"Shares storage with %@" = "Shares storage with %@"; -"Show %@ in Finder" = "Show %@ in Finder"; -"Show in Finder" = "Show in Finder"; -"Shows a confirmation before moving the selected copies" = "Shows a confirmation before moving the selected copies"; -"Similar Photos" = "Similar Photos"; -"Similarity is a visual estimate, not proof that two files are identical. Use Show in Finder to compare originals at full quality." = "Similarity is a visual estimate, not proof that two files are identical. Use Show in Finder to compare originals at full quality."; -"Size unavailable" = "Size unavailable"; -"Skipped items" = "Skipped items"; -"Smallest first" = "Smallest first"; -"Snapshot could not be deleted" = "Snapshot could not be deleted"; -"Software Update" = "Software Update"; -"Some contents were skipped or inaccessible" = "Some contents were skipped or inaccessible"; -"Some files were not moved" = "Some files were not moved"; -"Some information could not be read (%lld)" = "Some information could not be read (%lld)"; -"Some items need attention" = "Some items need attention"; -"Some locations are unavailable" = "Some locations are unavailable"; -"Some protected locations are unavailable. Full Disk Access allows a more complete scan." = "Some protected locations are unavailable. Full Disk Access allows a more complete scan."; -"Some selected files" = "Some selected files"; -"Sort" = "Sort"; -"Space Explorer" = "Space Explorer"; -"Startup and background items" = "Startup and background items"; -"Stop" = "Stop"; -"Stop scan" = "Stop scan"; -"Stopped" = "Stopped"; -"Stopping keeps the results found so far." = "Stopping keeps the results found so far."; -"Stops scanning without changing any files" = "Stops scanning without changing any files"; -"Suggested groups" = "Suggested groups"; -"Symbolic link" = "Symbolic link"; -"Symbolic links and cloud-only items are excluded." = "Symbolic links and cloud-only items are excluded."; -"Symbolic links cannot be scanned: %@" = "Symbolic links cannot be scanned: %@"; -"Symbolic links, app packages, hidden files and cloud-only placeholders are skipped. Photos are never uploaded or deleted." = "Symbolic links, app packages, hidden files and cloud-only placeholders are skipped. Photos are never uploaded or deleted."; -"System Integrity Protection" = "System Integrity Protection"; -"System Integrity Protection is turned off." = "System Integrity Protection is turned off."; -"System daemon" = "System daemon"; -"System update" = "System update"; -"System-wide agent" = "System-wide agent"; -"The analyzed photos did not meet PureMac's visual similarity threshold." = "The analyzed photos did not meet PureMac's visual similarity threshold."; -"The audit reads current settings and does not change your Mac. It is a configuration review, not a malware scan." = "The audit reads current settings and does not change your Mac. It is a configuration review, not a malware scan."; -"The check timed out." = "The check timed out."; -"The copy marked Keep is missing or changed: %@" = "The copy marked Keep is missing or changed: %@"; -"The inspected user and third-party launch folders are empty." = "The inspected user and third-party launch folders are empty."; -"The launch item is not a property-list dictionary." = "The launch item is not a property-list dictionary."; -"The macOS application firewall is turned off." = "The macOS application firewall is turned off."; -"The protected copy cannot be moved to Trash: %@" = "The protected copy cannot be moved to Trash: %@"; -"The scan stopped. Available results are ready to review." = "The scan stopped. Available results are ready to review."; -"The selected folder cannot be scanned: %@" = "The selected folder cannot be scanned: %@"; -"The selected folder could not be read: %@" = "The selected folder could not be read: %@"; -"The selected folder is stored in the cloud and has not been downloaded: %@" = "The selected folder is stored in the cloud and has not been downloaded: %@"; -"The selected item is not a folder: %@" = "The selected item is not a folder: %@"; -"The startup disk is encrypted with FileVault." = "The startup disk is encrypted with FileVault."; -"The startup disk is not encrypted with FileVault." = "The startup disk is not encrypted with FileVault."; -"The system returned an unrecognized status." = "The system returned an unrecognized status."; -"There are no cleanup items in this category." = "There are no cleanup items in this category."; -"This folder is empty or its contents were excluded from the scan." = "This folder is empty or its contents were excluded from the scan."; -"This permanently removes %@. Its size is unknown, and the action cannot be undone." = "This permanently removes %@. Its size is unknown, and the action cannot be undone."; -"This permanently removes the selected Time Machine snapshot." = "This permanently removes the selected Time Machine snapshot."; -"This snapshot does not have a verified Time Machine timestamp." = "This snapshot does not have a verified Time Machine timestamp."; +"Ready for protected locations" = "已可存取受保護的位置"; +"Refresh disk information" = "更新磁碟資訊"; +"Refreshing package data and comparing installed versions." = "正在更新套件資訊並比對已安裝的版本。"; +"Refused to delete %lld protected item(s) (home credential directory or similar)." = "已拒絕刪除 %lld 個受保護的項目,例如使用者憑證目錄。"; +"Remove %lld files" = "移除 %lld 個檔案"; +"Remove %lld items" = "移除 %lld 個項目"; +"Remove apps and their related files" = "移除應用程式與相關檔案"; +"Remove selected app files?" = "要移除所選的應用程式檔案嗎?"; +"Remove selected files?" = "要移除所選的檔案嗎?"; +"Remove selected leftovers?" = "要移除所選的殘留檔案嗎?"; +"Removing the items you selected." = "正在移除你選取的項目。"; +"Reveal %@ in Finder" = "在 Finder 中顯示 %@"; +"Reveal plist in Finder" = "在 Finder 中顯示 plist"; +"Reveal skipped item in Finder" = "在 Finder 中顯示已略過的項目"; +"Review and update apps installed as Homebrew casks." = "檢視並更新透過 Homebrew cask 安裝的應用程式。"; +"Review built-in privacy and safety checks" = "檢視內建的隱私權與安全檢查"; +"Review matching files side by side" = "並排檢視相符的檔案"; +"Review only" = "僅供檢視"; +"Review removal" = "確認移除項目"; +"Review the groups before acting" = "操作前請先檢視各群組"; +"Review the macOS safeguards that protect apps, disks, network access, and system files." = "檢視 macOS 對應用程式、磁碟、網路存取與系統檔案的防護設定。"; +"Review the results and choose exactly what to remove." = "檢視結果,逐一選擇要移除的項目。"; +"Review which apps can access private data and hardware." = "檢視哪些應用程式能存取私人資料與硬體。"; +"Run audit" = "執行檢查"; +"Run the scan again when you are ready to check every area." = "準備檢查所有範圍時,請重新執行掃描。"; +"Safari privacy guide" = "Safari 隱私權指南"; +"Safari: Settings > Privacy" = "Safari:「設定」>「隱私權」"; +"Sample limit reached" = "已達取樣上限"; +"Scan Another Folder" = "掃描其他資料夾"; +"Scan Folder" = "掃描資料夾"; +"Scan Photos" = "掃描照片"; +"Scan again" = "重新掃描"; +"Scan complete" = "掃描完成"; +"Scan could not finish" = "無法完成掃描"; +"Scan first, then review the exact files before removing anything." = "先執行掃描,再逐一確認檔案,最後決定要移除哪些項目。"; +"Scan stopped" = "掃描已停止"; +"Scan this Mac" = "掃描這台 Mac"; +"Scan this category" = "掃描此類別"; +"Scanning %@…" = "正在掃描 %@…"; +"Scheduled" = "已排程"; +"Security Settings" = "安全性設定"; +"See current resource use and review what starts in the background." = "查看目前的資源用量,以及在背景啟動的項目。"; +"See what is taking up space" = "查看哪些項目占用空間"; +"Select %@" = "選取 %@"; +"Select a tool from the sidebar." = "請從側邊欄選擇工具。"; +"Select any folder to see which files and subfolders occupy the most disk space." = "選擇任一資料夾,查看最占磁碟空間的檔案與子資料夾。"; +"Select apps to update" = "選擇要更新的應用程式"; +"Select at least one app to update." = "請至少選擇一個要更新的應用程式。"; +"Select copies" = "選取副本"; +"Select the apps Homebrew should upgrade." = "選擇要由 Homebrew 升級的應用程式。"; +"Select the extra copies you want to review" = "選取要檢視的多餘副本"; +"Select visible" = "選取目前顯示的項目"; +"Selected" = "已選取"; +"Selected cleanup items are permanently removed." = "所選的清理項目會永久移除。"; +"Share of scanned space" = "占已掃描空間的比例"; +"Shares storage with %@" = "與 %@ 共用儲存空間"; +"Show %@ in Finder" = "在 Finder 中顯示 %@"; +"Show in Finder" = "在 Finder 中顯示"; +"Shows a confirmation before moving the selected copies" = "移動所選副本前會先顯示確認視窗"; +"Similar Photos" = "相似照片"; +"Similarity is a visual estimate, not proof that two files are identical. Use Show in Finder to compare originals at full quality." = "相似度是依影像外觀估算的結果,無法證明兩個檔案完全相同。請使用「在 Finder 中顯示」,以原始畫質比對照片。"; +"Size unavailable" = "無法取得大小"; +"Skipped items" = "已略過的項目"; +"Smallest first" = "由小到大"; +"Snapshot could not be deleted" = "無法刪除快照"; +"Software Update" = "軟體更新"; +"Some contents were skipped or inaccessible" = "部分內容已略過或無法存取"; +"Some files were not moved" = "部分檔案未移動"; +"Some information could not be read (%lld)" = "有 %lld 筆資訊無法讀取"; +"Some items need attention" = "部分項目需要留意"; +"Some locations are unavailable" = "部分位置無法存取"; +"Some protected locations are unavailable. Full Disk Access allows a more complete scan." = "部分受保護的位置無法存取。授予完整磁碟存取權後,可進行更完整的掃描。"; +"Some selected files" = "部分所選檔案"; +"Sort" = "排序"; +"Space Explorer" = "磁碟空間分析"; +"Startup and background items" = "啟動與背景項目"; +"Stop" = "停止"; +"Stop scan" = "停止掃描"; +"Stopped" = "已停止"; +"Stopping keeps the results found so far." = "停止後會保留目前找到的結果。"; +"Stops scanning without changing any files" = "停止掃描,不會變更任何檔案"; +"Suggested groups" = "建議檢視的群組"; +"Symbolic link" = "符號連結"; +"Symbolic links and cloud-only items are excluded." = "已排除符號連結與僅存於雲端的項目。"; +"Symbolic links cannot be scanned: %@" = "無法掃描符號連結:%@"; +"Symbolic links, app packages, hidden files and cloud-only placeholders are skipped. Photos are never uploaded or deleted." = "會略過符號連結、應用程式套件、隱藏檔案,以及僅存於雲端的檔案替身。不會上傳或刪除照片。"; +"System Integrity Protection" = "系統完整性保護"; +"System Integrity Protection is turned off." = "系統完整性保護已關閉。"; +"System daemon" = "系統背景服務"; +"System update" = "系統更新"; +"System-wide agent" = "所有使用者的啟動代理"; +"The analyzed photos did not meet PureMac's visual similarity threshold." = "分析的照片未達 PureMac 設定的視覺相似度門檻。"; +"The audit reads current settings and does not change your Mac. It is a configuration review, not a malware scan." = "此檢查只會讀取目前設定,不會變更你的 Mac。檢查範圍為系統設定,不會掃描惡意軟體。"; +"The check timed out." = "檢查逾時。"; +"The copy marked Keep is missing or changed: %@" = "標示為「保留」的副本已遺失或變更:%@"; +"The inspected user and third-party launch folders are empty." = "檢查的使用者與第三方啟動資料夾皆為空白。"; +"The launch item is not a property-list dictionary." = "此啟動項目並非有效的屬性列表字典。"; +"The macOS application firewall is turned off." = "macOS 應用程式防火牆已關閉。"; +"The protected copy cannot be moved to Trash: %@" = "無法將受保護的副本移至垃圾桶:%@"; +"The scan stopped. Available results are ready to review." = "掃描已停止,可以檢視目前取得的結果。"; +"The selected folder cannot be scanned: %@" = "無法掃描所選的資料夾:%@"; +"The selected folder could not be read: %@" = "無法讀取所選的資料夾:%@"; +"The selected folder is stored in the cloud and has not been downloaded: %@" = "所選資料夾存放於雲端,尚未下載:%@"; +"The selected item is not a folder: %@" = "所選項目不是資料夾:%@"; +"The startup disk is encrypted with FileVault." = "啟動磁碟已使用 FileVault 加密。"; +"The startup disk is not encrypted with FileVault." = "啟動磁碟未使用 FileVault 加密。"; +"The system returned an unrecognized status." = "系統傳回無法辨識的狀態。"; +"There are no cleanup items in this category." = "此類別沒有可清理的項目。"; +"This folder is empty or its contents were excluded from the scan." = "此資料夾為空白,或其內容已排除於掃描範圍外。"; +"This permanently removes %@. Its size is unknown, and the action cannot be undone." = "這會永久移除 %@。無法取得其大小,且此動作無法復原。"; +"This permanently removes the selected Time Machine snapshot." = "這會永久移除所選的 Time Machine 快照。"; +"This snapshot does not have a verified Time Machine timestamp." = "無法驗證此快照的 Time Machine 時間戳記。"; "Time Machine" = "Time Machine"; -"Time Machine Settings" = "Time Machine Settings"; -"Time Machine did not report any snapshots for the startup disk." = "Time Machine did not report any snapshots for the startup disk."; -"Time Machine snapshots are unavailable" = "Time Machine snapshots are unavailable"; -"Time Machine snapshots can be reviewed and removed individually" = "Time Machine snapshots can be reviewed and removed individually"; -"Tools" = "Tools"; -"Try Again" = "Try Again"; -"Try another name, size, or date range." = "Try another name, size, or date range."; -"Uninstaller" = "Uninstaller"; -"Unknown" = "Unknown"; -"Unknown error" = "Unknown error"; -"Updates from Homebrew" = "Updates from Homebrew"; -"Updating…" = "Updating…"; -"Upgrade %lld Apps" = "Upgrade %lld Apps"; -"Upgrade 1 App" = "Upgrade 1 App"; -"Upgrade selected apps?" = "Upgrade selected apps?"; -"User agent" = "User agent"; -"Verifying possible matches" = "Verifying possible matches"; -"Watches folders" = "Watches folders"; -"Watches paths" = "Watches paths"; +"Time Machine Settings" = "Time Machine 設定"; +"Time Machine did not report any snapshots for the startup disk." = "Time Machine 未回報啟動磁碟上的任何快照。"; +"Time Machine snapshots are unavailable" = "無法取得 Time Machine 快照"; +"Time Machine snapshots can be reviewed and removed individually" = "可以逐一檢視與移除 Time Machine 快照"; +"Tools" = "工具"; +"Try Again" = "再試一次"; +"Try another name, size, or date range." = "請嘗試其他名稱、大小或日期範圍。"; +"Uninstaller" = "解除安裝"; +"Unknown" = "未知"; +"Unknown error" = "未知錯誤"; +"Updates from Homebrew" = "Homebrew 更新"; +"Updating…" = "正在更新…"; +"Upgrade %lld Apps" = "升級 %lld 個應用程式"; +"Upgrade 1 App" = "升級 1 個應用程式"; +"Upgrade selected apps?" = "要升級所選的應用程式嗎?"; +"User agent" = "使用者啟動代理"; +"Verifying possible matches" = "正在驗證可能相符的檔案"; +"Watches folders" = "監看資料夾"; +"Watches paths" = "監看路徑"; "XProtect" = "XProtect"; -"allocated in this folder" = "allocated in this folder"; -"definitions %@" = "definitions %@"; -"engine %@" = "engine %@"; -"macOS does not report reliable per-snapshot sizes in this listing." = "macOS does not report reliable per-snapshot sizes in this listing."; -"reclaimed" = "reclaimed"; -"similar group" = "similar group"; -"similar groups" = "similar groups"; -"tmutil is not available on this Mac." = "tmutil is not available on this Mac."; - -/* Additional interface strings. */ -"%lld processes" = "%lld processes"; -"1 process" = "1 process"; -"A PureMac update is available" = "A PureMac update is available"; -"About these readings" = "About these readings"; -"App memory shows resident memory, including shared pages. App totals can differ from the summary." = "App memory shows resident memory, including shared pages. App totals can differ from the summary."; -"Apps and processes" = "Apps and processes"; -"Build %@" = "Build %@"; -"CPU - Memory" = "CPU - Memory"; -"CPU uses the Mac’s total capacity. App helpers are grouped with their app." = "CPU uses the Mac’s total capacity. App helpers are grouped with their app."; -"CPU values appear after the next sample." = "CPU values appear after the next sample."; -"Check access" = "Check access"; -"Checking for updates…" = "Checking for updates…"; -"Checks the official app releases on GitHub." = "Checks the official app releases on GitHub."; -"Collapsed" = "Collapsed"; -"Copy command" = "Copy command"; -"Download (DMG / ZIP)" = "Download (DMG / ZIP)"; -"Download the new app from the release page, quit PureMac, then replace it in Applications." = "Download the new app from the release page, quit PureMac, then replace it in Applications."; -"Expanded" = "Expanded"; -"GitHub is receiving too many requests. Please try again later." = "GitHub is receiving too many requests. Please try again later."; +"allocated in this folder" = "此資料夾實際占用的空間"; +"definitions %@" = "定義檔 %@"; +"engine %@" = "引擎 %@"; +"macOS does not report reliable per-snapshot sizes in this listing." = "macOS 未在此清單中提供可靠的個別快照大小。"; +"reclaimed" = "已釋出"; +"similar group" = "個相似照片群組"; +"similar groups" = "個相似照片群組"; +"tmutil is not available on this Mac." = "這台 Mac 無法使用 tmutil。"; + +/* 效能監視與更新設定 */ +"%lld processes" = "%lld 個程序"; +"1 process" = "1 個程序"; +"A PureMac update is available" = "有可用的 PureMac 更新"; +"About these readings" = "關於這些數據"; +"App memory shows resident memory, including shared pages. App totals can differ from the summary." = "應用程式記憶體顯示的是常駐記憶體,包含共用頁面。各應用程式的用量加總可能與摘要不同。"; +"Apps and processes" = "應用程式與程序"; +"Build %@" = "組建 %@"; +"CPU - Memory" = "CPU 與記憶體"; +"CPU uses the Mac’s total capacity. App helpers are grouped with their app." = "CPU 使用率以整台 Mac 的總處理能力為基準。輔助程序會歸入所屬應用程式。"; +"CPU values appear after the next sample." = "CPU 數據將於下次取樣後顯示。"; +"Check access" = "檢查存取權"; +"Checking for updates…" = "正在檢查更新…"; +"Checks the official app releases on GitHub." = "檢查 GitHub 上的官方應用程式版本。"; +"Collapsed" = "已收合"; +"Copy command" = "複製指令"; +"Download (DMG / ZIP)" = "下載(DMG/ZIP)"; +"Download the new app from the release page, quit PureMac, then replace it in Applications." = "從版本發布頁面下載新版應用程式,結束 PureMac 後,再替換「應用程式」資料夾中的舊版。"; +"Expanded" = "已展開"; +"GitHub is receiving too many requests. Please try again later." = "GitHub 收到的請求過多,請稍後再試。"; "Homebrew" = "Homebrew"; -"Keep PureMac up to date" = "Keep PureMac up to date"; -"Last checked: %@" = "Last checked: %@"; -"Live updates paused" = "Live updates paused"; - -"Make PureMac work your way." = "Make PureMac work your way."; -"Measuring apps and processes…" = "Measuring apps and processes…"; -"Memory estimate includes active, wired and compressed memory." = "Memory estimate includes active, wired and compressed memory."; -"Memory in use" = "Memory in use"; -"No matching apps or processes" = "No matching apps or processes"; -"No stable PureMac app release was found. Try again later." = "No stable PureMac app release was found. Try again later."; -"Open release page" = "Open release page"; -"Paused" = "Paused"; -"Process information is unavailable. Try Activity Monitor for more detail." = "Process information is unavailable. Try Activity Monitor for more detail."; -"PureMac %@ is available" = "PureMac %@ is available"; -"Restart to apply your language" = "Restart to apply your language"; -"Review Full Disk Access" = "Review Full Disk Access"; -"Review launch at login" = "Review launch at login"; -"Search apps and processes" = "Search apps and processes"; -"Settings" = "Settings"; -"Settings need attention" = "Settings need attention"; -"Settings to review" = "Settings to review"; -"Show all apps and processes" = "Show all apps and processes"; -"Show top 8" = "Show top 8"; -"Some of this app's processes have no CPU reading yet, so this total is partial." = "Some of this app's processes have no CPU reading yet, so this total is partial."; -"Some processes started or stopped since the last sample. Their values appear in the next one." = "Some processes started or stopped since the last sample. Their values appear in the next one."; -"Sort by" = "Sort by"; -"System processes are not listed. Use Activity Monitor for those." = "System processes are not listed. Use Activity Monitor for those."; -"The release service is unavailable. Please try again later." = "The release service is unavailable. Please try again later."; -"This build has no readable version. Open the releases page to check manually." = "This build has no readable version. Open the releases page to check manually."; -"To update with Homebrew, run this command in Terminal. The cask may follow the GitHub release a little later." = "To update with Homebrew, run this command in Terminal. The cask may follow the GitHub release a little later."; -"Update method" = "Update method"; - -"View releases" = "View releases"; -"You're using the latest available version of PureMac." = "You're using the latest available version of PureMac."; +"Keep PureMac up to date" = "讓 PureMac 保持最新版本"; +"Last checked: %@" = "上次檢查:%@"; +"Live updates paused" = "即時更新已暫停"; + +"Make PureMac work your way." = "依你的需求設定 PureMac。"; +"Measuring apps and processes…" = "正在測量應用程式與程序的用量…"; +"Memory estimate includes active, wired and compressed memory." = "記憶體估計用量包含作用中、固定與壓縮記憶體。"; +"Memory in use" = "已用記憶體"; +"No matching apps or processes" = "沒有符合條件的應用程式或程序"; +"No stable PureMac app release was found. Try again later." = "找不到 PureMac 的正式發布版本,請稍後再試。"; +"Open release page" = "開啟版本發布頁面"; +"Paused" = "已暫停"; +"Process information is unavailable. Try Activity Monitor for more detail." = "無法取得程序資訊。請使用「活動監視器」查看詳細資料。"; +"PureMac %@ is available" = "PureMac %@ 已推出"; +"Restart to apply your language" = "重新啟動以套用語言"; +"Review Full Disk Access" = "檢視完整磁碟存取權"; +"Review launch at login" = "檢視登入時啟動設定"; +"Search apps and processes" = "搜尋應用程式與程序"; +"Settings" = "設定"; +"Settings need attention" = "設定需要留意"; +"Settings to review" = "待檢視的設定"; +"Show all apps and processes" = "顯示所有應用程式與程序"; +"Show top 8" = "顯示前 8 項"; +"Some of this app's processes have no CPU reading yet, so this total is partial." = "此應用程式的部分程序尚無 CPU 數據,因此目前只顯示部分用量。"; +"Some processes started or stopped since the last sample. Their values appear in the next one." = "部分程序在上次取樣後啟動或停止,其數據將於下次取樣時顯示。"; +"Sort by" = "排序方式"; +"System processes are not listed. Use Activity Monitor for those." = "此處不列出系統程序,請使用「活動監視器」查看。"; +"The release service is unavailable. Please try again later." = "版本發布服務目前無法使用,請稍後再試。"; +"This build has no readable version. Open the releases page to check manually." = "無法讀取此組建的版本,請開啟版本發布頁面手動確認。"; +"To update with Homebrew, run this command in Terminal. The cask may follow the GitHub release a little later." = "若要透過 Homebrew 更新,請在「終端機」執行此指令。cask 的更新時間可能稍晚於 GitHub 版本發布時間。"; +"Update method" = "更新方式"; + +"View releases" = "查看發布版本"; +"You're using the latest available version of PureMac." = "你目前使用的是最新版本的 PureMac。"; diff --git a/PureMac/zh-Hant.lproj/ServicesMenu.strings b/PureMac/zh-Hant.lproj/ServicesMenu.strings new file mode 100644 index 0000000..0e31ddc --- /dev/null +++ b/PureMac/zh-Hant.lproj/ServicesMenu.strings @@ -0,0 +1,2 @@ +/* Finder 服務選單(台灣繁體中文) */ +"Uninstall with PureMac" = "使用 PureMac 解除安裝"; diff --git a/PureMacTests/LocalizationFilesTests.swift b/PureMacTests/LocalizationFilesTests.swift index 1db8573..6da3c67 100644 --- a/PureMacTests/LocalizationFilesTests.swift +++ b/PureMacTests/LocalizationFilesTests.swift @@ -11,7 +11,7 @@ final class LocalizationFilesTests: XCTestCase { } func testBuiltAppBundleContainsAddedLocalizations() throws { - for language in ["de", "it", "ru", "uk", "zh-Hans"] { + for language in ["de", "it", "ru", "uk", "zh-Hans", "zh-Hant"] { XCTAssertTrue( Bundle.main.localizations.contains(language), "Expected the built app bundle to register the \(language) localization" @@ -106,6 +106,39 @@ final class LocalizationFilesTests: XCTestCase { } } + // 台灣繁中應完整翻譯介面文字,產品名稱則保留原文。 + func testTraditionalChineseHasNoUntranslatedInterfaceText() throws { + let files = try localizableStringsFiles() + let english = try localizedStrings(in: XCTUnwrap(files["en"])) + let traditionalChinese = try localizedStrings(in: XCTUnwrap(files["zh-Hant"])) + let retainedNames: Set = [ + "PureMac", "PureMac.app", "CPU", "Finder", "FileVault", + "Gatekeeper", "Homebrew", "Time Machine", "XProtect" + ] + let untranslated = english.keys.filter { + !retainedNames.contains($0) && traditionalChinese[$0] == english[$0] + }.sorted() + XCTAssertTrue(untranslated.isEmpty, "繁中介面仍有未翻譯文字:\(untranslated)") + } + + // 權限提示和 Finder 服務選單也必須有完整的繁中資源。 + func testTraditionalChineseAuxiliaryResourcesHaveEnglishKeyParity() throws { + let sourceRoot = URL(fileURLWithPath: #filePath) + .deletingLastPathComponent().deletingLastPathComponent() + .appendingPathComponent("PureMac") + for resource in ["InfoPlist", "ServicesMenu"] { + let english = try localizedKeys(in: sourceRoot + .appendingPathComponent("en.lproj/\(resource).strings")) + let traditionalChinese = try localizedStrings(in: sourceRoot + .appendingPathComponent("zh-Hant.lproj/\(resource).strings")) + XCTAssertEqual(english, Set(traditionalChinese.keys)) + for value in traditionalChinese.values { + XCTAssertNotNil(value.range(of: "\\p{Han}", options: .regularExpression), + "繁中輔助資源必須包含中文翻譯:\(value)") + } + } + } + private func localizableStringsFiles() throws -> [String: URL] { let sourceRoot = URL(fileURLWithPath: #filePath) .deletingLastPathComponent() diff --git a/PureMacTests/PerformanceInspectorTests.swift b/PureMacTests/PerformanceInspectorTests.swift index 07b5a8f..daa148c 100644 --- a/PureMacTests/PerformanceInspectorTests.swift +++ b/PureMacTests/PerformanceInspectorTests.swift @@ -34,7 +34,11 @@ final class PerformanceInspectorTests: XCTestCase { XCTAssertEqual(item.arguments, ["--background"]) XCTAssertEqual(item.domain, .userAgent) XCTAssertTrue(item.isDisabled) - XCTAssertEqual(item.triggers, ["At login", "Conditional keep alive", "Every 300 seconds"]) + XCTAssertEqual(item.triggers, [ + String(localized: "At login"), + String(localized: "Conditional keep alive"), + String(format: String(localized: "Every %lld seconds"), Int64(300)) + ]) XCTAssertEqual(item.sourceURL, url) } @@ -60,7 +64,7 @@ final class PerformanceInspectorTests: XCTestCase { XCTAssertEqual(item.label, "com.example.helper") XCTAssertEqual(item.program, "/usr/local/bin/example-helper") XCTAssertEqual(item.arguments, ["--mode", "quiet"]) - XCTAssertEqual(item.triggers, ["Watches paths"]) + XCTAssertEqual(item.triggers, [String(localized: "Watches paths")]) XCTAssertFalse(item.isDisabled) } diff --git a/PureMacTests/ProtectionAuditTests.swift b/PureMacTests/ProtectionAuditTests.swift index fa1d5ad..d3f6c32 100644 --- a/PureMacTests/ProtectionAuditTests.swift +++ b/PureMacTests/ProtectionAuditTests.swift @@ -54,7 +54,7 @@ final class ProtectionAuditTests: XCTestCase { ) XCTAssertEqual(finding.status, .unknown) - XCTAssertEqual(finding.detail, "The system returned an unrecognized status.") + XCTAssertEqual(finding.detail, String(localized: "The system returned an unrecognized status.")) } func testCommandFailureCannotBeReportedAsEnabled() { @@ -71,7 +71,7 @@ final class ProtectionAuditTests: XCTestCase { ) XCTAssertEqual(finding.status, .unknown) - XCTAssertEqual(finding.detail, "PureMac could not read this setting.") + XCTAssertEqual(finding.detail, String(localized: "PureMac could not read this setting.")) } func testTimeoutIsUnknown() { @@ -88,7 +88,7 @@ final class ProtectionAuditTests: XCTestCase { ) XCTAssertEqual(finding.status, .unknown) - XCTAssertEqual(finding.detail, "The check timed out.") + XCTAssertEqual(finding.detail, String(localized: "The check timed out.")) } func testAuditPreservesCheckOrder() async { diff --git a/docs/README.zh-Hant.md b/docs/README.zh-Hant.md index c45a3f5..cfdb2a8 100644 --- a/docs/README.zh-Hant.md +++ b/docs/README.zh-Hant.md @@ -16,7 +16,7 @@

免費、開源的 macOS 應用程式管理與系統清理工具。
- 徹底解除安裝應用程式。尋找孤立檔案。清理系統垃圾。
+ 徹底解除安裝應用程式。尋找殘留檔案。清理系統垃圾。
無訂閱。無遙測。無資料收集。

@@ -65,6 +65,12 @@ xcodebuild -project PureMac.xcodeproj -scheme PureMac -configuration Release -de open build/Build/Products/Release/PureMac.app ``` +## 介面語言 + +開啟 PureMac 的「設定 → 一般 → 語言」,選擇「繁體中文」,再按一下「立即重新啟動」套用。 + +繁體中文介面採用台灣慣用詞彙,涵蓋主畫面、工具頁、設定、權限提示與 Finder 服務選單。PureMac、Finder、Homebrew 等產品名稱保留原文。 + ## 功能 ### 應用程式解除安裝 @@ -75,16 +81,16 @@ open build/Build/Products/Release/PureMac.app - 系統應用程式保護 — 排除 27 個 Apple 應用程式,避免誤刪 - 主從檢視:左側為應用程式列表,右側為發現的檔案 -### 孤立檔案搜尋 +### 殘留檔案搜尋 - 偵測 `~/Library` 中已解除安裝應用程式留下的殘餘檔案 - 將 Library 內容與所有已安裝應用程式的識別碼比對 -- 一鍵清除孤立檔案 +- 一鍵清除殘留檔案 ### 系統清理 - **智慧掃描** — 一鍵掃描所有分類 - **系統垃圾** — 系統快取、記錄與暫存檔案 - **使用者快取** — 動態發現所有應用程式快取(不需寫死清單) -- **AI 應用程式** — Ollama 與 LM Studio 日誌、快取,以及可選的本機歷史記錄清理 +- **AI 應用程式** — Ollama 與 LM Studio 記錄檔、快取,以及可選的本機歷史記錄清理 - **郵件附件** — 已下載的郵件附件 - **垃圾桶** — 清空所有垃圾桶 - **大型與舊檔案** — 超過 100 MB 或超過 1 年的檔案 @@ -134,7 +140,7 @@ PureMac/ Views/ - 原生 SwiftUI 視圖 Apps/ - 應用程式解除安裝視圖 Cleaning/ - 智慧掃描與分類視圖 - Orphans/ - 孤立檔案搜尋 + Orphans/ - 殘留檔案搜尋 Settings/ - 以原生 Form 為基礎的設定 Components/ - 共用元件 ```