From fda9179a5867ea9df448b481fa8d447184bcb7e7 Mon Sep 17 00:00:00 2001 From: ysicing Date: Tue, 29 Sep 2026 23:29:58 +0800 Subject: [PATCH] =?UTF-8?q?refactor(uninstaller):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=8D=B8=E8=BD=BD=E7=A1=AE=E8=AE=A4=E5=BC=B9=E7=AA=97=E5=B8=83?= =?UTF-8?q?=E5=B1=80=E4=B8=8E=E6=96=87=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sources/Localization/Resources/ar.tsv | 5 ++-- .../Sources/Localization/Resources/de.tsv | 5 ++-- .../Sources/Localization/Resources/es.tsv | 5 ++-- .../Sources/Localization/Resources/fr.tsv | 5 ++-- .../Sources/Localization/Resources/ja.tsv | 5 ++-- .../Sources/Localization/Resources/ko.tsv | 5 ++-- .../Localization/Resources/zh-Hant.tsv | 5 ++-- .../Sources/Localization/Translations.swift | 5 ++-- .../XStatsUI/Panel/UninstallerPage.swift | 27 ++++++++++--------- 9 files changed, 39 insertions(+), 28 deletions(-) diff --git a/Packages/XStatsKit/Sources/Localization/Resources/ar.tsv b/Packages/XStatsKit/Sources/Localization/Resources/ar.tsv index 889dd06..c001292 100644 --- a/Packages/XStatsKit/Sources/Localization/Resources/ar.tsv +++ b/Packages/XStatsKit/Sources/Localization/Resources/ar.tsv @@ -368,7 +368,8 @@ uv 下载的 Python 包与构建缓存,由 uv 自行清理 ذاكرة حزم P 占用高于 الاستخدام أعلى من 卷 وحدة التخزين 卸载 إلغاء التثبيت -卸载“{}”? إلغاء تثبيت «{}»؟ +将“{}”移到废纸篓? هل تريد نقل «{}» إلى سلة المهملات؟ +包含应用及所选残留,共 {} 项({})。 يشمل التطبيق والعناصر المرتبطة المحددة. الإجمالي: {} ({}). 卸载失败:{} فشل إلغاء التثبيت: {} 卸载应用 إلغاء تثبيت التطبيقات 卸载辅助工具 إلغاء تثبيت الأداة المساعدة @@ -417,7 +418,7 @@ uv 下载的 Python 包与构建缓存,由 uv 自行清理 ذاكرة حزم P 只显示菜单栏时的采样间隔;打开弹窗或主窗口时为 1 秒(进程页 2 秒) فترة أخذ العينات عند عرض شريط القوائم فقط؛ ثانية عند فتح نافذة أو نافذة منبثقة (ثانيتان في العمليات) 只查找以该应用包名命名的文件,以及 Application Support、Logs 下与应用同名的目录;钥匙串与其他应用共享的数据不会动。程序坞里的图标会一并移除 يشمل الملفات المسماة بمعرّف حزمة التطبيق ومجلدات اسمه في Application Support وLogs فقط. لا يمس سلسلة المفاتيح أو البيانات المشتركة مع تطبيقات أخرى. يُزال رمز Dock أيضًا 只设置了系统代理:浏览器等应用走代理,命令行工具、游戏等不读代理设置的程序仍在直连。要接管全部流量,可以开启增强模式或 TUN 模式。 ضُبط وكيل النظام فقط: تستخدمه المتصفحات، لكن أدوات سطر الأوامر والألعاب والبرامج التي تتجاهل إعداداته تتصل مباشرة. فعّل الوضع المحسّن أو TUN لتوجيه كل المرور. -可以恢复,但清空废纸篓前不会释放空间 يمكن استعادته، لكن لا تتحرر المساحة حتى إفراغ سلة المهملات +可在废纸篓中恢复。清空废纸篓后才会释放空间。 يمكن استعادة العناصر من سلة المهملات. تتحرر المساحة بعد إفراغها. 可执行文件:{} الملف التنفيذي: {} 可清理 · 已选 {} 项 قابل للتنظيف · تم تحديد {} 可清除 قابل للإزالة diff --git a/Packages/XStatsKit/Sources/Localization/Resources/de.tsv b/Packages/XStatsKit/Sources/Localization/Resources/de.tsv index c4d31b5..e8155c4 100644 --- a/Packages/XStatsKit/Sources/Localization/Resources/de.tsv +++ b/Packages/XStatsKit/Sources/Localization/Resources/de.tsv @@ -368,7 +368,8 @@ uv 下载的 Python 包与构建缓存,由 uv 自行清理 Von uv geladener Py 占用高于 Auslastung über 卷 Volume 卸载 Deinstallieren -卸载“{}”? „{}“ deinstallieren? +将“{}”移到废纸篓? „{}“ in den Papierkorb bewegen? +包含应用及所选残留,共 {} 项({})。 Enthält die App und ausgewählte zugehörige Objekte. Insgesamt: {} ({}). 卸载失败:{} Deinstallation fehlgeschlagen: {} 卸载应用 Apps deinstallieren 卸载辅助工具 Hilfsprogramm deinstallieren @@ -417,7 +418,7 @@ uv 下载的 Python 包与构建缓存,由 uv 自行清理 Von uv geladener Py 只显示菜单栏时的采样间隔;打开弹窗或主窗口时为 1 秒(进程页 2 秒) Messintervall bei alleiniger Menüleistenanzeige; bei geöffnetem Fenster oder Popover 1 Sekunde (Prozesse: 2 Sekunden) 只查找以该应用包名命名的文件,以及 Application Support、Logs 下与应用同名的目录;钥匙串与其他应用共享的数据不会动。程序坞里的图标会一并移除 Es werden nur nach der Bundle-ID benannte Dateien sowie Ordner mit dem App-Namen in Application Support und Logs erfasst. Schlüsselbunde und geteilte Daten anderer Apps bleiben unberührt. Das Dock-Symbol wird ebenfalls entfernt 只设置了系统代理:浏览器等应用走代理,命令行工具、游戏等不读代理设置的程序仍在直连。要接管全部流量,可以开启增强模式或 TUN 模式。 Nur ein Systemproxy ist eingerichtet: Browser und viele Apps nutzen ihn, Befehlszeilenprogramme, Spiele und andere Apps ohne Proxy-Unterstützung verbinden sich direkt. Für den gesamten Verkehr den erweiterten Modus oder TUN-Modus aktivieren. -可以恢复,但清空废纸篓前不会释放空间 Wiederherstellbar; Speicher wird erst nach dem Leeren des Papierkorbs frei +可在废纸篓中恢复。清空废纸篓后才会释放空间。 Die Objekte lassen sich aus dem Papierkorb wiederherstellen. Speicher wird erst nach dem Leeren frei. 可执行文件:{} Programmdatei: {} 可清理 · 已选 {} 项 Bereinigbar · {} ausgewählt 可清除 Löschbar diff --git a/Packages/XStatsKit/Sources/Localization/Resources/es.tsv b/Packages/XStatsKit/Sources/Localization/Resources/es.tsv index ea37746..3ecfbd1 100644 --- a/Packages/XStatsKit/Sources/Localization/Resources/es.tsv +++ b/Packages/XStatsKit/Sources/Localization/Resources/es.tsv @@ -368,7 +368,8 @@ uv 下载的 Python 包与构建缓存,由 uv 自行清理 Cachés de paquetes 占用高于 Uso superior a 卷 Volumen 卸载 Desinstalar -卸载“{}”? ¿Desinstalar «{}»? +将“{}”移到废纸篓? ¿Mover «{}» a la Papelera? +包含应用及所选残留,共 {} 项({})。 Incluye la app y los elementos relacionados seleccionados. Total: {} ({}). 卸载失败:{} Error al desinstalar: {} 卸载应用 Desinstalador 卸载辅助工具 Desinstalar auxiliar @@ -417,7 +418,7 @@ uv 下载的 Python 包与构建缓存,由 uv 自行清理 Cachés de paquetes 只显示菜单栏时的采样间隔;打开弹窗或主窗口时为 1 秒(进程页 2 秒) Intervalo de muestreo cuando solo se muestra la barra de menús; 1 segundo con una ventana abierta (2 en Procesos) 只查找以该应用包名命名的文件,以及 Application Support、Logs 下与应用同名的目录;钥匙串与其他应用共享的数据不会动。程序坞里的图标会一并移除 Solo incluye archivos con el identificador de la app y carpetas con su nombre en Application Support y Logs. No afecta al llavero ni a datos compartidos con otras apps. También elimina el icono del Dock 只设置了系统代理:浏览器等应用走代理,命令行工具、游戏等不读代理设置的程序仍在直连。要接管全部流量,可以开启增强模式或 TUN 模式。 Solo hay un proxy del sistema: los navegadores lo usan, pero las herramientas de consola, juegos y apps que ignoran estos ajustes siguen conectándose directamente. Activa el modo mejorado o TUN para enrutar todo el tráfico. -可以恢复,但清空废纸篓前不会释放空间 Se puede restaurar, pero no libera espacio hasta vaciar la Papelera +可在废纸篓中恢复。清空废纸篓后才会释放空间。 Puedes restaurarlos desde la Papelera. El espacio se libera al vaciarla. 可执行文件:{} Ejecutable: {} 可清理 · 已选 {} 项 Limpiable · {} seleccionados 可清除 Purgable diff --git a/Packages/XStatsKit/Sources/Localization/Resources/fr.tsv b/Packages/XStatsKit/Sources/Localization/Resources/fr.tsv index 2234c32..852ebd6 100644 --- a/Packages/XStatsKit/Sources/Localization/Resources/fr.tsv +++ b/Packages/XStatsKit/Sources/Localization/Resources/fr.tsv @@ -368,7 +368,8 @@ uv 下载的 Python 包与构建缓存,由 uv 自行清理 Caches de paquets P 占用高于 Utilisation supérieure à 卷 Volume 卸载 Désinstaller -卸载“{}”? Désinstaller « {} » ? +将“{}”移到废纸篓? Placer « {} » dans la Corbeille ? +包含应用及所选残留,共 {} 项({})。 Comprend l’app et les éléments associés sélectionnés. Total : {} ({}). 卸载失败:{} Échec de la désinstallation : {} 卸载应用 Désinstallation 卸载辅助工具 Désinstaller l’assistant @@ -417,7 +418,7 @@ uv 下载的 Python 包与构建缓存,由 uv 自行清理 Caches de paquets P 只显示菜单栏时的采样间隔;打开弹窗或主窗口时为 1 秒(进程页 2 秒) Intervalle des relevés lorsque seule la barre des menus est affichée ; 1 seconde si un panneau ou la fenêtre est ouvert (2 secondes pour Processus) 只查找以该应用包名命名的文件,以及 Application Support、Logs 下与应用同名的目录;钥匙串与其他应用共享的数据不会动。程序坞里的图标会一并移除 Seuls les fichiers nommés d’après l’identifiant du bundle et les dossiers au nom de l’app dans Application Support et Logs sont inclus. Les trousseaux et les données partagées restent intacts. L’icône du Dock est aussi retirée 只设置了系统代理:浏览器等应用走代理,命令行工具、游戏等不读代理设置的程序仍在直连。要接管全部流量,可以开启增强模式或 TUN 模式。 Seul un proxy système est configuré : les navigateurs l’utilisent, mais les outils en ligne de commande, jeux et programmes ignorant les réglages du proxy se connectent directement. Activez le mode amélioré ou TUN pour acheminer tout le trafic. -可以恢复,但清空废纸篓前不会释放空间 Récupérable, mais l’espace n’est libéré qu’après avoir vidé la Corbeille +可在废纸篓中恢复。清空废纸篓后才会释放空间。 Vous pouvez les restaurer depuis la Corbeille. L’espace sera libéré après l’avoir vidée. 可执行文件:{} Exécutable : {} 可清理 · 已选 {} 项 Nettoyable · {} sélectionnés 可清除 Purgeable diff --git a/Packages/XStatsKit/Sources/Localization/Resources/ja.tsv b/Packages/XStatsKit/Sources/Localization/Resources/ja.tsv index 658d0f8..eb9158d 100644 --- a/Packages/XStatsKit/Sources/Localization/Resources/ja.tsv +++ b/Packages/XStatsKit/Sources/Localization/Resources/ja.tsv @@ -368,7 +368,8 @@ uv 下载的 Python 包与构建缓存,由 uv 自行清理 uvのPythonパッ 占用高于 使用率の上限 卷 ボリューム 卸载 アンインストール -卸载“{}”? 「{}」をアンインストールしますか? +将“{}”移到废纸篓? 「{}」をゴミ箱に移動しますか? +包含应用及所选残留,共 {} 项({})。 アプリと選択した関連項目を含む、計{}項目({})です。 卸载失败:{} アンインストールに失敗しました:{} 卸载应用 アプリのアンインストール 卸载辅助工具 ヘルパーをアンインストール @@ -417,7 +418,7 @@ uv 下载的 Python 包与构建缓存,由 uv 自行清理 uvのPythonパッ 只显示菜单栏时的采样间隔;打开弹窗或主窗口时为 1 秒(进程页 2 秒) メニューバーのみ表示時の測定間隔です。ポップオーバーやウインドウ表示時は1秒(プロセスページは2秒)です 只查找以该应用包名命名的文件,以及 Application Support、Logs 下与应用同名的目录;钥匙串与其他应用共享的数据不会动。程序坞里的图标会一并移除 アプリのバンドルIDと同名のファイル、およびApplication SupportとLogs内のアプリ名と同名のフォルダのみを検索します。キーチェーンや他のアプリとの共有データには触れません。Dockのアイコンも削除します 只设置了系统代理:浏览器等应用走代理,命令行工具、游戏等不读代理设置的程序仍在直连。要接管全部流量,可以开启增强模式或 TUN 模式。 システムプロキシのみ設定されています。ブラウザなどはプロキシを使いますが、設定を参照しないコマンドラインツールやゲームは直接接続します。全通信を処理するには拡張モードやTUNモードをオンにしてください。 -可以恢复,但清空废纸篓前不会释放空间 復元できますが、ゴミ箱を空にするまで容量は解放されません +可在废纸篓中恢复。清空废纸篓后才会释放空间。 ゴミ箱から復元できます。ゴミ箱を空にすると容量が解放されます。 可执行文件:{} 実行ファイル:{} 可清理 · 已选 {} 项 クリーンアップ可能 · {}項目選択済み 可清除 消去可能 diff --git a/Packages/XStatsKit/Sources/Localization/Resources/ko.tsv b/Packages/XStatsKit/Sources/Localization/Resources/ko.tsv index 30ac09f..6c86028 100644 --- a/Packages/XStatsKit/Sources/Localization/Resources/ko.tsv +++ b/Packages/XStatsKit/Sources/Localization/Resources/ko.tsv @@ -368,7 +368,8 @@ uv 下载的 Python 包与构建缓存,由 uv 自行清理 uv의 Python 패키 占用高于 사용률 기준 卷 볼륨 卸载 제거 -卸载“{}”? “{}”을(를) 제거하시겠습니까? +将“{}”移到废纸篓? “{}”을(를) 휴지통으로 이동할까요? +包含应用及所选残留,共 {} 项({})。 앱과 선택한 관련 항목을 포함해 총 {}개({})입니다. 卸载失败:{} 제거 실패: {} 卸载应用 앱 제거 卸载辅助工具 도우미 제거 @@ -417,7 +418,7 @@ uv 下载的 Python 包与构建缓存,由 uv 自行清理 uv의 Python 패키 只显示菜单栏时的采样间隔;打开弹窗或主窗口时为 1 秒(进程页 2 秒) 메뉴 막대만 표시할 때의 측정 간격입니다. 팝오버나 주 윈도우가 열리면 1초(프로세스 페이지는 2초)입니다 只查找以该应用包名命名的文件,以及 Application Support、Logs 下与应用同名的目录;钥匙串与其他应用共享的数据不会动。程序坞里的图标会一并移除 앱 번들 ID와 이름이 같은 파일 및 Application Support와 Logs의 앱 이름과 같은 폴더만 찾습니다. 키체인과 다른 앱의 공유 데이터는 유지합니다. Dock 아이콘도 제거합니다 只设置了系统代理:浏览器等应用走代理,命令行工具、游戏等不读代理设置的程序仍在直连。要接管全部流量,可以开启增强模式或 TUN 模式。 시스템 프록시만 설정되어 있습니다. 브라우저 등은 프록시를 사용하지만 설정을 따르지 않는 명령줄 도구와 게임은 직접 연결합니다. 모든 트래픽을 처리하려면 향상 모드나 TUN 모드를 켜세요. -可以恢复,但清空废纸篓前不会释放空间 복원할 수 있지만 휴지통을 비우기 전에는 공간이 확보되지 않습니다 +可在废纸篓中恢复。清空废纸篓后才会释放空间。 휴지통에서 복원할 수 있습니다. 휴지통을 비워야 공간이 확보됩니다. 可执行文件:{} 실행 파일: {} 可清理 · 已选 {} 项 정리 가능 · {}개 선택됨 可清除 제거 가능 diff --git a/Packages/XStatsKit/Sources/Localization/Resources/zh-Hant.tsv b/Packages/XStatsKit/Sources/Localization/Resources/zh-Hant.tsv index feb0c3d..86c8a3e 100644 --- a/Packages/XStatsKit/Sources/Localization/Resources/zh-Hant.tsv +++ b/Packages/XStatsKit/Sources/Localization/Resources/zh-Hant.tsv @@ -369,7 +369,8 @@ uv 下载的 Python 包与构建缓存,由 uv 自行清理 uv 下載的 Python 占用高于 佔用高於 卷 卷 卸载 卸載 -卸载“{}”? 卸載“{}”? +将“{}”移到废纸篓? 將「{}」移到廢紙簍? +包含应用及所选残留,共 {} 项({})。 包含應用程式及所選殘留,共 {} 項({})。 卸载失败:{} 卸載失敗:{} 卸载应用 卸載應用 卸载辅助工具 卸載輔助工具 @@ -418,7 +419,7 @@ uv 下载的 Python 包与构建缓存,由 uv 自行清理 uv 下載的 Python 只显示菜单栏时的采样间隔;打开弹窗或主窗口时为 1 秒(进程页 2 秒) 只顯示菜單欄時的採樣間隔;打開彈窗或主窗口時為 1 秒(進程頁 2 秒) 只查找以该应用包名命名的文件,以及 Application Support、Logs 下与应用同名的目录;钥匙串与其他应用共享的数据不会动。程序坞里的图标会一并移除 只查找以該應用包名命名的文件,以及 Application Support、Logs 下與應用同名的目錄;鑰匙串與其他應用共享的數據不會動。程序塢里的圖標會一並移除 只设置了系统代理:浏览器等应用走代理,命令行工具、游戏等不读代理设置的程序仍在直连。要接管全部流量,可以开启增强模式或 TUN 模式。 只設置了系統代理:瀏覽器等應用走代理,命令行工具、遊戲等不讀代理設置的程序仍在直連。要接管全部流量,可以開啓增強模式或 TUN 模式。 -可以恢复,但清空废纸篓前不会释放空间 可以恢復,但清空廢紙簍前不會釋放空間 +可在废纸篓中恢复。清空废纸篓后才会释放空间。 可在廢紙簍中恢復。清空廢紙簍後才會釋放空間。 可执行文件:{} 可執行文件:{} 可清理 · 已选 {} 项 可清理 · 已選 {} 項 可清除 可清除 diff --git a/Packages/XStatsKit/Sources/Localization/Translations.swift b/Packages/XStatsKit/Sources/Localization/Translations.swift index a05aef5..d987b4c 100644 --- a/Packages/XStatsKit/Sources/Localization/Translations.swift +++ b/Packages/XStatsKit/Sources/Localization/Translations.swift @@ -494,7 +494,8 @@ uv 下载的 Python 包与构建缓存,由 uv 自行清理 Python package and 占用高于 Usage above 卷 Volume 卸载 Uninstall -卸载“{}”? Uninstall “{}”? +将“{}”移到废纸篓? Move “{}” to Trash? +包含应用及所选残留,共 {} 项({})。 Includes the app and selected related items. Total: {} ({}). 卸载失败:{} Uninstall failed: {} 卸载应用 Uninstaller 卸载辅助工具 Uninstall Helper @@ -542,7 +543,7 @@ uv 下载的 Python 包与构建缓存,由 uv 自行清理 Python package and 只显示菜单栏时的采样间隔;打开弹窗或主窗口时为 1 秒(进程页 2 秒) Sampling interval when only the menu bar is shown; 1 second with a popover or window open (2 seconds on Processes) 只查找以该应用包名命名的文件,以及 Application Support、Logs 下与应用同名的目录;钥匙串与其他应用共享的数据不会动。程序坞里的图标会一并移除 Only files named after the app's bundle ID, plus folders with the app's name in Application Support and Logs, are included. Keychains and data shared with other apps are never touched. The Dock icon is removed as well 只设置了系统代理:浏览器等应用走代理,命令行工具、游戏等不读代理设置的程序仍在直连。要接管全部流量,可以开启增强模式或 TUN 模式。 Only a system proxy is set: browsers and most apps use it, but command-line tools, games, and other programs that ignore proxy settings still connect directly. To route all traffic, turn on enhanced mode or TUN mode. -可以恢复,但清空废纸篓前不会释放空间 Recoverable, but space isn't freed until the Trash is emptied +可在废纸篓中恢复。清空废纸篓后才会释放空间。 You can restore these items from the Trash. Space is freed after you empty the Trash. 可执行文件:{} Executable: {} 可清理 · 已选 {} 项 Cleanable · {} selected 可清除 Purgeable diff --git a/Packages/XStatsKit/Sources/XStatsUI/Panel/UninstallerPage.swift b/Packages/XStatsKit/Sources/XStatsUI/Panel/UninstallerPage.swift index da20997..0236ec7 100644 --- a/Packages/XStatsKit/Sources/XStatsUI/Panel/UninstallerPage.swift +++ b/Packages/XStatsKit/Sources/XStatsUI/Panel/UninstallerPage.swift @@ -52,41 +52,44 @@ private struct UninstallConfirmationSheet: View { let uninstaller: UninstallerController var body: some View { + let selectedCount = uninstaller.chosen.count.formatted(.number.locale(L10n.locale)) VStack(alignment: .leading, spacing: DS.Space.s4) { - HStack(spacing: DS.Space.s3) { + HStack(alignment: .top, spacing: DS.Space.s3) { AppIconCache.shared.image(bundlePath: app.url.path) .resizable() .frame(width: DS.Space.s8, height: DS.Space.s8) - Text(tr("卸载“\(app.name)”?")) + Text(tr("将“\(app.name)”移到废纸篓?")) .dsFont(.lg, weight: .semibold) .foregroundStyle(DS.Palette.textPrimary) - .lineLimit(2) + .fixedSize(horizontal: false, vertical: true) + .frame(maxWidth: .infinity, alignment: .leading) } - VStack(alignment: .leading, spacing: DS.Space.s1) { - Text(tr("将移到废纸篓")) - .dsFont(.sm, weight: .medium) + VStack(alignment: .leading, spacing: DS.Space.s3) { + Text(tr("包含应用及所选残留,共 \(selectedCount) 项(\(Format.bytes(uninstaller.chosenSize, base: .decimal)))。")) + .dsFont(.sm) .foregroundStyle(DS.Palette.textPrimary) - Text(tr("已选 \(uninstaller.chosen.count) 项 · \(Format.bytes(uninstaller.chosenSize, base: .decimal))")) + Text(tr("可在废纸篓中恢复。清空废纸篓后才会释放空间。")) .dsFont(.sm) .foregroundStyle(DS.Palette.textSecondary) - Text(tr("可以恢复,但清空废纸篓前不会释放空间")) - .dsFont(.xs) - .foregroundStyle(DS.Palette.textSecondary) } + .fixedSize(horizontal: false, vertical: true) HStack(spacing: DS.Space.s2) { Spacer() Button(tr("取消")) { uninstaller.cancelUninstall() } - .buttonStyle(DSButtonStyle(kind: .secondary)) + .buttonStyle(.bordered) .keyboardShortcut(.cancelAction) Button(tr("移到废纸篓"), role: .destructive) { uninstaller.confirmUninstall() } .buttonStyle(.borderedProminent) .tint(DS.Palette.error) } + .controlSize(.large) + .buttonBorderShape(.capsule) + .dsFont(.sm, weight: .medium) } .padding(DS.Space.s6) - .frame(width: 420) + .frame(width: 440) .background(DS.Palette.background) .appLanguageEnvironment() }