mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-08-27 21:47:14 +00:00
feat(reality): add live REALITY target scanner with IP/CIDR discovery
Replace the static reality-targets list with a server-side TLS 1.3 probe that checks TLS 1.3 + HTTP/2 + X25519 + a trusted certificate. - Single-domain validate auto-fills target and serverNames from the cert SAN - Discovery scans an IP/CIDR without SNI to find new targets from their certificates, deduped and ranked by feasibility then latency, private-IP guarded via netsafe - New endpoints scanRealityTarget and scanRealityTargets with RealityScanResult, plus openapigen and api-docs entries - Add scanner strings to all 13 locales - Replace deprecated AntD Alert message prop with title across the panel
This commit is contained in:
@@ -474,6 +474,9 @@
|
||||
"getNewX25519CertError": "حدث خطأ أثناء الحصول على شهادة X25519.",
|
||||
"getNewmldsa65Error": "حدث خطاء في الحصول على mldsa65.",
|
||||
"getNewVlessEncError": "حدث خطأ أثناء الحصول على VlessEnc.",
|
||||
"scanRealityTargetError": "فشل فحص هدف REALITY.",
|
||||
"scanRealityTargetFeasible": "الهدف مناسب — تم ملء الهدف وSNI.",
|
||||
"scanRealityTargetNotFeasible": "الهدف قابل للوصول لكنه غير مناسب لـ REALITY.",
|
||||
"invalidClientField": "العميل {client}: الحقل {field} — {reason}",
|
||||
"invalidField": "{field} — {reason}",
|
||||
"moreIssues": "{message} (+{count} أخرى)"
|
||||
@@ -623,6 +626,20 @@
|
||||
"realityTargetRequired": "هدف REALITY مطلوب",
|
||||
"realityTargetNeedsPort": "يجب أن يتضمّن هدف REALITY منفذًا (مثل example.com:443)",
|
||||
"realityTargetInvalidPort": "هدف REALITY يحتوي على منفذ غير صالح",
|
||||
"scan": "فحص",
|
||||
"findTargets": "البحث عن أهداف",
|
||||
"scanModalTitle": "ماسح أهداف REALITY",
|
||||
"scanModalDesc": "تحقق من نطاق، أو افحص نطاق IP / CIDR لاكتشاف أهداف REALITY جديدة من شهاداتها. اترك الحقل فارغًا لفحص المرشحين الشائعين.",
|
||||
"scanDiscoverPlaceholder": "IP أو CIDR أو نطاق — اتركه فارغًا للمرشحين الشائعين",
|
||||
"scanStatus": "الحالة",
|
||||
"scanFeasible": "مناسب",
|
||||
"scanNotFeasible": "غير مناسب",
|
||||
"scanCurve": "تبادل المفاتيح",
|
||||
"scanCert": "الشهادة",
|
||||
"scanCertInvalid": "غير موثوق",
|
||||
"scanLatency": "زمن الاستجابة",
|
||||
"scanUse": "استخدام",
|
||||
"scanRescan": "إعادة الفحص",
|
||||
"spiderX": "SpiderX",
|
||||
"getNewCert": "احصل على شهادة جديدة",
|
||||
"mldsa65Seed": "mldsa65 Seed",
|
||||
|
||||
@@ -474,6 +474,9 @@
|
||||
"getNewX25519CertError": "Error while obtaining the X25519 certificate.",
|
||||
"getNewmldsa65Error": "Error while obtaining mldsa65.",
|
||||
"getNewVlessEncError": "Error while obtaining VlessEnc.",
|
||||
"scanRealityTargetError": "Failed to scan REALITY target.",
|
||||
"scanRealityTargetFeasible": "Target is feasible — filled target and SNI.",
|
||||
"scanRealityTargetNotFeasible": "Target is reachable but not feasible for REALITY.",
|
||||
"invalidClientField": "Client {client}: {field} — {reason}",
|
||||
"invalidField": "{field} — {reason}",
|
||||
"moreIssues": "{message} (+{count} more)"
|
||||
@@ -635,6 +638,20 @@
|
||||
"realityTargetRequired": "REALITY target is required",
|
||||
"realityTargetNeedsPort": "REALITY target must include a port (e.g. example.com:443)",
|
||||
"realityTargetInvalidPort": "REALITY target has an invalid port",
|
||||
"scan": "Scan",
|
||||
"findTargets": "Find Targets",
|
||||
"scanModalTitle": "REALITY Target Scanner",
|
||||
"scanModalDesc": "Validate a domain, or scan an IP / CIDR range to discover new REALITY targets from their certificates. Leave the box empty to probe common candidates.",
|
||||
"scanDiscoverPlaceholder": "IP, CIDR, or domain — leave empty for common candidates",
|
||||
"scanStatus": "Status",
|
||||
"scanFeasible": "Feasible",
|
||||
"scanNotFeasible": "Not feasible",
|
||||
"scanCurve": "Key Exchange",
|
||||
"scanCert": "Certificate",
|
||||
"scanCertInvalid": "Not trusted",
|
||||
"scanLatency": "Latency",
|
||||
"scanUse": "Use",
|
||||
"scanRescan": "Rescan",
|
||||
"spiderX": "SpiderX",
|
||||
"getNewCert": "Get New Cert",
|
||||
"mldsa65Seed": "mldsa65 Seed",
|
||||
|
||||
@@ -474,6 +474,9 @@
|
||||
"getNewX25519CertError": "Error al obtener el certificado X25519.",
|
||||
"getNewmldsa65Error": "Error al obtener el certificado mldsa65.",
|
||||
"getNewVlessEncError": "Error al obtener el certificado VlessEnc.",
|
||||
"scanRealityTargetError": "No se pudo escanear el objetivo REALITY.",
|
||||
"scanRealityTargetFeasible": "El objetivo es apto: se rellenaron el objetivo y el SNI.",
|
||||
"scanRealityTargetNotFeasible": "El objetivo es accesible pero no apto para REALITY.",
|
||||
"invalidClientField": "Cliente {client}: campo {field} — {reason}",
|
||||
"invalidField": "{field} — {reason}",
|
||||
"moreIssues": "{message} (+{count} más)"
|
||||
@@ -644,6 +647,20 @@
|
||||
"realityTargetRequired": "El destino REALITY es obligatorio",
|
||||
"realityTargetNeedsPort": "El destino REALITY debe incluir un puerto (p. ej. example.com:443)",
|
||||
"realityTargetInvalidPort": "El destino REALITY tiene un puerto no válido",
|
||||
"scan": "Escanear",
|
||||
"findTargets": "Buscar objetivos",
|
||||
"scanModalTitle": "Escáner de objetivos REALITY",
|
||||
"scanModalDesc": "Valida un dominio o escanea un rango IP / CIDR para descubrir nuevos objetivos REALITY a partir de sus certificados. Deja el campo vacío para probar los candidatos comunes.",
|
||||
"scanDiscoverPlaceholder": "IP, CIDR o dominio — déjalo vacío para candidatos comunes",
|
||||
"scanStatus": "Estado",
|
||||
"scanFeasible": "Apto",
|
||||
"scanNotFeasible": "No apto",
|
||||
"scanCurve": "Intercambio de claves",
|
||||
"scanCert": "Certificado",
|
||||
"scanCertInvalid": "No confiable",
|
||||
"scanLatency": "Latencia",
|
||||
"scanUse": "Usar",
|
||||
"scanRescan": "Reescanear",
|
||||
"spiderX": "SpiderX",
|
||||
"getNewCert": "Obtener nuevo cert",
|
||||
"mldsa65Seed": "mldsa65 Seed",
|
||||
|
||||
@@ -474,6 +474,9 @@
|
||||
"getNewX25519CertError": "خطا در دریافت گواهی X25519.",
|
||||
"getNewmldsa65Error": "خطا در دریافت گواهی mldsa65.",
|
||||
"getNewVlessEncError": "خطا در دریافت گواهی VlessEnc.",
|
||||
"scanRealityTargetError": "اسکن هدف REALITY ناموفق بود.",
|
||||
"scanRealityTargetFeasible": "هدف مناسب است — هدف و SNI پر شد.",
|
||||
"scanRealityTargetNotFeasible": "هدف در دسترس است اما برای REALITY مناسب نیست.",
|
||||
"invalidClientField": "کلاینت {client}: فیلد {field} — {reason}",
|
||||
"invalidField": "{field} — {reason}",
|
||||
"moreIssues": "{message} (+{count} مورد دیگر)"
|
||||
@@ -635,6 +638,20 @@
|
||||
"realityTargetRequired": "هدف REALITY الزامی است",
|
||||
"realityTargetNeedsPort": "هدف REALITY باید شامل پورت باشد (مثلاً example.com:443)",
|
||||
"realityTargetInvalidPort": "پورت هدف REALITY نامعتبر است",
|
||||
"scan": "اسکن",
|
||||
"findTargets": "یافتن هدفها",
|
||||
"scanModalTitle": "اسکنر هدف REALITY",
|
||||
"scanModalDesc": "یک دامنه را اعتبارسنجی کنید، یا یک محدودهی IP/CIDR را اسکن کنید تا هدفهای جدید REALITY از روی گواهیهایشان کشف شوند. برای بررسی کاندیدهای پیشفرض، کادر را خالی بگذارید.",
|
||||
"scanDiscoverPlaceholder": "آیپی، CIDR یا دامنه — برای کاندیدهای پیشفرض خالی بگذارید",
|
||||
"scanStatus": "وضعیت",
|
||||
"scanFeasible": "مناسب",
|
||||
"scanNotFeasible": "نامناسب",
|
||||
"scanCurve": "تبادل کلید",
|
||||
"scanCert": "گواهی",
|
||||
"scanCertInvalid": "نامعتبر",
|
||||
"scanLatency": "تأخیر",
|
||||
"scanUse": "استفاده",
|
||||
"scanRescan": "اسکن مجدد",
|
||||
"spiderX": "SpiderX",
|
||||
"getNewCert": "دریافت گواهی جدید",
|
||||
"mldsa65Seed": "mldsa65 Seed",
|
||||
|
||||
@@ -474,6 +474,9 @@
|
||||
"getNewX25519CertError": "Terjadi kesalahan saat mendapatkan sertifikat X25519.",
|
||||
"getNewmldsa65Error": "Terjadi kesalahan saat mendapatkan sertifikat mldsa65.",
|
||||
"getNewVlessEncError": "Terjadi kesalahan saat mendapatkan sertifikat VlessEnc.",
|
||||
"scanRealityTargetError": "Gagal memindai target REALITY.",
|
||||
"scanRealityTargetFeasible": "Target layak — target dan SNI terisi.",
|
||||
"scanRealityTargetNotFeasible": "Target dapat dijangkau tetapi tidak layak untuk REALITY.",
|
||||
"invalidClientField": "Klien {client}: kolom {field} — {reason}",
|
||||
"invalidField": "{field} — {reason}",
|
||||
"moreIssues": "{message} (+{count} lainnya)"
|
||||
@@ -623,6 +626,20 @@
|
||||
"realityTargetRequired": "Target REALITY wajib diisi",
|
||||
"realityTargetNeedsPort": "Target REALITY harus menyertakan port (mis. example.com:443)",
|
||||
"realityTargetInvalidPort": "Target REALITY memiliki port yang tidak valid",
|
||||
"scan": "Pindai",
|
||||
"findTargets": "Cari Target",
|
||||
"scanModalTitle": "Pemindai Target REALITY",
|
||||
"scanModalDesc": "Validasi domain, atau pindai rentang IP / CIDR untuk menemukan target REALITY baru dari sertifikatnya. Biarkan kosong untuk memeriksa kandidat umum.",
|
||||
"scanDiscoverPlaceholder": "IP, CIDR, atau domain — kosongkan untuk kandidat umum",
|
||||
"scanStatus": "Status",
|
||||
"scanFeasible": "Layak",
|
||||
"scanNotFeasible": "Tidak layak",
|
||||
"scanCurve": "Pertukaran Kunci",
|
||||
"scanCert": "Sertifikat",
|
||||
"scanCertInvalid": "Tidak tepercaya",
|
||||
"scanLatency": "Latensi",
|
||||
"scanUse": "Gunakan",
|
||||
"scanRescan": "Pindai ulang",
|
||||
"spiderX": "SpiderX",
|
||||
"getNewCert": "Dapatkan sertifikat baru",
|
||||
"mldsa65Seed": "mldsa65 Seed",
|
||||
|
||||
@@ -474,6 +474,9 @@
|
||||
"getNewX25519CertError": "X25519証明書の取得中にエラーが発生しました。",
|
||||
"getNewmldsa65Error": "mldsa65証明書の取得中にエラーが発生しました。",
|
||||
"getNewVlessEncError": "VlessEnc証明書の取得中にエラーが発生しました。",
|
||||
"scanRealityTargetError": "REALITY ターゲットのスキャンに失敗しました。",
|
||||
"scanRealityTargetFeasible": "ターゲットは利用可能です — ターゲットと SNI を入力しました。",
|
||||
"scanRealityTargetNotFeasible": "ターゲットには到達できますが、REALITY には利用できません。",
|
||||
"invalidClientField": "クライアント {client}: フィールド {field} — {reason}",
|
||||
"invalidField": "{field} — {reason}",
|
||||
"moreIssues": "{message} (他 {count} 件)"
|
||||
@@ -644,6 +647,20 @@
|
||||
"realityTargetRequired": "REALITY ターゲットは必須です",
|
||||
"realityTargetNeedsPort": "REALITY ターゲットにはポートを含める必要があります(例: example.com:443)",
|
||||
"realityTargetInvalidPort": "REALITY ターゲットのポートが無効です",
|
||||
"scan": "スキャン",
|
||||
"findTargets": "ターゲットを検索",
|
||||
"scanModalTitle": "REALITY ターゲットスキャナー",
|
||||
"scanModalDesc": "ドメインを検証するか、IP / CIDR 範囲をスキャンして証明書から新しい REALITY ターゲットを発見します。空欄のままにすると一般的な候補を検査します。",
|
||||
"scanDiscoverPlaceholder": "IP、CIDR、またはドメイン — 空欄で一般的な候補",
|
||||
"scanStatus": "ステータス",
|
||||
"scanFeasible": "利用可能",
|
||||
"scanNotFeasible": "利用不可",
|
||||
"scanCurve": "鍵交換",
|
||||
"scanCert": "証明書",
|
||||
"scanCertInvalid": "信頼できません",
|
||||
"scanLatency": "レイテンシ",
|
||||
"scanUse": "使用",
|
||||
"scanRescan": "再スキャン",
|
||||
"spiderX": "SpiderX",
|
||||
"getNewCert": "新しい証明書を取得",
|
||||
"mldsa65Seed": "mldsa65 Seed",
|
||||
|
||||
@@ -474,6 +474,9 @@
|
||||
"getNewX25519CertError": "Erro ao obter o certificado X25519.",
|
||||
"getNewmldsa65Error": "Erro ao obter o certificado mldsa65.",
|
||||
"getNewVlessEncError": "Erro ao obter o certificado VlessEnc.",
|
||||
"scanRealityTargetError": "Falha ao escanear o alvo REALITY.",
|
||||
"scanRealityTargetFeasible": "O alvo é viável — alvo e SNI preenchidos.",
|
||||
"scanRealityTargetNotFeasible": "O alvo é acessível, mas não é viável para REALITY.",
|
||||
"invalidClientField": "Cliente {client}: campo {field} — {reason}",
|
||||
"invalidField": "{field} — {reason}",
|
||||
"moreIssues": "{message} (+{count} mais)"
|
||||
@@ -644,6 +647,20 @@
|
||||
"realityTargetRequired": "O alvo REALITY é obrigatório",
|
||||
"realityTargetNeedsPort": "O alvo REALITY deve incluir uma porta (ex.: example.com:443)",
|
||||
"realityTargetInvalidPort": "O alvo REALITY tem uma porta inválida",
|
||||
"scan": "Escanear",
|
||||
"findTargets": "Buscar alvos",
|
||||
"scanModalTitle": "Scanner de alvos REALITY",
|
||||
"scanModalDesc": "Valide um domínio ou escaneie um intervalo IP / CIDR para descobrir novos alvos REALITY a partir dos certificados. Deixe vazio para testar os candidatos comuns.",
|
||||
"scanDiscoverPlaceholder": "IP, CIDR ou domínio — deixe vazio para candidatos comuns",
|
||||
"scanStatus": "Status",
|
||||
"scanFeasible": "Viável",
|
||||
"scanNotFeasible": "Inviável",
|
||||
"scanCurve": "Troca de chaves",
|
||||
"scanCert": "Certificado",
|
||||
"scanCertInvalid": "Não confiável",
|
||||
"scanLatency": "Latência",
|
||||
"scanUse": "Usar",
|
||||
"scanRescan": "Reescanear",
|
||||
"spiderX": "SpiderX",
|
||||
"getNewCert": "Obter novo certificado",
|
||||
"mldsa65Seed": "mldsa65 Seed",
|
||||
|
||||
@@ -474,6 +474,9 @@
|
||||
"getNewX25519CertError": "Ошибка при получении сертификата X25519.",
|
||||
"getNewmldsa65Error": "Ошибка при получении сертификата mldsa65.",
|
||||
"getNewVlessEncError": "Ошибка при получении сертификата VlessEnc.",
|
||||
"scanRealityTargetError": "Не удалось просканировать цель REALITY.",
|
||||
"scanRealityTargetFeasible": "Цель подходит — поля target и SNI заполнены.",
|
||||
"scanRealityTargetNotFeasible": "Цель доступна, но не подходит для REALITY.",
|
||||
"invalidClientField": "Клиент {client}: поле {field} — {reason}",
|
||||
"invalidField": "{field} — {reason}",
|
||||
"moreIssues": "{message} (+{count} ещё)"
|
||||
@@ -644,6 +647,20 @@
|
||||
"realityTargetRequired": "Цель REALITY обязательна",
|
||||
"realityTargetNeedsPort": "Цель REALITY должна содержать порт (например, example.com:443)",
|
||||
"realityTargetInvalidPort": "У цели REALITY указан недопустимый порт",
|
||||
"scan": "Сканировать",
|
||||
"findTargets": "Найти цели",
|
||||
"scanModalTitle": "Сканер целей REALITY",
|
||||
"scanModalDesc": "Проверьте домен или просканируйте диапазон IP / CIDR, чтобы обнаружить новые цели REALITY по их сертификатам. Оставьте поле пустым для проверки обычных кандидатов.",
|
||||
"scanDiscoverPlaceholder": "IP, CIDR или домен — пусто для обычных кандидатов",
|
||||
"scanStatus": "Статус",
|
||||
"scanFeasible": "Подходит",
|
||||
"scanNotFeasible": "Не подходит",
|
||||
"scanCurve": "Обмен ключами",
|
||||
"scanCert": "Сертификат",
|
||||
"scanCertInvalid": "Не доверенный",
|
||||
"scanLatency": "Задержка",
|
||||
"scanUse": "Выбрать",
|
||||
"scanRescan": "Пересканировать",
|
||||
"spiderX": "SpiderX",
|
||||
"getNewCert": "Получить новый сертификат",
|
||||
"mldsa65Seed": "mldsa65 Seed",
|
||||
|
||||
@@ -474,6 +474,9 @@
|
||||
"getNewX25519CertError": "X25519 sertifikası alınırken hata oluştu.",
|
||||
"getNewmldsa65Error": "mldsa65 sertifikası alınırken hata oluştu.",
|
||||
"getNewVlessEncError": "VlessEnc sertifikası alınırken hata oluştu.",
|
||||
"scanRealityTargetError": "REALITY hedefi taranamadı.",
|
||||
"scanRealityTargetFeasible": "Hedef uygun — hedef ve SNI dolduruldu.",
|
||||
"scanRealityTargetNotFeasible": "Hedefe ulaşılabiliyor ancak REALITY için uygun değil.",
|
||||
"invalidClientField": "Kullanıcı {client}: {field} — {reason}",
|
||||
"invalidField": "{field} — {reason}",
|
||||
"moreIssues": "{message} (+{count} tane daha)"
|
||||
@@ -623,6 +626,20 @@
|
||||
"realityTargetRequired": "REALITY hedefi zorunludur",
|
||||
"realityTargetNeedsPort": "REALITY hedefi bir port içermelidir (ör. example.com:443)",
|
||||
"realityTargetInvalidPort": "REALITY hedefinde geçersiz bir port var",
|
||||
"scan": "Tara",
|
||||
"findTargets": "Hedef bul",
|
||||
"scanModalTitle": "REALITY Hedef Tarayıcı",
|
||||
"scanModalDesc": "Bir alan adını doğrulayın veya sertifikalarından yeni REALITY hedefleri keşfetmek için bir IP / CIDR aralığını tarayın. Yaygın adayları taramak için kutuyu boş bırakın.",
|
||||
"scanDiscoverPlaceholder": "IP, CIDR veya alan adı — yaygın adaylar için boş bırakın",
|
||||
"scanStatus": "Durum",
|
||||
"scanFeasible": "Uygun",
|
||||
"scanNotFeasible": "Uygun değil",
|
||||
"scanCurve": "Anahtar Değişimi",
|
||||
"scanCert": "Sertifika",
|
||||
"scanCertInvalid": "Güvenilmez",
|
||||
"scanLatency": "Gecikme",
|
||||
"scanUse": "Kullan",
|
||||
"scanRescan": "Yeniden tara",
|
||||
"spiderX": "SpiderX",
|
||||
"getNewCert": "Yeni Sertifika Al",
|
||||
"mldsa65Seed": "mldsa65 Seed",
|
||||
|
||||
@@ -474,6 +474,9 @@
|
||||
"getNewX25519CertError": "Помилка при отриманні сертифіката X25519.",
|
||||
"getNewmldsa65Error": "Помилка при отриманні сертифіката mldsa65.",
|
||||
"getNewVlessEncError": "Помилка при отриманні сертифіката VlessEnc.",
|
||||
"scanRealityTargetError": "Не вдалося просканувати ціль REALITY.",
|
||||
"scanRealityTargetFeasible": "Ціль підходить — поля target і SNI заповнено.",
|
||||
"scanRealityTargetNotFeasible": "Ціль доступна, але не підходить для REALITY.",
|
||||
"invalidClientField": "Клієнт {client}: поле {field} — {reason}",
|
||||
"invalidField": "{field} — {reason}",
|
||||
"moreIssues": "{message} (+{count} ще)"
|
||||
@@ -623,6 +626,20 @@
|
||||
"realityTargetRequired": "Ціль REALITY обов'язкова",
|
||||
"realityTargetNeedsPort": "Ціль REALITY має містити порт (напр., example.com:443)",
|
||||
"realityTargetInvalidPort": "Ціль REALITY має недійсний порт",
|
||||
"scan": "Сканувати",
|
||||
"findTargets": "Знайти цілі",
|
||||
"scanModalTitle": "Сканер цілей REALITY",
|
||||
"scanModalDesc": "Перевірте домен або проскануйте діапазон IP / CIDR, щоб виявити нові цілі REALITY за їхніми сертифікатами. Залиште поле порожнім для перевірки звичайних кандидатів.",
|
||||
"scanDiscoverPlaceholder": "IP, CIDR або домен — порожнє для звичайних кандидатів",
|
||||
"scanStatus": "Статус",
|
||||
"scanFeasible": "Підходить",
|
||||
"scanNotFeasible": "Не підходить",
|
||||
"scanCurve": "Обмін ключами",
|
||||
"scanCert": "Сертифікат",
|
||||
"scanCertInvalid": "Ненадійний",
|
||||
"scanLatency": "Затримка",
|
||||
"scanUse": "Обрати",
|
||||
"scanRescan": "Пересканувати",
|
||||
"spiderX": "SpiderX",
|
||||
"getNewCert": "Отримати новий сертифікат",
|
||||
"mldsa65Seed": "mldsa65 Seed",
|
||||
|
||||
@@ -474,6 +474,9 @@
|
||||
"getNewX25519CertError": "Lỗi khi lấy chứng chỉ X25519.",
|
||||
"getNewmldsa65Error": "Lỗi khi lấy chứng chỉ mldsa65.",
|
||||
"getNewVlessEncError": "Lỗi khi lấy chứng chỉ VlessEnc.",
|
||||
"scanRealityTargetError": "Quét mục tiêu REALITY thất bại.",
|
||||
"scanRealityTargetFeasible": "Mục tiêu khả dụng — đã điền mục tiêu và SNI.",
|
||||
"scanRealityTargetNotFeasible": "Mục tiêu có thể truy cập nhưng không khả dụng cho REALITY.",
|
||||
"invalidClientField": "Khách hàng {client}: trường {field} — {reason}",
|
||||
"invalidField": "{field} — {reason}",
|
||||
"moreIssues": "{message} (+{count} lỗi khác)"
|
||||
@@ -644,6 +647,20 @@
|
||||
"realityTargetRequired": "Mục tiêu REALITY là bắt buộc",
|
||||
"realityTargetNeedsPort": "Mục tiêu REALITY phải bao gồm cổng (ví dụ example.com:443)",
|
||||
"realityTargetInvalidPort": "Mục tiêu REALITY có cổng không hợp lệ",
|
||||
"scan": "Quét",
|
||||
"findTargets": "Tìm mục tiêu",
|
||||
"scanModalTitle": "Trình quét mục tiêu REALITY",
|
||||
"scanModalDesc": "Xác thực một tên miền, hoặc quét một dải IP / CIDR để khám phá các mục tiêu REALITY mới từ chứng chỉ của chúng. Để trống để quét các ứng viên phổ biến.",
|
||||
"scanDiscoverPlaceholder": "IP, CIDR hoặc tên miền — để trống cho ứng viên phổ biến",
|
||||
"scanStatus": "Trạng thái",
|
||||
"scanFeasible": "Khả dụng",
|
||||
"scanNotFeasible": "Không khả dụng",
|
||||
"scanCurve": "Trao đổi khóa",
|
||||
"scanCert": "Chứng chỉ",
|
||||
"scanCertInvalid": "Không tin cậy",
|
||||
"scanLatency": "Độ trễ",
|
||||
"scanUse": "Dùng",
|
||||
"scanRescan": "Quét lại",
|
||||
"spiderX": "SpiderX",
|
||||
"getNewCert": "Lấy chứng chỉ mới",
|
||||
"mldsa65Seed": "mldsa65 Seed",
|
||||
|
||||
@@ -474,6 +474,9 @@
|
||||
"getNewX25519CertError": "获取X25519证书时出错。",
|
||||
"getNewmldsa65Error": "获取mldsa65证书时出错。",
|
||||
"getNewVlessEncError": "获取VlessEnc证书时出错。",
|
||||
"scanRealityTargetError": "扫描 REALITY 目标失败。",
|
||||
"scanRealityTargetFeasible": "目标可用 — 已填入目标和 SNI。",
|
||||
"scanRealityTargetNotFeasible": "目标可达,但不适用于 REALITY。",
|
||||
"invalidClientField": "客户端 {client}:字段 {field} — {reason}",
|
||||
"invalidField": "{field} — {reason}",
|
||||
"moreIssues": "{message} (另有 {count} 项)"
|
||||
@@ -643,6 +646,20 @@
|
||||
"realityTargetRequired": "REALITY 目标为必填项",
|
||||
"realityTargetNeedsPort": "REALITY 目标必须包含端口(例如 example.com:443)",
|
||||
"realityTargetInvalidPort": "REALITY 目标的端口无效",
|
||||
"scan": "扫描",
|
||||
"findTargets": "查找目标",
|
||||
"scanModalTitle": "REALITY 目标扫描器",
|
||||
"scanModalDesc": "验证某个域名,或扫描 IP / CIDR 范围,从证书中发现新的 REALITY 目标。留空则探测常用候选。",
|
||||
"scanDiscoverPlaceholder": "IP、CIDR 或域名 — 留空使用常用候选",
|
||||
"scanStatus": "状态",
|
||||
"scanFeasible": "可用",
|
||||
"scanNotFeasible": "不可用",
|
||||
"scanCurve": "密钥交换",
|
||||
"scanCert": "证书",
|
||||
"scanCertInvalid": "不受信任",
|
||||
"scanLatency": "延迟",
|
||||
"scanUse": "使用",
|
||||
"scanRescan": "重新扫描",
|
||||
"spiderX": "SpiderX",
|
||||
"getNewCert": "获取新证书",
|
||||
"mldsa65Seed": "mldsa65 Seed",
|
||||
|
||||
@@ -474,6 +474,9 @@
|
||||
"getNewX25519CertError": "取得X25519憑證時發生錯誤。",
|
||||
"getNewmldsa65Error": "取得mldsa65憑證時發生錯誤。",
|
||||
"getNewVlessEncError": "取得VlessEnc憑證時發生錯誤。",
|
||||
"scanRealityTargetError": "掃描 REALITY 目標失敗。",
|
||||
"scanRealityTargetFeasible": "目標可用 — 已填入目標與 SNI。",
|
||||
"scanRealityTargetNotFeasible": "目標可達,但不適用於 REALITY。",
|
||||
"invalidClientField": "用戶端 {client}:欄位 {field} — {reason}",
|
||||
"invalidField": "{field} — {reason}",
|
||||
"moreIssues": "{message} (另有 {count} 項)"
|
||||
@@ -623,6 +626,20 @@
|
||||
"realityTargetRequired": "REALITY 目標為必填項",
|
||||
"realityTargetNeedsPort": "REALITY 目標必須包含連接埠(例如 example.com:443)",
|
||||
"realityTargetInvalidPort": "REALITY 目標的連接埠無效",
|
||||
"scan": "掃描",
|
||||
"findTargets": "尋找目標",
|
||||
"scanModalTitle": "REALITY 目標掃描器",
|
||||
"scanModalDesc": "驗證某個網域,或掃描 IP / CIDR 範圍,從憑證中探索新的 REALITY 目標。留空則探測常用候選。",
|
||||
"scanDiscoverPlaceholder": "IP、CIDR 或網域 — 留空使用常用候選",
|
||||
"scanStatus": "狀態",
|
||||
"scanFeasible": "可用",
|
||||
"scanNotFeasible": "不可用",
|
||||
"scanCurve": "金鑰交換",
|
||||
"scanCert": "憑證",
|
||||
"scanCertInvalid": "不受信任",
|
||||
"scanLatency": "延遲",
|
||||
"scanUse": "使用",
|
||||
"scanRescan": "重新掃描",
|
||||
"spiderX": "SpiderX",
|
||||
"getNewCert": "取得新憑證",
|
||||
"mldsa65Seed": "mldsa65 Seed",
|
||||
|
||||
Reference in New Issue
Block a user