精简版第四轮补裁(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
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:
@@ -67,16 +67,12 @@
|
||||
"success": "تم بنجاح",
|
||||
"lastOnline": "آخر متصل",
|
||||
"lastSubFetch": "آخر جلب للاشتراك",
|
||||
"getVersion": "جيب النسخة",
|
||||
"install": "تثبيت",
|
||||
"clients": "عملاء",
|
||||
"usage": "استخدام",
|
||||
"twoFactorCode": "الكود",
|
||||
"remained": "المتبقي",
|
||||
"security": "أمان",
|
||||
"emptyDnsDesc": "مفيش سيرفر DNS مضاف.",
|
||||
"emptyFakeDnsDesc": "مفيش سيرفر Fake DNS مضاف.",
|
||||
"emptyBalancersDesc": "مفيش موازن تحميل مضاف.",
|
||||
"somethingWentWrong": "حدث خطأ ما",
|
||||
"subscription": {
|
||||
"title": "معلومات الاشتراك",
|
||||
@@ -86,7 +82,6 @@
|
||||
"uploaded": "الرفع",
|
||||
"expiry": "تاريخ الانتهاء",
|
||||
"totalQuota": "الحصة الإجمالية",
|
||||
"individualLinks": "روابط فردية",
|
||||
"active": "نشط",
|
||||
"inactive": "غير نشط",
|
||||
"unlimited": "غير محدود",
|
||||
@@ -136,9 +131,6 @@
|
||||
"xrayStatus": "Xray",
|
||||
"stopXray": "إيقاف",
|
||||
"restartXray": "إعادة تشغيل",
|
||||
"xraySwitch": "النسخة",
|
||||
"xrayUpdates": "تحديثات Xray",
|
||||
"xraySwitchClickDesk": "اختار بحذر، النسخ القديمة ممكن ما تتوافقش مع الإعدادات الحالية.",
|
||||
"updatePanel": "تحديث البانل",
|
||||
"panelUpdateDesc": "ده هيحدث 3X-UI لآخر إصدار وهيعيد تشغيل خدمة البانل.",
|
||||
"currentPanelVersion": "إصدار البانل الحالي",
|
||||
@@ -200,9 +192,6 @@
|
||||
"download": "تنزيل",
|
||||
"sent": "مرسل",
|
||||
"received": "مستقبل",
|
||||
"xraySwitchVersionDialog": "هل تريد حقًا تغيير إصدار Xray؟",
|
||||
"xraySwitchVersionDialogDesc": "سيؤدي هذا إلى تغيير إصدار Xray إلى #version#.",
|
||||
"xraySwitchVersionPopover": "تم تحديث Xray بنجاح",
|
||||
"panelUpdateDialog": "هل فعلاً عايز تحدث البانل؟",
|
||||
"panelUpdateDialogDesc": "ده هيحدث 3X-UI للإصدار #version# وهيعيد تشغيل البانل.",
|
||||
"panelUpdateStartedPopover": "بدأ تحديث البانل",
|
||||
@@ -210,24 +199,6 @@
|
||||
"panelUpdateFailedDesc": "لم يكتمل التحديث بنجاح. تحقق من سجلات الخادم، أو نفّذ الأمر «x-ui update» من سطر الأوامر.",
|
||||
"panelUpdateUnknownTitle": "تعذّر التأكد من اكتمال التحديث",
|
||||
"panelUpdateUnknownDesc": "لم تُبلغ اللوحة بنتيجة في الوقت المحدد. أعد تحميل الصفحة للتحقق من الإصدار الحالي، أو تحقق من سجلات الخادم.",
|
||||
"geofileUpdateDialog": "هل تريد حقًا تحديث ملف الجغرافيا؟",
|
||||
"geofileUpdateDialogDesc": "سيؤدي هذا إلى تحديث ملف #filename#.",
|
||||
"geofilesUpdateDialogDesc": "سيؤدي هذا إلى تحديث كافة الملفات.",
|
||||
"geofilesUpdateAll": "تحديث الكل",
|
||||
"geofileUpdatePopover": "تم تحديث ملف الجغرافيا بنجاح",
|
||||
"geodataTitle": "التحديث التلقائي لـ Geodata",
|
||||
"geodataHint": "يقوم Xray بتنزيل هذه الملفات حسب الجدول الزمني وإعادة تحميلها دون إعادة تشغيل. يجب أن تكون الروابط HTTPS. يجب أن يكون كل ملف موجوداً مسبقاً في مجلد bin حتى يتمكن Xray من تحديثه.",
|
||||
"geodataCron": "الجدولة (cron)",
|
||||
"geodataOutbound": "التنزيل عبر outbound (اختياري)",
|
||||
"geodataFile": "اسم الملف",
|
||||
"geodataAddFile": "إضافة ملف",
|
||||
"geodataSaveRestart": "حفظ وإعادة تشغيل Xray",
|
||||
"geodataConfirmTitle": "حفظ إعدادات geodata؟",
|
||||
"geodataConfirmContent": "سيتم تحديث قالب إعدادات Xray وإعادة تشغيل Xray.",
|
||||
"geodataInvalidUrl": "كل ملف يحتاج إلى رابط HTTPS.",
|
||||
"geodataInvalidFile": "يجب أن يكون اسم الملف اسماً بسيطاً مثل geosite_custom.dat (بدون مسارات).",
|
||||
"geodataInvalidCron": "يجب أن يتكون cron من 5 حقول، مثل 0 4 * * *",
|
||||
"geodataEmpty": "لا توجد ملفات مهيأة. في قواعد التوجيه يُشار إلى الملفات بالشكل ext:geosite_custom.dat:category.",
|
||||
"dontRefresh": "التثبيت شغال، متعملش Refresh للصفحة",
|
||||
"logs": "السجلات",
|
||||
"accessLogs": "سجلات الوصول",
|
||||
@@ -1082,7 +1053,6 @@
|
||||
"warnDefaultBasePath": "المسار الأساسي الافتراضي \"/\" معروف — غيّره إلى مسار عشوائي.",
|
||||
"warnDefaultSubPath": "مسار الاشتراك الافتراضي \"/sub/\" معروف — قم بتغييره.",
|
||||
"warnDefaultJsonPath": "مسار اشتراك JSON الافتراضي \"/json/\" معروف — قم بتغييره.",
|
||||
"TGBotSettings": "بوت تيليجرام",
|
||||
"panelListeningIP": "IP الاستماع",
|
||||
"panelListeningIPDesc": "عنوان IP للبانل. (سيبه فاضي عشان يستمع على كل الـ IPs)",
|
||||
"panelListeningDomain": "دومين الاستماع",
|
||||
@@ -1107,43 +1077,12 @@
|
||||
"currentPassword": "الباسورد الحالي",
|
||||
"newUsername": "اسم المستخدم الجديد",
|
||||
"newPassword": "الباسورد الجديد",
|
||||
"telegramBotEnable": "تفعيل بوت Telegram",
|
||||
"telegramBotEnableDesc": "يفعل بوت Telegram.",
|
||||
"telegramToken": "رمز تيليجرام",
|
||||
"telegramTokenDesc": "توكن البوت اللي جبت من '{'@'}BotFather'.",
|
||||
"telegramProxy": "وكيل SOCKS",
|
||||
"telegramProxyDesc": "يفعل بروكسي SOCKS5 للاتصال بـ Telegram. (اضبط الإعدادات حسب الدليل)",
|
||||
"telegramAPIServer": "خادم API لتيليجرام",
|
||||
"telegramAPIServerDesc": "سيرفر Telegram API المستخدم. سيبه فاضي لاستخدام الافتراضي.",
|
||||
"telegramChatId": "ID شات الأدمن",
|
||||
"telegramChatIdDesc": "ID شات الأدمن في Telegram. (مفصول بفواصل)(تقدر تجيبه من {'@'}userinfobot) أو (استخدم '/id' في البوت)",
|
||||
"telegramNotifyTime": "وقت الإشعار",
|
||||
"telegramNotifyTimeDesc": "عدد مرات إرسال البوت للتقارير الدورية. اختر فترة جاهزة، أو اختر «مخصص» لإدخال تعبير crontab.",
|
||||
"notifyTime": {
|
||||
"every": "@every — التكرار ضمن فترة",
|
||||
"hourly": "@hourly — كل ساعة",
|
||||
"daily": "@daily — كل يوم الساعة 00:00",
|
||||
"weekly": "@weekly — كل أسبوع",
|
||||
"monthly": "@monthly — كل شهر",
|
||||
"custom": "مخصص (crontab)",
|
||||
"seconds": "ثوانٍ",
|
||||
"minutes": "دقائق",
|
||||
"hours": "ساعات",
|
||||
"interval": "الفاصل الزمني",
|
||||
"unit": "الوحدة"
|
||||
},
|
||||
"tgNotifyBackup": "نسخة احتياطية لقاعدة البيانات",
|
||||
"tgNotifyBackupDesc": "ابعت ملف النسخة الاحتياطية لقاعدة البيانات مع التقرير.",
|
||||
"tgNotifyLogin": "إشعار بتسجيل الدخول",
|
||||
"tgNotifyLoginDesc": "استقبل إشعار بكل محاولة تسجيل دخول للبانل مع اسم المستخدم، الـ IP، والوقت.",
|
||||
"sessionMaxAge": "مدة الجلسة",
|
||||
"sessionMaxAgeDesc": "المدة اللي تفضل فيها مسجل دخول. (الوحدة: دقيقة)",
|
||||
"expireTimeDiff": "تنبيه بتاريخ الانتهاء",
|
||||
"expireTimeDiffDesc": "استقبل تنبيه قبل ما توصل لتاريخ الانتهاء بالمدة المحددة. (الوحدة: يوم)",
|
||||
"trafficDiff": "تنبيه حد الترافيك",
|
||||
"trafficDiffDesc": "استقبل تنبيه عند وصول الترافيك للحد المحدد. (الوحدة: جيجابايت)",
|
||||
"tgNotifyCpu": "تنبيه حمل المعالج",
|
||||
"tgNotifyCpuDesc": "استقبل تنبيه لو حمل المعالج عدى الحد المحدد. (الوحدة: %)",
|
||||
"timeZone": "المنطقة الزمنية",
|
||||
"timeZoneDesc": "المهام المجدولة هتشتغل بناءً على المنطقة الزمنية دي.",
|
||||
"subSettings": "الاشتراك",
|
||||
@@ -1208,10 +1147,6 @@
|
||||
"subEncryptDesc": "المحتوى اللي هيترجع من خدمة الاشتراك هيكون مشفر بـ Base64.",
|
||||
"subURI": "مسار البروكسي العكسي",
|
||||
"subURIDesc": "الرابط الأساسي الكامل (scheme://domain[:port]/path/) لرابط الاشتراك وكود الـQR، بيتستخدم بدل دومين الاستماع/بورت الاستماع. املا الحقل ده لو الاشتراك بيتفتح من ورا بروكسي عكسي أو على دومين/بورت مختلف عن اللي فوق.",
|
||||
"externalTrafficInformEnable": "تنبيه الترافيك الخارجي",
|
||||
"externalTrafficInformEnableDesc": "إخطار واجهة API خارجية بكل تحديث لحركة المرور.",
|
||||
"externalTrafficInformURI": "مسار تنبيه الترافيك الخارجي",
|
||||
"externalTrafficInformURIDesc": "تحديثات الترافيك هتتبعت للمسار ده.",
|
||||
"restartXrayOnClientDisable": "إعادة تشغيل Xray بعد التعطيل التلقائي",
|
||||
"restartXrayOnClientDisableDesc": "عند تعطيل العميل تلقائيا بسبب انتهاء الصلاحية أو حد حركة المرور، أعد تشغيل Xray.",
|
||||
"fragment": "تجزئة",
|
||||
@@ -1221,38 +1156,6 @@
|
||||
"noisesSett": "إعدادات التشويش",
|
||||
"trustedProxyCidrs": "CIDR وكلاء موثوقين",
|
||||
"trustedProxyCidrsDesc": "IPs/CIDRs مفصولة بفواصل يُسمح لها بتعيين ترويسات host، proto و client IP المعاد توجيهها.",
|
||||
"ldap": {
|
||||
"enable": "تفعيل مزامنة LDAP",
|
||||
"host": "مضيف LDAP",
|
||||
"port": "منفذ LDAP",
|
||||
"useTls": "استخدام TLS (LDAPS)",
|
||||
"skipTlsVerify": "تخطي التحقق من شهادة TLS",
|
||||
"skipTlsVerifyDesc": "غير آمن — يعطل التحقق من شهادة الخادم. استخدم فقط مع CA الداخلية/غير الموثوقة.",
|
||||
"bindDn": "Bind DN",
|
||||
"passwordConfigured": "مهيأة؛ اترك فارغاً للاحتفاظ بكلمة المرور الحالية.",
|
||||
"passwordUnconfigured": "غير مهيأة.",
|
||||
"passwordPlaceholder": "مهيأة — أدخل قيمة جديدة لاستبدالها",
|
||||
"baseDn": "Base DN",
|
||||
"userFilter": "مرشح المستخدم",
|
||||
"userAttr": "خاصية المستخدم (username/email)",
|
||||
"vlessField": "خاصية VLESS flag",
|
||||
"flagField": "خاصية flag عامة (اختياري)",
|
||||
"flagFieldDesc": "إذا تم تعيينها، تتجاوز VLESS flag — مثل shadowInactive.",
|
||||
"truthyValues": "قيم Truthy",
|
||||
"truthyValuesDesc": "مفصولة بفواصل؛ الافتراضي: true,1,yes,on",
|
||||
"invertFlag": "عكس flag",
|
||||
"invertFlagDesc": "فعّل عندما تعني الخاصية «معطل» (مثل shadowInactive).",
|
||||
"syncSchedule": "جدول المزامنة",
|
||||
"syncScheduleDesc": "سلسلة شبيهة بـ cron، مثل @every 1m",
|
||||
"inboundTags": "وسوم الواردات",
|
||||
"inboundTagsDesc": "الواردات التي يمكن لمزامنة LDAP إنشاء/حذف العملاء فيها تلقائياً.",
|
||||
"noInbounds": "لم يتم العثور على واردات. أنشئ واحداً في الواردات أولاً.",
|
||||
"autoCreate": "إنشاء عملاء تلقائياً",
|
||||
"autoDelete": "حذف عملاء تلقائياً",
|
||||
"defaultTotalGb": "الإجمالي الافتراضي (GB)",
|
||||
"defaultExpiryDays": "الانتهاء الافتراضي (أيام)",
|
||||
"defaultIpLimit": "حد IP الافتراضي"
|
||||
},
|
||||
"subFormats": {
|
||||
"finalMask": "Final Mask",
|
||||
"finalMaskDesc": "يضيف أقنعة TCP/UDP الخاصة بـ Xray finalmask ومعلمات QUIC إلى كل ملف Xray JSON يتم إنشاؤه. يتطلب تطبيقًا يدعم اشتراكات Xray JSON وإصدارًا حديثًا من نواة Xray.",
|
||||
@@ -1276,31 +1179,15 @@
|
||||
"muxSett": "إعدادات MUX",
|
||||
"direct": "اتصال مباشر",
|
||||
"directDesc": "ينشئ اتصال مباشر مع الدومينات أو نطاقات IP لدولة معينة.",
|
||||
"notifications": "الإشعارات",
|
||||
"certs": "الشهادات",
|
||||
"externalTraffic": "الترافيك الخارجي",
|
||||
"dateAndTime": "التاريخ والوقت",
|
||||
"proxyAndServer": "البروكسي والسيرفر",
|
||||
"intervals": "الفترات",
|
||||
"information": "المعلومات",
|
||||
"profile": "الملف الشخصي",
|
||||
"language": "اللغة",
|
||||
"telegramBotLanguage": "لغة بوت Telegram",
|
||||
"security": {
|
||||
"admin": "بيانات الأدمن",
|
||||
"twoFactor": "المصادقة الثنائية",
|
||||
"twoFactorEnable": "تفعيل المصادقة الثنائية",
|
||||
"twoFactorEnableDesc": "يضيف طبقة إضافية من المصادقة لتعزيز الأمان.",
|
||||
"twoFactorModalSetTitle": "تفعيل المصادقة الثنائية",
|
||||
"twoFactorModalDeleteTitle": "تعطيل المصادقة الثنائية",
|
||||
"twoFactorModalSteps": "لإعداد المصادقة الثنائية، قم ببعض الخطوات:",
|
||||
"twoFactorModalFirstStep": "1. امسح رمز QR هذا في تطبيق المصادقة أو انسخ الرمز الموجود بجانب رمز QR والصقه في التطبيق",
|
||||
"twoFactorModalSecondStep": "2. أدخل الرمز من التطبيق",
|
||||
"twoFactorModalRemoveStep": "أدخل الرمز من التطبيق لإزالة المصادقة الثنائية.",
|
||||
"twoFactorModalChangeCredentialsTitle": "تغيير بيانات الاعتماد",
|
||||
"twoFactorModalChangeCredentialsStep": "أدخل الرمز من التطبيق لتغيير بيانات اعتماد المسؤول.",
|
||||
"twoFactorModalSetSuccess": "تم إنشاء المصادقة الثنائية بنجاح",
|
||||
"twoFactorModalDeleteSuccess": "تم حذف المصادقة الثنائية بنجاح",
|
||||
"twoFactorModalError": "رمز خاطئ",
|
||||
"show": "إظهار",
|
||||
"hide": "إخفاء",
|
||||
@@ -1323,36 +1210,6 @@
|
||||
"getOutboundTrafficError": "خطأ في الحصول على حركات المرور الصادرة",
|
||||
"resetOutboundTrafficError": "خطأ في إعادة تعيين حركات المرور الصادرة"
|
||||
},
|
||||
"smtpSettings": "إعدادات SMTP",
|
||||
"smtpEnable": "تفعيل إشعارات البريد الإلكتروني",
|
||||
"smtpEnableDesc": "تفعيل إشعارات البريد الإلكتروني عبر SMTP",
|
||||
"smtpHost": "خادم SMTP",
|
||||
"smtpHostDesc": "اسم مضيف خادم SMTP (مثال: smtp.gmail.com)",
|
||||
"smtpPort": "منفذ SMTP",
|
||||
"smtpPortDesc": "منفذ خادم SMTP (الافتراضي: 587)",
|
||||
"smtpUsername": "اسم مستخدم SMTP",
|
||||
"smtpUsernameDesc": "اسم المستخدم للمصادقة على SMTP",
|
||||
"smtpFrom": "عنوان المُرسِل (From)",
|
||||
"smtpFromDesc": "العنوان المستخدم في ترويسة From للبريد. اتركه فارغًا لاستخدام اسم المستخدم.",
|
||||
"smtpFromName": "اسم المُرسِل (From)",
|
||||
"smtpFromNameDesc": "اسم عرض اختياري يظهر قبل العنوان في ترويسة From.",
|
||||
"smtpPassword": "كلمة مرور SMTP",
|
||||
"smtpPasswordDesc": "كلمة المرور للمصادقة على SMTP",
|
||||
"smtpTo": "المستلمون",
|
||||
"smtpToDesc": "عناوين البريد الإلكتروني للمستلمين مفصولة بفواصل",
|
||||
"emailSettings": "البريد الإلكتروني",
|
||||
"emailNotifications": "الإشعارات",
|
||||
"smtpEventBusNotify": "إشعارات الأحداث بالبريد الإلكتروني",
|
||||
"smtpEventBusNotifyDesc": "اختر الأحداث التي تُطلق إشعارات البريد الإلكتروني",
|
||||
"tgEventBusNotify": "إشعارات الأحداث عبر Telegram",
|
||||
"tgEventBusNotifyDesc": "اختر الأحداث التي تُطلق إشعارات Telegram",
|
||||
"testSmtp": "إرسال بريد تجريبي",
|
||||
"testTgBot": "إرسال رسالة تجريبية",
|
||||
"eventGroupOutbound": "الصادر",
|
||||
"eventGroupXray": "نواة Xray",
|
||||
"eventGroupSystem": "النظام",
|
||||
"eventGroupSecurity": "الأمان",
|
||||
"eventGroupNode": "العقد",
|
||||
"eventOutboundDown": "غير متصل",
|
||||
"eventOutboundUp": "متصل",
|
||||
"eventXrayCrash": "تعطّل",
|
||||
@@ -1360,36 +1217,7 @@
|
||||
"eventNodeUp": "متصلة",
|
||||
"eventCPUHigh": "ارتفاع استخدام المعالج (%)",
|
||||
"requestFailed": "فشل الطلب",
|
||||
"smtpEncryption": "التشفير",
|
||||
"smtpEncryptionDesc": "طريقة تشفير اتصال SMTP",
|
||||
"smtpEncryptionNone": "بدون (نص عادي)",
|
||||
"smtpEncryptionStartTLS": "STARTTLS",
|
||||
"smtpEncryptionTLS": "TLS (ضمني)",
|
||||
"smtpStageConnect": "الاتصال",
|
||||
"smtpStageAuth": "المصادقة",
|
||||
"smtpStageSend": "الإرسال",
|
||||
"smtpTestSuccess": "تم إرسال البريد التجريبي بنجاح",
|
||||
"smtpHostNotConfigured": "خادم SMTP غير مهيأ",
|
||||
"smtpNoRecipients": "لا يوجد مستلمون مهيؤون",
|
||||
"smtpFromNotConfigured": "عنوان مرسل SMTP غير مُهيأ",
|
||||
"eventLoginAttempt": "محاولة تسجيل دخول",
|
||||
"telegramTokenConfigured": "مهيأ؛ اتركه فارغاً للاحتفاظ بالتوكن الحالي.",
|
||||
"telegramTokenPlaceholder": "مهيأ — أدخل توكن جديد لاستبداله",
|
||||
"smtpPasswordConfigured": "مهيأة؛ اتركها فارغة للاحتفاظ بكلمة المرور الحالية.",
|
||||
"smtpPasswordPlaceholder": "مهيأة — أدخل كلمة مرور جديدة لاستبدالها",
|
||||
"smtpNotInitialized": "لم تتم تهيئة SMTP",
|
||||
"tgBotNotEnabled": "بوت Telegram غير مفعّل",
|
||||
"tgTestFailed": "فشل اختبار Telegram",
|
||||
"tgTestSuccess": "تم إرسال رسالة تجريبية إلى Telegram",
|
||||
"tgBotNotRunning": "بوت Telegram لا يعمل",
|
||||
"smtpErrorAuth": "فشلت المصادقة — تحقق من اسم المستخدم وكلمة المرور",
|
||||
"smtpErrorStarttls": "الخادم يتطلب STARTTLS — غيّر نوع التشفير",
|
||||
"smtpErrorTls": "الخادم يتطلب TLS — غيّر نوع التشفير",
|
||||
"smtpErrorRefused": "تم رفض الاتصال — تحقق من الخادم والمنفذ",
|
||||
"smtpErrorTimeout": "انتهت مهلة الاتصال — تعذّر الوصول إلى الخادم",
|
||||
"smtpErrorRelay": "الخادم يرفض الإرسال من هذا العنوان",
|
||||
"smtpErrorEof": "تم إغلاق الاتصال من قبل الخادم",
|
||||
"smtpErrorUnknown": "خطأ SMTP: {{ .Error }}",
|
||||
"eventMemoryHigh": "ارتفاع استخدام الذاكرة (%)",
|
||||
"remarkTemplate": "قالب الملاحظة",
|
||||
"remarkTemplateDesc": "عند تعيينه، يحل هذا محل نموذج الملاحظة لكل رابط اشتراك — اكتب صيغتك الخاصة باستخدام رموز المتغيرات (استخدم الزر لإدراجها). اتركه فارغاً لاستخدام النموذج أعلاه.",
|
||||
@@ -1475,8 +1303,6 @@
|
||||
"directdomains": "اتصالات مباشرة للدومينات",
|
||||
"ipv4Routing": "توجيه IPv4",
|
||||
"ipv4RoutingDesc": "الخيارات دي هتوجه الترافيك بناءً على وجهة معينة عبر IPv4.",
|
||||
"Template": "قالب إعدادات Xray المتقدم",
|
||||
"TemplateDesc": "ملف إعدادات Xray النهائي هيتولد بناءً على القالب ده.",
|
||||
"FreedomStrategy": "استراتيجية بروتوكول الحرية",
|
||||
"FreedomStrategyDesc": "اختار استراتيجية المخرجات للشبكة في بروتوكول الحرية.",
|
||||
"FreedomHappyEyeballs": "Freedom Happy Eyeballs (IPv4/IPv6)",
|
||||
@@ -1500,11 +1326,6 @@
|
||||
"Balancers": "موازنات التحميل",
|
||||
"balancerTagRequired": "الوسم مطلوب",
|
||||
"balancerSelectorRequired": "اختر صادراً واحداً على الأقل",
|
||||
"balancerLive": "الهدف الحالي",
|
||||
"balancerOverride": "تجاوز الاختيار",
|
||||
"balancerOverridePh": "تلقائي (الاستراتيجية)",
|
||||
"balancerLiveRefresh": "تحديث حالة موازن التحميل",
|
||||
"balancerNotRunning": "موازن التحميل ده مش نشط في Xray الشغال — احفظ التغييرات أو ابدأ Xray الأول",
|
||||
"routeTester": "اختبار المسار",
|
||||
"routeTesterDesc": "اسأل Xray الشغال أي صادر هيتعامل مع الاتصال ده. مفيش ترافيك بيتبعت — القرار بييجي مباشرة من محرك التوجيه الحي.",
|
||||
"routeTesterDest": "نطاق أو IP",
|
||||
@@ -1516,7 +1337,6 @@
|
||||
"routeTesterViaBalancer": "عبر موازن التحميل",
|
||||
"routeTesterDefaultOutbound": "ما في قاعدة توجيه اتطابقت — الترافيك رايح للصادر الافتراضي (الأول).",
|
||||
"Routings": "قواعد التوجيه",
|
||||
"completeTemplate": "الكل",
|
||||
"logLevel": "مستوى السجلات",
|
||||
"logLevelDesc": "مستوى السجل الخاص بالأخطاء، اللي بيوضح المعلومات المطلوبة للتسجيل.",
|
||||
"accessLog": "سجل الوصول",
|
||||
@@ -1544,7 +1364,6 @@
|
||||
"source": "المصدر",
|
||||
"dest": "الوجهة",
|
||||
"inbound": "إدخال",
|
||||
"balancer": "موازن",
|
||||
"useComma": "عناصر مفصولة بفواصل"
|
||||
},
|
||||
"routing": {
|
||||
@@ -1725,32 +1544,7 @@
|
||||
"alreadyAdded": "هذا الخادم موجود بالفعل في قائمة الصادر. استخدم {reset} لتجديد المفتاح.",
|
||||
"provisionFailed": "تعذر إنشاء مسار PIA الصادر. حاول مرة أخرى."
|
||||
},
|
||||
"tabBalancerSettings": "إعدادات الموازن",
|
||||
"tabObservatory": "المرصد",
|
||||
"observatory": {
|
||||
"autoManaged": "تتم إدارة المراصد تلقائيًا من الموازنات لديك. اضبط طريقة الفحص بالأسفل؛ تتبع الوجهات الصادرة المراقَبة محدِّدات الموازن.",
|
||||
"emptyHint": "لا يوجد مرصد اتصال نشط. تتم إضافة واحد تلقائيًا عند إنشاء موازن Least Ping أو Least Load — أو موازن Random / Round-robin مع fallback — حتى تتمكن الموازنات المعتمدة على المرصد من فحص صحة الوجهات الصادرة قبل اختيار الهدف.",
|
||||
"mixedLegacy": "يحتوي هذا الإعداد على Observatory و Burst Observatory معًا. يستخدم Xray مرصدًا عالميًا واحدًا، لذلك هذه الحالة القديمة المختلطة غير مدعومة؛ حفظ الموازنات سيحوّلها إلى مرصد واحد.",
|
||||
"subjectSelector": "الوجهات المراقَبة",
|
||||
"subjectSelectorDesc": "وسوم الوجهات الصادرة التي يفحصها هذا المرصد. تتم إدارتها تلقائيًا من الموازنات لديك.",
|
||||
"probeURL": "رابط الفحص (URL)",
|
||||
"probeURLDesc": "الرابط الذي يُطلب لقياس كل وجهة صادرة. يجب أن يُعيد HTTP 204.",
|
||||
"probeInterval": "فترة الفحص",
|
||||
"probeIntervalDesc": "كم مرة يتم فحص كل وجهة صادرة، مثل 30s أو 1m أو 2h45m.",
|
||||
"enableConcurrency": "فحص متزامن",
|
||||
"enableConcurrencyDesc": "افحص كل الوجهات المراقَبة دفعة واحدة بدلًا من واحدة تلو الأخرى. أسرع، لكنه أكثر وضوحًا على الشبكة.",
|
||||
"destination": "وجهة الفحص",
|
||||
"destinationDesc": "الرابط الذي يُطلب لقياس كل وجهة صادرة. يجب أن يُعيد HTTP 204.",
|
||||
"connectivity": "فحص الاتصال",
|
||||
"connectivityDesc": "رابط اختياري لفحص الشبكة المحلية، يُجرَّب فقط بعد فشل الوجهة. اتركه فارغًا للتخطي.",
|
||||
"interval": "فترة الفحص",
|
||||
"intervalDesc": "متوسط الوقت بين عمليات الفحص لكل وجهة صادرة، مثل 1m. الحد الأدنى 10s.",
|
||||
"timeout": "مهلة الفحص",
|
||||
"timeoutDesc": "كم من الوقت يُنتظر استجابة الفحص قبل اعتباره فاشلًا، مثل 5s.",
|
||||
"sampling": "عدد العينات",
|
||||
"samplingDesc": "عدد نتائج الفحص الأخيرة المحفوظة لتقييم كل وجهة صادرة.",
|
||||
"httpMethod": "طريقة HTTP",
|
||||
"httpMethodDesc": "طريقة HTTP المستخدمة في عمليات الفحص.",
|
||||
"deleteAlsoObservatory": "هذا آخر موازن يستخدم Observatory، لذلك ستتم إزالته أيضًا.",
|
||||
"deleteAlsoBurst": "هذا آخر موازن يستخدم Burst Observatory، لذلك ستتم إزالته أيضًا."
|
||||
},
|
||||
@@ -1762,25 +1556,7 @@
|
||||
},
|
||||
"balancer": {
|
||||
"balancerStrategy": "استراتيجية الموازن",
|
||||
"tag": "الوسم",
|
||||
"tagDuplicate": "الوسم مستخدم بالفعل من قبل موازن آخر",
|
||||
"tagPlaceholder": "وسم موازن فريد",
|
||||
"selector": "المحدد",
|
||||
"fallback": "Fallback",
|
||||
"cycleTooltip": "حلقة: {path} → (العودة إلى {start})",
|
||||
"expected": "المتوقع",
|
||||
"expectedPlaceholder": "العدد الأمثل للعقد",
|
||||
"maxRtt": "أقصى RTT",
|
||||
"tolerance": "التحمل",
|
||||
"baselines": "Baselines",
|
||||
"costs": "Costs",
|
||||
"costMatch": "نمط الوسم",
|
||||
"costValue": "الوزن",
|
||||
"costRegexp": "مطابقة تعبير نمطي",
|
||||
"balancerDeleteInUse": "لا يمكن حذف هذا الموزان — يتم استخدامه كبديل لـ: {names}",
|
||||
"balancerFallbackCycle": "لا يمكن تعيين هذا الموزان كبديل — سيؤدي ذلك إلى إنشاء تبعية دائرية.",
|
||||
"balancerFallbackInfo": "سيتم توجيه حركة المرور عبر: الموزان → Loopback → الخادم → الموزان المستهدف → الاتصال الخارجي. سيؤدي هذا إلى إضافة قفزة إضافية عبر الخادم، مما قد يسبب تأخيرات طفيفة.",
|
||||
"fallbackBalancerHint": "اختر موزان أحمال آخر كبديل",
|
||||
"reservedPrefix": "البادئة _bl_ محجوزة لكائنات loopback الداخلية للموازنات"
|
||||
},
|
||||
"wireguard": {
|
||||
@@ -1883,55 +1659,8 @@
|
||||
"usage": "الاستخدام",
|
||||
"addOutbound": "إضافة صادر"
|
||||
},
|
||||
"dns": {
|
||||
"enable": "فعل DNS",
|
||||
"enableDesc": "فعل سيرفر DNS المدمج",
|
||||
"tag": "تاج إدخال DNS",
|
||||
"tagDesc": "التاج ده هيبقى متاح كإدخال في قواعد التوجيه.",
|
||||
"clientIp": "IP العميل",
|
||||
"clientIpDesc": "بيحدد موقع العميل خلال استعلامات DNS",
|
||||
"disableCache": "تعطيل الكاش",
|
||||
"disableCacheDesc": "بيعطل تخزين نتائج DNS مؤقتاً",
|
||||
"disableFallback": "تعطيل النسخ الاحتياطي",
|
||||
"disableFallbackDesc": "بيعطل استعلامات DNS الاحتياطية",
|
||||
"disableFallbackIfMatch": "تعطيل النسخ الاحتياطي عند التطابق",
|
||||
"disableFallbackIfMatchDesc": "بيعطل استعلامات DNS الاحتياطية لما يتحقق تطابق مع قائمة الدومينات",
|
||||
"enableParallelQuery": "تفعيل الاستعلام المتوازي",
|
||||
"enableParallelQueryDesc": "تفعيل استعلامات DNS المتوازية لعدة خوادم لحل أسرع",
|
||||
"strategy": "استراتيجية الاستعلام",
|
||||
"strategyDesc": "الاستراتيجية العامة لحل أسماء الدومين",
|
||||
"add": "أضف سيرفر",
|
||||
"edit": "عدل السيرفر",
|
||||
"domains": "النطاقات",
|
||||
"expectIPs": "العناوين المتوقعة",
|
||||
"unexpectIPs": "عناوين IP غير متوقعة",
|
||||
"useSystemHosts": "استخدام ملف Hosts الخاص بالنظام",
|
||||
"useSystemHostsDesc": "استخدام ملف hosts من نظام مثبت",
|
||||
"serveStale": "تقديم النتائج المنتهية",
|
||||
"serveStaleDesc": "إرجاع نتائج الكاش المنتهية الصلاحية أثناء التحديث في الخلفية",
|
||||
"serveExpiredTTL": "مدة صلاحية النتائج المنتهية",
|
||||
"serveExpiredTTLDesc": "مدة صلاحية إدخالات الكاش المنتهية بالثواني؛ 0 = لا تنتهي أبدًا",
|
||||
"timeoutMs": "المهلة (مللي ثانية)",
|
||||
"skipFallback": "تخطي الاحتياطي",
|
||||
"finalQuery": "الاستعلام النهائي",
|
||||
"hosts": "Hosts",
|
||||
"hostsAdd": "إضافة Host",
|
||||
"hostsEmpty": "لم يتم تعريف أي Host",
|
||||
"hostsDomain": "النطاق (مثل domain:example.com)",
|
||||
"hostsValues": "عنوان IP أو نطاق — اكتب واضغط Enter",
|
||||
"usePreset": "استخدام النموذج",
|
||||
"dnsPresetTitle": "قوالب DNS",
|
||||
"dnsPresetFamily": "العائلي",
|
||||
"clearAll": "حذف الكل",
|
||||
"clearAllTitle": "حذف جميع خوادم DNS؟",
|
||||
"clearAllConfirm": "سيؤدي هذا إلى إزالة جميع خوادم DNS من القائمة. لا يمكن التراجع عن هذا الإجراء.",
|
||||
"dnsLeakWarning": "قد يتسرب DNS عبر localhost أو UDP/TCP غير المشفر أو وضع DoH/DoQ المحلي أو استعلامات الرجوع أو EDNS client IP. استخدم DoH عبر التوجيه، وثبت أسماء المحللات في hosts، وعطل الرجوع عندما تكون الخصوصية مهمة."
|
||||
},
|
||||
"fakedns": {
|
||||
"add": "أضف Fake DNS",
|
||||
"ipPool": "نطاق IP Pool",
|
||||
"poolSize": "حجم المجموعة"
|
||||
},
|
||||
"dns": {},
|
||||
"fakedns": {},
|
||||
"defaultOutbound": "الصادر الافتراضي",
|
||||
"defaultOutboundDesc": "الحركة التي لا تطابق أي قاعدة توجيه تستخدم هذا الصادر (الأول في القائمة)."
|
||||
},
|
||||
@@ -2055,198 +1784,7 @@
|
||||
}
|
||||
},
|
||||
"tgbot": {
|
||||
"keyboardClosed": "❌ لوحة المفاتيح مغلقة!",
|
||||
"noResult": "❗ لا يوجد نتائج!",
|
||||
"noQuery": "❌ لم يتم العثور على الاستعلام! يرجى استخدام الأمر مرة أخرى!",
|
||||
"wentWrong": "❌ حدث خطأ ما!",
|
||||
"noIpRecord": "❗ لا يوجد سجل IP!",
|
||||
"noInbounds": "❗ لم يتم العثور على أي وارد!",
|
||||
"unlimited": "♾ غير محدود (إعادة تعيين)",
|
||||
"add": "إضافة",
|
||||
"month": "شهر",
|
||||
"months": "أشهر",
|
||||
"days": "أيام",
|
||||
"hours": "ساعات",
|
||||
"minutes": "دقائق",
|
||||
"unknown": "غير معروف",
|
||||
"inbounds": "الواردات",
|
||||
"clients": "العملاء",
|
||||
"offline": "🔴 غير متصل",
|
||||
"online": "🟢 متصل",
|
||||
"commands": {
|
||||
"unknown": "❗ أمر مش معروف.",
|
||||
"pleaseChoose": "👇 من فضلك اختار:\r\n",
|
||||
"help": "🤖 أهلا بيك في البوت! البوت ده معمول عشان يديك بيانات معينة من البانل ويسمحلك بالتعديلات.",
|
||||
"start": "👋 أهلا <i>{{ .Firstname }}</i>.\r\n",
|
||||
"welcome": "🤖 أهلا بيك في بوت إدارة <b>{{ .Hostname }}</b>.\r\n",
|
||||
"status": "✅ البوت شغال!",
|
||||
"usage": "❗ من فضلك ادخل نص للتبحث عنه!",
|
||||
"getID": "🆔 الـ ID بتاعك: <code>{{ .ID }}</code>",
|
||||
"helpAdminCommands": "عشان تعيد تشغيل Xray Core:\r\n<code>/restart</code>\r\n\r\nعشان تدور على إيميل عميل:\r\n<code>/usage [Email]</code>\r\n\r\nعشان تدور على إدخالات (مع إحصائيات العملاء):\r\n<code>/inbound [Remark]</code>\r\n\r\nID شات Telegram:\r\n<code>/id</code>",
|
||||
"helpClientCommands": "عشان تدور على الإحصائيات، استخدم الأمر ده:\r\n\r\n<code>/usage [Email]</code>\r\n\r\nID شات Telegram:\r\n<code>/id</code>",
|
||||
"restartUsage": "\r\n\r\n<code>/restart</code>",
|
||||
"restartSuccess": "✅ العملية نجحت!",
|
||||
"restartFailed": "❗ حصل خطأ في العملية.\r\n\r\n<code>Error: {{ .Error }}</code>.",
|
||||
"xrayNotRunning": "❗ Xray Core مش شغال.",
|
||||
"startDesc": "عرض القائمة الرئيسية",
|
||||
"helpDesc": "مساعدة البوت",
|
||||
"statusDesc": "التحقق من حالة البوت",
|
||||
"idDesc": "عرض معرف Telegram الخاص بك",
|
||||
"usageDesc": "عرض استهلاك العميل: /usage البريد",
|
||||
"inboundDesc": "البحث في الواردات: /inbound الاسم (مشرف)",
|
||||
"restartDesc": "إعادة تشغيل نواة Xray (مشرف)",
|
||||
"clearallDesc": "تصفير استهلاك جميع العملاء (مشرف)"
|
||||
},
|
||||
"messages": {
|
||||
"cpuThreshold": "حمل المعالج {{ .Percent }}% عدى الحد المسموح ({{ .Threshold }}%)",
|
||||
"selectUserFailed": "❌ حصل خطأ في اختيار المستخدم!",
|
||||
"userSaved": "✅ حفظت بيانات مستخدم Telegram.",
|
||||
"loginSuccess": "✅ تسجيل الدخول للبانل تم بنجاح.\r\n",
|
||||
"loginFailed": "❗️فشل محاولة تسجيل الدخول للبانل.\r\n",
|
||||
"report": "🕰 التقارير المجدولة: {{ .RunTime }}\r\n",
|
||||
"datetime": "⏰ التاريخ والوقت: {{ .DateTime }}\r\n",
|
||||
"hostname": "💻 المضيف: {{ .Hostname }}\r\n",
|
||||
"version": "🚀 نسخة 3X-UI: {{ .Version }}\r\n",
|
||||
"xrayVersion": "📡 نسخة Xray: {{ .XrayVersion }}\r\n",
|
||||
"ipv6": "🌐 IPv6: {{ .IPv6 }}\r\n",
|
||||
"ipv4": "🌐 IPv4: {{ .IPv4 }}\r\n",
|
||||
"ip": "🌐 IP: {{ .IP }}\r\n",
|
||||
"ips": "🔢 IPs:\r\n{{ .IPs }}\r\n",
|
||||
"serverUpTime": "⏳ وقت التشغيل: {{ .UpTime }} {{ .Unit }}\r\n",
|
||||
"serverLoad": "📈 تحميل النظام: {{ .Load1 }}, {{ .Load2 }}, {{ .Load3 }}\r\n",
|
||||
"serverMemory": "📋 RAM: {{ .Current }}/{{ .Total }}\r\n",
|
||||
"tcpCount": "🔹 TCP: {{ .Count }}\r\n",
|
||||
"udpCount": "🔸 UDP: {{ .Count }}\r\n",
|
||||
"traffic": "🚦 الترافيك: {{ .Total }} (↑{{ .Upload }},↓{{ .Download }})\r\n",
|
||||
"xrayStatus": "ℹ️ الحالة: {{ .State }}\r\n",
|
||||
"username": "👤 اسم المستخدم: {{ .Username }}\r\n",
|
||||
"reason": "❗️ السبب: {{ .Reason }}\r\n",
|
||||
"time": "⏰ الوقت: {{ .Time }}\r\n",
|
||||
"inbound": "📍 الوارد: {{ .Remark }}\r\n",
|
||||
"port": "🔌 المنفذ: {{ .Port }}\r\n",
|
||||
"expire": "📅 تاريخ الانتهاء: {{ .Time }}\r\n",
|
||||
"expireIn": "📅 هيخلص بعد: {{ .Time }}\r\n",
|
||||
"active": "💡 مفعل: {{ .Enable }}\r\n",
|
||||
"enabled": "🚨 مفعل: {{ .Enable }}\r\n",
|
||||
"online": "🌐 حالة الاتصال: {{ .Status }}\r\n",
|
||||
"lastOnline": "🔙 آخر متصل: {{ .Time }}\r\n",
|
||||
"email": "📧 البريد: {{ .Email }}\r\n",
|
||||
"upload": "🔼 الرفع: ↑{{ .Upload }}\r\n",
|
||||
"download": "🔽 التنزيل: ↓{{ .Download }}\r\n",
|
||||
"total": "📊 الإجمالي: ↑↓{{ .UpDown }} / {{ .Total }}\r\n",
|
||||
"TGUser": "👤 مستخدم Telegram: {{ .TelegramID }}\r\n",
|
||||
"exhaustedCount": "🚨 عدد النفاذ لـ {{ .Type }}:\r\n",
|
||||
"onlinesCount": "🌐 العملاء الأونلاين: {{ .Count }}\r\n",
|
||||
"disabled": "🛑 معطل: {{ .Disabled }}\r\n",
|
||||
"depleteSoon": "🔜 هينتهي قريب: {{ .Deplete }}\r\n\r\n",
|
||||
"backupTime": "🗄 وقت النسخة الاحتياطية: {{ .Time }}\r\n",
|
||||
"refreshedOn": "\r\n📋🔄 اتحدّث في: {{ .Time }}\r\n\r\n",
|
||||
"yes": "✅ أيوه",
|
||||
"no": "❌ لا",
|
||||
"received_email": "📧📥 الإيميل اتحدث.",
|
||||
"received_comment": "💬📥 التعليق اتحدث.",
|
||||
"email_prompt": "📧 الإيميل الافتراضي: {{ .ClientEmail }}\n\nادخل الإيميل بتاعك.",
|
||||
"comment_prompt": "💬 التعليق الافتراضي: {{ .ClientComment }}\n\nادخل تعليقك.",
|
||||
"cancel": "❌ العملية اتلغت! \n\nممكن تبدأ من /start في أي وقت. 🔄",
|
||||
"error_add_client": "⚠️ خطأ:\n\n {{ .error }}",
|
||||
"using_default_value": "تمام، هشيل على القيمة الافتراضية. 😊",
|
||||
"incorrect_input": "المدخلات مش صحيحة.\nالكلمات لازم تكون متصلة من غير فراغات.\nمثال صحيح: aaaaaa\nمثال غلط: aaa aaa 🚫",
|
||||
"AreYouSure": "إنت متأكد؟ 🤔",
|
||||
"SuccessResetTraffic": "📧 البريد الإلكتروني: {{ .ClientEmail }}\n🏁 النتيجة: ✅ تم بنجاح",
|
||||
"FailedResetTraffic": "📧 البريد الإلكتروني: {{ .ClientEmail }}\n🏁 النتيجة: ❌ فشل \n\n🛠️ الخطأ: [ {{ .ErrorMessage }} ]",
|
||||
"FinishProcess": "🔚 عملية إعادة ضبط الترافيك خلصت لكل العملاء.",
|
||||
"eventOutboundDown": "الصادر {{ .Tag }} غير متصل",
|
||||
"eventOutboundUp": "الصادر {{ .Tag }} متصل",
|
||||
"eventErrorDetail": "الخطأ: {{ .Error }}",
|
||||
"eventDelayDetail": "التأخير: {{ .Delay }} مللي ثانية",
|
||||
"eventXrayCrash": "تعطّل Xray",
|
||||
"eventXrayCrashError": "الخطأ: {{ .Error }}",
|
||||
"eventNodeDown": "العقدة {{ .Name }} غير متصلة",
|
||||
"eventNodeUp": "العقدة {{ .Name }} متصلة",
|
||||
"eventLoginFallback": "فشل تسجيل الدخول من {{ .Source }}",
|
||||
"memoryThreshold": "استخدام الذاكرة {{ .Percent }}% يتجاوز الحد {{ .Threshold }}%"
|
||||
},
|
||||
"buttons": {
|
||||
"closeKeyboard": "❌ اقفل الكيبورد",
|
||||
"cancel": "❌ إلغاء",
|
||||
"cancelReset": "❌ إلغاء إعادة الضبط",
|
||||
"cancelIpLimit": "❌ إلغاء حد الـ IP",
|
||||
"confirmResetTraffic": "✅ تأكيد إعادة ضبط الترافيك؟",
|
||||
"confirmClearIps": "✅ تأكيد مسح الـ IPs؟",
|
||||
"confirmRemoveTGUser": "✅ تأكيد حذف مستخدم Telegram؟",
|
||||
"confirmToggle": "✅ تأكيد تفعيل/تعطيل المستخدم؟",
|
||||
"dbBackup": "احصل على نسخة DB",
|
||||
"serverUsage": "استخدام السيرفر",
|
||||
"getInbounds": "احصل على الإدخالات",
|
||||
"depleteSoon": "هينتهي قريب",
|
||||
"clientUsage": "استخدام العميل",
|
||||
"onlines": "العملاء الأونلاين",
|
||||
"commands": "الأوامر",
|
||||
"refresh": "🔄 تجديد",
|
||||
"clearIPs": "❌ مسح الـ IPs",
|
||||
"removeTGUser": "❌ حذف مستخدم Telegram",
|
||||
"selectTGUser": "👤 اختار مستخدم Telegram",
|
||||
"selectOneTGUser": "👤 اختار مستخدم Telegram:",
|
||||
"resetTraffic": "📈 إعادة ضبط الترافيك",
|
||||
"resetExpire": "📅 تغيير تاريخ الانتهاء",
|
||||
"ipLog": "🔢 سجل الـ IP",
|
||||
"ipLimit": "🔢 حد الـ IP",
|
||||
"setTGUser": "👤 ضبط مستخدم Telegram",
|
||||
"toggle": "🔘 تفعيل / تعطيل",
|
||||
"custom": "🔢 مخصص",
|
||||
"confirmNumber": "✅ تأكيد: {{ .Num }}",
|
||||
"confirmNumberAdd": "✅ تأكيد إضافة: {{ .Num }}",
|
||||
"limitTraffic": "🚧 حد الترافيك",
|
||||
"getBanLogs": "احصل على سجلات الحظر",
|
||||
"allClients": "كل العملاء",
|
||||
"addClient": "إضافة عميل",
|
||||
"submitDisable": "إرسال كمعطّل ☑️",
|
||||
"submitEnable": "إرسال كمفعّل ✅",
|
||||
"use_default": "🏷️ استخدام الإعدادات الافتراضية",
|
||||
"change_email": "⚙️📧 البريد",
|
||||
"change_comment": "⚙️💬 تعليق",
|
||||
"ResetAllTraffics": "إعادة ضبط جميع الترافيك",
|
||||
"SortedTrafficUsageReport": "تقرير استخدام الترافيك المرتب"
|
||||
},
|
||||
"answers": {
|
||||
"successfulOperation": "✅ العملية نجحت!",
|
||||
"errorOperation": "❗ حصل خطأ في العملية.",
|
||||
"getInboundsFailed": "❌ فشل الحصول على الإدخالات.",
|
||||
"getClientsFailed": "❌ فشل الحصول على العملاء.",
|
||||
"canceled": "❌ {{ .Email }}: العملية اتلغت.",
|
||||
"clientRefreshSuccess": "✅ {{ .Email }}: العميل اتحدث بنجاح.",
|
||||
"IpRefreshSuccess": "✅ {{ .Email }}: الـ IPs اتحدثت بنجاح.",
|
||||
"TGIdRefreshSuccess": "✅ {{ .Email }}: مستخدم Telegram اتحدث بنجاح.",
|
||||
"resetTrafficSuccess": "✅ {{ .Email }}: الترافيك اتظبط بنجاح.",
|
||||
"setTrafficLimitSuccess": "✅ {{ .Email }}: حد الترافيك اتسجل بنجاح.",
|
||||
"expireResetSuccess": "✅ {{ .Email }}: أيام الانتهاء اتظبطت بنجاح.",
|
||||
"resetIpSuccess": "✅ {{ .Email }}: حد الـ IP ({{ .Count }}) اتسجل بنجاح.",
|
||||
"clearIpSuccess": "✅ {{ .Email }}: الـ IPs اتمسحت بنجاح.",
|
||||
"getIpLog": "✅ {{ .Email }}: سجل الـ IP اتجاب.",
|
||||
"getUserInfo": "✅ {{ .Email }}: بيانات مستخدم Telegram اتجاب.",
|
||||
"removedTGUserSuccess": "✅ {{ .Email }}: مستخدم Telegram اتحذف بنجاح.",
|
||||
"enableSuccess": "✅ {{ .Email }}: اتفعل بنجاح.",
|
||||
"disableSuccess": "✅ {{ .Email }}: اتعطل بنجاح.",
|
||||
"askToAddUserId": "مافيش إعدادات ليك!\r\nاطلب من الأدمن يضيف الـ Telegram ChatID الخاص بيك في إعداداتك.\r\n\r\nالـ ChatID بتاعك: <code>{{ .TgUserID }}</code>",
|
||||
"chooseClient": "اختار عميل للإدخال {{ .Inbound }}",
|
||||
"chooseInbound": "اختار الإدخال"
|
||||
}
|
||||
"noIpRecord": "❗ لا يوجد سجل IP!"
|
||||
},
|
||||
"email": {
|
||||
"labelStatus": "الحالة",
|
||||
"labelOutbound": "الصادر",
|
||||
"labelNode": "العقدة",
|
||||
"labelError": "الخطأ",
|
||||
"labelDelay": "التأخير",
|
||||
"labelUsername": "اسم المستخدم",
|
||||
"labelIP": "IP",
|
||||
"labelReason": "السبب",
|
||||
"labelSource": "المصدر",
|
||||
"statusCrashed": "متعطّل",
|
||||
"statusHigh": "مرتفع",
|
||||
"statusSuccess": "نجاح",
|
||||
"statusFailed": "فشل",
|
||||
"statusDown": "غير متصل",
|
||||
"statusUp": "متصل"
|
||||
}
|
||||
"email": {}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user