mirror of
https://github.com/clash-verge-rev/clash-verge-rev.git
synced 2026-11-07 18:13:35 +08:00
fix(core): clarify and localize existing core errors
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
import { createInstance } from 'i18next'
|
||||
import { createElement } from 'react'
|
||||
import { renderToStaticMarkup } from 'react-dom/server'
|
||||
import { I18nextProvider } from 'react-i18next'
|
||||
import { afterEach, expect, it, vi } from 'vitest'
|
||||
|
||||
import settings from '@/locales/en/settings.json'
|
||||
import {
|
||||
getSnapshotNotices,
|
||||
hideNotice,
|
||||
showNotice,
|
||||
syncSidecarFailure,
|
||||
} from '@/services/notice-service'
|
||||
|
||||
import { NoticeManager } from './notice-manager'
|
||||
|
||||
vi.mock('react', async (importOriginal) => ({
|
||||
...(await importOriginal<typeof import('react')>()),
|
||||
useSyncExternalStore: (_subscribe: unknown, snapshot: () => unknown) =>
|
||||
snapshot(),
|
||||
}))
|
||||
vi.mock('@/utils/open-external-url', () => ({ openExternalUrl: vi.fn() }))
|
||||
|
||||
afterEach(() => {
|
||||
getSnapshotNotices().forEach(({ id }) => hideNotice(id))
|
||||
})
|
||||
|
||||
it.each([
|
||||
[
|
||||
'startup',
|
||||
'process verge-mihomo remains after IPC failure; refusing a second core',
|
||||
],
|
||||
[
|
||||
'restart',
|
||||
'process verge-mihomo-alpha remains after IPC failure; refusing a second core',
|
||||
],
|
||||
[
|
||||
'sidecar',
|
||||
'Service core rejected: permission denied; Sidecar fallback failed: process verge-mihomo.exe (PID 123) is still running; refusing a second core',
|
||||
],
|
||||
])(
|
||||
'explains an occupied core during %s and preserves diagnostics',
|
||||
async (operation, detail) => {
|
||||
if (operation === 'startup') {
|
||||
showNotice.error('settings.feedback.errors.clash.startFailed', detail)
|
||||
} else if (operation === 'restart') {
|
||||
showNotice.error({ code: 'CORE_RESTART_FAILED', detail })
|
||||
} else {
|
||||
syncSidecarFailure({ revision: 1, detail })
|
||||
}
|
||||
const i18n = createInstance()
|
||||
await i18n.init({
|
||||
lng: 'en',
|
||||
resources: { en: { translation: { settings } } },
|
||||
})
|
||||
const html = renderToStaticMarkup(
|
||||
createElement(I18nextProvider, { i18n }, createElement(NoticeManager)),
|
||||
)
|
||||
expect(html).toContain('a core process is already running')
|
||||
expect(html).toContain('Close the related app or stop the leftover process')
|
||||
expect(html).toContain(detail)
|
||||
if (operation === 'sidecar') {
|
||||
expect(html).toContain('service-core-permissions')
|
||||
expect(html).toContain('PID 123')
|
||||
}
|
||||
},
|
||||
)
|
||||
@@ -70,8 +70,8 @@ const resolveNoticeMessage = (
|
||||
|
||||
const detail = i18n.params?.message
|
||||
const existingCore =
|
||||
notice.code === 'SERVICE_SIDECAR_FAILED' && typeof detail === 'string'
|
||||
? /process verge-mihomo(?:-alpha)?(?:\.exe)? \(PID (\d+)\) is still running; refusing a second core\s*$/.exec(
|
||||
typeof detail === 'string'
|
||||
? /process verge-mihomo(?:-alpha|-al)?(?:\.exe)? (?:\(PID (\d+)\) is still running|remains after IPC failure); refusing a second core\s*$/.exec(
|
||||
detail,
|
||||
)
|
||||
: null
|
||||
@@ -101,9 +101,8 @@ const resolveNoticeMessage = (
|
||||
</Link>
|
||||
</Box>
|
||||
)}
|
||||
{t('settings.feedback.errors.clashService.coreAlreadyRunning', {
|
||||
pid: existingCore[1],
|
||||
})}
|
||||
{t('settings.feedback.errors.clashService.coreAlreadyRunning')}
|
||||
{existingCore[1] && <Box sx={{ mt: 1 }}>PID {existingCore[1]}</Box>}
|
||||
<Box component="details" sx={{ mt: 1 }}>
|
||||
<Box component="summary" sx={{ cursor: 'pointer' }}>
|
||||
{t('shared.feedback.errors.details')}
|
||||
|
||||
@@ -667,7 +667,7 @@
|
||||
"reinstallFailed": "تعذّر إعادة تثبيت الخدمة",
|
||||
"repairFailed": "تعذّر إصلاح الخدمة",
|
||||
"sidecarFailed": "تعذّر المتابعة باستخدام Sidecar",
|
||||
"coreAlreadyRunning": "تعذّر بدء وضع Sidecar: لا تزال نواة أخرى قيد التشغيل (PID {{pid}}). أغلق نسخ Clash Verge الأخرى أو التطبيق الذي يستخدم هذه النواة، ثم أعد المحاولة."
|
||||
"coreAlreadyRunning": "تعذّر بدء النواة: توجد عملية نواة قيد التشغيل بالفعل. أغلق التطبيق المعني أو أنهِ العملية المتبقية، ثم أعد المحاولة. إذا استمرت المشكلة، فأعد تشغيل الكمبيوتر."
|
||||
},
|
||||
"sysproxy": {
|
||||
"privilegeRequired": "تعذّر ضبط وكيل النظام: رفض macOS التغيير لعدم كفاية الصلاحيات. ثبّت خدمة Clash Verge؛ وإن كنت مسؤولًا فيمكنك أيضًا إيقاف اشتراط كلمة سر المسؤول للإعدادات على مستوى النظام من الخيارات المتقدمة في إعدادات النظام ← الخصوصية والأمان.",
|
||||
|
||||
@@ -667,7 +667,7 @@
|
||||
"reinstallFailed": "Dienst konnte nicht neu installiert werden",
|
||||
"repairFailed": "Dienst konnte nicht repariert werden",
|
||||
"sidecarFailed": "Fortsetzung mit Sidecar fehlgeschlagen",
|
||||
"coreAlreadyRunning": "Der Sidecar-Modus konnte nicht gestartet werden: Ein anderer Kern läuft noch (PID {{pid}}). Beenden Sie andere Clash-Verge-Instanzen oder die App, die diesen Kern verwendet, und versuchen Sie es erneut."
|
||||
"coreAlreadyRunning": "Der Kern kann nicht gestartet werden: Ein Kernprozess läuft bereits. Beenden Sie die zugehörige App oder den verbliebenen Prozess und versuchen Sie es erneut. Wenn das Problem weiterhin besteht, starten Sie den Computer neu."
|
||||
},
|
||||
"sysproxy": {
|
||||
"privilegeRequired": "Systemproxy kann nicht gesetzt werden: macOS hat die Änderung mangels Berechtigung abgelehnt. Installieren Sie den Clash-Verge-Dienst; als Administrator können Sie in den erweiterten Optionen unter Systemeinstellungen → Datenschutz & Sicherheit auch die Passwortpflicht für systemweite Einstellungen deaktivieren.",
|
||||
|
||||
@@ -667,7 +667,7 @@
|
||||
"reinstallFailed": "Failed to reinstall the service",
|
||||
"repairFailed": "Failed to repair the service",
|
||||
"sidecarFailed": "Failed to continue with Sidecar",
|
||||
"coreAlreadyRunning": "Could not start normal mode (Sidecar): another core is still running (PID {{pid}}). Exit other Clash Verge instances or the app using this core, then retry."
|
||||
"coreAlreadyRunning": "Cannot start the core: a core process is already running. Close the related app or stop the leftover process, then retry. If the problem persists, restart your computer."
|
||||
},
|
||||
"sysproxy": {
|
||||
"privilegeRequired": "Cannot set the system proxy: macOS refused the change for lack of privileges. Install the Clash Verge service; an administrator can also turn off the administrator-password requirement for system-wide settings, in the advanced options of System Settings → Privacy & Security.",
|
||||
|
||||
@@ -667,7 +667,7 @@
|
||||
"reinstallFailed": "No se pudo reinstalar el servicio",
|
||||
"repairFailed": "No se pudo reparar el servicio",
|
||||
"sidecarFailed": "No se pudo continuar con Sidecar",
|
||||
"coreAlreadyRunning": "No se pudo iniciar el modo Sidecar: hay otro núcleo en ejecución (PID {{pid}}). Cierre las otras instancias de Clash Verge o la aplicación que usa ese núcleo y vuelva a intentarlo."
|
||||
"coreAlreadyRunning": "No se puede iniciar el núcleo: ya hay un proceso del núcleo en ejecución. Cierre la aplicación correspondiente o finalice el proceso restante y vuelva a intentarlo. Si el problema persiste, reinicie el equipo."
|
||||
},
|
||||
"sysproxy": {
|
||||
"privilegeRequired": "No se puede establecer el proxy del sistema: macOS rechazó el cambio por falta de permisos. Instale el servicio de Clash Verge; si es administrador, también puede desactivar la exigencia de contraseña de administrador para los ajustes de todo el sistema en las opciones avanzadas de Ajustes del Sistema → Privacidad y seguridad.",
|
||||
|
||||
@@ -667,7 +667,7 @@
|
||||
"reinstallFailed": "نصب مجدد سرویس ناموفق بود",
|
||||
"repairFailed": "تعمیر سرویس ناموفق بود",
|
||||
"sidecarFailed": "ادامه با Sidecar ناموفق بود",
|
||||
"coreAlreadyRunning": "حالت Sidecar شروع نشد: هسته دیگری هنوز در حال اجراست (PID {{pid}}). نمونههای دیگر Clash Verge یا برنامهای که از این هسته استفاده میکند را ببندید و دوباره تلاش کنید."
|
||||
"coreAlreadyRunning": "هسته شروع نمیشود: یک فرایند هسته از قبل در حال اجراست. برنامه مرتبط را ببندید یا فرایند باقیمانده را متوقف کنید و دوباره تلاش کنید. اگر مشکل ادامه داشت، رایانه را راهاندازی مجدد کنید."
|
||||
},
|
||||
"sysproxy": {
|
||||
"privilegeRequired": "تنظیم پراکسی سیستم ممکن نیست: macOS به دلیل نداشتن دسترسی، این تغییر را رد کرد. سرویس Clash Verge را نصب کنید؛ اگر مدیر هستید میتوانید در گزینههای پیشرفتهٔ تنظیمات سیستم ← حریم خصوصی و امنیت، الزام رمز مدیر برای تنظیمات سراسری سیستم را نیز خاموش کنید.",
|
||||
|
||||
@@ -667,7 +667,7 @@
|
||||
"reinstallFailed": "Gagal memasang ulang layanan",
|
||||
"repairFailed": "Gagal memperbaiki layanan",
|
||||
"sidecarFailed": "Gagal melanjutkan dengan Sidecar",
|
||||
"coreAlreadyRunning": "Tidak dapat memulai mode Sidecar: inti lain masih berjalan (PID {{pid}}). Tutup instans Clash Verge lain atau aplikasi yang menggunakan inti tersebut, lalu coba lagi."
|
||||
"coreAlreadyRunning": "Tidak dapat memulai inti: proses inti sudah berjalan. Tutup aplikasi terkait atau hentikan proses yang tersisa, lalu coba lagi. Jika masalah berlanjut, mulai ulang komputer."
|
||||
},
|
||||
"sysproxy": {
|
||||
"privilegeRequired": "Tidak dapat mengatur proxy sistem: macOS menolak perubahan ini karena hak akses tidak mencukupi. Pasang layanan Clash Verge; jika Anda administrator, Anda juga dapat mematikan keharusan kata sandi administrator untuk pengaturan seluruh sistem di opsi lanjutan Pengaturan Sistem → Privasi & Keamanan.",
|
||||
|
||||
@@ -667,7 +667,7 @@
|
||||
"reinstallFailed": "サービスの再インストールに失敗しました",
|
||||
"repairFailed": "サービスの修復に失敗しました",
|
||||
"sidecarFailed": "Sidecar での続行に失敗しました",
|
||||
"coreAlreadyRunning": "通常モード(Sidecar)を開始できません:別のコアが実行中です(PID {{pid}})。他の Clash Verge またはこのコアを使用しているアプリを終了してから、再試行してください。"
|
||||
"coreAlreadyRunning": "コアを起動できません:コアプロセスが実行中です。関連アプリまたは残存プロセスを終了して再試行してください。解決しない場合は、コンピューターを再起動してください。"
|
||||
},
|
||||
"sysproxy": {
|
||||
"privilegeRequired": "システムプロキシを設定できません: 権限が不足しているため macOS が変更を拒否しました。Clash Verge サービスをインストールしてください。管理者であれば、システム設定 → プライバシーとセキュリティの詳細オプションで、システム全体の設定に管理者パスワードを要求する設定をオフにすることもできます。",
|
||||
|
||||
@@ -667,7 +667,7 @@
|
||||
"reinstallFailed": "서비스를 다시 설치하지 못했습니다",
|
||||
"repairFailed": "서비스를 복구하지 못했습니다",
|
||||
"sidecarFailed": "Sidecar로 계속하지 못했습니다",
|
||||
"coreAlreadyRunning": "일반 모드(Sidecar)를 시작할 수 없습니다. 다른 코어가 실행 중입니다(PID {{pid}}). 다른 Clash Verge 인스턴스 또는 해당 코어를 사용하는 앱을 종료한 후 다시 시도하세요."
|
||||
"coreAlreadyRunning": "코어를 시작할 수 없습니다. 이미 실행 중인 코어 프로세스가 있습니다. 관련 앱이나 남아 있는 프로세스를 종료한 뒤 다시 시도하세요. 문제가 계속되면 컴퓨터를 다시 시작하세요."
|
||||
},
|
||||
"sysproxy": {
|
||||
"privilegeRequired": "시스템 프록시를 설정할 수 없습니다: 권한이 부족하여 macOS가 변경을 거부했습니다. Clash Verge 서비스를 설치하십시오. 관리자라면 시스템 설정 → 개인 정보 보호 및 보안의 고급 옵션에서, 시스템 전체 설정에 관리자 암호를 요구하는 설정을 끌 수도 있습니다.",
|
||||
|
||||
@@ -667,7 +667,7 @@
|
||||
"reinstallFailed": "Falha ao reinstalar o serviço",
|
||||
"repairFailed": "Falha ao reparar o serviço",
|
||||
"sidecarFailed": "Falha ao continuar com o Sidecar",
|
||||
"coreAlreadyRunning": "Não foi possível iniciar o modo normal (Sidecar): outro núcleo ainda está em execução (PID {{pid}}). Saia das outras instâncias do Clash Verge ou do aplicativo que usa este núcleo e tente novamente."
|
||||
"coreAlreadyRunning": "Não é possível iniciar o núcleo: já há um processo do núcleo em execução. Feche o aplicativo correspondente ou encerre o processo remanescente e tente novamente. Se o problema persistir, reinicie o computador."
|
||||
},
|
||||
"sysproxy": {
|
||||
"privilegeRequired": "Não é possível definir o proxy do sistema: o macOS recusou a alteração por falta de privilégios. Instale o serviço do Clash Verge; um administrador também pode desativar a exigência de senha de administrador para configurações do sistema, nas opções avançadas em Ajustes do Sistema → Privacidade e Segurança.",
|
||||
|
||||
@@ -667,7 +667,7 @@
|
||||
"reinstallFailed": "Не удалось переустановить службу",
|
||||
"repairFailed": "Не удалось восстановить службу",
|
||||
"sidecarFailed": "Не удалось продолжить в режиме Sidecar",
|
||||
"coreAlreadyRunning": "Не удалось запустить режим Sidecar: другое ядро ещё работает (PID {{pid}}). Закройте другие экземпляры Clash Verge или приложение, использующее это ядро, и повторите попытку."
|
||||
"coreAlreadyRunning": "Не удалось запустить ядро: процесс ядра уже работает. Закройте соответствующее приложение или завершите оставшийся процесс и повторите попытку. Если проблема сохраняется, перезагрузите компьютер."
|
||||
},
|
||||
"sysproxy": {
|
||||
"privilegeRequired": "Не удалось настроить системный прокси: macOS отклонил изменение из-за нехватки прав. Установите службу Clash Verge; администратор также может отключить требование пароля администратора для общесистемных настроек в дополнительных параметрах раздела «Системные настройки → Конфиденциальность и безопасность».",
|
||||
|
||||
@@ -667,7 +667,7 @@
|
||||
"reinstallFailed": "Hizmet yeniden kurulamadı",
|
||||
"repairFailed": "Hizmet onarılamadı",
|
||||
"sidecarFailed": "Sidecar ile devam edilemedi",
|
||||
"coreAlreadyRunning": "Sidecar modu başlatılamadı: başka bir çekirdek hâlâ çalışıyor (PID {{pid}}). Diğer Clash Verge örneklerini veya bu çekirdeği kullanan uygulamayı kapatıp yeniden deneyin."
|
||||
"coreAlreadyRunning": "Çekirdek başlatılamıyor: bir çekirdek işlemi zaten çalışıyor. İlgili uygulamayı kapatın veya kalan işlemi sonlandırıp yeniden deneyin. Sorun devam ederse bilgisayarı yeniden başlatın."
|
||||
},
|
||||
"sysproxy": {
|
||||
"privilegeRequired": "Sistem vekil sunucusu ayarlanamıyor: macOS yetki yetersizliği nedeniyle değişikliği reddetti. Clash Verge hizmetini kurun; yöneticiyseniz Sistem Ayarları → Gizlilik ve Güvenlik bölümündeki gelişmiş seçeneklerden, sistem genelindeki ayarlar için yönetici parolası zorunluluğunu da kapatabilirsiniz.",
|
||||
|
||||
@@ -667,7 +667,7 @@
|
||||
"reinstallFailed": "Хезмәтне яңадан урнаштырып булмады",
|
||||
"repairFailed": "Хезмәтне төзәтеп булмады",
|
||||
"sidecarFailed": "Sidecar белән дәвам итеп булмады",
|
||||
"coreAlreadyRunning": "Sidecar режимын башлап булмады: башка төш әле эшли (PID {{pid}}). Башка Clash Verge нөсхәләрен яки бу төшне кулланучы кушымтаны ябыгыз һәм яңадан сынап карагыз."
|
||||
"coreAlreadyRunning": "Төшне башлап булмый: төш процессы инде эшли. Тиешле кушымтаны ябыгыз яки калган процессны тәмамлагыз һәм яңадан сынап карагыз. Проблема хәл ителмәсә, санакны яңадан кабызыгыз."
|
||||
},
|
||||
"sysproxy": {
|
||||
"privilegeRequired": "Система проксиен көйләп булмый: хокуклар җитмәгәнгә күрә macOS бу үзгәрешне кире какты. Clash Verge хезмәтен урнаштырыгыз; әгәр сез администратор булсагыз, Система көйләнмәләре → Шәхсилек вә иминлек бүлегенең өстәмә параметрларында, система дәрәҗәсендәге көйләнмәләр өчен администратор паролен таләп итүне сүндерә аласыз.",
|
||||
|
||||
@@ -667,7 +667,7 @@
|
||||
"reinstallFailed": "重新安装服务失败",
|
||||
"repairFailed": "修复服务失败",
|
||||
"sidecarFailed": "继续使用 Sidecar 失败",
|
||||
"coreAlreadyRunning": "无法启动普通模式(Sidecar):已有内核进程正在运行(PID {{pid}})。请先退出其他 Clash Verge 实例或使用该内核的程序,然后重试。"
|
||||
"coreAlreadyRunning": "无法启动内核:已有内核进程正在运行。请退出相关应用或清理残留进程后重试。若仍无法解决,请重启电脑。"
|
||||
},
|
||||
"sysproxy": {
|
||||
"privilegeRequired": "无法设置系统代理:macOS 以权限不足为由拒绝了这次修改。请安装 Clash Verge 服务;管理员也可以在系统设置 → 隐私与安全性的高级选项中,关闭访问系统范围设置需要管理员密码的要求。",
|
||||
|
||||
@@ -667,7 +667,7 @@
|
||||
"reinstallFailed": "重新安裝服務失敗",
|
||||
"repairFailed": "修復服務失敗",
|
||||
"sidecarFailed": "繼續使用 Sidecar 失敗",
|
||||
"coreAlreadyRunning": "無法啟動一般模式(Sidecar):已有核心程序正在執行(PID {{pid}})。請先結束其他 Clash Verge 執行個體或使用該核心的程式,然後重試。"
|
||||
"coreAlreadyRunning": "無法啟動核心:已有核心程序正在執行。請結束相關應用程式或清理殘留程序後重試。若仍無法解決,請重新啟動電腦。"
|
||||
},
|
||||
"sysproxy": {
|
||||
"privilegeRequired": "無法設定系統代理:macOS 以權限不足為由拒絕了這次修改。請安裝 Clash Verge 服務;管理者也可以在系統設定 → 隱私權與安全性的進階選項中,關閉存取系統層級設定需要管理者密碼的要求。",
|
||||
|
||||
Reference in New Issue
Block a user