feat(settings): add setting for Reality scan candidates (#6471)

* feat(settings): allow customizing Reality scan candidate list

Persist a realityScanCandidates panel setting (defaulting to the previous
hardcoded list), expose it in General Settings with i18n, and have the
Find Targets scanner use it when the search box is empty.

Fixes #5847

* style(frontend): oxfmt realityScanCandidates in setting.ts

* Fix locale JSON syntax

This change removes the malformed duplicate key and missing comma in the Android per-app proxy translations across the bundled locale files. The JSON now parses correctly while preserving the translated labels for each language.

* docs(i18n): update Happ translations

Localize the remaining Happ subscription settings strings across the translation files and refine the English copy. This aligns the labels and descriptions with the current Happ behavior for notifications, TUN options, HWID enforcement, routing presets, and per-app proxy settings.

* refactor(reality): drop test-only scaffolding from the candidate setting

TestDefaultRealityScanCandidatesCSV compared the CSV against its own
initializer and a defaultValueMap lookup, and
TestRealityScanCandidateTokensFallsBackWithoutDB drove a no-database
state no production caller reaches (the only caller is the
scanRealityTargets handler, served after InitDB). The
s != nil && GetDB() != nil guard existed only for that second test.
None of them could fail except in lockstep with the code they restate.

* docs(api): describe the setting-driven scanRealityTargets fallback

An empty targets value now probes the realityScanCandidates setting,
but the endpoint summary, parameter description and handler comment
still promised the built-in seed list, so API consumers were told the
wrong target set. Regenerated openapi.json and synced the docs copy,
which also lacked the new AllSetting field in the settings reference.

---------

Co-authored-by: mrchatam <287639636+mrchatam@users.noreply.github.com>
Co-authored-by: Sanaei <ho3ein.sanaei@gmail.com>
This commit is contained in:
mrchatam
2026-09-13 16:18:28 +03:30
committed by GitHub
parent bf7ce2daaa
commit 768bbd2a29
29 changed files with 857 additions and 735 deletions
+16 -14
View File
@@ -1257,6 +1257,8 @@
"noisesSett": "تنظیمات Noises",
"trustedProxyCidrs": "CIDRهای پراکسی مورد اعتماد",
"trustedProxyCidrsDesc": "IPها/CIDRها (با کاما) که مجازند هدرهای host، proto و client IP فوروارد را تنظیم کنند.",
"realityScanCandidates": "نامزدهای اسکن Reality",
"realityScanCandidatesDesc": "فهرست host:port (یا CIDR) جداشده با کاما که وقتی جستجو خالی است به‌عنوان فهرست پیش‌فرض «یافتن اهداف» استفاده می‌شود. برای مقاصد پرتکرار خود سفارشی کنید.",
"ldap": {
"enable": "فعال‌سازی همگام‌سازی LDAP",
"host": "میزبان LDAP",
@@ -1507,7 +1509,7 @@
"subHappSubInfoText": "متن بنر اعلانات",
"subHappSubInfoTextDesc": "پیام اعلان سفارشی در بالای صفحه برنامه Happ (حداکثر ۲۰۰ نویسه).",
"subHappSubInfoColor": "رنگ بنر اعلانات",
"subHappSubInfoColorDesc": "تم رنگی بنر اعلان (پیش‌فرض، اطلاع‌رسانی، موفقیت، هشدار یا اخطار).",
"subHappSubInfoColorDesc": "تم رنگی بنر اعلان.",
"subHappSubInfoButtonText": "متن دکمه بنر",
"subHappSubInfoButtonTextDesc": "عنوان دکمه اقدام در بنر اعلان (حداکثر ۲۵ نویسه).",
"subHappSubInfoButtonLink": "لینک دکمه بنر",
@@ -1517,31 +1519,31 @@
"subHappSubExpireButtonLink": "لینک تمدید اشتراک",
"subHappSubExpireButtonLinkDesc": "آدرس صفحه خرید یا تمدید اشتراک منقضی‌شده.",
"subHappNotificationExpire": "اعلان انقضای اشتراک",
"subHappNotificationExpireDesc": "نمایش هشدار انقضای اشتراک به کاربر پیش از پایان اعتبار در برنامه Happ.",
"subHappNoLimit": ذف محدودیت تعداد قوانین",
"subHappNoLimitDesc": "اجازه اعمال تعداد نامحدود قوانین روتینگ بدون برش خوردن روی سیستم‌های تلفن همراه.",
"subHappNotificationExpireDesc": "برنامه Happ را وادار می‌کند ۳ روز پیش از پایان اشتراک به کاربر یادآوری کند.",
"subHappNoLimit": الت بدون محدودیت (No-Limit)",
"subHappNoLimitDesc": "افزایش سقف حافظه RAM هسته xray-core در Happ برای پایداری و کارایی بهتر (آزمایشی).",
"subHappAlwaysHwid": "الزام شناسه سخت‌افزاری (HWID)",
"subHappAlwaysHwidDesc": "قفل کردن درخواست‌های اشتراک به شناسه سخت‌افزاری دستگاه جهت جلوگیری از اشتراک‌گذاری اکانت.",
"subHappAlwaysHwidDesc": "جلوگیری از خاموش کردن ارسال HWID توسط کاربر در تنظیمات Happ.",
"subHappTunMode": "حالت تونل (TUN Mode)",
"subHappTunModeDesc": "حالت رابط شبکه مجازی TUN در برنامه Happ (پیش‌فرض، سیستمی یا سخت‌گیرانه).",
"subHappTunModeDesc": "پشته شبکه TUN در دسکتاپ: سیستمی (پشته سیستم‌عامل) یا gVisor (پشته فضای کاربری).",
"subHappTunType": "موتور شبکه TUN",
"subHappTunTypeDesc": "پشته شبکه مورد استفاده برای TUN (سیستمی، gVisor یا ترکیبی).",
"subHappTunTypeDesc": "هسته مورد استفاده برای اتصال TUN در دسکتاپ: sing-box، tun2proxy، پیش‌فرض (Happ TUN) یا Xray.",
"subHappExcludeRoutes": "مستثنی کردن مسیرهای CIDR",
"subHappExcludeRoutesDesc": "رنج‌های IP جدا شده با کاما جهت دور زدن تونل VPN (مانند 192.168.0.0/16, 10.0.0.0/8).",
"subHappExcludeApns": "مستثنی کردن سرویس‌های اعلان اپل (APNs)",
"subHappExcludeApnsDesc": "دور زدن سرویس‌های اعلان اپل برای اطمینان از دریافت پایدار ناتیفیکیشن‌ها در iOS.",
"subHappColorProfile": "پروفایل رنگ و پوسته",
"subHappColorProfileDesc": "پوسته ظاهری برنامه Happ (بنفش، فیروزه‌ای، سایبرپانک یا JSON سفارشی).",
"subHappColorProfileDesc": "تم رنگی سفارشی iOS به صورت رشته JSON، یا resetcolors برای بازگشت به رنگ‌های پیش‌فرض.",
"subHappPingType": "روش تست پینگ",
"subHappPingTypeDesc": "پروتکل اندازه‌گیری تأخیر گره‌ها در برنامه Happ (icmp، tcp یا http).",
"subHappPingTypeDesc": "روش اندازه‌گیری تأخیر نودها در Happ: از طریق پروکسی (GET یا HEAD)، TCP یا ICMP.",
"subHappAutoConnect": "اتصال خودکار هنگام اجرا",
"subHappAutoConnectDesc": "اتصال خودکار به وی‌پی‌ان با باز شدن برنامه Happ.",
"subHappAutoConnectType": "راهبرد اتصال خودکار",
"subHappAutoConnectTypeDesc": "هدف اتصال خودکار: سریع‌ترین سرور یا آخرین سرور استفاده‌شده.",
"subHappAutoConnectTypeDesc": "سروری که اتصال خودکار انتخاب می‌کند: کمترین تأخیر، آخرین نود استفاده‌شده یا یک نود تصادفی.",
"subHappPerAppMode": "پراکسی انتخابی برنامه‌ها در اندروید",
"subHappPerAppModeDesc": "مدیریت عبور ترافیک برنامه‌های اندروید: خاموش، عبور فقط برنامه‌های منتخب یا مستثنی کردن آن‌ها.",
"subHappPerAppModeDesc": "مدیریت مسیریابی برنامه‌های اندروید: خاموش، روشن (پراکسی فقط برای برنامه‌های فهرست‌شده) یا بای‌پس (مستثنیکردن برنامه‌های فهرست‌شده).",
"subHappPerAppList": "نام بسته‌های برنامه‌های اندروید",
"subHappPerAppListDesc": "نام بسته‌های اپلیکیشن‌های اندروید جدا شده با کاما (مانند com.telegram.messenger).",
"subHappPerAppListDesc": "نام بسته برنامه‌های اندروید برای شامل یا مستثنی کردن، جدا شده با کاما (مانند org.telegram.messenger).",
"subHappPresetIran": "دور زدن سایت‌های ایران (Iran Bypass)",
"subHappPresetChina": "دور زدن چین (China Direct)",
"subHappPresetAdblock": "مسدودسازی تبلیغات (AdBlock)",
@@ -1583,10 +1585,10 @@
"subHappDeeplinkGenerated": "دیپ‌لینک تولید و در قوانین روتینگ اعمال شد",
"subHappGroupLinks": "لینک‌های اشتراک",
"subHappGroupRouting": "قوانین و روتینگ",
"subHappGroupBanners": "اعلانات و بنرهای هوشمند",
"subHappGroupBanners": "بنرها و اعلانات",
"subHappGroupNetwork": "تنظیمات شبکه و TUN",
"subHappGroupThemes": "ظاهر و پوسته برنامه",
"subHappGroupFailover": "مهاجرت و مدیریت کلاینت",
"subHappGroupFailover": "مهاجرت و مدیریت برنامه",
"subHappGroupAndroid": "پراکسی برنامه‌های اندروید",
"discordSettings": "ربات دیسکورد",
"discordBotEnable": "فعال‌سازی اعلان‌های دیسکورد",