Explorar o código

fix(inbound): explain how to unlock fallbacks on the inbound form (#5014)

The fallbacks card only renders for VLESS/Trojan over RAW with TLS or
Reality security, and a new inbound starts at security=none — so the Add
Inbound page looked like it had lost fallback support entirely. Show an
inline hint in that state pointing at the Security tab.
MHSanaei hai 13 horas
pai
achega
a5e5640804

+ 10 - 0
frontend/src/pages/inbounds/form/InboundFormModal.tsx

@@ -2,6 +2,7 @@ import { useEffect, useRef, useState } from 'react';
 import { useTranslation } from 'react-i18next';
 import { useTranslation } from 'react-i18next';
 import dayjs from 'dayjs';
 import dayjs from 'dayjs';
 import {
 import {
+  Alert,
   Form,
   Form,
   Input,
   Input,
   InputNumber,
   InputNumber,
@@ -680,6 +681,15 @@ export default function InboundFormModal({
       {protocol === Protocols.VLESS && <VlessFields saving={saving} selectedVlessAuth={selectedVlessAuth} network={network} security={security} getNewVlessEnc={getNewVlessEnc} clearVlessEnc={clearVlessEnc} />}
       {protocol === Protocols.VLESS && <VlessFields saving={saving} selectedVlessAuth={selectedVlessAuth} network={network} security={security} getNewVlessEnc={getNewVlessEnc} clearVlessEnc={clearVlessEnc} />}
 
 
       {isFallbackHost && fallbacksCard}
       {isFallbackHost && fallbacksCard}
+      {(protocol === Protocols.VLESS || protocol === Protocols.TROJAN)
+        && network === 'tcp' && !isFallbackHost && (
+        <Alert
+          className="mt-12"
+          type="info"
+          showIcon
+          message={t('pages.inbounds.fallbacks.needsTls')}
+        />
+      )}
     </>
     </>
   );
   );
 
 

+ 2 - 1
internal/web/translation/ar-EG.json

@@ -282,7 +282,8 @@
         "quickAdded": "تمت إضافة {n} fallback",
         "quickAdded": "تمت إضافة {n} fallback",
         "quickAddedNone": "لا توجد inbounds جديدة مؤهلة للإضافة",
         "quickAddedNone": "لا توجد inbounds جديدة مؤهلة للإضافة",
         "routesWhen": "يوجَّه عندما",
         "routesWhen": "يوجَّه عندما",
-        "defaultCatchAll": "افتراضي — يلتقط أي شيء آخر"
+        "defaultCatchAll": "افتراضي — يلتقط أي شيء آخر",
+        "needsTls": "تصبح الـ Fallbacks متاحة بعد اختيار TLS أو Reality في تبويب الأمان (فقط VLESS/Trojan عبر RAW)."
       },
       },
       "protocol": "بروتوكول",
       "protocol": "بروتوكول",
       "port": "المنفذ",
       "port": "المنفذ",

+ 2 - 1
internal/web/translation/en-US.json

@@ -282,7 +282,8 @@
         "quickAdded": "Added {n} fallback(s)",
         "quickAdded": "Added {n} fallback(s)",
         "quickAddedNone": "No new eligible inbounds to add",
         "quickAddedNone": "No new eligible inbounds to add",
         "routesWhen": "Routes when",
         "routesWhen": "Routes when",
-        "defaultCatchAll": "Default — catches anything else"
+        "defaultCatchAll": "Default — catches anything else",
+        "needsTls": "Fallbacks become available once Security is set to TLS or Reality on the Security tab (VLESS/Trojan over RAW only)."
       },
       },
       "protocol": "Protocol",
       "protocol": "Protocol",
       "port": "Port",
       "port": "Port",

+ 2 - 1
internal/web/translation/es-ES.json

@@ -282,7 +282,8 @@
         "quickAdded": "Se añadieron {n} fallback(s)",
         "quickAdded": "Se añadieron {n} fallback(s)",
         "quickAddedNone": "No hay nuevos inbounds elegibles",
         "quickAddedNone": "No hay nuevos inbounds elegibles",
         "routesWhen": "Enruta cuando",
         "routesWhen": "Enruta cuando",
-        "defaultCatchAll": "Por defecto — captura cualquier otra cosa"
+        "defaultCatchAll": "Por defecto — captura cualquier otra cosa",
+        "needsTls": "Los fallbacks estarán disponibles al seleccionar TLS o Reality en la pestaña de Seguridad (solo VLESS/Trojan sobre RAW)."
       },
       },
       "protocol": "Protocolo",
       "protocol": "Protocolo",
       "port": "Puerto",
       "port": "Puerto",

+ 2 - 1
internal/web/translation/fa-IR.json

@@ -282,7 +282,8 @@
         "quickAdded": "{n} فال‌بک افزوده شد",
         "quickAdded": "{n} فال‌بک افزوده شد",
         "quickAddedNone": "اینباند جدیدی برای افزودن وجود ندارد",
         "quickAddedNone": "اینباند جدیدی برای افزودن وجود ندارد",
         "routesWhen": "هدایت می‌شود وقتی",
         "routesWhen": "هدایت می‌شود وقتی",
-        "defaultCatchAll": "پیش‌فرض — همه‌ی موارد دیگر را می‌گیرد"
+        "defaultCatchAll": "پیش‌فرض — همه‌ی موارد دیگر را می‌گیرد",
+        "needsTls": "فال‌بک‌ها پس از انتخاب TLS یا Reality در برگه‌ی امنیت در دسترس می‌شوند (فقط VLESS/Trojan روی RAW)."
       },
       },
       "protocol": "پروتکل",
       "protocol": "پروتکل",
       "port": "پورت",
       "port": "پورت",

+ 2 - 1
internal/web/translation/id-ID.json

@@ -282,7 +282,8 @@
         "quickAdded": "Menambahkan {n} fallback",
         "quickAdded": "Menambahkan {n} fallback",
         "quickAddedNone": "Tidak ada inbound baru yang memenuhi syarat",
         "quickAddedNone": "Tidak ada inbound baru yang memenuhi syarat",
         "routesWhen": "Diarahkan ketika",
         "routesWhen": "Diarahkan ketika",
-        "defaultCatchAll": "Default — menangkap apa pun lainnya"
+        "defaultCatchAll": "Default — menangkap apa pun lainnya",
+        "needsTls": "Fallback tersedia setelah memilih TLS atau Reality di tab Keamanan (hanya VLESS/Trojan melalui RAW)."
       },
       },
       "protocol": "Protokol",
       "protocol": "Protokol",
       "port": "Port",
       "port": "Port",

+ 2 - 1
internal/web/translation/ja-JP.json

@@ -282,7 +282,8 @@
         "quickAdded": "{n} 件のフォールバックを追加しました",
         "quickAdded": "{n} 件のフォールバックを追加しました",
         "quickAddedNone": "追加可能な新規インバウンドはありません",
         "quickAddedNone": "追加可能な新規インバウンドはありません",
         "routesWhen": "次の条件でルーティング",
         "routesWhen": "次の条件でルーティング",
-        "defaultCatchAll": "デフォルト — その他すべてを捕捉"
+        "defaultCatchAll": "デフォルト — その他すべてを捕捉",
+        "needsTls": "フォールバックは、セキュリティタブで TLS または Reality を選択すると設定できます(RAW 上の VLESS/Trojan のみ)。"
       },
       },
       "protocol": "プロトコル",
       "protocol": "プロトコル",
       "port": "ポート",
       "port": "ポート",

+ 2 - 1
internal/web/translation/pt-BR.json

@@ -282,7 +282,8 @@
         "quickAdded": "{n} fallback(s) adicionado(s)",
         "quickAdded": "{n} fallback(s) adicionado(s)",
         "quickAddedNone": "Nenhum inbound novo elegível para adicionar",
         "quickAddedNone": "Nenhum inbound novo elegível para adicionar",
         "routesWhen": "Roteia quando",
         "routesWhen": "Roteia quando",
-        "defaultCatchAll": "Padrão — captura qualquer outra coisa"
+        "defaultCatchAll": "Padrão — captura qualquer outra coisa",
+        "needsTls": "Os fallbacks ficam disponíveis após selecionar TLS ou Reality na aba Segurança (apenas VLESS/Trojan sobre RAW)."
       },
       },
       "protocol": "Protocolo",
       "protocol": "Protocolo",
       "port": "Porta",
       "port": "Porta",

+ 2 - 1
internal/web/translation/ru-RU.json

@@ -282,7 +282,8 @@
         "quickAdded": "Добавлено {n} фолбэк(ов)",
         "quickAdded": "Добавлено {n} фолбэк(ов)",
         "quickAddedNone": "Нет новых подходящих инбаундов",
         "quickAddedNone": "Нет новых подходящих инбаундов",
         "routesWhen": "Маршрутизирует, когда",
         "routesWhen": "Маршрутизирует, когда",
-        "defaultCatchAll": "По умолчанию — ловит всё остальное"
+        "defaultCatchAll": "По умолчанию — ловит всё остальное",
+        "needsTls": "Fallbacks станут доступны после выбора TLS или Reality на вкладке «Безопасность» (только VLESS/Trojan поверх RAW)."
       },
       },
       "protocol": "Протокол",
       "protocol": "Протокол",
       "port": "Порт",
       "port": "Порт",

+ 2 - 1
internal/web/translation/tr-TR.json

@@ -282,7 +282,8 @@
         "quickAdded": "{n} fallback eklendi",
         "quickAdded": "{n} fallback eklendi",
         "quickAddedNone": "Eklenecek yeni uygun gelen bağlantı yok",
         "quickAddedNone": "Eklenecek yeni uygun gelen bağlantı yok",
         "routesWhen": "Şu Durumda Yönlendirir",
         "routesWhen": "Şu Durumda Yönlendirir",
-        "defaultCatchAll": "Varsayılan — başka her şeyi yakalar"
+        "defaultCatchAll": "Varsayılan — başka her şeyi yakalar",
+        "needsTls": "Geri düşüşler (fallback), Güvenlik sekmesinde TLS veya Reality seçildiğinde kullanılabilir olur (yalnızca RAW üzerinde VLESS/Trojan)."
       },
       },
       "protocol": "Protokol",
       "protocol": "Protokol",
       "port": "Port",
       "port": "Port",

+ 2 - 1
internal/web/translation/uk-UA.json

@@ -282,7 +282,8 @@
         "quickAdded": "Додано {n} фолбек(ів)",
         "quickAdded": "Додано {n} фолбек(ів)",
         "quickAddedNone": "Немає нових придатних інбаундів",
         "quickAddedNone": "Немає нових придатних інбаундів",
         "routesWhen": "Маршрутизує, коли",
         "routesWhen": "Маршрутизує, коли",
-        "defaultCatchAll": "За замовчуванням — ловить усе інше"
+        "defaultCatchAll": "За замовчуванням — ловить усе інше",
+        "needsTls": "Fallbacks стануть доступні після вибору TLS або Reality на вкладці «Безпека» (лише VLESS/Trojan поверх RAW)."
       },
       },
       "protocol": "Протокол",
       "protocol": "Протокол",
       "port": "Порт",
       "port": "Порт",

+ 2 - 1
internal/web/translation/vi-VN.json

@@ -282,7 +282,8 @@
         "quickAdded": "Đã thêm {n} fallback",
         "quickAdded": "Đã thêm {n} fallback",
         "quickAddedNone": "Không có inbound mới nào đủ điều kiện",
         "quickAddedNone": "Không có inbound mới nào đủ điều kiện",
         "routesWhen": "Định tuyến khi",
         "routesWhen": "Định tuyến khi",
-        "defaultCatchAll": "Mặc định — bắt mọi thứ khác"
+        "defaultCatchAll": "Mặc định — bắt mọi thứ khác",
+        "needsTls": "Fallback khả dụng sau khi chọn TLS hoặc Reality trong thẻ Bảo mật (chỉ VLESS/Trojan trên RAW)."
       },
       },
       "protocol": "Giao thức",
       "protocol": "Giao thức",
       "port": "Cổng",
       "port": "Cổng",

+ 2 - 1
internal/web/translation/zh-CN.json

@@ -282,7 +282,8 @@
         "quickAdded": "已添加 {n} 条回落",
         "quickAdded": "已添加 {n} 条回落",
         "quickAddedNone": "没有可添加的新入站",
         "quickAddedNone": "没有可添加的新入站",
         "routesWhen": "当满足条件时路由",
         "routesWhen": "当满足条件时路由",
-        "defaultCatchAll": "默认 — 兜底匹配其他所有"
+        "defaultCatchAll": "默认 — 兜底匹配其他所有",
+        "needsTls": "在“安全”标签页选择 TLS 或 Reality 后即可配置回落(仅限 RAW 上的 VLESS/Trojan)。"
       },
       },
       "protocol": "协议",
       "protocol": "协议",
       "port": "端口",
       "port": "端口",

+ 2 - 1
internal/web/translation/zh-TW.json

@@ -282,7 +282,8 @@
         "quickAdded": "已新增 {n} 個回落",
         "quickAdded": "已新增 {n} 個回落",
         "quickAddedNone": "沒有可新增的新入站",
         "quickAddedNone": "沒有可新增的新入站",
         "routesWhen": "當條件成立時路由",
         "routesWhen": "當條件成立時路由",
-        "defaultCatchAll": "預設 — 兜底匹配其餘"
+        "defaultCatchAll": "預設 — 兜底匹配其餘",
+        "needsTls": "在「安全」分頁選擇 TLS 或 Reality 後即可設定回落(僅限 RAW 上的 VLESS/Trojan)。"
       },
       },
       "protocol": "協議",
       "protocol": "協議",
       "port": "連接埠",
       "port": "連接埠",