settings trim: remove dead settings, upstream remnants, JSON/Clash subscriptions

Per SETTINGS-AUDIT (all three tiers approved 2026-10-23):

Dead settings:
- panelOutbound, ipLimitAllowlist (+ orphan parser job), outboundDownThreshold
- tg fake events outbound.down/outbound.up/xray.crash (no publisher in lite)
- phantom routing sub-tabs (Happ/Clash/Incy) and subJsonRules direct-rules tab
  (no backend keys); subHideSettings moved to the subscription info tab first

Upstream remnants:
- ldap* / smtp* model+schema keys, EmailNotifications orphan component
- twoFactorEnable/twoFactorToken + login-page probe (no backend handler)
- externalTrafficInform*

Newly approved removals:
- JSON subscription family (producer, routes, UA auto-detect, mux/finalmask/
  observatory) and Clash subscription family (producer, routes, UA detect)
- SubBalancer (table, service, controller, settings tab)
- subThemeDir (subscription page falls back to the built-in template)
- datepicker jalalian option (gregorian only; Persian picker removed)

JSON/Clash endpoints now 404; link-format output pinned by regression tests.
Guarded keys untouched: webListen/webPort/webBasePath/certs, tg* chain,
expireDiff/trafficDiff/tgBotProxy, subHideSettings, pageSize/tgLang.
This commit is contained in:
Muse
2026-10-22 19:21:07 +00:00
parent 8e89960474
commit 1bd63e6625
110 changed files with 479 additions and 11313 deletions
+1 -108
View File
@@ -70,7 +70,6 @@
"install": "Yükle",
"clients": "Kullanıcılar",
"usage": "Kullanım",
"twoFactorCode": "Kod",
"remained": "Kalan",
"security": "Güvenlik",
"somethingWentWrong": "Bir hata oluştu",
@@ -106,8 +105,7 @@
"docs": "Belgeler",
"openMenu": "Menüyü aç",
"pinSidebar": "Kenar çubuğunu sabitle",
"unpinSidebar": "Kenar çubuğu sabitlemesini kaldır",
"subFormats": "Abonelik Formatları"
"unpinSidebar": "Kenar çubuğu sabitlemesini kaldır"
},
"pages": {
"login": {
@@ -720,7 +718,6 @@
"detachFromInboundsResultMixed": "Ayrıldı {detached}, atlandı {skipped}, hatalar {errors}.",
"subLinksTitle": "Abonelik Bağlantıları ({count})",
"subLinkColumn": "Abonelik URL",
"subJsonLinkColumn": "Abonelik JSON URL",
"subLinksCopyAll": "Tümünü Kopyala",
"subLinksCopiedAll": "{count} bağlantı kopyalandı",
"subLinksEmpty": "Seçilen kullanıcıların hiçbirinin abonelik ID'si yok.",
@@ -946,7 +943,6 @@
"warnDefaultPort": "Varsayılan 2053 portu yaygın olarak bilinmektedir — farklı bir portla değiştirin.",
"warnDefaultBasePath": "Varsayılan temel yol \"/\" yaygın olarak bilinmektedir — rastgele bir yol ile değiştirin.",
"warnDefaultSubPath": "Varsayılan abonelik yolu \"/sub/\" yaygın olarak bilinmektedir — değiştirin.",
"warnDefaultJsonPath": "Varsayılan JSON abonelik yolu \"/json/\" yaygın olarak bilinmektedir — değiştirin.",
"panelListeningIP": "Dinleme IP",
"panelListeningIPDesc": "Web paneli için IP adresi. (tüm IP'leri dinlemek için boş bırakın)",
"panelListeningDomain": "Dinleme Alan Adı",
@@ -961,12 +957,7 @@
"panelUrlPathDesc": "Web paneli için URI yolu. ('/' ile başlar ve '/' ile biter)",
"pageSize": "Sayfa Boyutu",
"pageSizeDesc": "Gelen Bağlantılar tablosu için sayfa boyutunu belirler. (0 = devre dışı)",
"panelOutbound": "Panel Trafiği Gideni",
"panelOutboundDesc": "Panelin kendi isteklerini — panel/Xray sürüm kontrolleri ve indirmeleri, Telegram ve normal geo dosyası güncellemesi — bu Xray gideni üzerinden yönlendirir; sunucu tarafındaki GitHub/Telegram filtrelemesini aşmak için. Yerel bir köprü gelen bağlantısı çalışan yapılandırmaya otomatik eklenir ve canlı uygulanır. Xray'in yerel Geodata Otomatik Güncellemesi etkilenmez; kendi indirme gidenine sahiptir. Doğrudan bağlantı için boş bırakın.",
"panelOutboundPh": "Doğrudan bağlantı",
"datepicker": "Takvim Türü",
"datepickerPlaceholder": "Tarih Seçin",
"datepickerDescription": "Planlanmış görevler bu takvime göre çalışacaktır.",
"oldUsername": "Mevcut Kullanıcı Adı",
"currentPassword": "Mevcut Şifre",
"newUsername": "Yeni Kullanıcı Adı",
@@ -982,22 +973,6 @@
"subSettings": "Abonelik",
"subEnable": "Abonelik Hizmeti",
"subEnableDesc": "Abonelik hizmetini etkinleştirir/devre dışı bırakır.",
"subJsonEnable": "JSON abonelik uç noktasını bağımsız olarak etkinleştirir/devre dışı bırakır.",
"subJsonEnableTitle": "JSON Aboneliği",
"subClashEnableTitle": "Clash / Mihomo Aboneliği",
"subFormatsTipTitle": "Biçime özel abonelik ayarları",
"subFormatsTipDesc": "JSON ve Clash / Mihomo için URL yollarını, ters URL'leri ve otomatik istemci algılamayı ayrı ayrı yapılandırın.",
"subFormatsTipAction": "Abonelik Biçimlerini Aç",
"subJsonAutoDetect": "Xray JSON istemcilerini otomatik algıla",
"subJsonAutoDetectDesc": "Etkinleştirildiğinde, standart abonelik URL'sini isteyen tanınmış uyumlu istemciler otomatik olarak bir Xray JSON yapılandırma dizisi alır. Diğer istemciler ham/Base64 yanıtını almaya devam eder. JSON aboneliğinin etkinleştirilmesi ve panelin yeniden başlatılması gerekir.",
"subJsonAlwaysArray": "Her zaman JSON dizisi döndür",
"subJsonAlwaysArrayDesc": "Açık JSON abonelik uç noktasını tek profil olsa bile XTLS standardına uygun bir dizi olarak döndürür. Otomatik algılanan JSON yanıtları her zaman dizi kullanır. Eski tek nesne yanıtını korumak için devre dışı bırakın.",
"subJsonUserAgentRegex": "Xray JSON User-Agent düzenli ifadesi",
"subJsonUserAgentRegexDesc": "Standart abonelik URL'sinde Xray JSON biçimini otomatik seçmek için istemcinin User-Agent değeriyle eşleştirilen Go RE2 düzenli ifadesi. Varsayılan olarak boştur; bu nedenle hizmet vermek istediğiniz istemciler için bir desen belirleyene kadar otomatik algılama kapalı kalır. Diğer istemciler ham/Base64 yanıtını almaya devam eder. Değişiklikten sonra paneli yeniden başlatın.",
"subClashAutoDetect": "Clash/Mihomo istemcilerini otomatik algıla",
"subClashAutoDetectDesc": "Etkinleştirildiğinde, standart abonelik URL'sini isteyen tanınmış Clash/Mihomo istemcileri otomatik olarak Clash YAML alır. Tarayıcılar abonelik sayfasını göstermeye devam eder, diğer istemciler ham/Base64 yanıtını almaya devam eder ve açık JSON ile Clash URL'leri kullanılabilir kalır. Uygulanması için Clash/Mihomo aboneliğinin etkinleştirilmesi ve panelin yeniden başlatılması gerekir.",
"subClashUserAgentRegex": "Clash/Mihomo User-Agent düzenli ifadesi",
"subClashUserAgentRegexDesc": "Standart abonelik URL'sinde Clash/Mihomo istemcilerini tanımak için istemcinin User-Agent değeriyle eşleştirilen Go RE2 düzenli ifadesi. Varsayılan deseni kullanmak için boş bırakın. Değişiklikten sonra paneli yeniden başlatın.",
"subTitle": "Abonelik Başlığı",
"subTitleDesc": "VPN istemcisinde gösterilen başlık. İstemci kimlik tokenlarını destekler: {{EMAIL}}, {{ID}}, {{SHORT_ID}}, {{SUB_ID}}, {{TELEGRAM_ID}}.",
"subSupportUrl": "Destek URL'si",
@@ -1006,23 +981,8 @@
"subProfileUrlDesc": "VPN istemcisinde görüntülenen web sitenize giden bağlantı. İstemci kimlik tokenlarını destekler: {{EMAIL}}, {{ID}}, {{SHORT_ID}}, {{SUB_ID}}, {{TELEGRAM_ID}}.",
"subAnnounce": "Duyuru",
"subAnnounceDesc": "VPN istemcisinde görüntülenen duyuru metni. İstemci kimlik tokenlarını destekler: {{EMAIL}}, {{ID}}, {{SHORT_ID}}, {{SUB_ID}}, {{TELEGRAM_ID}}.",
"subThemeDir": "Abonelik Tema Dizini",
"subThemeDirDesc": "Abonelik sayfası için özel bir şablon (index.html/sub.html) içeren klasörün mutlak yolu (örn. /etc/3x-ui/sub_templates/my-theme/). Varsayılan sayfayı kullanmak için boş bırakın.",
"subThemeDirDocs": "Şablon kılavuzu ↗",
"subEnableRouting": "Yönlendirmeyi etkinleştir",
"subEnableRoutingDesc": "VPN istemcisinde yönlendirmeyi etkinleştirmek için genel ayar. (Yalnızca Happ için)",
"subRoutingRules": "Yönlendirme kuralları",
"subRoutingRulesDesc": "Hazır bir happ:// derin bağlantısı veya kalıcı bir HTTPS URL'si yapıştırın. Panel uzak kuralları arka planda yeniler ve son geçerli değeri saklar; abonelik istekleri kaynağı beklemez. (Yalnızca Happ için)",
"subHideSettings": "Sunucu ayarlarını gizle",
"subHideSettingsDesc": "VPN istemcisinde sunucu yapılandırmalarını görüntüleme ve düzenleme özelliğini gizleyin. (Yalnızca Happ için)",
"subIncyEnableRouting": "Yönlendirmeyi etkinleştir",
"subIncyEnableRoutingDesc": "Incy istemcisi için abonelik gövdesine bir yönlendirme profili ekleyin. (Yalnızca Incy için)",
"subIncyRoutingRules": "Yönlendirme kuralları",
"subIncyRoutingRulesDesc": "Hazır bir incy:// derin bağlantısı veya JSON için kalıcı bir HTTPS URL'si yapıştırın. Incy bir autorouting profili oluşturur ve otomatik olarak günceller. (Yalnızca Incy için)",
"subClashEnableRouting": "Yönlendirmeyi Etkinleştir",
"subClashEnableRoutingDesc": "Oluşturulan YAML aboneliklerine genel Clash/Mihomo yönlendirme kurallarını ekler.",
"subClashRoutingRules": "Genel Yönlendirme Kuralları",
"subClashRoutingRulesDesc": "Kurallar/YAML veya kalıcı bir HTTPS URL'si yapıştırın. Panel bunu arka planda yeniler, yalnızca grupları, kural sağlayıcılarını ve kuralları içe aktarır; oluşturulan VPN düğümlerini ve son geçerli değeri korur.",
"subListen": "Dinleme IP",
"subListenDesc": "Abonelik hizmeti için IP adresi. (tüm IP'leri dinlemek için boş bırakın)",
"subPort": "Dinleme Portu",
@@ -1051,8 +1011,6 @@
"trustedProxyCidrs": "Güvenilir Proxy CIDR'leri",
"trustedProxyCidrsDesc": "İletilen host, proto ve istemci IP başlıklarını ayarlamasına izin verilen IP'ler/CIDR'ler (virgülle ayrılmış).",
"subFormats": {
"finalMask": "Son Maske",
"finalMaskDesc": "Xray finalmask TCP/UDP maskelerini ve QUIC parametrelerini oluşturulan her Xray JSON profiline ekler. Xray JSON aboneliklerini destekleyen bir istemci uygulaması ve güncel bir Xray çekirdeği gerektirir.",
"packets": "Paketler",
"length": "Uzunluk",
"interval": "Aralık",
@@ -1063,16 +1021,12 @@
"packet": "Paket",
"delayMs": "Gecikme (ms)",
"applyTo": "Şuna Uygula",
"addNoise": "+ Gürültü",
"concurrency": "Eşzamanlılık",
"xudpConcurrency": "xudp eşzamanlılık",
"xudpUdp443": "UDP 443"
},
"mux": "Ağız",
"muxDesc": "Mevcut bir veri akışı üzerinden birden çok bağımsız veri akışını iletir.",
"muxSett": "Mux Ayarları",
"direct": "Doğrudan Bağlantı",
"directDesc": "Belirli bir ülkenin alan adları veya IP aralıkları ile doğrudan bağlantı kurar.",
"certs": "Sertifikalar",
"dateAndTime": "Tarih ve Saat",
"proxyAndServer": "Proxy ve Sunucu",
@@ -1082,7 +1036,6 @@
"language": "Dil",
"security": {
"admin": "Yönetici Kimlik Bilgileri",
"twoFactorModalError": "Yanlış kod",
"show": "Göster",
"hide": "Gizle",
"apiTokenNew": "Yeni Token",
@@ -1104,9 +1057,6 @@
"getOutboundTrafficError": "Giden trafik alınırken hata oluştu.",
"resetOutboundTrafficError": "Giden trafik sıfırlanırken hata oluştu."
},
"eventOutboundDown": "Çevrimdışı",
"eventOutboundUp": "Çevrimiçi",
"eventXrayCrash": "Çökme",
"eventNodeDown": "Çevrimdışı",
"eventNodeUp": "Çevrimiçi",
"eventCPUHigh": "Yüksek CPU (%)",
@@ -1122,59 +1072,6 @@
},
"secretClear": "Temizle",
"secretClearUndo": "Temizlemeyi geri al",
"calendarGregorian": "Gregoryen (Standart)",
"calendarJalalian": "Jalalian (Güneş)",
"ipLimitAllowlist": "IP limiti izin listesi",
"ipLimitAllowlistDesc": "IP limitinin asla saymadığı ve engellemediği adresler ve ağlar; böylece ortak bir ofis veya kampüs adresi kullanıcının limitini tüketmez. IP'ler/CIDR'ler (virgülle ayrılmış).",
"subBalancers": {
"menu": "Abonelik dengeleyicileri",
"title": "Abonelik dengeleyici",
"add": "Dengeleyici ekle",
"desc": "Etkin her dengeleyici, seçilen inbound'ların uç noktalarından en iyisini otomatik seçen ek bir profil olarak JSON aboneliğine eklenir.",
"remark": "Açıklama",
"remarkPlaceholder": "Otomatik · en hızlı",
"strategy": "Strateji",
"strategyLeastLoad": "En düşük yük",
"strategyLeastPing": "En düşük ping",
"strategyRandom": "Rastgele",
"strategyRoundRobin": "Sıralı",
"sortOrder": "Sıra",
"sortOrderHelp": "Abonelik listesindeki konumu, inbound sırası ile iç içe yerleşir; eşit numarada dengeleyici inbound'dan sonra gelir.",
"inbounds": "Inbound'lar",
"inboundsCount": "{count} Inbound'lar",
"enabled": "Etkin",
"empty": "Henüz dengeleyici yok",
"deleteConfirm": "Bu dengeleyici silinsin mi?",
"errRemarkRequired": "Açıklama zorunludur",
"errInboundsRequired": "En az bir inbound seçin",
"errSortOrder": "Sıra 1 veya daha büyük bir tam sayı olmalı",
"toasts": {
"list": "Abonelik dengeleyicileri listelenemedi",
"create": "Abonelik dengeleyicisi oluşturulamadı",
"update": "Abonelik dengeleyicisi güncellenemedi",
"delete": "Abonelik dengeleyicisi silinemedi",
"invalidId": "Geçersiz id"
},
"tabBalancers": "Dengeleyiciler",
"tabObservatory": "Gözlemci",
"observatory": {
"title": "Dengeleyici gözlemi",
"desc": "Her leastPing/leastLoad dengeleyici profiline gömülen burstObservatory probe parametreleri. random/roundRobin için gözlem eklenmez. Paneller arası JSON abonelik ayarı olarak saklanır.",
"destination": "Probe URL'si",
"destinationDesc": "İstemcinin her üye çıkışı ölçmek için denediği adres.",
"connectivity": "Bağlantı URL'si",
"connectivityDesc": "Üyenin hedefe ulaşabildiğini tek kez doğrulamak için isteğe bağlı adres. Atlamak için boş bırakın.",
"interval": "Probe aralığı",
"intervalDesc": "Probe turları arasındaki süre, örn. 1m.",
"timeout": "Probe zaman aşımı",
"timeoutDesc": "Tek bir probe için zaman aşımı, örn. 5s.",
"sampling": "Örnekleme",
"samplingDesc": "Kararlılık ortalaması için ardışık probe sayısı.",
"httpMethod": "HTTP yöntemi",
"httpMethodDesc": "Probe isteklerinde kullanılan HTTP yöntemi.",
"note": "leastPing/leastLoad dengeleyicileri her zaman bir burstObservatory taşır. Bu anahtar probe parametrelerini özelleştirir — yerleşik varsayılanları kullanmak için kapatın. Değişiklikler panel yeniden başlatıldıktan sonra uygulanır."
}
},
"TGBotSettings": "Telegram Botu",
"notifications": "Bildirimler",
"notifyTime": {
@@ -1800,12 +1697,8 @@
"SuccessResetTraffic": "📧 E-posta: {{ .ClientEmail }}\n🏁 Sonuç: ✅ Başarılı",
"FailedResetTraffic": "📧 E-posta: {{ .ClientEmail }}\n🏁 Sonuç: ❌ Başarısız \n\n🛠️ Hata: [ {{ .ErrorMessage }} ]",
"FinishProcess": "🔚 Tüm kullanıcılar için trafik sıfırlama işlemi tamamlandı.",
"eventOutboundDown": "{{ .Tag }} giden bağlantısı ÇEVRİMDIŞI",
"eventOutboundUp": "{{ .Tag }} giden bağlantısı ÇEVRİMİÇİ",
"eventErrorDetail": "Hata: {{ .Error }}",
"eventDelayDetail": "Gecikme: {{ .Delay }}ms",
"eventXrayCrash": "Xray ÇÖKTÜ",
"eventXrayCrashError": "Hata: {{ .Error }}",
"eventNodeDown": "{{ .Name }} düğümü ÇEVRİMDIŞI",
"eventNodeUp": "{{ .Name }} düğümü ÇEVRİMİÇİ",
"eventLoginFallback": "{{ .Source }} adresinden oturum açma başarısız",