精简版第四轮补裁(P4): 页面层摘除 + Xray更新端点下线 + 本机核心监管下线
CI / go-test (push) Canceled after 0s
CI / postgres-durable-first (push) Canceled after 0s
CI / codegen (push) Canceled after 0s
CI / govulncheck (push) Canceled after 0s
CI / race (push) Canceled after 0s
CI / fuzz-smoke (push) Canceled after 0s
CI / golangci (push) Canceled after 0s
CI / frontend (push) Canceled after 0s
CodeQL Advanced / Analyze (go) (push) Canceled after 0s
CodeQL Advanced / Analyze (actions) (push) Canceled after 0s
CodeQL Advanced / Analyze (javascript-typescript) (push) Canceled after 0s
Release 3X-UI / build (386) (push) Canceled after 0s
Release 3X-UI / build (amd64) (push) Canceled after 0s
Release 3X-UI / build (arm64) (push) Canceled after 0s
Release 3X-UI / build (armv5) (push) Canceled after 0s
Release 3X-UI / build (armv6) (push) Canceled after 0s
Release 3X-UI / build (armv7) (push) Canceled after 0s
Release 3X-UI / build (s390x) (push) Canceled after 0s
Release 3X-UI / Build for Windows (amd64) (push) Canceled after 0s
Release 3X-UI / Publish rolling dev release (push) Canceled after 0s

页面层(用户真机截图发现前两轮漏裁):
- 设置: 摘除 Telegram机器人/邮件菜单与页面, 及页内残留入口(通知页/外部流量/LDAP/2FA设置页)
- Xray配置: 摘除负载均衡/DNS/高级配置菜单与页面; 基础配置(出站+路由)完好
- 总览: 摘除 Xray更新弹窗(VersionModal+GeodataSection)全部入口, 版本号改为静态展示
- 13个locale同步摘除461个已删功能专属翻译键(逐键核查前后端引用为零; i18n-dead-keys测试全绿)

Xray更新后端(经调查确认仅服务本机bin/xray, 与agent下发/订阅无关):
- 删除 getXrayVersion/installXray/updateGeofile 路由与handler(访问返回404)
- 删除 ServerService 对应实现与校验和函数; 同步api-docs/monitor白名单/openapi

本机核心监管下线(设计: 主控永不运行本机xray, 入站全在agent):
- XrayService.RestartXray 降级为no-op(一次性Warning说明日志); StopXray无进程时幂等返回
- web.go 摘除启动拉起本机核心/CheckXrayRunning看门狗(1s)/ApplyPendingRestart cron(30s)/XrayTrafficJob/CheckClientIpJob 注册
- ApplyPendingRestart 降级为消费即清, 其测试更新为新语义
- XrayMetricsService.Sample 短路: 不再每2s探本机/debug/vars, 状态优雅置为不可用
- 配置生成(纯JSON)/agent链路/订阅/入站CRUD未动; 状态读数优雅归零(stop/Unknown)

注: TestGetXrayConfig_EnabledClientsStillEmitted 在基线945b3a5同样失败(既有问题, 非本轮引入)
This commit is contained in:
Muse
2026-10-20 23:39:38 +08:00
parent 945b3a56a2
commit a654a96c38
56 changed files with 149 additions and 11458 deletions
+5 -467
View File
@@ -67,16 +67,12 @@
"success": "Başarılı",
"lastOnline": "Son Çevrimiçi",
"lastSubFetch": "Son abonelik çekme",
"getVersion": "Sürümü Al",
"install": "Yükle",
"clients": "Kullanıcılar",
"usage": "Kullanım",
"twoFactorCode": "Kod",
"remained": "Kalan",
"security": "Güvenlik",
"emptyDnsDesc": "Eklenmiş DNS sunucusu yok.",
"emptyFakeDnsDesc": "Eklenmiş Fake DNS sunucusu yok.",
"emptyBalancersDesc": "Eklenmiş dengeleyici yok.",
"somethingWentWrong": "Bir hata oluştu",
"subscription": {
"title": "Abonelik Bilgisi",
@@ -86,7 +82,6 @@
"uploaded": "Yüklenen",
"expiry": "Son Kullanma",
"totalQuota": "Toplam Kota",
"individualLinks": "Bireysel Bağlantılar",
"active": "Aktif",
"inactive": "Pasif",
"unlimited": "Sınırsız",
@@ -136,9 +131,6 @@
"xrayStatus": "Xray",
"stopXray": "Durdur",
"restartXray": "Yeniden Başlat",
"xraySwitch": "Sürüm",
"xrayUpdates": "Xray Güncellemeleri",
"xraySwitchClickDesk": "Dikkatli seçin, eski sürümler mevcut yapılandırmalarla uyumlu olmayabilir.",
"updatePanel": "Paneli Güncelle",
"panelUpdateDesc": "Bu işlem 3X-UI'yi en son sürüme güncelleyecek ve panel servisini yeniden başlatacaktır.",
"currentPanelVersion": "Mevcut panel sürümü",
@@ -200,9 +192,6 @@
"download": "İndirme",
"sent": "Gönderilen",
"received": "Alınan",
"xraySwitchVersionDialog": "Xray sürümünü gerçekten değiştirmek istiyor musunuz?",
"xraySwitchVersionDialogDesc": "Bu işlem Xray sürümünü #version# olarak değiştirecektir.",
"xraySwitchVersionPopover": "Xray başarıyla güncellendi",
"panelUpdateDialog": "Gerçekten paneli güncellemek istiyor musunuz?",
"panelUpdateDialogDesc": "Bu işlem 3X-UI'yi #version# sürümüne güncelleyecek ve panel servisini yeniden başlatacaktır.",
"panelUpdateStartedPopover": "Panel güncellemesi başlatıldı",
@@ -210,24 +199,6 @@
"panelUpdateFailedDesc": "Güncelleme başarıyla tamamlanamadı. Sunucu günlüklerini kontrol edin veya komut satırından 'x-ui update' çalıştırın.",
"panelUpdateUnknownTitle": "Güncellemenin tamamlandığı doğrulanamadı",
"panelUpdateUnknownDesc": "Panel zamanında bir sonuç bildirmedi. Geçerli sürümü kontrol etmek için sayfayı yenileyin veya sunucu günlüklerini kontrol edin.",
"geofileUpdateDialog": "Geofile'ı gerçekten güncellemek istiyor musunuz?",
"geofileUpdateDialogDesc": "Bu işlem #filename# dosyasını güncelleyecektir.",
"geofilesUpdateDialogDesc": "Bu, tüm dosyaları güncelleyecektir.",
"geofilesUpdateAll": "Tümünü Güncelle",
"geofileUpdatePopover": "Geofile başarıyla güncellendi",
"geodataTitle": "Geodata Otomatik Güncelleme",
"geodataHint": "Xray bu dosyaları zamanlamaya göre indirir ve yeniden başlatmadan canlı yükler. URL'ler HTTPS olmalıdır. Xray'in güncelleyebilmesi için her dosyanın bin klasöründe önceden mevcut olması gerekir.",
"geodataCron": "Zamanlama (cron)",
"geodataOutbound": "Outbound üzerinden indir (isteğe bağlı)",
"geodataFile": "Dosya adı",
"geodataAddFile": "Dosya ekle",
"geodataSaveRestart": "Kaydet ve Xray'i Yeniden Başlat",
"geodataConfirmTitle": "Geodata ayarları kaydedilsin mi?",
"geodataConfirmContent": "Xray yapılandırma şablonu güncellenecek ve Xray yeniden başlatılacak.",
"geodataInvalidUrl": "Her dosya için bir HTTPS URL gerekir.",
"geodataInvalidFile": "Dosya adı yalnızca dosya adı olmalıdır, örn. geosite_custom.dat (yol içermemeli).",
"geodataInvalidCron": "Cron 5 alandan oluşmalıdır, örn. 0 4 * * *",
"geodataEmpty": "Yapılandırılmış dosya yok. Yönlendirme kurallarında dosyalar ext:geosite_custom.dat:category olarak kullanılır.",
"dontRefresh": "Kurulum devam ediyor, lütfen bu sayfayı yenilemeyin",
"logs": "Günlükler",
"accessLogs": "Erişim Günlükleri",
@@ -1082,7 +1053,6 @@
"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.",
"TGBotSettings": "Telegram Botu",
"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ı",
@@ -1107,43 +1077,12 @@
"currentPassword": "Mevcut Şifre",
"newUsername": "Yeni Kullanıcı Adı",
"newPassword": "Yeni Şifre",
"telegramBotEnable": "Telegram Botunu Etkinleştir",
"telegramBotEnableDesc": "Telegram botunu etkinleştirir.",
"telegramToken": "Telegram Token",
"telegramTokenDesc": "'{'@'}BotFather'dan alınan Telegram bot token.",
"telegramProxy": "SOCKS Proxy",
"telegramProxyDesc": "Telegram'a bağlanmak için SOCKS5 proxy'sini etkinleştirir. (ayarları kılavuzda belirtilen şekilde ayarlayın)",
"telegramAPIServer": "Telegram API Sunucusu",
"telegramAPIServerDesc": "Kullanılacak Telegram API sunucusu. Varsayılan sunucuyu kullanmak için boş bırakın.",
"telegramChatId": "Yönetici Sohbet Kimliği",
"telegramChatIdDesc": "Telegram Yönetici Sohbet Kimliği (Chat ID). Birden fazla ise virgülle ayırın. ({'@'}userinfobot'tan alabilirsiniz veya botta '/id' komutunu kullanabilirsiniz.)",
"telegramNotifyTime": "Bildirim Zamanı",
"telegramNotifyTimeDesc": "Telegram botunun periyodik raporları gönderme sıklığı. Hazır bir aralık seçin veya bir crontab ifadesi girmek için Özel'i seçin.",
"notifyTime": {
"every": "@every — bir aralıkla tekrarla",
"hourly": "@hourly — her saat",
"daily": "@daily — her gün 00:00'da",
"weekly": "@weekly — her hafta",
"monthly": "@monthly — her ay",
"custom": "Özel (crontab)",
"seconds": "Saniye",
"minutes": "Dakika",
"hours": "Saat",
"interval": "Aralık",
"unit": "Birim"
},
"tgNotifyBackup": "Veritabanı Yedeği",
"tgNotifyBackupDesc": "Bir rapor ile birlikte veritabanı yedek dosyasını gönderir.",
"tgNotifyLogin": "Giriş Bildirimi",
"tgNotifyLoginDesc": "Birisi web panelinize giriş yapmaya çalıştığında kullanıcı adı, IP adresi ve zaman hakkında bildirim almanızı sağlar.",
"sessionMaxAge": "Oturum Süresi",
"sessionMaxAgeDesc": "Giriş yaptıktan sonra oturum süresi. (birim: dakika)",
"expireTimeDiff": "Son Kullanma Tarihi Bildirimi",
"expireTimeDiffDesc": "Bu eşik seviyesine ulaşıldığında son kullanma tarihi hakkında bildirim almanızı sağlar. (birim: gün)",
"trafficDiff": "Trafik Sınırı Bildirimi",
"trafficDiffDesc": "Bu eşik seviyesine ulaşıldığında trafik sınırı hakkında bildirim almanızı sağlar. (birim: GB)",
"tgNotifyCpu": "CPU Yükü Bildirimi",
"tgNotifyCpuDesc": "CPU yükü bu eşik seviyesini aşarsa bildirim almanızı sağlar. (birim: %)",
"timeZone": "Saat Dilimi",
"timeZoneDesc": "Planlanmış görevler bu saat dilimine göre çalışacaktır.",
"subSettings": "Abonelik",
@@ -1208,10 +1147,6 @@
"subEncryptDesc": "Abonelik hizmetinin döndürülen içeriğini Base64 ile şifreler.",
"subURI": "Ters Proxy URI",
"subURIDesc": "Abonelik bağlantısı ve QR kodu için Dinleme Alan Adı/Dinleme Portu yerine kullanılan tam temel URL (scheme://alanadi[:port]/yol/). Abonelik bir ters proxy üzerinden veya yukarıdakilerden farklı bir alan adı/port üzerinden erişildiğinde bunu ayarlayın.",
"externalTrafficInformEnable": "Harici Trafik Bilgisi",
"externalTrafficInformEnableDesc": "Her trafik güncellemesinde harici API'yi bilgilendirir.",
"externalTrafficInformURI": "Harici Trafik Bilgisi URI'si",
"externalTrafficInformURIDesc": "Trafik güncellemeleri bu URI'ye gönderilir.",
"restartXrayOnClientDisable": "Otomatik Devre Dışı Sonrası Xray'i Yeniden Başlat",
"restartXrayOnClientDisableDesc": "Bir kullanıcı süre dolumu veya trafik limiti nedeniyle otomatik devre dışı bırakıldığında Xray'i yeniden başlatır.",
"fragment": "Parçalama",
@@ -1221,38 +1156,6 @@
"noisesSett": "Noises Ayarları",
"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ış).",
"ldap": {
"enable": "LDAP senkronizasyonunu etkinleştir",
"host": "LDAP sunucusu",
"port": "LDAP bağlantı noktası",
"useTls": "TLS kullan (LDAPS)",
"skipTlsVerify": "TLS sertifika doğrulamasını atla",
"skipTlsVerifyDesc": "Güvenli değil — sunucu sertifika doğrulamasını devre dışı bırakır. Yalnızca dahili/güvenilmeyen CA'larla kullanın.",
"bindDn": "DN'yi yazın",
"passwordConfigured": "Yapılandırıldı; mevcut parolayı korumak için boş bırakın.",
"passwordUnconfigured": "Yapılandırılmadı.",
"passwordPlaceholder": "Yapılandırıldı — değiştirmek için yeni değer girin",
"baseDn": "Temel DN",
"userFilter": "Kullanıcı filtresi",
"userAttr": "Kullanıcı özniteliği (username/email)",
"vlessField": "VLESS flag özniteliği",
"flagField": "Genel flag özniteliği (opsiyonel)",
"flagFieldDesc": "Ayarlanırsa VLESS flag'ini geçersiz kılar — örn. shadowInactive.",
"truthyValues": "Truthy değerler",
"truthyValuesDesc": "Virgülle ayrılmış; varsayılan: true,1,yes,on",
"invertFlag": "Flag'i tersine çevir",
"invertFlagDesc": "Öznitelik «devre dışı» anlamına geldiğinde etkinleştirin (örn. shadowInactive).",
"syncSchedule": "Senkronizasyon programı",
"syncScheduleDesc": "cron benzeri dize, örn. @every 1m",
"inboundTags": "Gelen bağlantı etiketleri",
"inboundTagsDesc": "LDAP senkronizasyonunun istemci otomatik oluşturup/silebileceği gelen bağlantılar.",
"noInbounds": "Gelen bağlantı bulunamadı. Önce Gelen Bağlantılar'nda bir tane oluşturun.",
"autoCreate": "Kullanıcıları otomatik oluştur",
"autoDelete": "Kullanıcıları otomatik sil",
"defaultTotalGb": "Varsayılan toplam (GB)",
"defaultExpiryDays": "Varsayılan son kullanma (gün)",
"defaultIpLimit": "Varsayılan IP limiti"
},
"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.",
@@ -1276,31 +1179,15 @@
"muxSett": "Mux Ayarları",
"direct": "Doğrudan Bağlantı",
"directDesc": "Belirli bir ülkenin alan adları veya IP aralıkları ile doğrudan bağlantı kurar.",
"notifications": "Bildirimler",
"certs": "Sertifikalar",
"externalTraffic": "Harici Trafik",
"dateAndTime": "Tarih ve Saat",
"proxyAndServer": "Proxy ve Sunucu",
"intervals": "Aralıklar",
"information": "Bilgi",
"profile": "Profil",
"language": "Dil",
"telegramBotLanguage": "Telegram Bot Dili",
"security": {
"admin": "Yönetici Kimlik Bilgileri",
"twoFactor": "İki Adımlı Doğrulama",
"twoFactorEnable": "2FA'yı Etkinleştir",
"twoFactorEnableDesc": "Daha fazla güvenlik için ek bir doğrulama katmanı ekler.",
"twoFactorModalSetTitle": "İki Adımlı Doğrulamayı Etkinleştir",
"twoFactorModalDeleteTitle": "İki Adımlı Doğrulamayı Devre Dışı Bırak",
"twoFactorModalSteps": "İki adımlı doğrulamayı ayarlamak için şu adımları izleyin:",
"twoFactorModalFirstStep": "1. Bu QR kodunu doğrulama uygulamasında tarayın veya QR kodunun yanındaki metni kopyalayıp uygulamaya yapıştırın.",
"twoFactorModalSecondStep": "2. Uygulamadaki kodu girin",
"twoFactorModalRemoveStep": "İki adımlı doğrulamayı kaldırmak için uygulamadaki kodu girin.",
"twoFactorModalChangeCredentialsTitle": "Kimlik Bilgilerini Değiştir",
"twoFactorModalChangeCredentialsStep": "Yönetici kimlik bilgilerini değiştirmek için uygulamadaki kodu girin.",
"twoFactorModalSetSuccess": "İki faktörlü kimlik doğrulama başarıyla kuruldu.",
"twoFactorModalDeleteSuccess": "İki faktörlü kimlik doğrulama başarıyla silindi.",
"twoFactorModalError": "Yanlış kod",
"show": "Göster",
"hide": "Gizle",
@@ -1323,36 +1210,6 @@
"getOutboundTrafficError": "Giden trafik alınırken hata oluştu.",
"resetOutboundTrafficError": "Giden trafik sıfırlanırken hata oluştu."
},
"smtpSettings": "SMTP Ayarları",
"smtpEnable": "E-posta Bildirimlerini Etkinleştir",
"smtpEnableDesc": "SMTP üzerinden e-posta bildirimlerini etkinleştirin",
"smtpHost": "SMTP Sunucusu",
"smtpHostDesc": "SMTP sunucu ana bilgisayar adı (örn. smtp.gmail.com)",
"smtpPort": "SMTP Bağlantı Noktası",
"smtpPortDesc": "SMTP sunucu bağlantı noktası (varsayılan: 587)",
"smtpUsername": "SMTP Kullanıcı Adı",
"smtpUsernameDesc": "SMTP kimlik doğrulama kullanıcı adı",
"smtpFrom": "Gönderen Adresi (From)",
"smtpFromDesc": "E-postanın From başlığında kullanılan adres. Boş bırakılırsa kullanıcı adı kullanılır.",
"smtpFromName": "Gönderen Adı (From)",
"smtpFromNameDesc": "From başlığında adresten önce görünen isteğe bağlı ad.",
"smtpPassword": "SMTP Parolası",
"smtpPasswordDesc": "SMTP kimlik doğrulama parolası",
"smtpTo": "Alıcılar",
"smtpToDesc": "Virgülle ayrılmış alıcı e-posta adresleri",
"emailSettings": "E-posta",
"emailNotifications": "Bildirimler",
"smtpEventBusNotify": "E-posta Olay Bildirimleri",
"smtpEventBusNotifyDesc": "Hangi olayların e-posta bildirimi tetikleyeceğini seçin",
"tgEventBusNotify": "Telegram Olay Bildirimleri",
"tgEventBusNotifyDesc": "Hangi olayların Telegram bildirimi tetikleyeceğini seçin",
"testSmtp": "Test E-postası Gönder",
"testTgBot": "Test Mesajı Gönder",
"eventGroupOutbound": "Giden Bağlantı",
"eventGroupXray": "Xray Çekirdeği",
"eventGroupSystem": "Sistem",
"eventGroupSecurity": "Güvenlik",
"eventGroupNode": "Düğümler",
"eventOutboundDown": "Çevrimdışı",
"eventOutboundUp": "Çevrimiçi",
"eventXrayCrash": "Çökme",
@@ -1360,36 +1217,7 @@
"eventNodeUp": "Çevrimiçi",
"eventCPUHigh": "Yüksek CPU (%)",
"requestFailed": "İstek başarısız oldu",
"smtpEncryption": "Şifreleme",
"smtpEncryptionDesc": "SMTP bağlantı şifreleme yöntemi",
"smtpEncryptionNone": "Yok (düz metin)",
"smtpEncryptionStartTLS": "STARTTLS",
"smtpEncryptionTLS": "TLS (örtük)",
"smtpStageConnect": "Bağlantı",
"smtpStageAuth": "Kimlik Doğrulama",
"smtpStageSend": "Gönderim",
"smtpTestSuccess": "Test e-postası başarıyla gönderildi",
"smtpHostNotConfigured": "SMTP sunucusu yapılandırılmamış",
"smtpNoRecipients": "Yapılandırılmış alıcı yok",
"smtpFromNotConfigured": "SMTP gönderen adresi yapılandırılmamış",
"eventLoginAttempt": "Oturum açma denemesi",
"telegramTokenConfigured": "Yapılandırıldı; mevcut belirteci korumak için boş bırakın.",
"telegramTokenPlaceholder": "Yapılandırıldı - değiştirmek için yeni bir belirteç girin",
"smtpPasswordConfigured": "Yapılandırıldı; mevcut parolayı korumak için boş bırakın.",
"smtpPasswordPlaceholder": "Yapılandırıldı - değiştirmek için yeni bir parola girin",
"smtpNotInitialized": "SMTP başlatılmadı",
"tgBotNotEnabled": "Telegram botu etkin değil",
"tgTestFailed": "Telegram testi başarısız oldu",
"tgTestSuccess": "Test mesajı Telegram'a gönderildi",
"tgBotNotRunning": "Telegram botu çalışmıyor",
"smtpErrorAuth": "Kimlik doğrulama başarısız — kullanıcı adını ve parolayı kontrol edin",
"smtpErrorStarttls": "Sunucu STARTTLS gerektiriyor — şifreleme türünü değiştirin",
"smtpErrorTls": "Sunucu TLS gerektiriyor — şifreleme türünü değiştirin",
"smtpErrorRefused": "Bağlantı reddedildi — sunucuyu ve bağlantı noktasını kontrol edin",
"smtpErrorTimeout": "Bağlantı zaman aşımına uğradı — sunucuya ulaşılamıyor",
"smtpErrorRelay": "Sunucu bu adresten gönderimi reddediyor",
"smtpErrorEof": "Bağlantı sunucu tarafından kapatıldı",
"smtpErrorUnknown": "SMTP hatası: {{ .Error }}",
"eventMemoryHigh": "Bellek kullanımı yüksek (%)",
"remarkTemplate": "Açıklama Şablonu",
"remarkTemplateDesc": "Ayarlandığında, her abonelik bağlantısının açıklama modelinin yerini alır — değişken belirteçleriyle kendi formatınızı yazın (eklemek için düğmeyi kullanın). Yukarıdaki modeli kullanmak için boş bırakın.",
@@ -1475,8 +1303,6 @@
"directdomains": "Doğrudan Alan Adları",
"ipv4Routing": "IPv4 Yönlendirme",
"ipv4RoutingDesc": "Bu seçenekler belirli bir varış yerine IPv4 üzerinden trafiği yönlendirir.",
"Template": "Gelişmiş Xray Yapılandırma Şablonu",
"TemplateDesc": "Nihai Xray yapılandırma dosyası bu şablona göre oluşturulacaktır.",
"FreedomStrategy": "Freedom Protokol Stratejisi",
"FreedomStrategyDesc": "Freedom Protokolünde ağın çıkış stratejisini ayarlayın.",
"FreedomHappyEyeballs": "Özgürlük Dolu Gözler (IPv4/IPv6)",
@@ -1500,11 +1326,6 @@
"Balancers": "Dengeleyiciler",
"balancerTagRequired": "Etiket zorunludur",
"balancerSelectorRequired": "En az bir giden bağlantı seçin",
"balancerLive": "Anlık Hedef",
"balancerOverride": "Hedef Zorla",
"balancerOverridePh": "Otomatik (strateji)",
"balancerLiveRefresh": "Dengeleyici durumunu yenile",
"balancerNotRunning": "Bu dengeleyici çalışan Xray'de etkin değil — değişikliklerinizi kaydedin veya önce Xray'i başlatın",
"routeTester": "Rota Testi",
"routeTesterDesc": "Çalışan Xray'e hangi giden bağlantının bir isteği işleyeceğini sorun. Gerçek trafik gönderilmez — karar doğrudan canlı yönlendirme motorundan gelir.",
"routeTesterDest": "Alan adı veya IP",
@@ -1516,7 +1337,6 @@
"routeTesterViaBalancer": "dengeleyici aracılığıyla",
"routeTesterDefaultOutbound": "Hiçbir yönlendirme kuralı eşleşmedi — trafik varsayılan (ilk) giden bağlantıya yönlendirilir.",
"Routings": "Yönlendirme Kuralları",
"completeTemplate": "Tümü",
"logLevel": "Günlük Seviyesi",
"logLevelDesc": "Hata günlükleri için kayıt seviyesi; hangi detayda bilginin kaydedileceğini belirler.",
"accessLog": "Erişim Günlüğü",
@@ -1544,7 +1364,6 @@
"source": "Kaynak",
"dest": "Hedef",
"inbound": "Gelen Bağlantı",
"balancer": "Dengeleyici",
"useComma": "Virgülle ayrılmış öğeler"
},
"routing": {
@@ -1725,32 +1544,7 @@
"alreadyAdded": "Bu sunucu zaten çıkış listesinde. Anahtarı yenilemek için {reset} kullanın.",
"provisionFailed": "PIA çıkışı oluşturulamadı. Yeniden deneyin."
},
"tabBalancerSettings": "Dengeleyici Ayarları",
"tabObservatory": "Gözlemci",
"observatory": {
"autoManaged": "Gözlemciler dengeleyicilerinize göre otomatik yönetilir. Nasıl sınama yapacaklarını aşağıdan ayarlayın; izlenen çıkışlar dengeleyici seçicilerini izler.",
"emptyHint": "Etkin bir bağlantı gözlemcisi yok. Least Ping veya Least Load dengeleyici — ya da fallback içeren Random / Round-robin dengeleyici — oluşturduğunuzda otomatik olarak bir tane eklenir; böylece gözlemci kullanan dengeleyiciler hedef seçmeden önce çıkış sağlığını kontrol edebilir.",
"mixedLegacy": "Bu yapılandırmada hem Observatory hem de Burst Observatory var. Xray tek bir global gözlemci kullanır, bu nedenle bu eski karma durum desteklenmez; dengeleyiciler kaydedildiğinde tek bir gözlemciye normalleştirilir.",
"subjectSelector": "İzlenen Çıkışlar",
"subjectSelectorDesc": "Bu gözlemcinin sınadığı çıkış etiketleri. Dengeleyicilerinize göre otomatik yönetilir.",
"probeURL": "Sınama URL'si",
"probeURLDesc": "Her çıkışı ölçmek için istenen URL. HTTP 204 döndürmelidir.",
"probeInterval": "Sınama Aralığı",
"probeIntervalDesc": "Her çıkışın ne sıklıkta sınanacağı, örn. 30s, 1m, 2h45m.",
"enableConcurrency": "Eşzamanlı Sınama",
"enableConcurrencyDesc": "İzlenen tüm çıkışları tek tek yerine aynı anda sına. Daha hızlı ama ağda daha görünür.",
"destination": "Sınama Hedefi",
"destinationDesc": "Her çıkışı ölçmek için istenen URL. HTTP 204 döndürmelidir.",
"connectivity": "Bağlantı Denetimi",
"connectivityDesc": "İsteğe bağlı yerel ağ denetim URL'si; yalnızca hedef başarısız olduktan sonra denenir. Atlamak için boş bırakın.",
"interval": "Sınama Aralığı",
"intervalDesc": "Çıkış başına sınamalar arasındaki ortalama süre, örn. 1m. En az 10s.",
"timeout": "Sınama Zaman Aşımı",
"timeoutDesc": "Bir sınamanın başarısız sayılmadan önce ne kadar bekleneceği, örn. 5s.",
"sampling": "Örnekleme Sayısı",
"samplingDesc": "Her çıkışı puanlamak için tutulan son sınama sonucu sayısı.",
"httpMethod": "HTTP Yöntemi",
"httpMethodDesc": "Sınamalar için kullanılan HTTP yöntemi.",
"deleteAlsoObservatory": "Bu, Observatory kullanan son dengeleyici, bu yüzden o da kaldırılacak.",
"deleteAlsoBurst": "Bu, Burst Observatory kullanan son dengeleyici, bu yüzden o da kaldırılacak."
},
@@ -1762,25 +1556,7 @@
},
"balancer": {
"balancerStrategy": "Strateji",
"tag": "Etiket",
"tagDuplicate": "Etiket başka bir dengeleyici tarafından kullanılıyor",
"tagPlaceholder": "benzersiz dengeleyici etiketi",
"selector": "Seçici",
"fallback": "Yedek Çözüm",
"cycleTooltip": "Döngü: {path} → ({start} adresine geri dön)",
"expected": "Beklenen",
"expectedPlaceholder": "optimal düğüm sayısı",
"maxRtt": "Maks. RTT",
"tolerance": "Tolerans",
"baselines": "Temel Değerler",
"costs": "Maliyetler",
"costMatch": "Etiket deseni",
"costValue": "Ağırlık",
"costRegexp": "Düzenli ifade eşleşmesi",
"balancerDeleteInUse": "Bu dengeleyici silinemez — şu dengeleyicilerin yedeği olarak kullanılmaktadır: {names}",
"balancerFallbackCycle": "Bu dengeleyiciyi yedek olarak ayarlayamazsınız — döngüsel bağımlılık oluşturur.",
"balancerFallbackInfo": "Trafik şu yoldan yönlendirilecektir: Dengeleyici → Loopback → Sunucu → Hedef dengeleyici → Bağlantı çıkışı. Bu, sunucu üzerinden ek bir atlama ekler ve hafif gecikmelere neden olabilir.",
"fallbackBalancerHint": "Yedek olarak başka bir dengeleyici seçin",
"reservedPrefix": " _bl_ ön eki dahili dengeleyici loopback nesneleri için ayrılmıştır"
},
"wireguard": {
@@ -1883,55 +1659,8 @@
"usage": "Kullanım",
"addOutbound": "Giden Bağlantı Ekle"
},
"dns": {
"enable": "DNS'yi Etkinleştir",
"enableDesc": "Dahili DNS sunucusunu etkinleştirir.",
"tag": "DNS Gelen Bağlantı Etiketi",
"tagDesc": "Bu etiket, yönlendirme kurallarında gelen bağlantı etiketi olarak kullanılabilir.",
"clientIp": "İstemci IP",
"clientIpDesc": "DNS sorguları sırasında belirtilen IP konumunu sunucuya bildirmek için kullanılır.",
"disableCache": "Önbelleği Devre Dışı Bırak",
"disableCacheDesc": "DNS önbelleğini devre dışı bırakır.",
"disableFallback": "Yedeklemeyi Devre Dışı Bırak",
"disableFallbackDesc": "Yedek DNS sorgularını devre dışı bırakır.",
"disableFallbackIfMatch": "Eşleşirse Yedeklemeyi Devre Dışı Bırak",
"disableFallbackIfMatchDesc": "Alan adı listesi eşleştiğinde yedek DNS sorgularını devre dışı bırakır.",
"enableParallelQuery": "Paralel Sorguyu Etkinleştir",
"enableParallelQueryDesc": "Daha hızlı çözümleme için birden fazla sunucuya paralel DNS sorgularını etkinleştirir.",
"strategy": "Sorgu Stratejisi",
"strategyDesc": "Alan adlarını çözmek için genel strateji.",
"add": "Sunucu Ekle",
"edit": "Sunucuyu Düzenle",
"domains": "Alan Adları",
"expectIPs": "Beklenen IP'ler",
"unexpectIPs": "Beklenmeyen IP'ler",
"useSystemHosts": "Sistem Hosts'larını Kullan",
"useSystemHostsDesc": "İşletim sisteminin hosts dosyasını kullanır.",
"serveStale": "Süresi Dolmuş Sonuçları Sun",
"serveStaleDesc": "Arka planda yenilenirken süresi dolmuş önbellek sonuçlarını döndürür.",
"serveExpiredTTL": "Süresi Dolmuş TTL",
"serveExpiredTTLDesc": "Süresi dolmuş önbellek girdilerinin geçerlilik süresi (saniye); 0 = asla",
"timeoutMs": "Zaman Aşımı (ms)",
"skipFallback": "Yedekleri Atla",
"finalQuery": "Son Sorgu",
"hosts": "Sunucular",
"hostsAdd": "Host Ekle",
"hostsEmpty": "Tanımlı Host yok.",
"hostsDomain": "Alan adı (ör. domain:example.com)",
"hostsValues": "IP veya alan adı — yazıp Enter'a basın",
"usePreset": "Şablon Kullan",
"dnsPresetTitle": "DNS Şablonları",
"dnsPresetFamily": "Aile",
"clearAll": "Tümünü Sil",
"clearAllTitle": "Tüm DNS sunucularını sil?",
"clearAllConfirm": "Bu işlem tüm DNS sunucularını listeden kaldırır. Geri alınamaz.",
"dnsLeakWarning": "DNS; localhost, düz UDP/TCP, yerel mod DoH/DoQ, fallback sorguları veya EDNS client IP üzerinden sızabilir. Gizlilik önemliyse yönlendirilmiş DoH, hosts sabitlemeleri ve kapalı fallback kullanın."
},
"fakedns": {
"add": "Sahte DNS Ekle",
"ipPool": "IP Havuzu Alt Ağı",
"poolSize": "Havuz Boyutu"
},
"dns": {},
"fakedns": {},
"defaultOutbound": "Varsayılan giden",
"defaultOutboundDesc": "Yönlendirme kuralıyla eşleşmeyen trafik bu gideni kullanır (listedeki ilk giden)."
},
@@ -2055,198 +1784,7 @@
}
},
"tgbot": {
"keyboardClosed": "❌ Klavye kapatıldı!",
"noResult": "❗ Sonuç yok!",
"noQuery": "❌ Sorgu bulunamadı! Lütfen komutu tekrar kullanın!",
"wentWrong": "❌ Bir şeyler yanlış gitti!",
"noIpRecord": "❗ IP Kaydı Yok!",
"noInbounds": "❗ Gelen bağlantı bulunamadı!",
"unlimited": "♾ Sınırsız (Sıfırla)",
"add": "Ekle",
"month": "Ay",
"months": "Aylar",
"days": "Günler",
"hours": "Saatler",
"minutes": "Dakikalar",
"unknown": "Bilinmeyen",
"inbounds": "Gelen Bağlantılar",
"clients": "Kullanıcılar",
"offline": "🔴 Çevrimdışı",
"online": "🟢 Çevrimiçi",
"commands": {
"unknown": "❗ Bilinmeyen komut.",
"pleaseChoose": "👇 Lütfen seçin:\r\n",
"help": "🤖 Bu bota hoş geldiniz! Web panelinden belirli verileri sunmak ve gerektiğinde değişiklik yapmanıza olanak tanımak için tasarlanmıştır.\r\n\r\n",
"start": "👋 Merhaba <i>{{ .Firstname }}</i>.\r\n",
"welcome": "🤖 <b>{{ .Hostname }}</b> yönetim botuna hoş geldiniz.\r\n",
"status": "✅ Bot çalışıyor!",
"usage": "❗ Lütfen aramak için bir metin sağlayın!",
"getID": "🆔 Kimliğiniz: <code>{{ .ID }}</code>",
"helpAdminCommands": "Xray Core'u yeniden başlatmak için:\r\n<code>/restart</code>\r\n\r\nBir kullanıcının istatistiklerini aramak için:\r\n<code>/usage [E-posta]</code>\r\n\r\nGelen bağlantılarnı aramak için (kullanıcı istatistikleri ile):\r\n<code>/inbound [Açıklama]</code>\r\n\r\nTelegram Sohbet Kimliği (Chat ID):\r\n<code>/id</code>",
"helpClientCommands": "İstatistiklerinizi görmek için şu komutu kullanın:\r\n\r\n<code>/usage [E-posta]</code>\r\n\r\nTelegram Sohbet Kimliği:\r\n<code>/id</code>",
"restartUsage": "<code>/restart</code>",
"restartSuccess": "✅ İşlem başarılı!",
"restartFailed": "❗ İşlem hatası.\r\n\r\n<code>Hata: {{ .Error }}</code>.",
"xrayNotRunning": "❗ Xray Core çalışmıyor.",
"startDesc": "Ana menüyü göster",
"helpDesc": "Bot yardımı",
"statusDesc": "Bot durumunu kontrol et",
"idDesc": "Telegram Kimliğinizi gösterir",
"usageDesc": "İstemci kullanımını göster: /usage e-posta",
"inboundDesc": "Gelenleri ara: /inbound ad (yönetici)",
"restartDesc": "Xray çekirdeğini yeniden başlat (yönetici)",
"clearallDesc": "Tüm istemcilerin trafiğini sıfırla (yönetici)"
},
"messages": {
"cpuThreshold": "CPU Yükü ({{ .Percent }}%), {{ .Threshold }}% eşiğini aşıyor",
"selectUserFailed": "❌ Kullanıcı seçiminde hata!",
"userSaved": "✅ Telegram Kullanıcısı kaydedildi.",
"loginSuccess": "✅ Panele başarıyla giriş yapıldı.\r\n",
"loginFailed": "❗️Panele giriş denemesi başarısız oldu.\r\n",
"report": "🕰 Planlanmış Raporlar: {{ .RunTime }}\r\n",
"datetime": "⏰ Tarih ve Saat: {{ .DateTime }}\r\n",
"hostname": "💻 Sunucu: {{ .Hostname }}",
"version": "🚀 3X-UI Sürümü: {{ .Version }}\r\n",
"xrayVersion": "📡 Xray Sürümü: {{ .XrayVersion }}\r\n",
"ipv6": "🌐 IPv6: {{ .IPv6 }}",
"ipv4": "🌐 IPv4: {{ .IPv4 }}",
"ip": "🌐 IP: {{ .IP }}",
"ips": "🔢 IP'ler:\r\n{{ .IPs }}\r\n",
"serverUpTime": "⏳ Çalışma Süresi: {{ .UpTime }} {{ .Unit }}\r\n",
"serverLoad": "📈 Sistem Yükü: {{ .Load1 }}, {{ .Load2 }}, {{ .Load3 }}\r\n",
"serverMemory": "📋 RAM: {{ .Current }}/{{ .Total }}",
"tcpCount": "🔹 TCP: {{ .Count }}",
"udpCount": "🔸 UDP: {{ .Count }}",
"traffic": "🚦 Trafik: {{ .Total }} (↑{{ .Upload }},↓{{ .Download }})\r\n",
"xrayStatus": "ℹ️ Durum: {{ .State }}\r\n",
"username": "👤 Kullanıcı Adı: {{ .Username }}\r\n",
"reason": "❗️ Sebep: {{ .Reason }}\r\n",
"time": "⏰ Zaman: {{ .Time }}\r\n",
"inbound": "📍 Gelen Bağlantı: {{ .Remark }}\r\n",
"port": "🔌 Bağlantı Noktası: {{ .Port }}",
"expire": "📅 Son Kullanma Tarihi: {{ .Time }}\r\n",
"expireIn": "📅 Sona Erecek: {{ .Time }}\r\n",
"active": "💡 Aktif: {{ .Enable }}\r\n",
"enabled": "🚨 Etkin: {{ .Enable }}\r\n",
"online": "🌐 Bağlantı durumu: {{ .Status }}\r\n",
"lastOnline": "🔙 Son Çevrimiçi: {{ .Time }}\r\n",
"email": "📧 E-posta: {{ .Email }}\r\n",
"upload": "🔼 Yükleme: ↑{{ .Upload }}\r\n",
"download": "🔽 İndirme: ↓{{ .Download }}\r\n",
"total": "📊 Toplam: ↑↓{{ .UpDown }} / {{ .Total }}\r\n",
"TGUser": "👤 Telegram Kullanıcısı: {{ .TelegramID }}\r\n",
"exhaustedCount": "🚨 Limiti Dolan {{ .Type }} sayısı:\r\n",
"onlinesCount": "🌐 Çevrimiçi Kullanıcılar: {{ .Count }}\r\n",
"disabled": "🛑 Devre Dışı: {{ .Disabled }}\r\n",
"depleteSoon": "🔜 Kotası Dolmak Üzere: {{ .Deplete }}\r\n\r\n",
"backupTime": "🗄 Yedekleme Zamanı: {{ .Time }}\r\n",
"refreshedOn": "\r\n📋🔄 Yenilendi: {{ .Time }}\r\n\r\n",
"yes": "✅ Evet",
"no": "❌ Hayır",
"received_email": "📧📥 E-posta güncellendi.",
"received_comment": "💬📥 Yorum güncellendi.",
"email_prompt": "📧 Varsayılan E-posta: {{ .ClientEmail }}\n\nE-postanızı girin.",
"comment_prompt": "💬 Varsayılan Yorum: {{ .ClientComment }}\n\nYorumunuzu girin.",
"cancel": "❌ İşlem iptal edildi! \n\nİstediğiniz zaman /start ile yeniden başlayabilirsiniz. 🔄",
"error_add_client": "⚠️ Hata:\n\n {{ .error }}",
"using_default_value": "Tamam, varsayılan değeri kullanacağım. 😊",
"incorrect_input": "Geçersiz değer girdiniz.\nİfadeler arasında boşluk olmamalıdır.\nDoğru örnek: aaaaaa\nYanlış örnek: aaa aaa 🚫",
"AreYouSure": "Emin misiniz? 🤔",
"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",
"memoryThreshold": "Bellek kullanımı {{ .Percent }}% eşiği {{ .Threshold }}% aşıyor"
},
"buttons": {
"closeKeyboard": "❌ Klavyeyi Kapat",
"cancel": "❌ İptal",
"cancelReset": "❌ Sıfırlamayı İptal Et",
"cancelIpLimit": "❌ IP Limitini İptal Et",
"confirmResetTraffic": "✅ Trafiği Sıfırlamayı Onayla?",
"confirmClearIps": "✅ IP'leri Temizlemeyi Onayla?",
"confirmRemoveTGUser": "✅ Telegram Kullanıcısını Kaldırmayı Onayla?",
"confirmToggle": "✅ Kullanıcıyı Etkinleştirme/Devre Dışı Bırakmayı Onayla?",
"dbBackup": "Veritabanı Yedeği Al",
"serverUsage": "Sunucu Kullanımı",
"getInbounds": "Gelen Bağlantılarnı Al",
"depleteSoon": "Kotası Dolmak Üzere",
"clientUsage": "Kullanıcı İstatistikleri",
"onlines": "Çevrimiçi Kullanıcılar",
"commands": "Komutlar",
"refresh": "🔄 Yenile",
"clearIPs": "❌ IP'leri Temizle",
"removeTGUser": "❌ Telegram Kullanıcısını Kaldır",
"selectTGUser": "👤 Telegram Kullanıcısını Seç",
"selectOneTGUser": "👤 Bir Telegram Kullanıcısını Seçin:",
"resetTraffic": "📈 Trafiği Sıfırla",
"resetExpire": "📅 Son Kullanma Tarihini Değiştir",
"ipLog": "🔢 IP Günlüğü",
"ipLimit": "🔢 IP Limiti",
"setTGUser": "👤 Telegram Kullanıcısını Ayarla",
"toggle": "🔘 Etkinleştir / Devre Dışı Bırak",
"custom": "🔢 Özel",
"confirmNumber": "✅ Onayla: {{ .Num }}",
"confirmNumberAdd": "✅ Ekleme onayı: {{ .Num }}",
"limitTraffic": "🚧 Trafik Sınırı",
"getBanLogs": "Yasak Günlüklerini Al",
"allClients": "Tüm Kullanıcılar",
"addClient": "Kullanıcı Ekle",
"submitDisable": "Devre Dışı Olarak Gönder ☑️",
"submitEnable": "Etkin Olarak Gönder ✅",
"use_default": "🏷️ Varsayılanı Kullan",
"change_email": "⚙️📧 E-posta",
"change_comment": "⚙️💬 Yorum",
"ResetAllTraffics": "Tüm Trafikleri Sıfırla",
"SortedTrafficUsageReport": "Sıralı Trafik Kullanım Raporu"
},
"answers": {
"successfulOperation": "✅ İşlem başarılı!",
"errorOperation": "❗ İşlemde hata.",
"getInboundsFailed": "❌ Gelen Bağlantılar alınamadı.",
"getClientsFailed": "❌ Kullanıcılar alınamadı.",
"canceled": "❌ {{ .Email }}: İşlem iptal edildi.",
"clientRefreshSuccess": "✅ {{ .Email }}: Kullanıcı başarıyla yenilendi.",
"IpRefreshSuccess": "✅ {{ .Email }}: IP'ler başarıyla yenilendi.",
"TGIdRefreshSuccess": "✅ {{ .Email }}: Kullanıcının Telegram Kimliği başarıyla yenilendi.",
"resetTrafficSuccess": "✅ {{ .Email }}: Trafik başarıyla sıfırlandı.",
"setTrafficLimitSuccess": "✅ {{ .Email }}: Trafik limiti başarıyla kaydedildi.",
"expireResetSuccess": "✅ {{ .Email }}: Son kullanma günleri başarıyla sıfırlandı.",
"resetIpSuccess": "✅ {{ .Email }}: IP limiti {{ .Count }} başarıyla kaydedildi.",
"clearIpSuccess": "✅ {{ .Email }}: IP'ler başarıyla temizlendi.",
"getIpLog": "✅ {{ .Email }}: IP Günlüğü alındı.",
"getUserInfo": "✅ {{ .Email }}: Telegram Kullanıcı Bilgisi alındı.",
"removedTGUserSuccess": "✅ {{ .Email }}: Telegram Kullanıcısı başarıyla kaldırıldı.",
"enableSuccess": "✅ {{ .Email }}: Başarıyla etkinleştirildi.",
"disableSuccess": "✅ {{ .Email }}: Başarıyla devre dışı bırakıldı.",
"askToAddUserId": "Yapılandırmanız bulunamadı!\r\nLütfen yöneticinizden Telegram Chat ID'nizi yapılandırmanıza eklemesini isteyin.\r\n\r\nSizin Chat ID'niz: <code>{{ .TgUserID }}</code>",
"chooseClient": "Gelen Bağlantı {{ .Inbound }} için bir Kullanıcı Seçin",
"chooseInbound": "Bir Gelen Bağlantı Seçin"
}
"noIpRecord": "❗ IP Kaydı Yok!"
},
"email": {
"labelStatus": "Durum",
"labelOutbound": "Giden Bağlantı",
"labelNode": "Düğüm",
"labelError": "Hata",
"labelDelay": "Gecikme",
"labelUsername": "Kullanıcı Adı",
"labelIP": "IP",
"labelReason": "Neden",
"labelSource": "Kaynak",
"statusCrashed": "ÇÖKTÜ",
"statusHigh": "YÜKSEK",
"statusSuccess": "BAŞARILI",
"statusFailed": "BAŞARISIZ",
"statusDown": "ÇEVRİMDIŞI",
"statusUp": "ÇEVRİMİÇİ"
}
}
"email": {}
}