- Xray stream block wrapper:
+ {{ t('pages.inbounds.advanced.streamHelp') }}
{ streamSettings: { ... } }.
diff --git a/web/translation/ar-EG.json b/web/translation/ar-EG.json
index df01eaf8..6456e46b 100644
--- a/web/translation/ar-EG.json
+++ b/web/translation/ar-EG.json
@@ -18,6 +18,8 @@
"search": "بحث",
"filter": "فلترة",
"loading": "جاري التحميل...",
+ "refresh": "تحديث",
+ "clear": "مسح",
"second": "ثانية",
"minute": "دقيقة",
"hour": "ساعة",
@@ -94,13 +96,13 @@
"ultraDark": "داكن جدًا",
"dashboard": "نظرة عامة",
"inbounds": "الإدخالات",
+ "clients": "العملاء",
"nodes": "النودز",
"settings": "إعدادات البانل",
"xray": "إعدادات Xray",
"apiDocs": "توثيق API",
"logout": "تسجيل خروج",
- "link": "إدارة",
- "clients": "العملاء"
+ "link": "إدارة"
},
"pages": {
"login": {
@@ -128,9 +130,9 @@
"stopXray": "إيقاف",
"restartXray": "إعادة تشغيل",
"xraySwitch": "النسخة",
+ "xrayUpdates": "تحديثات Xray",
"xraySwitchClick": "اختار النسخة اللي عايز تتحول لها.",
"xraySwitchClickDesk": "اختار بحذر، النسخ القديمة ممكن ما تتوافقش مع الإعدادات الحالية.",
- "xrayUpdates": "تحديثات Xray",
"updatePanel": "تحديث البانل",
"panelUpdateDesc": "ده هيحدث 3X-UI لآخر إصدار وهيعيد تشغيل خدمة البانل.",
"currentPanelVersion": "إصدار البانل الحالي",
@@ -180,20 +182,6 @@
"geofilesUpdateDialogDesc": "سيؤدي هذا إلى تحديث كافة الملفات.",
"geofilesUpdateAll": "تحديث الكل",
"geofileUpdatePopover": "تم تحديث ملف الجغرافيا بنجاح",
- "dontRefresh": "التثبيت شغال، متعملش Refresh للصفحة",
- "logs": "السجلات",
- "config": "الإعدادات",
- "backup": "نسخة احتياطية",
- "backupTitle": "نسخ احتياطي واستعادة",
- "exportDatabase": "اخزن نسخة",
- "exportDatabaseDesc": "اضغط عشان تحمل ملف .db يحتوي على نسخة احتياطية لقاعدة البيانات الحالية على جهازك.",
- "importDatabase": "استرجاع",
- "importDatabaseDesc": "اضغط عشان تختار وتحمل ملف .db من جهازك لاسترجاع قاعدة البيانات من نسخة احتياطية.",
- "importDatabaseSuccess": "تم استيراد قاعدة البيانات بنجاح",
- "importDatabaseError": "حدث خطأ أثناء استيراد قاعدة البيانات",
- "readDatabaseError": "حدث خطأ أثناء قراءة قاعدة البيانات",
- "getDatabaseError": "حدث خطأ أثناء استرجاع قاعدة البيانات",
- "getConfigError": "حدث خطأ أثناء استرجاع ملف الإعدادات",
"customGeoTitle": "GeoSite / GeoIP مخصص",
"customGeoAdd": "إضافة",
"customGeoType": "النوع",
@@ -235,7 +223,21 @@
"customGeoErrNotFound": "مصدر geo المخصص غير موجود",
"customGeoErrDownload": "فشل التنزيل",
"customGeoErrUpdateAllIncomplete": "تعذر تحديث مصدر واحد أو أكثر من مصادر geo المخصصة",
- "customGeoEmpty": "لا توجد مصادر geo مخصصة بعد — انقر على «إضافة» لإنشاء واحد"
+ "customGeoEmpty": "لا توجد مصادر geo مخصصة بعد — انقر على «إضافة» لإنشاء واحد",
+ "dontRefresh": "التثبيت شغال، متعملش Refresh للصفحة",
+ "logs": "السجلات",
+ "config": "الإعدادات",
+ "backup": "نسخة احتياطية",
+ "backupTitle": "نسخ احتياطي واستعادة",
+ "exportDatabase": "اخزن نسخة",
+ "exportDatabaseDesc": "اضغط عشان تحمل ملف .db يحتوي على نسخة احتياطية لقاعدة البيانات الحالية على جهازك.",
+ "importDatabase": "استرجاع",
+ "importDatabaseDesc": "اضغط عشان تختار وتحمل ملف .db من جهازك لاسترجاع قاعدة البيانات من نسخة احتياطية.",
+ "importDatabaseSuccess": "تم استيراد قاعدة البيانات بنجاح",
+ "importDatabaseError": "حدث خطأ أثناء استيراد قاعدة البيانات",
+ "readDatabaseError": "حدث خطأ أثناء قراءة قاعدة البيانات",
+ "getDatabaseError": "حدث خطأ أثناء استرجاع قاعدة البيانات",
+ "getConfigError": "حدث خطأ أثناء استرجاع ملف الإعدادات"
},
"inbounds": {
"title": "الإدخالات",
@@ -248,6 +250,12 @@
"node": "نود",
"deployTo": "نشر على",
"localPanel": "بانل محلي",
+ "portFallback": {
+ "title": "العناصر الاحتياطية",
+ "help": "حدد الاتصالات الواردة التي يجب أن تستقبل حركة المرور التي لا تتطابق مع اتصال VLESS-TLS الوارد. يجب أن يستمع كل عنصر فرعي على 127.0.0.1 لاستقبال الاتصالات المُحوَّلة.",
+ "child": "الاتصال الوارد",
+ "path": "المسار"
+ },
"protocol": "بروتوكول",
"port": "بورت",
"portMap": "خريطة البورت",
@@ -307,6 +315,32 @@
"IPLimitlogDesc": "سجل تاريخ الـ IPs. (عشان تفعل الإدخال بعد التعطيل، امسح السجل)",
"IPLimitlogclear": "امسح السجل",
"setDefaultCert": "استخدم شهادة البانل",
+ "streamTab": "الدفق",
+ "securityTab": "الأمان",
+ "sniffingTab": "الاستشعار",
+ "sniffingMetadataOnly": "البيانات الوصفية فقط",
+ "sniffingRouteOnly": "التوجيه فقط",
+ "sniffingIpsExcluded": "IP المستثناة",
+ "sniffingDomainsExcluded": "النطاقات المستثناة",
+ "decryption": "فك التشفير",
+ "encryption": "التشفير",
+ "vlessAuthX25519": "مصادقة X25519",
+ "vlessAuthMlkem768": "مصادقة ML-KEM-768",
+ "vlessAuthCustom": "مخصص",
+ "vlessAuthSelected": "المحدد: {auth}",
+ "advanced": {
+ "title": "أقسام JSON للاتصال الوارد",
+ "subtitle": "JSON الكامل للاتصال الوارد ومحررات مخصصة لـ settings و sniffing و streamSettings.",
+ "all": "الكل",
+ "allHelp": "كائن الاتصال الوارد الكامل بكل الحقول في محرر واحد.",
+ "settings": "الإعدادات",
+ "settingsHelp": "غلاف كتلة settings في Xray:",
+ "sniffing": "الاستشعار",
+ "sniffingHelp": "غلاف كتلة sniffing في Xray:",
+ "stream": "الدفق",
+ "streamHelp": "غلاف كتلة stream في Xray:",
+ "jsonErrorPrefix": "JSON متقدم"
+ },
"telegramDesc": "ادخل ID شات Telegram. (استخدم '/id' في البوت) أو ({'@'}userinfobot)",
"subscriptionDesc": "عشان تلاقي رابط الاشتراك، ادخل على 'التفاصيل'. وكمان ممكن تستخدم نفس الاسم لعدة عملاء.",
"info": "معلومات",
@@ -362,45 +396,103 @@
"requestHeader": "رأس الطلب",
"responseHeader": "رأس الرد"
}
- },
- "portFallback": {
- "title": "العناصر الاحتياطية",
- "help": "حدد الاتصالات الواردة التي يجب أن تستقبل حركة المرور التي لا تتطابق مع اتصال VLESS-TLS الوارد. يجب أن يستمع كل عنصر فرعي على 127.0.0.1 لاستقبال الاتصالات المُحوَّلة.",
- "child": "الاتصال الوارد",
- "path": "المسار"
}
},
- "client": {
- "add": "أضف عميل",
- "edit": "تعديل عميل",
- "submitAdd": "أضف العميل",
- "submitEdit": "احفظ التعديلات",
+ "clients": {
+ "add": "إضافة عميل",
+ "edit": "تعديل العميل",
+ "submitAdd": "إضافة عميل",
+ "submitEdit": "حفظ التغييرات",
"clientCount": "عدد العملاء",
- "bulk": "إضافة بالجملة",
- "copyFromInbound": "نسخ العملاء من الـ Inbound",
+ "bulk": "إضافة مجمعة",
+ "copyFromInbound": "نسخ العملاء من الاتصال الوارد",
"copyToInbound": "نسخ العملاء إلى",
"copySelected": "نسخ المحدد",
"copySource": "المصدر",
- "copyEmailPreview": "معاينة البريد الإلكتروني الناتج",
- "copySelectSourceFirst": "الرجاء اختيار الـ Inbound المصدر أولاً.",
+ "copyEmailPreview": "معاينة البريد الناتج",
+ "copySelectSourceFirst": "يرجى تحديد اتصال وارد مصدر أولاً.",
"copyResult": "نتيجة النسخ",
"copyResultSuccess": "تم النسخ بنجاح",
- "copyResultNone": "لا يوجد شيء للنسخ: لم يتم اختيار أي عميل أو أن المصدر فارغ",
+ "copyResultNone": "لا شيء للنسخ: لم يتم تحديد عملاء أو أن المصدر فارغ",
"copyResultErrors": "أخطاء النسخ",
"copyFlowLabel": "Flow للعملاء الجدد (VLESS)",
- "copyFlowHint": "يُطبَّق على جميع العملاء المنسوخين. اتركه فارغاً لتخطيه.",
+ "copyFlowHint": "يُطبَّق على جميع العملاء المنسوخين. اتركه فارغًا للتخطي.",
"selectAll": "تحديد الكل",
"clearAll": "مسح الكل",
- "method": "طريقة",
- "first": "أول واحد",
- "last": "آخر واحد",
+ "method": "الطريقة",
+ "first": "أول",
+ "last": "آخر",
+ "ipLog": "سجل IP",
"prefix": "بادئة",
"postfix": "لاحقة",
- "delayedStart": "ابدأ بعد أول استخدام",
+ "delayedStart": "البدء بعد أول استخدام",
"expireDays": "المدة",
- "days": "يوم/أيام",
+ "days": "يوم",
"renew": "تجديد تلقائي",
- "renewDesc": "تجديد تلقائي بعد انتهاء الصلاحية. (0 = تعطيل)(الوحدة: يوم)"
+ "renewDesc": "تجديد تلقائي بعد انتهاء الصلاحية. (0 = تعطيل) (الوحدة: يوم)",
+ "title": "العملاء",
+ "actions": "الإجراءات",
+ "totalGB": "مجموع المرسل/المستقبل (جيجابايت)",
+ "expiryTime": "انتهاء الصلاحية",
+ "addClients": "إضافة عملاء",
+ "limitIp": "حد عناوين IP",
+ "password": "كلمة المرور",
+ "subId": "معرّف الاشتراك",
+ "online": "متصل",
+ "email": "البريد الإلكتروني",
+ "comment": "ملاحظة",
+ "traffic": "حركة المرور",
+ "offline": "غير متصل",
+ "addTitle": "إضافة عميل",
+ "qrCode": "رمز QR",
+ "moreInformation": "مزيد من المعلومات",
+ "delete": "حذف",
+ "reset": "إعادة ضبط حركة المرور",
+ "editTitle": "تعديل العميل",
+ "client": "العميل",
+ "enabled": "مفعّل",
+ "remaining": "المتبقي",
+ "duration": "المدة",
+ "attachedInbounds": "الاتصالات الواردة المرتبطة",
+ "selectInbound": "حدد اتصالاً واردًا واحدًا أو أكثر",
+ "noSubId": "هذا العميل ليس لديه subId، لا يوجد رابط قابل للمشاركة.",
+ "noLinks": "لا توجد روابط للمشاركة — قم بإرفاق هذا العميل بأحد الاتصالات الواردة الداعمة للبروتوكول أولاً.",
+ "link": "رابط",
+ "resetNotPossible": "قم بإرفاق هذا العميل بأحد الاتصالات الواردة أولاً.",
+ "general": "عام",
+ "resetAllTraffics": "إعادة ضبط حركة مرور كل العملاء",
+ "resetAllTrafficsTitle": "إعادة ضبط حركة مرور كل العملاء؟",
+ "resetAllTrafficsContent": "يُعاد ضبط عدّاد الإرسال/الاستقبال لكل عميل إلى الصفر. لا تتأثر الحصص ومواعيد الانتهاء. لا يمكن التراجع.",
+ "empty": "لا يوجد عملاء بعد — أضف واحدًا للبدء.",
+ "deleteConfirmTitle": "حذف العميل {email}؟",
+ "deleteConfirmContent": "سيؤدي هذا إلى إزالة العميل من جميع الاتصالات الواردة المرتبطة وحذف سجل حركة مروره. لا يمكن التراجع.",
+ "deleteSelected": "حذف ({count})",
+ "bulkDeleteConfirmTitle": "حذف {count} عميل؟",
+ "bulkDeleteConfirmContent": "سيتم إزالة كل عميل محدد من جميع الاتصالات الواردة المرتبطة وحذف سجل حركة مروره. لا يمكن التراجع.",
+ "delDepleted": "حذف المنتهية",
+ "delDepletedConfirmTitle": "حذف العملاء المنتهية حصصهم؟",
+ "delDepletedConfirmContent": "يُحذف كل عميل استُنفِدت حصة حركة مروره أو انتهت صلاحيته. لا يمكن التراجع.",
+ "auth": "Auth",
+ "hysteriaAuth": "Auth (Hysteria)",
+ "uuid": "UUID",
+ "flow": "Flow",
+ "reverseTag": "Reverse tag",
+ "reverseTagPlaceholder": "Reverse tag اختياري",
+ "telegramId": "معرّف مستخدم تلغرام",
+ "telegramIdPlaceholder": "معرّف مستخدم تلغرام رقمي (0 = لا شيء)",
+ "created": "تاريخ الإنشاء",
+ "updated": "تاريخ التحديث",
+ "ipLimit": "حد IP",
+ "toasts": {
+ "deleted": "تم حذف العميل",
+ "trafficReset": "تمت إعادة ضبط حركة المرور",
+ "allTrafficsReset": "تمت إعادة ضبط حركة مرور كل العملاء",
+ "bulkDeleted": "تم حذف {count} عميل",
+ "bulkDeletedMixed": "تم حذف {ok}, وفشل {failed}",
+ "bulkCreated": "تم إنشاء {count} عميل",
+ "bulkCreatedMixed": "تم إنشاء {ok}, وفشل {failed}",
+ "delDepleted": "تم حذف {count} عميل منتهٍ"
+ }
},
"nodes": {
"title": "النودز",
@@ -433,6 +525,7 @@
"latency": "الكمون",
"lastHeartbeat": "آخر نبضة",
"xrayVersion": "إصدار Xray",
+ "panelVersion": "إصدار اللوحة",
"actions": "العمليات",
"probe": "فحص فوري",
"testConnection": "اختبار الاتصال",
@@ -457,8 +550,7 @@
"test": "اختبار الاتصال",
"fillRequired": "الاسم والعنوان والبورت وتوكن API كلهم مطلوبين",
"probeFailed": "فشل الفحص"
- },
- "panelVersion": "إصدار اللوحة"
+ }
},
"settings": {
"title": "إعدادات البانل",
@@ -783,9 +875,6 @@
"unexpectIPs": "عناوين IP غير متوقعة",
"useSystemHosts": "استخدام ملف Hosts الخاص بالنظام",
"useSystemHostsDesc": "استخدام ملف hosts من نظام مثبت",
- "usePreset": "استخدام النموذج",
- "dnsPresetTitle": "قوالب DNS",
- "dnsPresetFamily": "العائلي",
"serveStale": "تقديم النتائج المنتهية",
"serveStaleDesc": "إرجاع نتائج الكاش المنتهية الصلاحية أثناء التحديث في الخلفية",
"serveExpiredTTL": "مدة صلاحية النتائج المنتهية",
@@ -798,6 +887,9 @@
"hostsEmpty": "لم يتم تعريف أي Host",
"hostsDomain": "النطاق (مثل domain:example.com)",
"hostsValues": "عنوان IP أو نطاق — اكتب واضغط Enter",
+ "usePreset": "استخدام النموذج",
+ "dnsPresetTitle": "قوالب DNS",
+ "dnsPresetFamily": "العائلي",
"clearAll": "حذف الكل",
"clearAllTitle": "حذف جميع خوادم DNS؟",
"clearAllConfirm": "سيؤدي هذا إلى إزالة جميع خوادم DNS من القائمة. لا يمكن التراجع عن هذا الإجراء."
@@ -808,102 +900,6 @@
"ipPool": "نطاق IP Pool",
"poolSize": "حجم المجموعة"
}
- },
- "clients": {
- "add": "إضافة عميل",
- "edit": "تعديل العميل",
- "submitAdd": "إضافة عميل",
- "submitEdit": "حفظ التغييرات",
- "clientCount": "عدد العملاء",
- "bulk": "إضافة مجمعة",
- "copyFromInbound": "نسخ العملاء من الاتصال الوارد",
- "copyToInbound": "نسخ العملاء إلى",
- "copySelected": "نسخ المحدد",
- "copySource": "المصدر",
- "copyEmailPreview": "معاينة البريد الناتج",
- "copySelectSourceFirst": "يرجى تحديد اتصال وارد مصدر أولاً.",
- "copyResult": "نتيجة النسخ",
- "copyResultSuccess": "تم النسخ بنجاح",
- "copyResultNone": "لا شيء للنسخ: لم يتم تحديد عملاء أو أن المصدر فارغ",
- "copyResultErrors": "أخطاء النسخ",
- "copyFlowLabel": "Flow للعملاء الجدد (VLESS)",
- "copyFlowHint": "يُطبَّق على جميع العملاء المنسوخين. اتركه فارغًا للتخطي.",
- "selectAll": "تحديد الكل",
- "clearAll": "مسح الكل",
- "method": "الطريقة",
- "first": "أول",
- "last": "آخر",
- "ipLog": "سجل IP",
- "prefix": "بادئة",
- "postfix": "لاحقة",
- "delayedStart": "البدء بعد أول استخدام",
- "expireDays": "المدة",
- "days": "يوم",
- "renew": "تجديد تلقائي",
- "renewDesc": "تجديد تلقائي بعد انتهاء الصلاحية. (0 = تعطيل) (الوحدة: يوم)",
- "title": "العملاء",
- "actions": "الإجراءات",
- "totalGB": "مجموع المرسل/المستقبل (جيجابايت)",
- "expiryTime": "انتهاء الصلاحية",
- "addClients": "إضافة عملاء",
- "limitIp": "حد عناوين IP",
- "password": "كلمة المرور",
- "subId": "معرّف الاشتراك",
- "online": "متصل",
- "email": "البريد الإلكتروني",
- "comment": "ملاحظة",
- "traffic": "حركة المرور",
- "offline": "غير متصل",
- "addTitle": "إضافة عميل",
- "qrCode": "رمز QR",
- "moreInformation": "مزيد من المعلومات",
- "delete": "حذف",
- "reset": "إعادة ضبط حركة المرور",
- "editTitle": "تعديل العميل",
- "client": "العميل",
- "enabled": "مفعّل",
- "remaining": "المتبقي",
- "duration": "المدة",
- "attachedInbounds": "الاتصالات الواردة المرتبطة",
- "selectInbound": "حدد اتصالاً واردًا واحدًا أو أكثر",
- "noSubId": "هذا العميل ليس لديه subId، لا يوجد رابط قابل للمشاركة.",
- "noLinks": "لا توجد روابط للمشاركة — قم بإرفاق هذا العميل بأحد الاتصالات الواردة الداعمة للبروتوكول أولاً.",
- "link": "رابط",
- "resetNotPossible": "قم بإرفاق هذا العميل بأحد الاتصالات الواردة أولاً.",
- "general": "عام",
- "resetAllTraffics": "إعادة ضبط حركة مرور كل العملاء",
- "resetAllTrafficsTitle": "إعادة ضبط حركة مرور كل العملاء؟",
- "resetAllTrafficsContent": "يُعاد ضبط عدّاد الإرسال/الاستقبال لكل عميل إلى الصفر. لا تتأثر الحصص ومواعيد الانتهاء. لا يمكن التراجع.",
- "empty": "لا يوجد عملاء بعد — أضف واحدًا للبدء.",
- "deleteConfirmTitle": "حذف العميل {email}؟",
- "deleteConfirmContent": "سيؤدي هذا إلى إزالة العميل من جميع الاتصالات الواردة المرتبطة وحذف سجل حركة مروره. لا يمكن التراجع.",
- "deleteSelected": "حذف ({count})",
- "bulkDeleteConfirmTitle": "حذف {count} عميل؟",
- "bulkDeleteConfirmContent": "سيتم إزالة كل عميل محدد من جميع الاتصالات الواردة المرتبطة وحذف سجل حركة مروره. لا يمكن التراجع.",
- "delDepleted": "حذف المنتهية",
- "delDepletedConfirmTitle": "حذف العملاء المنتهية حصصهم؟",
- "delDepletedConfirmContent": "يُحذف كل عميل استُنفِدت حصة حركة مروره أو انتهت صلاحيته. لا يمكن التراجع.",
- "auth": "Auth",
- "hysteriaAuth": "Auth (Hysteria)",
- "uuid": "UUID",
- "flow": "Flow",
- "reverseTag": "Reverse tag",
- "reverseTagPlaceholder": "Reverse tag اختياري",
- "telegramId": "معرّف مستخدم تلغرام",
- "telegramIdPlaceholder": "معرّف مستخدم تلغرام رقمي (0 = لا شيء)",
- "created": "تاريخ الإنشاء",
- "updated": "تاريخ التحديث",
- "ipLimit": "حد IP",
- "toasts": {
- "deleted": "تم حذف العميل",
- "trafficReset": "تمت إعادة ضبط حركة المرور",
- "allTrafficsReset": "تمت إعادة ضبط حركة مرور كل العملاء",
- "bulkDeleted": "تم حذف {count} عميل",
- "bulkDeletedMixed": "تم حذف {ok}, وفشل {failed}",
- "bulkCreated": "تم إنشاء {count} عميل",
- "bulkCreatedMixed": "تم إنشاء {ok}, وفشل {failed}",
- "delDepleted": "تم حذف {count} عميل منتهٍ"
- }
}
},
"tgbot": {
@@ -1081,6 +1077,5 @@
"chooseClient": "اختار عميل للإدخال {{ .Inbound }}",
"chooseInbound": "اختار الإدخال"
}
- },
- "refresh": "تحديث"
-}
+ }
+}
\ No newline at end of file
diff --git a/web/translation/en-US.json b/web/translation/en-US.json
index ab4f1bf8..6d440694 100644
--- a/web/translation/en-US.json
+++ b/web/translation/en-US.json
@@ -19,6 +19,7 @@
"filter": "Filter",
"loading": "Loading...",
"refresh": "Refresh",
+ "clear": "Clear",
"second": "Second",
"minute": "Minute",
"hour": "Hour",
@@ -314,6 +315,32 @@
"IPLimitlogDesc": "The IP history log. (to re-enable the inbound after disabling, clear the log)",
"IPLimitlogclear": "Clear the Log",
"setDefaultCert": "Set Cert from Panel",
+ "streamTab": "Stream",
+ "securityTab": "Security",
+ "sniffingTab": "Sniffing",
+ "sniffingMetadataOnly": "Metadata only",
+ "sniffingRouteOnly": "Route only",
+ "sniffingIpsExcluded": "IPs excluded",
+ "sniffingDomainsExcluded": "Domains excluded",
+ "decryption": "Decryption",
+ "encryption": "Encryption",
+ "vlessAuthX25519": "X25519 auth",
+ "vlessAuthMlkem768": "ML-KEM-768 auth",
+ "vlessAuthCustom": "Custom",
+ "vlessAuthSelected": "Selected: {auth}",
+ "advanced": {
+ "title": "Inbound JSON sections",
+ "subtitle": "Full inbound JSON and focused editors for settings, sniffing, and streamSettings.",
+ "all": "All",
+ "allHelp": "Full inbound object with all fields in one editor.",
+ "settings": "Settings",
+ "settingsHelp": "Xray settings block wrapper:",
+ "sniffing": "Sniffing",
+ "sniffingHelp": "Xray sniffing block wrapper:",
+ "stream": "Stream",
+ "streamHelp": "Xray stream block wrapper:",
+ "jsonErrorPrefix": "Advanced JSON"
+ },
"telegramDesc": "Please provide Telegram Chat ID. (use '/id' command in the bot) or ({'@'}userinfobot)",
"subscriptionDesc": "To find your subscription URL, navigate to the 'Details'. Additionally, you can use the same name for several clients.",
"info": "Info",
diff --git a/web/translation/es-ES.json b/web/translation/es-ES.json
index 7d6bef8a..feeff066 100644
--- a/web/translation/es-ES.json
+++ b/web/translation/es-ES.json
@@ -18,6 +18,8 @@
"search": "Buscar",
"filter": "Filtrar",
"loading": "Cargando...",
+ "refresh": "Actualizar",
+ "clear": "Borrar",
"second": "Segundo",
"minute": "Minuto",
"hour": "Hora",
@@ -94,13 +96,13 @@
"ultraDark": "Ultra Oscuro",
"dashboard": "Estado del Sistema",
"inbounds": "Entradas",
+ "clients": "Clientes",
"nodes": "Nodos",
"settings": "Configuraciones",
"xray": "Ajustes Xray",
"apiDocs": "Documentación de la API",
"logout": "Cerrar Sesión",
- "link": "Gestionar",
- "clients": "Clientes"
+ "link": "Gestionar"
},
"pages": {
"login": {
@@ -128,9 +130,9 @@
"stopXray": "Detener",
"restartXray": "Reiniciar",
"xraySwitch": "Versión",
+ "xrayUpdates": "Actualizaciones de Xray",
"xraySwitchClick": "Elige la versión a la que deseas cambiar.",
"xraySwitchClickDesk": "Elige sabiamente, ya que las versiones anteriores pueden no ser compatibles con las configuraciones actuales.",
- "xrayUpdates": "Actualizaciones de Xray",
"updatePanel": "Actualizar panel",
"panelUpdateDesc": "Esto actualizará 3X-UI a la última versión y reiniciará el servicio del panel.",
"currentPanelVersion": "Versión actual del panel",
@@ -180,20 +182,6 @@
"geofilesUpdateDialogDesc": "Esto actualizará todos los archivos.",
"geofilesUpdateAll": "Actualizar todo",
"geofileUpdatePopover": "Geofichero actualizado correctamente",
- "dontRefresh": "La instalación está en progreso, por favor no actualices esta página.",
- "logs": "Registros",
- "config": "Configuración",
- "backup": "Сopia de Seguridad",
- "backupTitle": "Copia & Restauración",
- "exportDatabase": "Copia de seguridad",
- "exportDatabaseDesc": "Haz clic para descargar un archivo .db que contiene una copia de seguridad de tu base de datos actual en tu dispositivo.",
- "importDatabase": "Restaurar",
- "importDatabaseDesc": "Haz clic para seleccionar y cargar un archivo .db desde tu dispositivo para restaurar tu base de datos desde una copia de seguridad.",
- "importDatabaseSuccess": "La base de datos se ha importado correctamente",
- "importDatabaseError": "Ocurrió un error al importar la base de datos",
- "readDatabaseError": "Ocurrió un error al leer la base de datos",
- "getDatabaseError": "Ocurrió un error al obtener la base de datos",
- "getConfigError": "Ocurrió un error al obtener el archivo de configuración",
"customGeoTitle": "GeoSite / GeoIP personalizados",
"customGeoAdd": "Añadir",
"customGeoType": "Tipo",
@@ -235,7 +223,21 @@
"customGeoErrNotFound": "Fuente geo personalizada no encontrada",
"customGeoErrDownload": "Error de descarga",
"customGeoErrUpdateAllIncomplete": "No se pudieron actualizar una o más fuentes geo personalizadas",
- "customGeoEmpty": "Aún no hay fuentes geo personalizadas — haz clic en Añadir para crear una"
+ "customGeoEmpty": "Aún no hay fuentes geo personalizadas — haz clic en Añadir para crear una",
+ "dontRefresh": "La instalación está en progreso, por favor no actualices esta página.",
+ "logs": "Registros",
+ "config": "Configuración",
+ "backup": "Сopia de Seguridad",
+ "backupTitle": "Copia & Restauración",
+ "exportDatabase": "Copia de seguridad",
+ "exportDatabaseDesc": "Haz clic para descargar un archivo .db que contiene una copia de seguridad de tu base de datos actual en tu dispositivo.",
+ "importDatabase": "Restaurar",
+ "importDatabaseDesc": "Haz clic para seleccionar y cargar un archivo .db desde tu dispositivo para restaurar tu base de datos desde una copia de seguridad.",
+ "importDatabaseSuccess": "La base de datos se ha importado correctamente",
+ "importDatabaseError": "Ocurrió un error al importar la base de datos",
+ "readDatabaseError": "Ocurrió un error al leer la base de datos",
+ "getDatabaseError": "Ocurrió un error al obtener la base de datos",
+ "getConfigError": "Ocurrió un error al obtener el archivo de configuración"
},
"inbounds": {
"title": "Entradas",
@@ -248,6 +250,12 @@
"node": "Nodo",
"deployTo": "Desplegar en",
"localPanel": "Panel local",
+ "portFallback": {
+ "title": "Inbounds de respaldo",
+ "help": "Selecciona los inbounds que deben recibir el tráfico que este inbound VLESS-TLS no coincida. Cada hijo debe escuchar en 127.0.0.1 para recibir las conexiones reenviadas.",
+ "child": "Inbound",
+ "path": "Ruta"
+ },
"protocol": "Protocolo",
"port": "Puerto",
"portMap": "Puertos de Destino",
@@ -307,6 +315,32 @@
"IPLimitlogDesc": "Registro de historial de IPs (antes de habilitar la entrada después de que haya sido desactivada por el límite de IP, debes borrar el registro).",
"IPLimitlogclear": "Limpiar el Registro",
"setDefaultCert": "Establecer certificado desde el panel",
+ "streamTab": "Stream",
+ "securityTab": "Seguridad",
+ "sniffingTab": "Sniffing",
+ "sniffingMetadataOnly": "Solo metadatos",
+ "sniffingRouteOnly": "Solo enrutamiento",
+ "sniffingIpsExcluded": "IPs excluidas",
+ "sniffingDomainsExcluded": "Dominios excluidos",
+ "decryption": "Descifrado",
+ "encryption": "Cifrado",
+ "vlessAuthX25519": "Autenticación X25519",
+ "vlessAuthMlkem768": "Autenticación ML-KEM-768",
+ "vlessAuthCustom": "Personalizado",
+ "vlessAuthSelected": "Seleccionado: {auth}",
+ "advanced": {
+ "title": "Secciones JSON del inbound",
+ "subtitle": "JSON completo del inbound y editores específicos para settings, sniffing y streamSettings.",
+ "all": "Todo",
+ "allHelp": "Objeto inbound completo con todos los campos en un solo editor.",
+ "settings": "Ajustes",
+ "settingsHelp": "Envoltorio del bloque settings de Xray:",
+ "sniffing": "Sniffing",
+ "sniffingHelp": "Envoltorio del bloque sniffing de Xray:",
+ "stream": "Stream",
+ "streamHelp": "Envoltorio del bloque stream de Xray:",
+ "jsonErrorPrefix": "JSON avanzado"
+ },
"telegramDesc": "Por favor, proporciona el ID de Chat de Telegram. (usa el comando '/id' en el bot) o ({'@'}userinfobot)",
"subscriptionDesc": "Puedes encontrar tu enlace de suscripción en Detalles, también puedes usar el mismo nombre para varias configuraciones.",
"info": "Info",
@@ -362,45 +396,103 @@
"requestHeader": "Encabezado de solicitud",
"responseHeader": "Encabezado de respuesta"
}
- },
- "portFallback": {
- "title": "Inbounds de respaldo",
- "help": "Selecciona los inbounds que deben recibir el tráfico que este inbound VLESS-TLS no coincida. Cada hijo debe escuchar en 127.0.0.1 para recibir las conexiones reenviadas.",
- "child": "Inbound",
- "path": "Ruta"
}
},
- "client": {
- "add": "Agregar Cliente",
- "edit": "Editar Cliente",
- "submitAdd": "Agregar Cliente",
- "submitEdit": "Guardar Cambios",
- "clientCount": "Número de Clientes",
- "bulk": "Agregar en Lote",
- "copyFromInbound": "Copiar clientes desde entrada",
+ "clients": {
+ "add": "Añadir cliente",
+ "edit": "Editar cliente",
+ "submitAdd": "Añadir cliente",
+ "submitEdit": "Guardar cambios",
+ "clientCount": "Número de clientes",
+ "bulk": "Añadir en lote",
+ "copyFromInbound": "Copiar clientes desde inbound",
"copyToInbound": "Copiar clientes a",
- "copySelected": "Copiar seleccionados",
+ "copySelected": "Copiar selección",
"copySource": "Origen",
- "copyEmailPreview": "Vista previa del email resultante",
- "copySelectSourceFirst": "Seleccione primero una entrada de origen.",
+ "copyEmailPreview": "Vista previa del correo resultante",
+ "copySelectSourceFirst": "Selecciona primero un inbound de origen.",
"copyResult": "Resultado de la copia",
"copyResultSuccess": "Copiado correctamente",
- "copyResultNone": "Nada que copiar: ningún cliente seleccionado o el origen está vacío",
- "copyResultErrors": "Errores al copiar",
- "copyFlowLabel": "Flow para nuevos clientes (VLESS)",
- "copyFlowHint": "Se aplica a todos los clientes copiados. Déjelo vacío para omitir.",
+ "copyResultNone": "Nada que copiar: no hay clientes seleccionados o el origen está vacío",
+ "copyResultErrors": "Errores de copia",
+ "copyFlowLabel": "Flow para clientes nuevos (VLESS)",
+ "copyFlowHint": "Se aplica a todos los clientes copiados. Déjalo vacío para omitir.",
"selectAll": "Seleccionar todo",
"clearAll": "Limpiar todo",
"method": "Método",
"first": "Primero",
"last": "Último",
+ "ipLog": "Registro de IP",
"prefix": "Prefijo",
"postfix": "Sufijo",
- "delayedStart": "Iniciar después del primer uso",
+ "delayedStart": "Iniciar tras el primer uso",
"expireDays": "Duración",
"days": "Día(s)",
"renew": "Renovación automática",
- "renewDesc": "Renovación automática después de la expiración. (0 = desactivar) (unidad: día)"
+ "renewDesc": "Renovación automática tras la expiración. (0 = desactivado) (unidad: día)",
+ "title": "Clientes",
+ "actions": "Acciones",
+ "totalGB": "Total enviado/recibido (GB)",
+ "expiryTime": "Expiración",
+ "addClients": "Añadir clientes",
+ "limitIp": "Límite de IP",
+ "password": "Contraseña",
+ "subId": "ID de suscripción",
+ "online": "En línea",
+ "email": "Correo",
+ "comment": "Comentario",
+ "traffic": "Tráfico",
+ "offline": "Desconectado",
+ "addTitle": "Añadir cliente",
+ "qrCode": "Código QR",
+ "moreInformation": "Más información",
+ "delete": "Eliminar",
+ "reset": "Restablecer tráfico",
+ "editTitle": "Editar cliente",
+ "client": "Cliente",
+ "enabled": "Habilitado",
+ "remaining": "Restante",
+ "duration": "Duración",
+ "attachedInbounds": "Inbounds asociados",
+ "selectInbound": "Selecciona uno o más inbounds",
+ "noSubId": "Este cliente no tiene subId, no hay enlace compartible.",
+ "noLinks": "No hay enlaces compartibles — asocia primero este cliente a un inbound con protocolo válido.",
+ "link": "Enlace",
+ "resetNotPossible": "Asocia primero este cliente a un inbound.",
+ "general": "General",
+ "resetAllTraffics": "Restablecer tráfico de todos los clientes",
+ "resetAllTrafficsTitle": "¿Restablecer tráfico de todos los clientes?",
+ "resetAllTrafficsContent": "El contador de subida/bajada de cada cliente vuelve a cero. Las cuotas y la expiración no se modifican. Esta acción no se puede deshacer.",
+ "empty": "Aún no hay clientes — añade uno para empezar.",
+ "deleteConfirmTitle": "¿Eliminar al cliente {email}?",
+ "deleteConfirmContent": "Esto elimina al cliente de cada inbound asociado y descarta su registro de tráfico. No se puede deshacer.",
+ "deleteSelected": "Eliminar ({count})",
+ "bulkDeleteConfirmTitle": "¿Eliminar {count} clientes?",
+ "bulkDeleteConfirmContent": "Cada cliente seleccionado se elimina de los inbounds asociados y se descarta su registro de tráfico. No se puede deshacer.",
+ "delDepleted": "Eliminar agotados",
+ "delDepletedConfirmTitle": "¿Eliminar clientes agotados?",
+ "delDepletedConfirmContent": "Elimina todos los clientes con cuota agotada o expirados. No se puede deshacer.",
+ "auth": "Auth",
+ "hysteriaAuth": "Auth de Hysteria",
+ "uuid": "UUID",
+ "flow": "Flow",
+ "reverseTag": "Reverse tag",
+ "reverseTagPlaceholder": "Reverse tag opcional",
+ "telegramId": "ID de usuario de Telegram",
+ "telegramIdPlaceholder": "ID numérico de usuario de Telegram (0 = ninguno)",
+ "created": "Creado",
+ "updated": "Actualizado",
+ "ipLimit": "Límite de IP",
+ "toasts": {
+ "deleted": "Cliente eliminado",
+ "trafficReset": "Tráfico restablecido",
+ "allTrafficsReset": "Tráfico de todos los clientes restablecido",
+ "bulkDeleted": "{count} clientes eliminados",
+ "bulkDeletedMixed": "{ok} eliminados, {failed} fallidos",
+ "bulkCreated": "{count} clientes creados",
+ "bulkCreatedMixed": "{ok} creados, {failed} fallidos",
+ "delDepleted": "{count} clientes agotados eliminados"
+ }
},
"nodes": {
"title": "Nodos",
@@ -433,6 +525,7 @@
"latency": "Latencia",
"lastHeartbeat": "Último latido",
"xrayVersion": "Versión de Xray",
+ "panelVersion": "Versión del panel",
"actions": "Acciones",
"probe": "Sondear ahora",
"testConnection": "Probar conexión",
@@ -457,8 +550,7 @@
"test": "Probar conexión",
"fillRequired": "El nombre, la dirección, el puerto y el token de API son obligatorios",
"probeFailed": "Sondeo fallido"
- },
- "panelVersion": "Versión del panel"
+ }
},
"settings": {
"title": "Configuraciones",
@@ -558,13 +650,13 @@
"subEmailInRemark": "Incluir Email en el nombre",
"subEmailInRemarkDesc": "Incluir el correo del cliente en el nombre del perfil de suscripción.",
"subURI": "URI de proxy inverso",
+ "subURIDesc": "Cambiar el URI base de la URL de suscripción para usar detrás de los servidores proxy",
"externalTrafficInformEnable": "Informe de tráfico externo",
"externalTrafficInformEnableDesc": "Informar a la API externa sobre cada actualización de tráfico.",
"externalTrafficInformURI": "URI de información de tráfico externo",
"externalTrafficInformURIDesc": "Las actualizaciones de tráfico se envían a este URI.",
"restartXrayOnClientDisable": "Reiniciar Xray tras desactivación automática",
"restartXrayOnClientDisableDesc": "Cuando un cliente se desactive automáticamente por vencimiento o límite de tráfico, reiniciar Xray.",
- "subURIDesc": "Cambiar el URI base de la URL de suscripción para usar detrás de los servidores proxy",
"fragment": "Fragmentación",
"fragmentDesc": "Habilitar la fragmentación para el paquete de saludo de TLS",
"fragmentSett": "Configuración de Fragmentación",
@@ -783,9 +875,6 @@
"unexpectIPs": "IPs inesperadas",
"useSystemHosts": "Usar Hosts del sistema",
"useSystemHostsDesc": "Usar el archivo hosts de un sistema instalado",
- "usePreset": "Usar plantilla",
- "dnsPresetTitle": "Plantillas DNS",
- "dnsPresetFamily": "Familiar",
"serveStale": "Servir caducados",
"serveStaleDesc": "Devolver resultados caducados de la caché mientras se actualiza en segundo plano",
"serveExpiredTTL": "TTL de caducados",
@@ -798,6 +887,9 @@
"hostsEmpty": "No hay Hosts definidos",
"hostsDomain": "Dominio (ej. domain:example.com)",
"hostsValues": "IP o dominio — escribe y presiona Enter",
+ "usePreset": "Usar plantilla",
+ "dnsPresetTitle": "Plantillas DNS",
+ "dnsPresetFamily": "Familiar",
"clearAll": "Eliminar todos",
"clearAllTitle": "¿Eliminar todos los servidores DNS?",
"clearAllConfirm": "Esto eliminará todos los servidores DNS de la lista. No se puede deshacer."
@@ -808,102 +900,6 @@
"ipPool": "Subred del grupo de IP",
"poolSize": "Tamaño del grupo"
}
- },
- "clients": {
- "add": "Añadir cliente",
- "edit": "Editar cliente",
- "submitAdd": "Añadir cliente",
- "submitEdit": "Guardar cambios",
- "clientCount": "Número de clientes",
- "bulk": "Añadir en lote",
- "copyFromInbound": "Copiar clientes desde inbound",
- "copyToInbound": "Copiar clientes a",
- "copySelected": "Copiar selección",
- "copySource": "Origen",
- "copyEmailPreview": "Vista previa del correo resultante",
- "copySelectSourceFirst": "Selecciona primero un inbound de origen.",
- "copyResult": "Resultado de la copia",
- "copyResultSuccess": "Copiado correctamente",
- "copyResultNone": "Nada que copiar: no hay clientes seleccionados o el origen está vacío",
- "copyResultErrors": "Errores de copia",
- "copyFlowLabel": "Flow para clientes nuevos (VLESS)",
- "copyFlowHint": "Se aplica a todos los clientes copiados. Déjalo vacío para omitir.",
- "selectAll": "Seleccionar todo",
- "clearAll": "Limpiar todo",
- "method": "Método",
- "first": "Primero",
- "last": "Último",
- "ipLog": "Registro de IP",
- "prefix": "Prefijo",
- "postfix": "Sufijo",
- "delayedStart": "Iniciar tras el primer uso",
- "expireDays": "Duración",
- "days": "Día(s)",
- "renew": "Renovación automática",
- "renewDesc": "Renovación automática tras la expiración. (0 = desactivado) (unidad: día)",
- "title": "Clientes",
- "actions": "Acciones",
- "totalGB": "Total enviado/recibido (GB)",
- "expiryTime": "Expiración",
- "addClients": "Añadir clientes",
- "limitIp": "Límite de IP",
- "password": "Contraseña",
- "subId": "ID de suscripción",
- "online": "En línea",
- "email": "Correo",
- "comment": "Comentario",
- "traffic": "Tráfico",
- "offline": "Desconectado",
- "addTitle": "Añadir cliente",
- "qrCode": "Código QR",
- "moreInformation": "Más información",
- "delete": "Eliminar",
- "reset": "Restablecer tráfico",
- "editTitle": "Editar cliente",
- "client": "Cliente",
- "enabled": "Habilitado",
- "remaining": "Restante",
- "duration": "Duración",
- "attachedInbounds": "Inbounds asociados",
- "selectInbound": "Selecciona uno o más inbounds",
- "noSubId": "Este cliente no tiene subId, no hay enlace compartible.",
- "noLinks": "No hay enlaces compartibles — asocia primero este cliente a un inbound con protocolo válido.",
- "link": "Enlace",
- "resetNotPossible": "Asocia primero este cliente a un inbound.",
- "general": "General",
- "resetAllTraffics": "Restablecer tráfico de todos los clientes",
- "resetAllTrafficsTitle": "¿Restablecer tráfico de todos los clientes?",
- "resetAllTrafficsContent": "El contador de subida/bajada de cada cliente vuelve a cero. Las cuotas y la expiración no se modifican. Esta acción no se puede deshacer.",
- "empty": "Aún no hay clientes — añade uno para empezar.",
- "deleteConfirmTitle": "¿Eliminar al cliente {email}?",
- "deleteConfirmContent": "Esto elimina al cliente de cada inbound asociado y descarta su registro de tráfico. No se puede deshacer.",
- "deleteSelected": "Eliminar ({count})",
- "bulkDeleteConfirmTitle": "¿Eliminar {count} clientes?",
- "bulkDeleteConfirmContent": "Cada cliente seleccionado se elimina de los inbounds asociados y se descarta su registro de tráfico. No se puede deshacer.",
- "delDepleted": "Eliminar agotados",
- "delDepletedConfirmTitle": "¿Eliminar clientes agotados?",
- "delDepletedConfirmContent": "Elimina todos los clientes con cuota agotada o expirados. No se puede deshacer.",
- "auth": "Auth",
- "hysteriaAuth": "Auth de Hysteria",
- "uuid": "UUID",
- "flow": "Flow",
- "reverseTag": "Reverse tag",
- "reverseTagPlaceholder": "Reverse tag opcional",
- "telegramId": "ID de usuario de Telegram",
- "telegramIdPlaceholder": "ID numérico de usuario de Telegram (0 = ninguno)",
- "created": "Creado",
- "updated": "Actualizado",
- "ipLimit": "Límite de IP",
- "toasts": {
- "deleted": "Cliente eliminado",
- "trafficReset": "Tráfico restablecido",
- "allTrafficsReset": "Tráfico de todos los clientes restablecido",
- "bulkDeleted": "{count} clientes eliminados",
- "bulkDeletedMixed": "{ok} eliminados, {failed} fallidos",
- "bulkCreated": "{count} clientes creados",
- "bulkCreatedMixed": "{ok} creados, {failed} fallidos",
- "delDepleted": "{count} clientes agotados eliminados"
- }
}
},
"tgbot": {
@@ -1081,6 +1077,5 @@
"chooseClient": "Elige un Cliente para Inbound {{ .Inbound }}",
"chooseInbound": "Elige un Inbound"
}
- },
- "refresh": "Actualizar"
-}
+ }
+}
\ No newline at end of file
diff --git a/web/translation/fa-IR.json b/web/translation/fa-IR.json
index 8a37a99d..f887ea0e 100644
--- a/web/translation/fa-IR.json
+++ b/web/translation/fa-IR.json
@@ -18,6 +18,8 @@
"search": "جستجو",
"filter": "فیلتر",
"loading": "...در حال بارگذاری",
+ "refresh": "تازهسازی",
+ "clear": "پاک کردن",
"second": "ثانیه",
"minute": "دقیقه",
"hour": "ساعت",
@@ -94,13 +96,13 @@
"ultraDark": "فوق تیره",
"dashboard": "نمای کلی",
"inbounds": "ورودیها",
+ "clients": "کلاینتها",
"nodes": "نودها",
"settings": "تنظیمات پنل",
"xray": "پیکربندی ایکسری",
"apiDocs": "مستندات API",
"logout": "خروج",
- "link": "مدیریت",
- "clients": "کلاینتها"
+ "link": "مدیریت"
},
"pages": {
"login": {
@@ -128,9 +130,9 @@
"stopXray": "توقف",
"restartXray": "شروعمجدد",
"xraySwitch": "نسخه",
+ "xrayUpdates": "بهروزرسانیهای Xray",
"xraySwitchClick": "نسخه مورد نظر را انتخاب کنید",
"xraySwitchClickDesk": "لطفا بادقت انتخاب کنید. درصورت انتخاب نسخه قدیمیتر، امکان ناهماهنگی با پیکربندی فعلی وجود دارد",
- "xrayUpdates": "بهروزرسانیهای Xray",
"updatePanel": "بهروزرسانی پنل",
"panelUpdateDesc": "این عملیات 3X-UI را به آخرین نسخه بهروزرسانی میکند و سرویس پنل را مجدداً راهاندازی میکند.",
"currentPanelVersion": "نسخه فعلی پنل",
@@ -180,20 +182,6 @@
"geofilesUpdateDialogDesc": "با این کار همه فایلها بهروزرسانی میشوند.",
"geofilesUpdateAll": "همه را بهروزرسانی کنید",
"geofileUpdatePopover": "فایل جغرافیایی با موفقیت بهروز شد",
- "dontRefresh": "در حال نصب، لطفا صفحه را رفرش نکنید",
- "logs": "گزارشها",
- "config": "پیکربندی",
- "backup": "پشتیبانگیری",
- "backupTitle": "پشتیبانگیری و بازیابی",
- "exportDatabase": "پشتیبانگیری",
- "exportDatabaseDesc": "برای دانلود یک فایل .db حاوی پشتیبان از پایگاه داده فعلی خود به دستگاهتان کلیک کنید.",
- "importDatabase": "بازیابی",
- "importDatabaseDesc": "برای انتخاب و آپلود یک فایل .db از دستگاهتان و بازیابی پایگاه داده از یک پشتیبان کلیک کنید.",
- "importDatabaseSuccess": "پایگاه داده با موفقیت وارد شد",
- "importDatabaseError": "خطا در وارد کردن پایگاه داده",
- "readDatabaseError": "خطا در خواندن پایگاه داده",
- "getDatabaseError": "خطا در دریافت پایگاه داده",
- "getConfigError": "خطا در دریافت فایل پیکربندی",
"customGeoTitle": "GeoSite / GeoIP سفارشی",
"customGeoAdd": "افزودن",
"customGeoType": "نوع",
@@ -235,12 +223,23 @@
"customGeoErrNotFound": "منبع geo سفارشی یافت نشد",
"customGeoErrDownload": "بارگیری ناموفق بود",
"customGeoErrUpdateAllIncomplete": "بهروزرسانی یک یا چند منبع geo سفارشی ناموفق بود",
- "customGeoEmpty": "هنوز منبع geo سفارشیای ثبت نشده — برای ایجاد روی «افزودن» کلیک کنید"
+ "customGeoEmpty": "هنوز منبع geo سفارشیای ثبت نشده — برای ایجاد روی «افزودن» کلیک کنید",
+ "dontRefresh": "در حال نصب، لطفا صفحه را رفرش نکنید",
+ "logs": "گزارشها",
+ "config": "پیکربندی",
+ "backup": "پشتیبانگیری",
+ "backupTitle": "پشتیبانگیری و بازیابی",
+ "exportDatabase": "پشتیبانگیری",
+ "exportDatabaseDesc": "برای دانلود یک فایل .db حاوی پشتیبان از پایگاه داده فعلی خود به دستگاهتان کلیک کنید.",
+ "importDatabase": "بازیابی",
+ "importDatabaseDesc": "برای انتخاب و آپلود یک فایل .db از دستگاهتان و بازیابی پایگاه داده از یک پشتیبان کلیک کنید.",
+ "importDatabaseSuccess": "پایگاه داده با موفقیت وارد شد",
+ "importDatabaseError": "خطا در وارد کردن پایگاه داده",
+ "readDatabaseError": "خطا در خواندن پایگاه داده",
+ "getDatabaseError": "خطا در دریافت پایگاه داده",
+ "getConfigError": "خطا در دریافت فایل پیکربندی"
},
"inbounds": {
- "node": "نود",
- "deployTo": "استقرار روی",
- "localPanel": "پنل لوکال",
"title": "کاربران",
"totalDownUp": "دریافت/ارسال کل",
"totalUsage": "مصرف کل",
@@ -248,6 +247,15 @@
"operate": "عملیات",
"enable": "فعال",
"remark": "نام",
+ "node": "نود",
+ "deployTo": "استقرار روی",
+ "localPanel": "پنل لوکال",
+ "portFallback": {
+ "title": "فرزندان فالبک",
+ "help": "اینباندهایی را که باید ترافیک نامطابق این اینباند VLESS-TLS را دریافت کنند انتخاب کنید. هر فرزند باید روی 127.0.0.1 گوش دهد تا اتصالات ارجاعشده را بپذیرد.",
+ "child": "اینباند",
+ "path": "مسیر"
+ },
"protocol": "پروتکل",
"port": "پورت",
"portMap": "پورتهای نظیر",
@@ -307,6 +315,32 @@
"IPLimitlogDesc": "گزارش تاریخچه آیپی. برای فعال کردن ورودی پس از غیرفعال شدن، گزارش را پاک کنید",
"IPLimitlogclear": "پاک کردن گزارشها",
"setDefaultCert": "استفاده از گواهی پنل",
+ "streamTab": "استریم",
+ "securityTab": "امنیت",
+ "sniffingTab": "اسنیفینگ",
+ "sniffingMetadataOnly": "فقط متادیتا",
+ "sniffingRouteOnly": "فقط مسیریابی",
+ "sniffingIpsExcluded": "IPهای مستثنا",
+ "sniffingDomainsExcluded": "دامنههای مستثنا",
+ "decryption": "رمزگشایی",
+ "encryption": "رمزنگاری",
+ "vlessAuthX25519": "احراز X25519",
+ "vlessAuthMlkem768": "احراز ML-KEM-768",
+ "vlessAuthCustom": "سفارشی",
+ "vlessAuthSelected": "انتخابشده: {auth}",
+ "advanced": {
+ "title": "بخشهای JSON اینباند",
+ "subtitle": "JSON کامل اینباند و ویرایشگرهای جداگانه برای settings، sniffing و streamSettings.",
+ "all": "همه",
+ "allHelp": "شیء کامل اینباند با همه فیلدها در یک ویرایشگر.",
+ "settings": "تنظیمات",
+ "settingsHelp": "ساختار بلوک settings در Xray:",
+ "sniffing": "اسنیفینگ",
+ "sniffingHelp": "ساختار بلوک sniffing در Xray:",
+ "stream": "استریم",
+ "streamHelp": "ساختار بلوک stream در Xray:",
+ "jsonErrorPrefix": "JSON پیشرفته"
+ },
"telegramDesc": "لطفا شناسه گفتگوی تلگرام را وارد کنید. (از دستور '/id' در ربات استفاده کنید) یا ({'@'}userinfobot)",
"subscriptionDesc": "شما میتوانید لینک سابسکربپشن خودرا در 'جزئیات' پیدا کنید، همچنین میتوانید از همین نام برای چندین کاربر استفادهکنید",
"info": "اطلاعات",
@@ -362,45 +396,103 @@
"requestHeader": "سربرگ درخواست",
"responseHeader": "سربرگ پاسخ"
}
- },
- "portFallback": {
- "title": "فرزندان فالبک",
- "help": "اینباندهایی را که باید ترافیک نامطابق این اینباند VLESS-TLS را دریافت کنند انتخاب کنید. هر فرزند باید روی 127.0.0.1 گوش دهد تا اتصالات ارجاعشده را بپذیرد.",
- "child": "اینباند",
- "path": "مسیر"
}
},
- "client": {
- "add": "کاربر جدید",
- "edit": "ویرایش کاربر",
- "submitAdd": "اضافه کردن",
+ "clients": {
+ "add": "افزودن کلاینت",
+ "edit": "ویرایش کلاینت",
+ "submitAdd": "افزودن کلاینت",
"submitEdit": "ذخیره تغییرات",
- "clientCount": "تعداد کاربران",
- "bulk": "انبوهسازی",
- "copyFromInbound": "کپی کاربران از اینباند",
- "copyToInbound": "کپی کاربران به",
+ "clientCount": "تعداد کلاینتها",
+ "bulk": "افزودن گروهی",
+ "copyFromInbound": "کپی کلاینتها از اینباند",
+ "copyToInbound": "کپی کلاینتها به",
"copySelected": "کپی انتخابشدهها",
"copySource": "منبع",
- "copyEmailPreview": "پیشنمایش ایمیل نهایی",
- "copySelectSourceFirst": "ابتدا یک اینباند منبع انتخاب کنید.",
+ "copyEmailPreview": "پیشنمایش ایمیل خروجی",
+ "copySelectSourceFirst": "ابتدا یک اینباند مبدأ انتخاب کنید.",
"copyResult": "نتیجه کپی",
"copyResultSuccess": "با موفقیت کپی شد",
- "copyResultNone": "چیزی برای کپی نیست: هیچ کاربری انتخاب نشده یا منبع خالی است",
+ "copyResultNone": "چیزی برای کپی نیست: کلاینتی انتخاب نشده یا منبع خالی است",
"copyResultErrors": "خطاهای کپی",
- "copyFlowLabel": "Flow برای کاربران جدید (VLESS)",
- "copyFlowHint": "برای همه کاربران کپیشده اعمال میشود. برای نادیده گرفتن، خالی بگذارید.",
+ "copyFlowLabel": "Flow برای کلاینتهای جدید (VLESS)",
+ "copyFlowHint": "روی همه کلاینتهای کپیشده اعمال میشود. خالی بگذارید تا رد شود.",
"selectAll": "انتخاب همه",
"clearAll": "پاک کردن همه",
"method": "روش",
- "first": "از",
- "last": "تا",
+ "first": "اول",
+ "last": "آخر",
+ "ipLog": "گزارش IP",
"prefix": "پیشوند",
"postfix": "پسوند",
- "delayedStart": "شروعپسازاولیناستفاده",
- "expireDays": "مدت زمان",
- "days": "(روز)",
+ "delayedStart": "شروع پس از اولین استفاده",
+ "expireDays": "مدت",
+ "days": "روز",
"renew": "تمدید خودکار",
- "renewDesc": "تمدید خودکار پساز انقضا. (0 = غیرفعال)(واحد: روز)"
+ "renewDesc": "تمدید خودکار پس از انقضا. (۰ = غیرفعال) (واحد: روز)",
+ "title": "کلاینتها",
+ "actions": "عملیات",
+ "totalGB": "مجموع ارسال/دریافت (گیگابایت)",
+ "expiryTime": "انقضا",
+ "addClients": "افزودن کلاینتها",
+ "limitIp": "محدودیت IP",
+ "password": "رمز عبور",
+ "subId": "شناسه اشتراک",
+ "online": "آنلاین",
+ "email": "ایمیل",
+ "comment": "توضیحات",
+ "traffic": "ترافیک",
+ "offline": "آفلاین",
+ "addTitle": "افزودن کلاینت",
+ "qrCode": "کد QR",
+ "moreInformation": "اطلاعات بیشتر",
+ "delete": "حذف",
+ "reset": "بازنشانی ترافیک",
+ "editTitle": "ویرایش کلاینت",
+ "client": "کلاینت",
+ "enabled": "فعال",
+ "remaining": "باقیمانده",
+ "duration": "مدت",
+ "attachedInbounds": "اینباندهای متصل",
+ "selectInbound": "یک یا چند اینباند انتخاب کنید",
+ "noSubId": "این کلاینت subId ندارد، لینک اشتراکگذاری وجود ندارد.",
+ "noLinks": "لینکی برای اشتراکگذاری نیست — ابتدا این کلاینت را به یک اینباند با پروتکل سازگار متصل کنید.",
+ "link": "لینک",
+ "resetNotPossible": "ابتدا این کلاینت را به یک اینباند متصل کنید.",
+ "general": "عمومی",
+ "resetAllTraffics": "بازنشانی ترافیک همه کلاینتها",
+ "resetAllTrafficsTitle": "بازنشانی ترافیک همه کلاینتها؟",
+ "resetAllTrafficsContent": "شمارنده ارسال/دریافت همه کلاینتها به صفر میرسد. سهمیه و تاریخ انقضا تغییری نمیکند. این عمل غیرقابل بازگشت است.",
+ "empty": "هنوز کلاینتی نیست — برای شروع یکی اضافه کنید.",
+ "deleteConfirmTitle": "حذف کلاینت {email}؟",
+ "deleteConfirmContent": "این کلاینت از تمام اینباندهای متصل حذف و سابقه ترافیک آن پاک میشود. این عمل غیرقابل بازگشت است.",
+ "deleteSelected": "حذف ({count})",
+ "bulkDeleteConfirmTitle": "حذف {count} کلاینت؟",
+ "bulkDeleteConfirmContent": "هر کلاینت انتخابشده از تمام اینباندهای متصل حذف و سابقه ترافیک آن پاک میشود. این عمل غیرقابل بازگشت است.",
+ "delDepleted": "حذف اتمامیافتهها",
+ "delDepletedConfirmTitle": "حذف کلاینتهای اتمامیافته؟",
+ "delDepletedConfirmContent": "هر کلاینتی که سهمیه ترافیکاش تمام شده یا تاریخ انقضایش گذشته است حذف میشود. این عمل غیرقابل بازگشت است.",
+ "auth": "Auth",
+ "hysteriaAuth": "Auth (هیستریا)",
+ "uuid": "UUID",
+ "flow": "Flow",
+ "reverseTag": "Reverse tag",
+ "reverseTagPlaceholder": "Reverse tag اختیاری",
+ "telegramId": "شناسه کاربر تلگرام",
+ "telegramIdPlaceholder": "شناسه عددی کاربر تلگرام (۰ = هیچ)",
+ "created": "ساختهشده",
+ "updated": "بهروزشده",
+ "ipLimit": "محدودیت IP",
+ "toasts": {
+ "deleted": "کلاینت حذف شد",
+ "trafficReset": "ترافیک بازنشانی شد",
+ "allTrafficsReset": "ترافیک همه کلاینتها بازنشانی شد",
+ "bulkDeleted": "{count} کلاینت حذف شد",
+ "bulkDeletedMixed": "{ok} حذف، {failed} ناموفق",
+ "bulkCreated": "{count} کلاینت ساخته شد",
+ "bulkCreatedMixed": "{ok} ساخته شد، {failed} ناموفق",
+ "delDepleted": "{count} کلاینت اتمامیافته حذف شد"
+ }
},
"nodes": {
"title": "نودها",
@@ -731,9 +823,9 @@
"accessToken": "توکن دسترسی",
"country": "کشور",
"server": "سرور",
- "privateKey": "کلید خصوصی",
"city": "شهر",
"allCities": "همه شهرها",
+ "privateKey": "کلید خصوصی",
"load": "فشار سرور"
},
"balancer": {
@@ -808,102 +900,6 @@
"ipPool": "زیرشبکه استخر آیپی",
"poolSize": "اندازه استخر"
}
- },
- "clients": {
- "add": "افزودن کلاینت",
- "edit": "ویرایش کلاینت",
- "submitAdd": "افزودن کلاینت",
- "submitEdit": "ذخیره تغییرات",
- "clientCount": "تعداد کلاینتها",
- "bulk": "افزودن گروهی",
- "copyFromInbound": "کپی کلاینتها از اینباند",
- "copyToInbound": "کپی کلاینتها به",
- "copySelected": "کپی انتخابشدهها",
- "copySource": "منبع",
- "copyEmailPreview": "پیشنمایش ایمیل خروجی",
- "copySelectSourceFirst": "ابتدا یک اینباند مبدأ انتخاب کنید.",
- "copyResult": "نتیجه کپی",
- "copyResultSuccess": "با موفقیت کپی شد",
- "copyResultNone": "چیزی برای کپی نیست: کلاینتی انتخاب نشده یا منبع خالی است",
- "copyResultErrors": "خطاهای کپی",
- "copyFlowLabel": "Flow برای کلاینتهای جدید (VLESS)",
- "copyFlowHint": "روی همه کلاینتهای کپیشده اعمال میشود. خالی بگذارید تا رد شود.",
- "selectAll": "انتخاب همه",
- "clearAll": "پاک کردن همه",
- "method": "روش",
- "first": "اول",
- "last": "آخر",
- "ipLog": "گزارش IP",
- "prefix": "پیشوند",
- "postfix": "پسوند",
- "delayedStart": "شروع پس از اولین استفاده",
- "expireDays": "مدت",
- "days": "روز",
- "renew": "تمدید خودکار",
- "renewDesc": "تمدید خودکار پس از انقضا. (۰ = غیرفعال) (واحد: روز)",
- "title": "کلاینتها",
- "actions": "عملیات",
- "totalGB": "مجموع ارسال/دریافت (گیگابایت)",
- "expiryTime": "انقضا",
- "addClients": "افزودن کلاینتها",
- "limitIp": "محدودیت IP",
- "password": "رمز عبور",
- "subId": "شناسه اشتراک",
- "online": "آنلاین",
- "email": "ایمیل",
- "comment": "توضیحات",
- "traffic": "ترافیک",
- "offline": "آفلاین",
- "addTitle": "افزودن کلاینت",
- "qrCode": "کد QR",
- "moreInformation": "اطلاعات بیشتر",
- "delete": "حذف",
- "reset": "بازنشانی ترافیک",
- "editTitle": "ویرایش کلاینت",
- "client": "کلاینت",
- "enabled": "فعال",
- "remaining": "باقیمانده",
- "duration": "مدت",
- "attachedInbounds": "اینباندهای متصل",
- "selectInbound": "یک یا چند اینباند انتخاب کنید",
- "noSubId": "این کلاینت subId ندارد، لینک اشتراکگذاری وجود ندارد.",
- "noLinks": "لینکی برای اشتراکگذاری نیست — ابتدا این کلاینت را به یک اینباند با پروتکل سازگار متصل کنید.",
- "link": "لینک",
- "resetNotPossible": "ابتدا این کلاینت را به یک اینباند متصل کنید.",
- "general": "عمومی",
- "resetAllTraffics": "بازنشانی ترافیک همه کلاینتها",
- "resetAllTrafficsTitle": "بازنشانی ترافیک همه کلاینتها؟",
- "resetAllTrafficsContent": "شمارنده ارسال/دریافت همه کلاینتها به صفر میرسد. سهمیه و تاریخ انقضا تغییری نمیکند. این عمل غیرقابل بازگشت است.",
- "empty": "هنوز کلاینتی نیست — برای شروع یکی اضافه کنید.",
- "deleteConfirmTitle": "حذف کلاینت {email}؟",
- "deleteConfirmContent": "این کلاینت از تمام اینباندهای متصل حذف و سابقه ترافیک آن پاک میشود. این عمل غیرقابل بازگشت است.",
- "deleteSelected": "حذف ({count})",
- "bulkDeleteConfirmTitle": "حذف {count} کلاینت؟",
- "bulkDeleteConfirmContent": "هر کلاینت انتخابشده از تمام اینباندهای متصل حذف و سابقه ترافیک آن پاک میشود. این عمل غیرقابل بازگشت است.",
- "delDepleted": "حذف اتمامیافتهها",
- "delDepletedConfirmTitle": "حذف کلاینتهای اتمامیافته؟",
- "delDepletedConfirmContent": "هر کلاینتی که سهمیه ترافیکاش تمام شده یا تاریخ انقضایش گذشته است حذف میشود. این عمل غیرقابل بازگشت است.",
- "auth": "Auth",
- "hysteriaAuth": "Auth (هیستریا)",
- "uuid": "UUID",
- "flow": "Flow",
- "reverseTag": "Reverse tag",
- "reverseTagPlaceholder": "Reverse tag اختیاری",
- "telegramId": "شناسه کاربر تلگرام",
- "telegramIdPlaceholder": "شناسه عددی کاربر تلگرام (۰ = هیچ)",
- "created": "ساختهشده",
- "updated": "بهروزشده",
- "ipLimit": "محدودیت IP",
- "toasts": {
- "deleted": "کلاینت حذف شد",
- "trafficReset": "ترافیک بازنشانی شد",
- "allTrafficsReset": "ترافیک همه کلاینتها بازنشانی شد",
- "bulkDeleted": "{count} کلاینت حذف شد",
- "bulkDeletedMixed": "{ok} حذف، {failed} ناموفق",
- "bulkCreated": "{count} کلاینت ساخته شد",
- "bulkCreatedMixed": "{ok} ساخته شد، {failed} ناموفق",
- "delDepleted": "{count} کلاینت اتمامیافته حذف شد"
- }
}
},
"tgbot": {
@@ -1081,6 +1077,5 @@
"chooseClient": "یک مشتری برای ورودی {{ .Inbound }} انتخاب کنید",
"chooseInbound": "یک ورودی انتخاب کنید"
}
- },
- "refresh": "تازهسازی"
-}
+ }
+}
\ No newline at end of file
diff --git a/web/translation/id-ID.json b/web/translation/id-ID.json
index 762b366c..fb2c5269 100644
--- a/web/translation/id-ID.json
+++ b/web/translation/id-ID.json
@@ -18,6 +18,8 @@
"search": "Cari",
"filter": "Filter",
"loading": "Memuat...",
+ "refresh": "Segarkan",
+ "clear": "Bersihkan",
"second": "Detik",
"minute": "Menit",
"hour": "Jam",
@@ -94,13 +96,13 @@
"ultraDark": "Sangat Gelap",
"dashboard": "Ikhtisar",
"inbounds": "Masuk",
+ "clients": "Klien",
"nodes": "Node",
"settings": "Pengaturan Panel",
"xray": "Konfigurasi Xray",
"apiDocs": "Dokumentasi API",
"logout": "Keluar",
- "link": "Kelola",
- "clients": "Klien"
+ "link": "Kelola"
},
"pages": {
"login": {
@@ -128,9 +130,9 @@
"stopXray": "Stop",
"restartXray": "Restart",
"xraySwitch": "Versi",
+ "xrayUpdates": "Pembaruan Xray",
"xraySwitchClick": "Pilih versi yang ingin Anda pindah.",
"xraySwitchClickDesk": "Pilih dengan hati-hati, karena versi yang lebih lama mungkin tidak kompatibel dengan konfigurasi saat ini.",
- "xrayUpdates": "Pembaruan Xray",
"updatePanel": "Perbarui Panel",
"panelUpdateDesc": "Ini akan memperbarui 3X-UI ke rilis terbaru dan me-restart layanan panel.",
"currentPanelVersion": "Versi panel saat ini",
@@ -180,20 +182,6 @@
"geofilesUpdateDialogDesc": "Ini akan memperbarui semua berkas.",
"geofilesUpdateAll": "Perbarui semua",
"geofileUpdatePopover": "Geofile berhasil diperbarui",
- "dontRefresh": "Instalasi sedang berlangsung, harap jangan menyegarkan halaman ini",
- "logs": "Log",
- "config": "Konfigurasi",
- "backup": "Cadangan",
- "backupTitle": "Cadangan & Pulihkan",
- "exportDatabase": "Cadangkan",
- "exportDatabaseDesc": "Klik untuk mengunduh file .db yang berisi cadangan dari database Anda saat ini ke perangkat Anda.",
- "importDatabase": "Pulihkan",
- "importDatabaseDesc": "Klik untuk memilih dan mengunggah file .db dari perangkat Anda untuk memulihkan database dari cadangan.",
- "importDatabaseSuccess": "Database berhasil diimpor",
- "importDatabaseError": "Terjadi kesalahan saat mengimpor database",
- "readDatabaseError": "Terjadi kesalahan saat membaca database",
- "getDatabaseError": "Terjadi kesalahan saat mengambil database",
- "getConfigError": "Terjadi kesalahan saat mengambil file konfigurasi",
"customGeoTitle": "GeoSite / GeoIP kustom",
"customGeoAdd": "Tambah",
"customGeoType": "Jenis",
@@ -235,7 +223,21 @@
"customGeoErrNotFound": "Sumber geo kustom tidak ditemukan",
"customGeoErrDownload": "Unduh gagal",
"customGeoErrUpdateAllIncomplete": "Satu atau lebih sumber geo kustom gagal diperbarui",
- "customGeoEmpty": "Belum ada sumber geo kustom — klik Tambah untuk membuatnya"
+ "customGeoEmpty": "Belum ada sumber geo kustom — klik Tambah untuk membuatnya",
+ "dontRefresh": "Instalasi sedang berlangsung, harap jangan menyegarkan halaman ini",
+ "logs": "Log",
+ "config": "Konfigurasi",
+ "backup": "Cadangan",
+ "backupTitle": "Cadangan & Pulihkan",
+ "exportDatabase": "Cadangkan",
+ "exportDatabaseDesc": "Klik untuk mengunduh file .db yang berisi cadangan dari database Anda saat ini ke perangkat Anda.",
+ "importDatabase": "Pulihkan",
+ "importDatabaseDesc": "Klik untuk memilih dan mengunggah file .db dari perangkat Anda untuk memulihkan database dari cadangan.",
+ "importDatabaseSuccess": "Database berhasil diimpor",
+ "importDatabaseError": "Terjadi kesalahan saat mengimpor database",
+ "readDatabaseError": "Terjadi kesalahan saat membaca database",
+ "getDatabaseError": "Terjadi kesalahan saat mengambil database",
+ "getConfigError": "Terjadi kesalahan saat mengambil file konfigurasi"
},
"inbounds": {
"title": "Masuk",
@@ -248,6 +250,12 @@
"node": "Node",
"deployTo": "Terapkan ke",
"localPanel": "Panel lokal",
+ "portFallback": {
+ "title": "Inbound cadangan",
+ "help": "Pilih inbound yang harus menangkap lalu lintas yang tidak cocok pada inbound VLESS-TLS ini. Setiap anak harus mendengarkan di 127.0.0.1 untuk menerima koneksi yang diteruskan.",
+ "child": "Inbound",
+ "path": "Path"
+ },
"protocol": "Protokol",
"port": "Port",
"portMap": "Port Mapping",
@@ -307,6 +315,32 @@
"IPLimitlogDesc": "Log histori IP. (untuk mengaktifkan masuk setelah menonaktifkan, hapus log)",
"IPLimitlogclear": "Hapus Log",
"setDefaultCert": "Atur Sertifikat dari Panel",
+ "streamTab": "Stream",
+ "securityTab": "Keamanan",
+ "sniffingTab": "Sniffing",
+ "sniffingMetadataOnly": "Hanya metadata",
+ "sniffingRouteOnly": "Hanya routing",
+ "sniffingIpsExcluded": "IP yang dikecualikan",
+ "sniffingDomainsExcluded": "Domain yang dikecualikan",
+ "decryption": "Dekripsi",
+ "encryption": "Enkripsi",
+ "vlessAuthX25519": "Auth X25519",
+ "vlessAuthMlkem768": "Auth ML-KEM-768",
+ "vlessAuthCustom": "Khusus",
+ "vlessAuthSelected": "Dipilih: {auth}",
+ "advanced": {
+ "title": "Bagian JSON inbound",
+ "subtitle": "JSON inbound lengkap dan editor fokus untuk settings, sniffing, dan streamSettings.",
+ "all": "Semua",
+ "allHelp": "Objek inbound lengkap dengan semua bidang dalam satu editor.",
+ "settings": "Pengaturan",
+ "settingsHelp": "Pembungkus blok settings Xray:",
+ "sniffing": "Sniffing",
+ "sniffingHelp": "Pembungkus blok sniffing Xray:",
+ "stream": "Stream",
+ "streamHelp": "Pembungkus blok stream Xray:",
+ "jsonErrorPrefix": "JSON lanjutan"
+ },
"telegramDesc": "Harap berikan ID Obrolan Telegram. (gunakan perintah '/id' di bot) atau ({'@'}userinfobot)",
"subscriptionDesc": "Untuk menemukan URL langganan Anda, buka 'Rincian'. Selain itu, Anda dapat menggunakan nama yang sama untuk beberapa klien.",
"info": "Info",
@@ -362,45 +396,103 @@
"requestHeader": "Header Permintaan",
"responseHeader": "Header Respons"
}
- },
- "portFallback": {
- "title": "Inbound cadangan",
- "help": "Pilih inbound yang harus menangkap lalu lintas yang tidak cocok pada inbound VLESS-TLS ini. Setiap anak harus mendengarkan di 127.0.0.1 untuk menerima koneksi yang diteruskan.",
- "child": "Inbound",
- "path": "Path"
}
},
- "client": {
- "add": "Tambah Klien",
- "edit": "Edit Klien",
- "submitAdd": "Tambah Klien",
- "submitEdit": "Simpan Perubahan",
- "clientCount": "Jumlah Klien",
- "bulk": "Tambahkan Massal",
+ "clients": {
+ "add": "Tambah klien",
+ "edit": "Ubah klien",
+ "submitAdd": "Tambah klien",
+ "submitEdit": "Simpan perubahan",
+ "clientCount": "Jumlah klien",
+ "bulk": "Tambah massal",
"copyFromInbound": "Salin klien dari inbound",
"copyToInbound": "Salin klien ke",
- "copySelected": "Salin yang dipilih",
+ "copySelected": "Salin terpilih",
"copySource": "Sumber",
"copyEmailPreview": "Pratinjau email hasil",
- "copySelectSourceFirst": "Silakan pilih inbound sumber terlebih dahulu.",
- "copyResult": "Hasil penyalinan",
+ "copySelectSourceFirst": "Pilih inbound sumber terlebih dahulu.",
+ "copyResult": "Hasil salinan",
"copyResultSuccess": "Berhasil disalin",
- "copyResultNone": "Tidak ada yang disalin: tidak ada klien yang dipilih atau sumber kosong",
- "copyResultErrors": "Kesalahan penyalinan",
+ "copyResultNone": "Tidak ada yang disalin: tidak ada klien terpilih atau sumber kosong",
+ "copyResultErrors": "Kesalahan salin",
"copyFlowLabel": "Flow untuk klien baru (VLESS)",
- "copyFlowHint": "Diterapkan ke semua klien yang disalin. Biarkan kosong untuk melewati.",
+ "copyFlowHint": "Diterapkan ke semua klien yang disalin. Kosongkan untuk dilewati.",
"selectAll": "Pilih semua",
"clearAll": "Hapus semua",
"method": "Metode",
"first": "Pertama",
"last": "Terakhir",
+ "ipLog": "Log IP",
"prefix": "Awalan",
"postfix": "Akhiran",
- "delayedStart": "Mulai Awal",
+ "delayedStart": "Mulai setelah penggunaan pertama",
"expireDays": "Durasi",
"days": "Hari",
- "renew": "Perpanjang Otomatis",
- "renewDesc": "Perpanjangan otomatis setelah kedaluwarsa. (0 = nonaktif)(unit: hari)"
+ "renew": "Perpanjangan otomatis",
+ "renewDesc": "Perpanjangan otomatis setelah kedaluwarsa. (0 = nonaktif) (satuan: hari)",
+ "title": "Klien",
+ "actions": "Aksi",
+ "totalGB": "Total Kirim/Terima (GB)",
+ "expiryTime": "Kedaluwarsa",
+ "addClients": "Tambah klien",
+ "limitIp": "Batas IP",
+ "password": "Kata sandi",
+ "subId": "ID Langganan",
+ "online": "Online",
+ "email": "Email",
+ "comment": "Komentar",
+ "traffic": "Lalu lintas",
+ "offline": "Offline",
+ "addTitle": "Tambah klien",
+ "qrCode": "Kode QR",
+ "moreInformation": "Informasi lebih lanjut",
+ "delete": "Hapus",
+ "reset": "Reset lalu lintas",
+ "editTitle": "Ubah klien",
+ "client": "Klien",
+ "enabled": "Aktif",
+ "remaining": "Sisa",
+ "duration": "Durasi",
+ "attachedInbounds": "Inbound terlampir",
+ "selectInbound": "Pilih satu atau lebih inbound",
+ "noSubId": "Klien ini tidak punya subId, tidak ada tautan yang bisa dibagikan.",
+ "noLinks": "Tidak ada tautan yang bisa dibagikan — lampirkan klien ini ke inbound yang mendukung protokol terlebih dahulu.",
+ "link": "Tautan",
+ "resetNotPossible": "Lampirkan klien ini ke inbound terlebih dahulu.",
+ "general": "Umum",
+ "resetAllTraffics": "Reset lalu lintas semua klien",
+ "resetAllTrafficsTitle": "Reset lalu lintas semua klien?",
+ "resetAllTrafficsContent": "Penghitung kirim/terima setiap klien turun ke nol. Kuota dan kedaluwarsa tidak terpengaruh. Tidak dapat dibatalkan.",
+ "empty": "Belum ada klien — tambahkan satu untuk memulai.",
+ "deleteConfirmTitle": "Hapus klien {email}?",
+ "deleteConfirmContent": "Tindakan ini menghapus klien dari setiap inbound terlampir dan menghapus catatan lalu lintasnya. Tidak dapat dibatalkan.",
+ "deleteSelected": "Hapus ({count})",
+ "bulkDeleteConfirmTitle": "Hapus {count} klien?",
+ "bulkDeleteConfirmContent": "Setiap klien yang dipilih dihapus dari semua inbound terlampir dan catatan lalu lintasnya dihapus. Tidak dapat dibatalkan.",
+ "delDepleted": "Hapus yang habis",
+ "delDepletedConfirmTitle": "Hapus klien yang habis?",
+ "delDepletedConfirmContent": "Hapus setiap klien yang kuota lalu lintasnya habis atau yang masa berlakunya telah berakhir. Tidak dapat dibatalkan.",
+ "auth": "Auth",
+ "hysteriaAuth": "Auth Hysteria",
+ "uuid": "UUID",
+ "flow": "Flow",
+ "reverseTag": "Reverse tag",
+ "reverseTagPlaceholder": "Reverse tag opsional",
+ "telegramId": "ID pengguna Telegram",
+ "telegramIdPlaceholder": "ID numerik pengguna Telegram (0 = tidak ada)",
+ "created": "Dibuat",
+ "updated": "Diperbarui",
+ "ipLimit": "Batas IP",
+ "toasts": {
+ "deleted": "Klien dihapus",
+ "trafficReset": "Lalu lintas direset",
+ "allTrafficsReset": "Lalu lintas semua klien direset",
+ "bulkDeleted": "{count} klien dihapus",
+ "bulkDeletedMixed": "{ok} dihapus, {failed} gagal",
+ "bulkCreated": "{count} klien dibuat",
+ "bulkCreatedMixed": "{ok} dibuat, {failed} gagal",
+ "delDepleted": "{count} klien habis dihapus"
+ }
},
"nodes": {
"title": "Node",
@@ -433,6 +525,7 @@
"latency": "Latensi",
"lastHeartbeat": "Heartbeat Terakhir",
"xrayVersion": "Versi Xray",
+ "panelVersion": "Versi panel",
"actions": "Aksi",
"probe": "Probe Sekarang",
"testConnection": "Tes Koneksi",
@@ -457,8 +550,7 @@
"test": "Tes koneksi",
"fillRequired": "Nama, alamat, port, dan token API wajib diisi",
"probeFailed": "Probe gagal"
- },
- "panelVersion": "Versi panel"
+ }
},
"settings": {
"title": "Pengaturan Panel",
@@ -783,9 +875,6 @@
"unexpectIPs": "IP tak terduga",
"useSystemHosts": "Gunakan Hosts Sistem",
"useSystemHostsDesc": "Gunakan file hosts dari sistem yang terinstal",
- "usePreset": "Gunakan templat",
- "dnsPresetTitle": "Templat DNS",
- "dnsPresetFamily": "Keluarga",
"serveStale": "Sajikan Kedaluwarsa",
"serveStaleDesc": "Mengembalikan hasil cache yang kedaluwarsa saat memperbarui di latar belakang",
"serveExpiredTTL": "TTL Kedaluwarsa",
@@ -798,6 +887,9 @@
"hostsEmpty": "Tidak ada Host yang ditentukan",
"hostsDomain": "Domain (mis. domain:example.com)",
"hostsValues": "IP atau domain — ketik dan tekan Enter",
+ "usePreset": "Gunakan templat",
+ "dnsPresetTitle": "Templat DNS",
+ "dnsPresetFamily": "Keluarga",
"clearAll": "Hapus Semua",
"clearAllTitle": "Hapus semua server DNS?",
"clearAllConfirm": "Ini akan menghapus semua server DNS dari daftar. Tidak dapat dibatalkan."
@@ -808,102 +900,6 @@
"ipPool": "Subnet Kumpulan IP",
"poolSize": "Ukuran Kolam"
}
- },
- "clients": {
- "add": "Tambah klien",
- "edit": "Ubah klien",
- "submitAdd": "Tambah klien",
- "submitEdit": "Simpan perubahan",
- "clientCount": "Jumlah klien",
- "bulk": "Tambah massal",
- "copyFromInbound": "Salin klien dari inbound",
- "copyToInbound": "Salin klien ke",
- "copySelected": "Salin terpilih",
- "copySource": "Sumber",
- "copyEmailPreview": "Pratinjau email hasil",
- "copySelectSourceFirst": "Pilih inbound sumber terlebih dahulu.",
- "copyResult": "Hasil salinan",
- "copyResultSuccess": "Berhasil disalin",
- "copyResultNone": "Tidak ada yang disalin: tidak ada klien terpilih atau sumber kosong",
- "copyResultErrors": "Kesalahan salin",
- "copyFlowLabel": "Flow untuk klien baru (VLESS)",
- "copyFlowHint": "Diterapkan ke semua klien yang disalin. Kosongkan untuk dilewati.",
- "selectAll": "Pilih semua",
- "clearAll": "Hapus semua",
- "method": "Metode",
- "first": "Pertama",
- "last": "Terakhir",
- "ipLog": "Log IP",
- "prefix": "Awalan",
- "postfix": "Akhiran",
- "delayedStart": "Mulai setelah penggunaan pertama",
- "expireDays": "Durasi",
- "days": "Hari",
- "renew": "Perpanjangan otomatis",
- "renewDesc": "Perpanjangan otomatis setelah kedaluwarsa. (0 = nonaktif) (satuan: hari)",
- "title": "Klien",
- "actions": "Aksi",
- "totalGB": "Total Kirim/Terima (GB)",
- "expiryTime": "Kedaluwarsa",
- "addClients": "Tambah klien",
- "limitIp": "Batas IP",
- "password": "Kata sandi",
- "subId": "ID Langganan",
- "online": "Online",
- "email": "Email",
- "comment": "Komentar",
- "traffic": "Lalu lintas",
- "offline": "Offline",
- "addTitle": "Tambah klien",
- "qrCode": "Kode QR",
- "moreInformation": "Informasi lebih lanjut",
- "delete": "Hapus",
- "reset": "Reset lalu lintas",
- "editTitle": "Ubah klien",
- "client": "Klien",
- "enabled": "Aktif",
- "remaining": "Sisa",
- "duration": "Durasi",
- "attachedInbounds": "Inbound terlampir",
- "selectInbound": "Pilih satu atau lebih inbound",
- "noSubId": "Klien ini tidak punya subId, tidak ada tautan yang bisa dibagikan.",
- "noLinks": "Tidak ada tautan yang bisa dibagikan — lampirkan klien ini ke inbound yang mendukung protokol terlebih dahulu.",
- "link": "Tautan",
- "resetNotPossible": "Lampirkan klien ini ke inbound terlebih dahulu.",
- "general": "Umum",
- "resetAllTraffics": "Reset lalu lintas semua klien",
- "resetAllTrafficsTitle": "Reset lalu lintas semua klien?",
- "resetAllTrafficsContent": "Penghitung kirim/terima setiap klien turun ke nol. Kuota dan kedaluwarsa tidak terpengaruh. Tidak dapat dibatalkan.",
- "empty": "Belum ada klien — tambahkan satu untuk memulai.",
- "deleteConfirmTitle": "Hapus klien {email}?",
- "deleteConfirmContent": "Tindakan ini menghapus klien dari setiap inbound terlampir dan menghapus catatan lalu lintasnya. Tidak dapat dibatalkan.",
- "deleteSelected": "Hapus ({count})",
- "bulkDeleteConfirmTitle": "Hapus {count} klien?",
- "bulkDeleteConfirmContent": "Setiap klien yang dipilih dihapus dari semua inbound terlampir dan catatan lalu lintasnya dihapus. Tidak dapat dibatalkan.",
- "delDepleted": "Hapus yang habis",
- "delDepletedConfirmTitle": "Hapus klien yang habis?",
- "delDepletedConfirmContent": "Hapus setiap klien yang kuota lalu lintasnya habis atau yang masa berlakunya telah berakhir. Tidak dapat dibatalkan.",
- "auth": "Auth",
- "hysteriaAuth": "Auth Hysteria",
- "uuid": "UUID",
- "flow": "Flow",
- "reverseTag": "Reverse tag",
- "reverseTagPlaceholder": "Reverse tag opsional",
- "telegramId": "ID pengguna Telegram",
- "telegramIdPlaceholder": "ID numerik pengguna Telegram (0 = tidak ada)",
- "created": "Dibuat",
- "updated": "Diperbarui",
- "ipLimit": "Batas IP",
- "toasts": {
- "deleted": "Klien dihapus",
- "trafficReset": "Lalu lintas direset",
- "allTrafficsReset": "Lalu lintas semua klien direset",
- "bulkDeleted": "{count} klien dihapus",
- "bulkDeletedMixed": "{ok} dihapus, {failed} gagal",
- "bulkCreated": "{count} klien dibuat",
- "bulkCreatedMixed": "{ok} dibuat, {failed} gagal",
- "delDepleted": "{count} klien habis dihapus"
- }
}
},
"tgbot": {
@@ -1081,6 +1077,5 @@
"chooseClient": "Pilih Klien untuk Inbound {{ .Inbound }}",
"chooseInbound": "Pilih Inbound"
}
- },
- "refresh": "Segarkan"
-}
+ }
+}
\ No newline at end of file
diff --git a/web/translation/ja-JP.json b/web/translation/ja-JP.json
index 4bb63783..0611902f 100644
--- a/web/translation/ja-JP.json
+++ b/web/translation/ja-JP.json
@@ -18,6 +18,8 @@
"search": "検索",
"filter": "フィルター",
"loading": "読み込み中...",
+ "refresh": "更新",
+ "clear": "クリア",
"second": "秒",
"minute": "分",
"hour": "時間",
@@ -94,13 +96,13 @@
"ultraDark": "ウルトラダーク",
"dashboard": "ダッシュボード",
"inbounds": "インバウンド一覧",
+ "clients": "クライアント",
"nodes": "ノード",
"settings": "パネル設定",
"xray": "Xray設定",
"apiDocs": "API ドキュメント",
"logout": "ログアウト",
- "link": "リンク管理",
- "clients": "クライアント"
+ "link": "リンク管理"
},
"pages": {
"login": {
@@ -128,9 +130,9 @@
"stopXray": "停止",
"restartXray": "再起動",
"xraySwitch": "バージョン",
+ "xrayUpdates": "Xrayの更新",
"xraySwitchClick": "切り替えるバージョンを選択してください",
"xraySwitchClickDesk": "慎重に選択してください。古いバージョンは現在の設定と互換性がない可能性があります。",
- "xrayUpdates": "Xrayの更新",
"updatePanel": "パネルを更新",
"panelUpdateDesc": "これにより3X-UIが最新リリースに更新され、パネルサービスが再起動されます。",
"currentPanelVersion": "現在のパネルバージョン",
@@ -180,20 +182,6 @@
"geofilesUpdateDialogDesc": "これにより、すべてのファイルが更新されます。",
"geofilesUpdateAll": "すべて更新",
"geofileUpdatePopover": "ジオファイルの更新が成功しました",
- "dontRefresh": "インストール中、このページをリロードしないでください",
- "logs": "ログ",
- "config": "設定",
- "backup": "バックアップ",
- "backupTitle": "バックアップと復元",
- "exportDatabase": "バックアップ",
- "exportDatabaseDesc": "クリックして、現在のデータベースのバックアップを含む .db ファイルをデバイスにダウンロードします。",
- "importDatabase": "復元",
- "importDatabaseDesc": "クリックして、デバイスから .db ファイルを選択し、アップロードしてバックアップからデータベースを復元します。",
- "importDatabaseSuccess": "データベースのインポートに成功しました",
- "importDatabaseError": "データベースのインポート中にエラーが発生しました",
- "readDatabaseError": "データベースの読み取り中にエラーが発生しました",
- "getDatabaseError": "データベースの取得中にエラーが発生しました",
- "getConfigError": "設定ファイルの取得中にエラーが発生しました",
"customGeoTitle": "カスタム GeoSite / GeoIP",
"customGeoAdd": "追加",
"customGeoType": "種類",
@@ -235,7 +223,21 @@
"customGeoErrNotFound": "カスタム geo ソースが見つかりません",
"customGeoErrDownload": "ダウンロードに失敗しました",
"customGeoErrUpdateAllIncomplete": "カスタム geo ソースの 1 件以上を更新できませんでした",
- "customGeoEmpty": "カスタム geo ソースはまだありません — 「追加」をクリックして作成してください"
+ "customGeoEmpty": "カスタム geo ソースはまだありません — 「追加」をクリックして作成してください",
+ "dontRefresh": "インストール中、このページをリロードしないでください",
+ "logs": "ログ",
+ "config": "設定",
+ "backup": "バックアップ",
+ "backupTitle": "バックアップと復元",
+ "exportDatabase": "バックアップ",
+ "exportDatabaseDesc": "クリックして、現在のデータベースのバックアップを含む .db ファイルをデバイスにダウンロードします。",
+ "importDatabase": "復元",
+ "importDatabaseDesc": "クリックして、デバイスから .db ファイルを選択し、アップロードしてバックアップからデータベースを復元します。",
+ "importDatabaseSuccess": "データベースのインポートに成功しました",
+ "importDatabaseError": "データベースのインポート中にエラーが発生しました",
+ "readDatabaseError": "データベースの読み取り中にエラーが発生しました",
+ "getDatabaseError": "データベースの取得中にエラーが発生しました",
+ "getConfigError": "設定ファイルの取得中にエラーが発生しました"
},
"inbounds": {
"title": "インバウンド一覧",
@@ -248,6 +250,12 @@
"node": "ノード",
"deployTo": "デプロイ先",
"localPanel": "ローカルパネル",
+ "portFallback": {
+ "title": "フォールバック子",
+ "help": "この VLESS-TLS インバウンドが一致しないトラフィックを受け取るインバウンドを選択してください。各子インバウンドは転送された接続を受信するために 127.0.0.1 でリッスンする必要があります。",
+ "child": "インバウンド",
+ "path": "パス"
+ },
"protocol": "プロトコル",
"port": "ポート",
"portMap": "ポートマッピング",
@@ -307,6 +315,32 @@
"IPLimitlogDesc": "IP履歴ログ(無効なインバウンドトラフィックを有効にするには、ログをクリアしてください)",
"IPLimitlogclear": "ログをクリア",
"setDefaultCert": "パネル設定から証明書を設定",
+ "streamTab": "ストリーム",
+ "securityTab": "セキュリティ",
+ "sniffingTab": "スニッフィング",
+ "sniffingMetadataOnly": "メタデータのみ",
+ "sniffingRouteOnly": "ルーティングのみ",
+ "sniffingIpsExcluded": "除外する IP",
+ "sniffingDomainsExcluded": "除外するドメイン",
+ "decryption": "復号",
+ "encryption": "暗号化",
+ "vlessAuthX25519": "X25519 認証",
+ "vlessAuthMlkem768": "ML-KEM-768 認証",
+ "vlessAuthCustom": "カスタム",
+ "vlessAuthSelected": "選択中: {auth}",
+ "advanced": {
+ "title": "インバウンド JSON セクション",
+ "subtitle": "インバウンド全体の JSON と、settings、sniffing、streamSettings 用の専用エディター。",
+ "all": "すべて",
+ "allHelp": "すべてのフィールドを含むインバウンドオブジェクト全体を 1 つのエディターで編集します。",
+ "settings": "設定",
+ "settingsHelp": "Xray settings ブロックのラッパー:",
+ "sniffing": "スニッフィング",
+ "sniffingHelp": "Xray sniffing ブロックのラッパー:",
+ "stream": "ストリーム",
+ "streamHelp": "Xray stream ブロックのラッパー:",
+ "jsonErrorPrefix": "高度な JSON"
+ },
"telegramDesc": "TelegramチャットIDを提供してください。(ボットで'/id'コマンドを使用)または({'@'}userinfobot)",
"subscriptionDesc": "サブスクリプションURLを見つけるには、“詳細情報”に移動してください。また、複数のクライアントに同じ名前を使用することができます。",
"info": "情報",
@@ -362,45 +396,103 @@
"requestHeader": "リクエストヘッダー",
"responseHeader": "レスポンスヘッダー"
}
- },
- "portFallback": {
- "title": "フォールバック子",
- "help": "この VLESS-TLS インバウンドが一致しないトラフィックを受け取るインバウンドを選択してください。各子インバウンドは転送された接続を受信するために 127.0.0.1 でリッスンする必要があります。",
- "child": "インバウンド",
- "path": "パス"
}
},
- "client": {
- "add": "クライアント追加",
- "edit": "クライアント編集",
- "submitAdd": "クライアント追加",
+ "clients": {
+ "add": "クライアントを追加",
+ "edit": "クライアントを編集",
+ "submitAdd": "クライアントを追加",
"submitEdit": "変更を保存",
"clientCount": "クライアント数",
- "bulk": "一括作成",
+ "bulk": "一括追加",
"copyFromInbound": "インバウンドからクライアントをコピー",
- "copyToInbound": "クライアントのコピー先",
- "copySelected": "選択項目をコピー",
- "copySource": "ソース",
- "copyEmailPreview": "結果メールのプレビュー",
- "copySelectSourceFirst": "先にソースインバウンドを選択してください。",
+ "copyToInbound": "コピー先",
+ "copySelected": "選択をコピー",
+ "copySource": "コピー元",
+ "copyEmailPreview": "生成されるメールのプレビュー",
+ "copySelectSourceFirst": "まずコピー元のインバウンドを選択してください。",
"copyResult": "コピー結果",
- "copyResultSuccess": "正常にコピーされました",
- "copyResultNone": "コピーする項目がありません: クライアントが選択されていないかソースが空です",
+ "copyResultSuccess": "コピーに成功しました",
+ "copyResultNone": "コピーする対象がありません。クライアントが選択されていないか、コピー元が空です",
"copyResultErrors": "コピーエラー",
"copyFlowLabel": "新規クライアントの Flow (VLESS)",
- "copyFlowHint": "すべてのコピー対象クライアントに適用されます。空のままにするとスキップします。",
+ "copyFlowHint": "コピーされる全クライアントに適用されます。空欄でスキップします。",
"selectAll": "すべて選択",
- "clearAll": "すべて解除",
- "method": "方法",
+ "clearAll": "すべてクリア",
+ "method": "メソッド",
"first": "最初",
"last": "最後",
+ "ipLog": "IP ログ",
"prefix": "プレフィックス",
"postfix": "サフィックス",
- "delayedStart": "初回使用後に開始",
+ "delayedStart": "初回使用から開始",
"expireDays": "期間",
"days": "日",
"renew": "自動更新",
- "renewDesc": "期限が切れた後に自動更新。(0 = 無効)(単位:日)"
+ "renewDesc": "有効期限切れ後に自動更新します。(0 = 無効) (単位: 日)",
+ "title": "クライアント",
+ "actions": "操作",
+ "totalGB": "送受信合計 (GB)",
+ "expiryTime": "有効期限",
+ "addClients": "クライアントを追加",
+ "limitIp": "IP 制限",
+ "password": "パスワード",
+ "subId": "サブスクリプション ID",
+ "online": "オンライン",
+ "email": "メール",
+ "comment": "コメント",
+ "traffic": "トラフィック",
+ "offline": "オフライン",
+ "addTitle": "クライアントを追加",
+ "qrCode": "QR コード",
+ "moreInformation": "詳細情報",
+ "delete": "削除",
+ "reset": "トラフィックをリセット",
+ "editTitle": "クライアントを編集",
+ "client": "クライアント",
+ "enabled": "有効",
+ "remaining": "残量",
+ "duration": "期間",
+ "attachedInbounds": "関連付けされたインバウンド",
+ "selectInbound": "1 つ以上のインバウンドを選択",
+ "noSubId": "このクライアントには subId がなく、共有可能なリンクはありません。",
+ "noLinks": "共有可能なリンクがありません — まずこのクライアントを対応するプロトコルのインバウンドに関連付けてください。",
+ "link": "リンク",
+ "resetNotPossible": "まずこのクライアントをインバウンドに関連付けてください。",
+ "general": "一般",
+ "resetAllTraffics": "すべてのクライアントのトラフィックをリセット",
+ "resetAllTrafficsTitle": "すべてのクライアントのトラフィックをリセットしますか?",
+ "resetAllTrafficsContent": "すべてのクライアントの送受信カウンターがゼロにリセットされます。クォータと有効期限には影響しません。元に戻せません。",
+ "empty": "クライアントはまだいません — 1 つ追加して始めましょう。",
+ "deleteConfirmTitle": "クライアント {email} を削除しますか?",
+ "deleteConfirmContent": "クライアントを関連付けされたすべてのインバウンドから削除し、トラフィック記録も破棄します。元に戻せません。",
+ "deleteSelected": "削除 ({count})",
+ "bulkDeleteConfirmTitle": "{count} 件のクライアントを削除しますか?",
+ "bulkDeleteConfirmContent": "選択された各クライアントを関連付けされたすべてのインバウンドから削除し、トラフィック記録も破棄します。元に戻せません。",
+ "delDepleted": "使い切ったクライアントを削除",
+ "delDepletedConfirmTitle": "使い切ったクライアントを削除しますか?",
+ "delDepletedConfirmContent": "トラフィック上限に達したか有効期限が切れたクライアントをすべて削除します。元に戻せません。",
+ "auth": "Auth",
+ "hysteriaAuth": "Auth (Hysteria)",
+ "uuid": "UUID",
+ "flow": "Flow",
+ "reverseTag": "Reverse tag",
+ "reverseTagPlaceholder": "任意の Reverse tag",
+ "telegramId": "Telegram ユーザー ID",
+ "telegramIdPlaceholder": "数値の Telegram ユーザー ID (0 = なし)",
+ "created": "作成日",
+ "updated": "更新日",
+ "ipLimit": "IP 制限",
+ "toasts": {
+ "deleted": "クライアントを削除しました",
+ "trafficReset": "トラフィックをリセットしました",
+ "allTrafficsReset": "すべてのクライアントのトラフィックをリセットしました",
+ "bulkDeleted": "{count} 件のクライアントを削除しました",
+ "bulkDeletedMixed": "{ok} 件削除、{failed} 件失敗",
+ "bulkCreated": "{count} 件のクライアントを作成しました",
+ "bulkCreatedMixed": "{ok} 件作成、{failed} 件失敗",
+ "delDepleted": "使い切った {count} 件のクライアントを削除しました"
+ }
},
"nodes": {
"title": "ノード",
@@ -433,6 +525,7 @@
"latency": "レイテンシ",
"lastHeartbeat": "最後のハートビート",
"xrayVersion": "Xrayバージョン",
+ "panelVersion": "パネルのバージョン",
"actions": "操作",
"probe": "今すぐプローブ",
"testConnection": "接続テスト",
@@ -457,8 +550,7 @@
"test": "接続テスト",
"fillRequired": "名前、アドレス、ポート、APIトークンは必須です",
"probeFailed": "プローブに失敗しました"
- },
- "panelVersion": "パネルのバージョン"
+ }
},
"settings": {
"title": "パネル設定",
@@ -783,9 +875,6 @@
"unexpectIPs": "予期しないIP",
"useSystemHosts": "システムのHostsを使用",
"useSystemHostsDesc": "インストール済みシステムのhostsファイルを使用する",
- "usePreset": "テンプレートを使用",
- "dnsPresetTitle": "DNSテンプレート",
- "dnsPresetFamily": "ファミリー",
"serveStale": "期限切れキャッシュを使用",
"serveStaleDesc": "バックグラウンドで更新中に期限切れキャッシュ結果を返す",
"serveExpiredTTL": "期限切れTTL",
@@ -798,6 +887,9 @@
"hostsEmpty": "Host が定義されていません",
"hostsDomain": "ドメイン (例: domain:example.com)",
"hostsValues": "IP またはドメイン — 入力して Enter",
+ "usePreset": "テンプレートを使用",
+ "dnsPresetTitle": "DNSテンプレート",
+ "dnsPresetFamily": "ファミリー",
"clearAll": "すべて削除",
"clearAllTitle": "すべての DNS サーバを削除しますか?",
"clearAllConfirm": "リストからすべての DNS サーバが削除されます。この操作は元に戻せません。"
@@ -808,102 +900,6 @@
"ipPool": "IPプールサブネット",
"poolSize": "プールサイズ"
}
- },
- "clients": {
- "add": "クライアントを追加",
- "edit": "クライアントを編集",
- "submitAdd": "クライアントを追加",
- "submitEdit": "変更を保存",
- "clientCount": "クライアント数",
- "bulk": "一括追加",
- "copyFromInbound": "インバウンドからクライアントをコピー",
- "copyToInbound": "コピー先",
- "copySelected": "選択をコピー",
- "copySource": "コピー元",
- "copyEmailPreview": "生成されるメールのプレビュー",
- "copySelectSourceFirst": "まずコピー元のインバウンドを選択してください。",
- "copyResult": "コピー結果",
- "copyResultSuccess": "コピーに成功しました",
- "copyResultNone": "コピーする対象がありません。クライアントが選択されていないか、コピー元が空です",
- "copyResultErrors": "コピーエラー",
- "copyFlowLabel": "新規クライアントの Flow (VLESS)",
- "copyFlowHint": "コピーされる全クライアントに適用されます。空欄でスキップします。",
- "selectAll": "すべて選択",
- "clearAll": "すべてクリア",
- "method": "メソッド",
- "first": "最初",
- "last": "最後",
- "ipLog": "IP ログ",
- "prefix": "プレフィックス",
- "postfix": "サフィックス",
- "delayedStart": "初回使用から開始",
- "expireDays": "期間",
- "days": "日",
- "renew": "自動更新",
- "renewDesc": "有効期限切れ後に自動更新します。(0 = 無効) (単位: 日)",
- "title": "クライアント",
- "actions": "操作",
- "totalGB": "送受信合計 (GB)",
- "expiryTime": "有効期限",
- "addClients": "クライアントを追加",
- "limitIp": "IP 制限",
- "password": "パスワード",
- "subId": "サブスクリプション ID",
- "online": "オンライン",
- "email": "メール",
- "comment": "コメント",
- "traffic": "トラフィック",
- "offline": "オフライン",
- "addTitle": "クライアントを追加",
- "qrCode": "QR コード",
- "moreInformation": "詳細情報",
- "delete": "削除",
- "reset": "トラフィックをリセット",
- "editTitle": "クライアントを編集",
- "client": "クライアント",
- "enabled": "有効",
- "remaining": "残量",
- "duration": "期間",
- "attachedInbounds": "関連付けされたインバウンド",
- "selectInbound": "1 つ以上のインバウンドを選択",
- "noSubId": "このクライアントには subId がなく、共有可能なリンクはありません。",
- "noLinks": "共有可能なリンクがありません — まずこのクライアントを対応するプロトコルのインバウンドに関連付けてください。",
- "link": "リンク",
- "resetNotPossible": "まずこのクライアントをインバウンドに関連付けてください。",
- "general": "一般",
- "resetAllTraffics": "すべてのクライアントのトラフィックをリセット",
- "resetAllTrafficsTitle": "すべてのクライアントのトラフィックをリセットしますか?",
- "resetAllTrafficsContent": "すべてのクライアントの送受信カウンターがゼロにリセットされます。クォータと有効期限には影響しません。元に戻せません。",
- "empty": "クライアントはまだいません — 1 つ追加して始めましょう。",
- "deleteConfirmTitle": "クライアント {email} を削除しますか?",
- "deleteConfirmContent": "クライアントを関連付けされたすべてのインバウンドから削除し、トラフィック記録も破棄します。元に戻せません。",
- "deleteSelected": "削除 ({count})",
- "bulkDeleteConfirmTitle": "{count} 件のクライアントを削除しますか?",
- "bulkDeleteConfirmContent": "選択された各クライアントを関連付けされたすべてのインバウンドから削除し、トラフィック記録も破棄します。元に戻せません。",
- "delDepleted": "使い切ったクライアントを削除",
- "delDepletedConfirmTitle": "使い切ったクライアントを削除しますか?",
- "delDepletedConfirmContent": "トラフィック上限に達したか有効期限が切れたクライアントをすべて削除します。元に戻せません。",
- "auth": "Auth",
- "hysteriaAuth": "Auth (Hysteria)",
- "uuid": "UUID",
- "flow": "Flow",
- "reverseTag": "Reverse tag",
- "reverseTagPlaceholder": "任意の Reverse tag",
- "telegramId": "Telegram ユーザー ID",
- "telegramIdPlaceholder": "数値の Telegram ユーザー ID (0 = なし)",
- "created": "作成日",
- "updated": "更新日",
- "ipLimit": "IP 制限",
- "toasts": {
- "deleted": "クライアントを削除しました",
- "trafficReset": "トラフィックをリセットしました",
- "allTrafficsReset": "すべてのクライアントのトラフィックをリセットしました",
- "bulkDeleted": "{count} 件のクライアントを削除しました",
- "bulkDeletedMixed": "{ok} 件削除、{failed} 件失敗",
- "bulkCreated": "{count} 件のクライアントを作成しました",
- "bulkCreatedMixed": "{ok} 件作成、{failed} 件失敗",
- "delDepleted": "使い切った {count} 件のクライアントを削除しました"
- }
}
},
"tgbot": {
@@ -1081,6 +1077,5 @@
"chooseClient": "インバウンド {{ .Inbound }} のクライアントを選択",
"chooseInbound": "インバウンドを選択"
}
- },
- "refresh": "更新"
-}
+ }
+}
\ No newline at end of file
diff --git a/web/translation/pt-BR.json b/web/translation/pt-BR.json
index 6b813ca1..85b2b382 100644
--- a/web/translation/pt-BR.json
+++ b/web/translation/pt-BR.json
@@ -18,6 +18,8 @@
"search": "Pesquisar",
"filter": "Filtrar",
"loading": "Carregando...",
+ "refresh": "Atualizar",
+ "clear": "Limpar",
"second": "Segundo",
"minute": "Minuto",
"hour": "Hora",
@@ -94,13 +96,13 @@
"ultraDark": "Ultra Escuro",
"dashboard": "Visão Geral",
"inbounds": "Inbounds",
+ "clients": "Clientes",
"nodes": "Nós",
"settings": "Panel Settings",
"xray": "Xray Configs",
"apiDocs": "Documentação da API",
"logout": "Sair",
- "link": "Gerenciar",
- "clients": "Clientes"
+ "link": "Gerenciar"
},
"pages": {
"login": {
@@ -128,9 +130,9 @@
"stopXray": "Parar",
"restartXray": "Reiniciar",
"xraySwitch": "Versão",
+ "xrayUpdates": "Atualizações do Xray",
"xraySwitchClick": "Escolha a versão para a qual deseja alternar.",
"xraySwitchClickDesk": "Escolha com cuidado, pois versões mais antigas podem não ser compatíveis com as configurações atuais.",
- "xrayUpdates": "Atualizações do Xray",
"updatePanel": "Atualizar painel",
"panelUpdateDesc": "Isso atualizará o 3X-UI para a versão mais recente e reiniciará o serviço do painel.",
"currentPanelVersion": "Versão atual do painel",
@@ -180,20 +182,6 @@
"geofilesUpdateDialogDesc": "Isso atualizará todos os arquivos.",
"geofilesUpdateAll": "Atualizar tudo",
"geofileUpdatePopover": "Geofile atualizado com sucesso",
- "dontRefresh": "Instalação em andamento, por favor não atualize a página",
- "logs": "Logs",
- "config": "Configuração",
- "backup": "Backup",
- "backupTitle": "Backup & Restauração",
- "exportDatabase": "Backup",
- "exportDatabaseDesc": "Clique para baixar um arquivo .db contendo um backup do seu banco de dados atual para o seu dispositivo.",
- "importDatabase": "Restaurar",
- "importDatabaseDesc": "Clique para selecionar e enviar um arquivo .db do seu dispositivo para restaurar seu banco de dados a partir de um backup.",
- "importDatabaseSuccess": "O banco de dados foi importado com sucesso",
- "importDatabaseError": "Ocorreu um erro ao importar o banco de dados",
- "readDatabaseError": "Ocorreu um erro ao ler o banco de dados",
- "getDatabaseError": "Ocorreu um erro ao recuperar o banco de dados",
- "getConfigError": "Ocorreu um erro ao recuperar o arquivo de configuração",
"customGeoTitle": "GeoSite / GeoIP personalizados",
"customGeoAdd": "Adicionar",
"customGeoType": "Tipo",
@@ -235,7 +223,21 @@
"customGeoErrNotFound": "Fonte geo personalizada não encontrada",
"customGeoErrDownload": "Falha no download",
"customGeoErrUpdateAllIncomplete": "Falha ao atualizar uma ou mais fontes geo personalizadas",
- "customGeoEmpty": "Ainda não há fontes geo personalizadas — clique em Adicionar para criar uma"
+ "customGeoEmpty": "Ainda não há fontes geo personalizadas — clique em Adicionar para criar uma",
+ "dontRefresh": "Instalação em andamento, por favor não atualize a página",
+ "logs": "Logs",
+ "config": "Configuração",
+ "backup": "Backup",
+ "backupTitle": "Backup & Restauração",
+ "exportDatabase": "Backup",
+ "exportDatabaseDesc": "Clique para baixar um arquivo .db contendo um backup do seu banco de dados atual para o seu dispositivo.",
+ "importDatabase": "Restaurar",
+ "importDatabaseDesc": "Clique para selecionar e enviar um arquivo .db do seu dispositivo para restaurar seu banco de dados a partir de um backup.",
+ "importDatabaseSuccess": "O banco de dados foi importado com sucesso",
+ "importDatabaseError": "Ocorreu um erro ao importar o banco de dados",
+ "readDatabaseError": "Ocorreu um erro ao ler o banco de dados",
+ "getDatabaseError": "Ocorreu um erro ao recuperar o banco de dados",
+ "getConfigError": "Ocorreu um erro ao recuperar o arquivo de configuração"
},
"inbounds": {
"title": "Inbounds",
@@ -248,6 +250,12 @@
"node": "Nó",
"deployTo": "Implantar em",
"localPanel": "Painel local",
+ "portFallback": {
+ "title": "Inbounds de fallback",
+ "help": "Selecione os inbounds que devem receber o tráfego que este inbound VLESS-TLS não atender. Cada filho precisa escutar em 127.0.0.1 para receber as conexões encaminhadas.",
+ "child": "Inbound",
+ "path": "Caminho"
+ },
"protocol": "Protocolo",
"port": "Porta",
"portMap": "Porta Mapeada",
@@ -307,6 +315,32 @@
"IPLimitlogDesc": "O histórico de IPs. (para ativar o inbound após a desativação, limpe o log)",
"IPLimitlogclear": "Limpar o Log",
"setDefaultCert": "Definir Certificado pelo Painel",
+ "streamTab": "Stream",
+ "securityTab": "Segurança",
+ "sniffingTab": "Sniffing",
+ "sniffingMetadataOnly": "Apenas metadados",
+ "sniffingRouteOnly": "Apenas roteamento",
+ "sniffingIpsExcluded": "IPs excluídos",
+ "sniffingDomainsExcluded": "Domínios excluídos",
+ "decryption": "Descriptografia",
+ "encryption": "Criptografia",
+ "vlessAuthX25519": "Autenticação X25519",
+ "vlessAuthMlkem768": "Autenticação ML-KEM-768",
+ "vlessAuthCustom": "Personalizado",
+ "vlessAuthSelected": "Selecionado: {auth}",
+ "advanced": {
+ "title": "Seções JSON do inbound",
+ "subtitle": "JSON completo do inbound e editores específicos para settings, sniffing e streamSettings.",
+ "all": "Tudo",
+ "allHelp": "Objeto inbound completo com todos os campos em um único editor.",
+ "settings": "Configurações",
+ "settingsHelp": "Wrapper do bloco settings do Xray:",
+ "sniffing": "Sniffing",
+ "sniffingHelp": "Wrapper do bloco sniffing do Xray:",
+ "stream": "Stream",
+ "streamHelp": "Wrapper do bloco stream do Xray:",
+ "jsonErrorPrefix": "JSON avançado"
+ },
"telegramDesc": "Por favor, forneça o ID do Chat do Telegram. (use o comando '/id' no bot) ou ({'@'}userinfobot)",
"subscriptionDesc": "Para encontrar seu URL de assinatura, navegue até 'Detalhes'. Além disso, você pode usar o mesmo nome para vários clientes.",
"info": "Informações",
@@ -362,45 +396,103 @@
"requestHeader": "Cabeçalho da Requisição",
"responseHeader": "Cabeçalho da Resposta"
}
- },
- "portFallback": {
- "title": "Inbounds de fallback",
- "help": "Selecione os inbounds que devem receber o tráfego que este inbound VLESS-TLS não atender. Cada filho precisa escutar em 127.0.0.1 para receber as conexões encaminhadas.",
- "child": "Inbound",
- "path": "Caminho"
}
},
- "client": {
- "add": "Adicionar Cliente",
- "edit": "Editar Cliente",
- "submitAdd": "Adicionar Cliente",
- "submitEdit": "Salvar Alterações",
- "clientCount": "Número de Clientes",
- "bulk": "Adicionar Vários",
- "copyFromInbound": "Copiar clientes da entrada",
+ "clients": {
+ "add": "Adicionar cliente",
+ "edit": "Editar cliente",
+ "submitAdd": "Adicionar cliente",
+ "submitEdit": "Salvar alterações",
+ "clientCount": "Número de clientes",
+ "bulk": "Adicionar em lote",
+ "copyFromInbound": "Copiar clientes do inbound",
"copyToInbound": "Copiar clientes para",
"copySelected": "Copiar selecionados",
"copySource": "Origem",
- "copyEmailPreview": "Prévia do email resultante",
- "copySelectSourceFirst": "Selecione primeiro uma entrada de origem.",
+ "copyEmailPreview": "Prévia do e-mail resultante",
+ "copySelectSourceFirst": "Selecione primeiro um inbound de origem.",
"copyResult": "Resultado da cópia",
"copyResultSuccess": "Copiado com sucesso",
- "copyResultNone": "Nada a copiar: nenhum cliente selecionado ou origem vazia",
- "copyResultErrors": "Erros ao copiar",
- "copyFlowLabel": "Flow para novos clientes (VLESS)",
+ "copyResultNone": "Nada a copiar: nenhum cliente selecionado ou a origem está vazia",
+ "copyResultErrors": "Erros de cópia",
+ "copyFlowLabel": "Flow para os novos clientes (VLESS)",
"copyFlowHint": "Aplicado a todos os clientes copiados. Deixe em branco para ignorar.",
"selectAll": "Selecionar tudo",
"clearAll": "Limpar tudo",
"method": "Método",
"first": "Primeiro",
"last": "Último",
+ "ipLog": "Registro de IP",
"prefix": "Prefixo",
"postfix": "Sufixo",
- "delayedStart": "Iniciar Após Primeiro Uso",
+ "delayedStart": "Iniciar após o primeiro uso",
"expireDays": "Duração",
"days": "Dia(s)",
- "renew": "Renovação Automática",
- "renewDesc": "Renovação automática após expiração. (0 = desativado)(unidade: dia)"
+ "renew": "Renovação automática",
+ "renewDesc": "Renovação automática após a expiração. (0 = desativar) (unidade: dia)",
+ "title": "Clientes",
+ "actions": "Ações",
+ "totalGB": "Total enviado/recebido (GB)",
+ "expiryTime": "Expiração",
+ "addClients": "Adicionar clientes",
+ "limitIp": "Limite de IP",
+ "password": "Senha",
+ "subId": "ID da assinatura",
+ "online": "Online",
+ "email": "E-mail",
+ "comment": "Comentário",
+ "traffic": "Tráfego",
+ "offline": "Offline",
+ "addTitle": "Adicionar cliente",
+ "qrCode": "Código QR",
+ "moreInformation": "Mais informações",
+ "delete": "Excluir",
+ "reset": "Redefinir tráfego",
+ "editTitle": "Editar cliente",
+ "client": "Cliente",
+ "enabled": "Habilitado",
+ "remaining": "Restante",
+ "duration": "Duração",
+ "attachedInbounds": "Inbounds associados",
+ "selectInbound": "Selecione um ou mais inbounds",
+ "noSubId": "Este cliente não tem subId, sem link compartilhável.",
+ "noLinks": "Sem links compartilháveis — associe primeiro este cliente a um inbound compatível com o protocolo.",
+ "link": "Link",
+ "resetNotPossible": "Associe primeiro este cliente a um inbound.",
+ "general": "Geral",
+ "resetAllTraffics": "Redefinir o tráfego de todos os clientes",
+ "resetAllTrafficsTitle": "Redefinir o tráfego de todos os clientes?",
+ "resetAllTrafficsContent": "Os contadores de envio/recebimento de cada cliente vão a zero. Cota e expiração não são afetadas. Não é possível desfazer.",
+ "empty": "Ainda não há clientes — adicione um para começar.",
+ "deleteConfirmTitle": "Excluir o cliente {email}?",
+ "deleteConfirmContent": "Isto remove o cliente de cada inbound associado e descarta o registro de tráfego. Não é possível desfazer.",
+ "deleteSelected": "Excluir ({count})",
+ "bulkDeleteConfirmTitle": "Excluir {count} clientes?",
+ "bulkDeleteConfirmContent": "Cada cliente selecionado é removido dos inbounds associados e o registro de tráfego é descartado. Não é possível desfazer.",
+ "delDepleted": "Excluir esgotados",
+ "delDepletedConfirmTitle": "Excluir clientes esgotados?",
+ "delDepletedConfirmContent": "Remove todos os clientes cuja cota de tráfego foi esgotada ou cuja expiração já passou. Não é possível desfazer.",
+ "auth": "Auth",
+ "hysteriaAuth": "Auth do Hysteria",
+ "uuid": "UUID",
+ "flow": "Flow",
+ "reverseTag": "Reverse tag",
+ "reverseTagPlaceholder": "Reverse tag opcional",
+ "telegramId": "ID de usuário do Telegram",
+ "telegramIdPlaceholder": "ID numérico de usuário do Telegram (0 = nenhum)",
+ "created": "Criado",
+ "updated": "Atualizado",
+ "ipLimit": "Limite de IP",
+ "toasts": {
+ "deleted": "Cliente excluído",
+ "trafficReset": "Tráfego redefinido",
+ "allTrafficsReset": "Tráfego de todos os clientes redefinido",
+ "bulkDeleted": "{count} clientes excluídos",
+ "bulkDeletedMixed": "{ok} excluídos, {failed} com falha",
+ "bulkCreated": "{count} clientes criados",
+ "bulkCreatedMixed": "{ok} criados, {failed} com falha",
+ "delDepleted": "{count} clientes esgotados excluídos"
+ }
},
"nodes": {
"title": "Nós",
@@ -433,6 +525,7 @@
"latency": "Latência",
"lastHeartbeat": "Último heartbeat",
"xrayVersion": "Versão do Xray",
+ "panelVersion": "Versão do painel",
"actions": "Ações",
"probe": "Sondar agora",
"testConnection": "Testar conexão",
@@ -457,8 +550,7 @@
"test": "Testar conexão",
"fillRequired": "Nome, endereço, porta e token da API são obrigatórios",
"probeFailed": "Falha na sondagem"
- },
- "panelVersion": "Versão do painel"
+ }
},
"settings": {
"title": "Configurações do Painel",
@@ -783,9 +875,6 @@
"unexpectIPs": "IPs inesperados",
"useSystemHosts": "Usar Hosts do sistema",
"useSystemHostsDesc": "Usar o arquivo hosts de um sistema instalado",
- "usePreset": "Usar modelo",
- "dnsPresetTitle": "Modelos DNS",
- "dnsPresetFamily": "Familiar",
"serveStale": "Servir Expirados",
"serveStaleDesc": "Retornar resultados expirados do cache enquanto atualiza em segundo plano",
"serveExpiredTTL": "TTL de Expirados",
@@ -798,6 +887,9 @@
"hostsEmpty": "Nenhum Host definido",
"hostsDomain": "Domínio (ex. domain:example.com)",
"hostsValues": "IP ou domínio — digite e pressione Enter",
+ "usePreset": "Usar modelo",
+ "dnsPresetTitle": "Modelos DNS",
+ "dnsPresetFamily": "Familiar",
"clearAll": "Remover Todos",
"clearAllTitle": "Remover todos os servidores DNS?",
"clearAllConfirm": "Isso remove todos os servidores DNS da lista. Não pode ser desfeito."
@@ -808,102 +900,6 @@
"ipPool": "Sub-rede do Pool de IP",
"poolSize": "Tamanho do Pool"
}
- },
- "clients": {
- "add": "Adicionar cliente",
- "edit": "Editar cliente",
- "submitAdd": "Adicionar cliente",
- "submitEdit": "Salvar alterações",
- "clientCount": "Número de clientes",
- "bulk": "Adicionar em lote",
- "copyFromInbound": "Copiar clientes do inbound",
- "copyToInbound": "Copiar clientes para",
- "copySelected": "Copiar selecionados",
- "copySource": "Origem",
- "copyEmailPreview": "Prévia do e-mail resultante",
- "copySelectSourceFirst": "Selecione primeiro um inbound de origem.",
- "copyResult": "Resultado da cópia",
- "copyResultSuccess": "Copiado com sucesso",
- "copyResultNone": "Nada a copiar: nenhum cliente selecionado ou a origem está vazia",
- "copyResultErrors": "Erros de cópia",
- "copyFlowLabel": "Flow para os novos clientes (VLESS)",
- "copyFlowHint": "Aplicado a todos os clientes copiados. Deixe em branco para ignorar.",
- "selectAll": "Selecionar tudo",
- "clearAll": "Limpar tudo",
- "method": "Método",
- "first": "Primeiro",
- "last": "Último",
- "ipLog": "Registro de IP",
- "prefix": "Prefixo",
- "postfix": "Sufixo",
- "delayedStart": "Iniciar após o primeiro uso",
- "expireDays": "Duração",
- "days": "Dia(s)",
- "renew": "Renovação automática",
- "renewDesc": "Renovação automática após a expiração. (0 = desativar) (unidade: dia)",
- "title": "Clientes",
- "actions": "Ações",
- "totalGB": "Total enviado/recebido (GB)",
- "expiryTime": "Expiração",
- "addClients": "Adicionar clientes",
- "limitIp": "Limite de IP",
- "password": "Senha",
- "subId": "ID da assinatura",
- "online": "Online",
- "email": "E-mail",
- "comment": "Comentário",
- "traffic": "Tráfego",
- "offline": "Offline",
- "addTitle": "Adicionar cliente",
- "qrCode": "Código QR",
- "moreInformation": "Mais informações",
- "delete": "Excluir",
- "reset": "Redefinir tráfego",
- "editTitle": "Editar cliente",
- "client": "Cliente",
- "enabled": "Habilitado",
- "remaining": "Restante",
- "duration": "Duração",
- "attachedInbounds": "Inbounds associados",
- "selectInbound": "Selecione um ou mais inbounds",
- "noSubId": "Este cliente não tem subId, sem link compartilhável.",
- "noLinks": "Sem links compartilháveis — associe primeiro este cliente a um inbound compatível com o protocolo.",
- "link": "Link",
- "resetNotPossible": "Associe primeiro este cliente a um inbound.",
- "general": "Geral",
- "resetAllTraffics": "Redefinir o tráfego de todos os clientes",
- "resetAllTrafficsTitle": "Redefinir o tráfego de todos os clientes?",
- "resetAllTrafficsContent": "Os contadores de envio/recebimento de cada cliente vão a zero. Cota e expiração não são afetadas. Não é possível desfazer.",
- "empty": "Ainda não há clientes — adicione um para começar.",
- "deleteConfirmTitle": "Excluir o cliente {email}?",
- "deleteConfirmContent": "Isto remove o cliente de cada inbound associado e descarta o registro de tráfego. Não é possível desfazer.",
- "deleteSelected": "Excluir ({count})",
- "bulkDeleteConfirmTitle": "Excluir {count} clientes?",
- "bulkDeleteConfirmContent": "Cada cliente selecionado é removido dos inbounds associados e o registro de tráfego é descartado. Não é possível desfazer.",
- "delDepleted": "Excluir esgotados",
- "delDepletedConfirmTitle": "Excluir clientes esgotados?",
- "delDepletedConfirmContent": "Remove todos os clientes cuja cota de tráfego foi esgotada ou cuja expiração já passou. Não é possível desfazer.",
- "auth": "Auth",
- "hysteriaAuth": "Auth do Hysteria",
- "uuid": "UUID",
- "flow": "Flow",
- "reverseTag": "Reverse tag",
- "reverseTagPlaceholder": "Reverse tag opcional",
- "telegramId": "ID de usuário do Telegram",
- "telegramIdPlaceholder": "ID numérico de usuário do Telegram (0 = nenhum)",
- "created": "Criado",
- "updated": "Atualizado",
- "ipLimit": "Limite de IP",
- "toasts": {
- "deleted": "Cliente excluído",
- "trafficReset": "Tráfego redefinido",
- "allTrafficsReset": "Tráfego de todos os clientes redefinido",
- "bulkDeleted": "{count} clientes excluídos",
- "bulkDeletedMixed": "{ok} excluídos, {failed} com falha",
- "bulkCreated": "{count} clientes criados",
- "bulkCreatedMixed": "{ok} criados, {failed} com falha",
- "delDepleted": "{count} clientes esgotados excluídos"
- }
}
},
"tgbot": {
@@ -1081,6 +1077,5 @@
"chooseClient": "Escolha um cliente para Inbound {{ .Inbound }}",
"chooseInbound": "Escolha um Inbound"
}
- },
- "refresh": "Atualizar"
-}
+ }
+}
\ No newline at end of file
diff --git a/web/translation/ru-RU.json b/web/translation/ru-RU.json
index ebed2683..df4fd229 100644
--- a/web/translation/ru-RU.json
+++ b/web/translation/ru-RU.json
@@ -18,6 +18,8 @@
"search": "Поиск",
"filter": "Фильтр",
"loading": "Загрузка...",
+ "refresh": "Обновить",
+ "clear": "Очистить",
"second": "Секунда",
"minute": "Минута",
"hour": "Час",
@@ -94,13 +96,13 @@
"ultraDark": "Очень темная",
"dashboard": "Дашборд",
"inbounds": "Подключения",
+ "clients": "Клиенты",
"nodes": "Узлы",
"settings": "Настройки",
"xray": "Настройки Xray",
"apiDocs": "Документация API",
"logout": "Выход",
- "link": "Управление",
- "clients": "Клиенты"
+ "link": "Управление"
},
"pages": {
"login": {
@@ -128,9 +130,9 @@
"stopXray": "Остановить",
"restartXray": "Перезапустить",
"xraySwitch": "Выбор версии",
+ "xrayUpdates": "Обновления Xray",
"xraySwitchClick": "Выберите нужную версию",
"xraySwitchClickDesk": "Важно: старые версии могут не поддерживать текущие настройки",
- "xrayUpdates": "Обновления Xray",
"updatePanel": "Обновить панель",
"panelUpdateDesc": "Это обновит 3X-UI до последнего релиза и перезапустит сервис панели.",
"currentPanelVersion": "Текущая версия панели",
@@ -248,6 +250,12 @@
"node": "Узел",
"deployTo": "Развернуть на",
"localPanel": "Локальная панель",
+ "portFallback": {
+ "title": "Резервные входящие",
+ "help": "Выберите входящие, которые должны принимать трафик, не соответствующий этому входящему VLESS-TLS. Каждый дочерний элемент должен слушать на 127.0.0.1 для приёма перенаправленных соединений.",
+ "child": "Входящий",
+ "path": "Путь"
+ },
"protocol": "Протокол",
"port": "Порт",
"portMap": "Порт-маппинг",
@@ -307,6 +315,32 @@
"IPLimitlogDesc": "Лог IP-адресов (перед включением лога IP-адресов, вы должны очистить лог)",
"IPLimitlogclear": "Очистить лог",
"setDefaultCert": "Установить сертификат панели",
+ "streamTab": "Поток",
+ "securityTab": "Безопасность",
+ "sniffingTab": "Сниффинг",
+ "sniffingMetadataOnly": "Только метаданные",
+ "sniffingRouteOnly": "Только маршрутизация",
+ "sniffingIpsExcluded": "Исключённые IP",
+ "sniffingDomainsExcluded": "Исключённые домены",
+ "decryption": "Расшифрование",
+ "encryption": "Шифрование",
+ "vlessAuthX25519": "Аутентификация X25519",
+ "vlessAuthMlkem768": "Аутентификация ML-KEM-768",
+ "vlessAuthCustom": "Свой",
+ "vlessAuthSelected": "Выбрано: {auth}",
+ "advanced": {
+ "title": "Разделы JSON входящего",
+ "subtitle": "Полный JSON входящего и отдельные редакторы для settings, sniffing и streamSettings.",
+ "all": "Всё",
+ "allHelp": "Полный объект входящего со всеми полями в одном редакторе.",
+ "settings": "Настройки",
+ "settingsHelp": "Обёртка блока settings Xray:",
+ "sniffing": "Сниффинг",
+ "sniffingHelp": "Обёртка блока sniffing Xray:",
+ "stream": "Поток",
+ "streamHelp": "Обёртка блока stream Xray:",
+ "jsonErrorPrefix": "Расширенный JSON"
+ },
"telegramDesc": "Пожалуйста, укажите Chat ID Telegram. (используйте команду '/id' в боте) или ({'@'}userinfobot)",
"subscriptionDesc": "Вы можете найти свою ссылку подписки в разделе 'Подробнее'",
"info": "Информация",
@@ -362,45 +396,103 @@
"requestHeader": "Заголовок запроса",
"responseHeader": "Заголовок ответа"
}
- },
- "portFallback": {
- "title": "Резервные входящие",
- "help": "Выберите входящие, которые должны принимать трафик, не соответствующий этому входящему VLESS-TLS. Каждый дочерний элемент должен слушать на 127.0.0.1 для приёма перенаправленных соединений.",
- "child": "Входящий",
- "path": "Путь"
}
},
- "client": {
+ "clients": {
"add": "Добавить клиента",
- "edit": "Редактировать клиента",
- "submitAdd": "Добавить",
+ "edit": "Изменить клиента",
+ "submitAdd": "Добавить клиента",
"submitEdit": "Сохранить изменения",
"clientCount": "Количество клиентов",
- "bulk": "Добавить несколько",
- "copyFromInbound": "Скопировать клиентов из инбаунда",
+ "bulk": "Массовое добавление",
+ "copyFromInbound": "Скопировать клиентов из входящего",
"copyToInbound": "Скопировать клиентов в",
- "copySelected": "Скопировать выбранных",
+ "copySelected": "Скопировать выбранное",
"copySource": "Источник",
- "copyEmailPreview": "Предпросмотр итоговых email",
- "copySelectSourceFirst": "Сначала выберите источник.",
+ "copyEmailPreview": "Предпросмотр результирующего email",
+ "copySelectSourceFirst": "Сначала выберите исходный входящий.",
"copyResult": "Результат копирования",
- "copyResultSuccess": "Успешно скопировано",
- "copyResultNone": "Нечего копировать: ни одного клиента не выбрано или список источника пуст",
- "copyResultErrors": "Ошибки при копировании",
+ "copyResultSuccess": "Скопировано успешно",
+ "copyResultNone": "Нечего копировать: клиенты не выбраны или источник пуст",
+ "copyResultErrors": "Ошибки копирования",
"copyFlowLabel": "Flow для новых клиентов (VLESS)",
- "copyFlowHint": "Применится ко всем копируемым клиентам. Оставьте пустым, чтобы не задавать.",
- "selectAll": "Выбрать всех",
- "clearAll": "Снять всё",
+ "copyFlowHint": "Применяется ко всем скопированным клиентам. Оставьте пустым, чтобы пропустить.",
+ "selectAll": "Выбрать всё",
+ "clearAll": "Очистить всё",
"method": "Метод",
"first": "Первый",
"last": "Последний",
+ "ipLog": "Журнал IP",
"prefix": "Префикс",
"postfix": "Постфикс",
- "delayedStart": "Начало использования",
+ "delayedStart": "Старт после первого использования",
"expireDays": "Длительность",
- "days": "дней",
+ "days": "Дни",
"renew": "Автопродление",
- "renewDesc": "Автопродление после истечения срока действия. (0 = отключить)(единица: день)"
+ "renewDesc": "Автоматическое продление после окончания. (0 = отключено) (единица: день)",
+ "title": "Клиенты",
+ "actions": "Действия",
+ "totalGB": "Всего отправлено/получено (ГБ)",
+ "expiryTime": "Срок действия",
+ "addClients": "Добавить клиентов",
+ "limitIp": "Лимит IP",
+ "password": "Пароль",
+ "subId": "ID подписки",
+ "online": "В сети",
+ "email": "Email",
+ "comment": "Комментарий",
+ "traffic": "Трафик",
+ "offline": "Не в сети",
+ "addTitle": "Добавить клиента",
+ "qrCode": "QR-код",
+ "moreInformation": "Подробнее",
+ "delete": "Удалить",
+ "reset": "Сбросить трафик",
+ "editTitle": "Изменить клиента",
+ "client": "Клиент",
+ "enabled": "Включён",
+ "remaining": "Остаток",
+ "duration": "Длительность",
+ "attachedInbounds": "Привязанные входящие",
+ "selectInbound": "Выберите один или несколько входящих",
+ "noSubId": "У этого клиента нет subId, ссылка для общего доступа недоступна.",
+ "noLinks": "Нет ссылок для общего доступа — сначала привяжите клиента к входящему с поддерживаемым протоколом.",
+ "link": "Ссылка",
+ "resetNotPossible": "Сначала привяжите этого клиента к входящему.",
+ "general": "Общее",
+ "resetAllTraffics": "Сбросить трафик всех клиентов",
+ "resetAllTrafficsTitle": "Сбросить трафик всех клиентов?",
+ "resetAllTrafficsContent": "Счётчики отправки/приёма всех клиентов сбрасываются в ноль. Квоты и срок действия не затрагиваются. Это действие нельзя отменить.",
+ "empty": "Клиентов пока нет — добавьте первого, чтобы начать.",
+ "deleteConfirmTitle": "Удалить клиента {email}?",
+ "deleteConfirmContent": "Клиент будет удалён из всех привязанных входящих, а его запись трафика будет уничтожена. Это действие нельзя отменить.",
+ "deleteSelected": "Удалить ({count})",
+ "bulkDeleteConfirmTitle": "Удалить {count} клиентов?",
+ "bulkDeleteConfirmContent": "Каждый выбранный клиент удаляется из всех привязанных входящих, его запись трафика уничтожается. Это действие нельзя отменить.",
+ "delDepleted": "Удалить исчерпанных",
+ "delDepletedConfirmTitle": "Удалить исчерпанных клиентов?",
+ "delDepletedConfirmContent": "Удаляются все клиенты, у которых исчерпана квота трафика или истёк срок. Это действие нельзя отменить.",
+ "auth": "Auth",
+ "hysteriaAuth": "Auth для Hysteria",
+ "uuid": "UUID",
+ "flow": "Flow",
+ "reverseTag": "Reverse tag",
+ "reverseTagPlaceholder": "Необязательный Reverse tag",
+ "telegramId": "ID пользователя Telegram",
+ "telegramIdPlaceholder": "Числовой ID пользователя Telegram (0 = нет)",
+ "created": "Создан",
+ "updated": "Обновлён",
+ "ipLimit": "Лимит IP",
+ "toasts": {
+ "deleted": "Клиент удалён",
+ "trafficReset": "Трафик сброшен",
+ "allTrafficsReset": "Трафик всех клиентов сброшен",
+ "bulkDeleted": "Удалено клиентов: {count}",
+ "bulkDeletedMixed": "Удалено: {ok}, не удалось: {failed}",
+ "bulkCreated": "Создано клиентов: {count}",
+ "bulkCreatedMixed": "Создано: {ok}, не удалось: {failed}",
+ "delDepleted": "Удалено исчерпанных клиентов: {count}"
+ }
},
"nodes": {
"title": "Узлы",
@@ -433,6 +525,7 @@
"latency": "Задержка",
"lastHeartbeat": "Последний пинг",
"xrayVersion": "Версия Xray",
+ "panelVersion": "Версия панели",
"actions": "Действия",
"probe": "Проверить сейчас",
"testConnection": "Проверить соединение",
@@ -457,8 +550,7 @@
"test": "Проверить соединение",
"fillRequired": "Имя, адрес, порт и токен API обязательны",
"probeFailed": "Проверка не удалась"
- },
- "panelVersion": "Версия панели"
+ }
},
"settings": {
"title": "Настройки",
@@ -783,9 +875,6 @@
"unexpectIPs": "Неожидаемые IP",
"useSystemHosts": "Использовать системные Hosts",
"useSystemHostsDesc": "Использовать файл hosts из установленной системы",
- "usePreset": "Использовать шаблон",
- "dnsPresetTitle": "Шаблоны DNS",
- "dnsPresetFamily": "Семейный",
"serveStale": "Использовать устаревшие",
"serveStaleDesc": "Возвращать устаревшие результаты из кэша во время обновления в фоне",
"serveExpiredTTL": "TTL устаревших",
@@ -798,6 +887,9 @@
"hostsEmpty": "Host не определены",
"hostsDomain": "Домен (напр. domain:example.com)",
"hostsValues": "IP или домен — введите и нажмите Enter",
+ "usePreset": "Использовать шаблон",
+ "dnsPresetTitle": "Шаблоны DNS",
+ "dnsPresetFamily": "Семейный",
"clearAll": "Удалить все",
"clearAllTitle": "Удалить все DNS-серверы?",
"clearAllConfirm": "Все DNS-серверы будут удалены из списка. Это действие нельзя отменить."
@@ -808,102 +900,6 @@
"ipPool": "Подсеть пула IP",
"poolSize": "Размер пула"
}
- },
- "clients": {
- "add": "Добавить клиента",
- "edit": "Изменить клиента",
- "submitAdd": "Добавить клиента",
- "submitEdit": "Сохранить изменения",
- "clientCount": "Количество клиентов",
- "bulk": "Массовое добавление",
- "copyFromInbound": "Скопировать клиентов из входящего",
- "copyToInbound": "Скопировать клиентов в",
- "copySelected": "Скопировать выбранное",
- "copySource": "Источник",
- "copyEmailPreview": "Предпросмотр результирующего email",
- "copySelectSourceFirst": "Сначала выберите исходный входящий.",
- "copyResult": "Результат копирования",
- "copyResultSuccess": "Скопировано успешно",
- "copyResultNone": "Нечего копировать: клиенты не выбраны или источник пуст",
- "copyResultErrors": "Ошибки копирования",
- "copyFlowLabel": "Flow для новых клиентов (VLESS)",
- "copyFlowHint": "Применяется ко всем скопированным клиентам. Оставьте пустым, чтобы пропустить.",
- "selectAll": "Выбрать всё",
- "clearAll": "Очистить всё",
- "method": "Метод",
- "first": "Первый",
- "last": "Последний",
- "ipLog": "Журнал IP",
- "prefix": "Префикс",
- "postfix": "Постфикс",
- "delayedStart": "Старт после первого использования",
- "expireDays": "Длительность",
- "days": "Дни",
- "renew": "Автопродление",
- "renewDesc": "Автоматическое продление после окончания. (0 = отключено) (единица: день)",
- "title": "Клиенты",
- "actions": "Действия",
- "totalGB": "Всего отправлено/получено (ГБ)",
- "expiryTime": "Срок действия",
- "addClients": "Добавить клиентов",
- "limitIp": "Лимит IP",
- "password": "Пароль",
- "subId": "ID подписки",
- "online": "В сети",
- "email": "Email",
- "comment": "Комментарий",
- "traffic": "Трафик",
- "offline": "Не в сети",
- "addTitle": "Добавить клиента",
- "qrCode": "QR-код",
- "moreInformation": "Подробнее",
- "delete": "Удалить",
- "reset": "Сбросить трафик",
- "editTitle": "Изменить клиента",
- "client": "Клиент",
- "enabled": "Включён",
- "remaining": "Остаток",
- "duration": "Длительность",
- "attachedInbounds": "Привязанные входящие",
- "selectInbound": "Выберите один или несколько входящих",
- "noSubId": "У этого клиента нет subId, ссылка для общего доступа недоступна.",
- "noLinks": "Нет ссылок для общего доступа — сначала привяжите клиента к входящему с поддерживаемым протоколом.",
- "link": "Ссылка",
- "resetNotPossible": "Сначала привяжите этого клиента к входящему.",
- "general": "Общее",
- "resetAllTraffics": "Сбросить трафик всех клиентов",
- "resetAllTrafficsTitle": "Сбросить трафик всех клиентов?",
- "resetAllTrafficsContent": "Счётчики отправки/приёма всех клиентов сбрасываются в ноль. Квоты и срок действия не затрагиваются. Это действие нельзя отменить.",
- "empty": "Клиентов пока нет — добавьте первого, чтобы начать.",
- "deleteConfirmTitle": "Удалить клиента {email}?",
- "deleteConfirmContent": "Клиент будет удалён из всех привязанных входящих, а его запись трафика будет уничтожена. Это действие нельзя отменить.",
- "deleteSelected": "Удалить ({count})",
- "bulkDeleteConfirmTitle": "Удалить {count} клиентов?",
- "bulkDeleteConfirmContent": "Каждый выбранный клиент удаляется из всех привязанных входящих, его запись трафика уничтожается. Это действие нельзя отменить.",
- "delDepleted": "Удалить исчерпанных",
- "delDepletedConfirmTitle": "Удалить исчерпанных клиентов?",
- "delDepletedConfirmContent": "Удаляются все клиенты, у которых исчерпана квота трафика или истёк срок. Это действие нельзя отменить.",
- "auth": "Auth",
- "hysteriaAuth": "Auth для Hysteria",
- "uuid": "UUID",
- "flow": "Flow",
- "reverseTag": "Reverse tag",
- "reverseTagPlaceholder": "Необязательный Reverse tag",
- "telegramId": "ID пользователя Telegram",
- "telegramIdPlaceholder": "Числовой ID пользователя Telegram (0 = нет)",
- "created": "Создан",
- "updated": "Обновлён",
- "ipLimit": "Лимит IP",
- "toasts": {
- "deleted": "Клиент удалён",
- "trafficReset": "Трафик сброшен",
- "allTrafficsReset": "Трафик всех клиентов сброшен",
- "bulkDeleted": "Удалено клиентов: {count}",
- "bulkDeletedMixed": "Удалено: {ok}, не удалось: {failed}",
- "bulkCreated": "Создано клиентов: {count}",
- "bulkCreatedMixed": "Создано: {ok}, не удалось: {failed}",
- "delDepleted": "Удалено исчерпанных клиентов: {count}"
- }
}
},
"tgbot": {
@@ -1081,6 +1077,5 @@
"chooseClient": "Выберите клиента для входящего подключения {{ .Inbound }}",
"chooseInbound": "Выберите входящее подключение"
}
- },
- "refresh": "Обновить"
-}
+ }
+}
\ No newline at end of file
diff --git a/web/translation/tr-TR.json b/web/translation/tr-TR.json
index fd9e6ae8..7d42765e 100644
--- a/web/translation/tr-TR.json
+++ b/web/translation/tr-TR.json
@@ -18,6 +18,8 @@
"search": "Ara",
"filter": "Filtrele",
"loading": "Yükleniyor...",
+ "refresh": "Yenile",
+ "clear": "Temizle",
"second": "Saniye",
"minute": "Dakika",
"hour": "Saat",
@@ -94,13 +96,13 @@
"ultraDark": "Ultra Koyu",
"dashboard": "Genel Bakış",
"inbounds": "Gelenler",
+ "clients": "İstemciler",
"nodes": "Düğümler",
"settings": "Panel Ayarları",
"xray": "Xray Yapılandırmaları",
"apiDocs": "API Belgeleri",
"logout": "Çıkış Yap",
- "link": "Yönet",
- "clients": "İstemciler"
+ "link": "Yönet"
},
"pages": {
"login": {
@@ -128,9 +130,9 @@
"stopXray": "Durdur",
"restartXray": "Yeniden Başlat",
"xraySwitch": "Sürüm",
+ "xrayUpdates": "Xray Güncellemeleri",
"xraySwitchClick": "Geçiş yapmak istediğiniz sürümü seçin.",
"xraySwitchClickDesk": "Dikkatli seçin, eski sürümler mevcut yapılandırmalarla uyumlu olmayabilir.",
- "xrayUpdates": "Xray Güncellemeleri",
"updatePanel": "Paneli Güncelle",
"panelUpdateDesc": "Bu, 3X-UI'yi en son sürüme güncelleyecek ve panel servisini yeniden başlatacaktır.",
"currentPanelVersion": "Mevcut panel sürümü",
@@ -180,20 +182,6 @@
"geofilesUpdateDialogDesc": "Bu, tüm dosyaları güncelleyecektir.",
"geofilesUpdateAll": "Tümünü güncelle",
"geofileUpdatePopover": "Geofile başarıyla güncellendi",
- "dontRefresh": "Kurulum devam ediyor, lütfen bu sayfayı yenilemeyin",
- "logs": "Günlükler",
- "config": "Yapılandırma",
- "backup": "Yedek",
- "backupTitle": "Yedekleme & Geri Yükleme",
- "exportDatabase": "Yedekle",
- "exportDatabaseDesc": "Mevcut veritabanınızın yedeğini içeren bir .db dosyasını cihazınıza indirmek için tıklayın.",
- "importDatabase": "Geri Yükle",
- "importDatabaseDesc": "Cihazınızdan bir .db dosyası seçip yükleyerek veritabanınızı yedekten geri yüklemek için tıklayın.",
- "importDatabaseSuccess": "Veritabanı başarıyla içe aktarıldı",
- "importDatabaseError": "Veritabanı içe aktarılırken bir hata oluştu",
- "readDatabaseError": "Veritabanı okunurken bir hata oluştu",
- "getDatabaseError": "Veritabanı alınırken bir hata oluştu",
- "getConfigError": "Yapılandırma dosyası alınırken bir hata oluştu",
"customGeoTitle": "Özel GeoSite / GeoIP",
"customGeoAdd": "Ekle",
"customGeoType": "Tür",
@@ -235,7 +223,21 @@
"customGeoErrNotFound": "Özel geo kaynağı bulunamadı",
"customGeoErrDownload": "İndirme başarısız",
"customGeoErrUpdateAllIncomplete": "Bir veya daha fazla özel geo kaynağı güncellenemedi",
- "customGeoEmpty": "Henüz özel geo kaynağı yok — oluşturmak için Ekle'ye tıklayın"
+ "customGeoEmpty": "Henüz özel geo kaynağı yok — oluşturmak için Ekle'ye tıklayın",
+ "dontRefresh": "Kurulum devam ediyor, lütfen bu sayfayı yenilemeyin",
+ "logs": "Günlükler",
+ "config": "Yapılandırma",
+ "backup": "Yedek",
+ "backupTitle": "Yedekleme & Geri Yükleme",
+ "exportDatabase": "Yedekle",
+ "exportDatabaseDesc": "Mevcut veritabanınızın yedeğini içeren bir .db dosyasını cihazınıza indirmek için tıklayın.",
+ "importDatabase": "Geri Yükle",
+ "importDatabaseDesc": "Cihazınızdan bir .db dosyası seçip yükleyerek veritabanınızı yedekten geri yüklemek için tıklayın.",
+ "importDatabaseSuccess": "Veritabanı başarıyla içe aktarıldı",
+ "importDatabaseError": "Veritabanı içe aktarılırken bir hata oluştu",
+ "readDatabaseError": "Veritabanı okunurken bir hata oluştu",
+ "getDatabaseError": "Veritabanı alınırken bir hata oluştu",
+ "getConfigError": "Yapılandırma dosyası alınırken bir hata oluştu"
},
"inbounds": {
"title": "Gelenler",
@@ -248,6 +250,12 @@
"node": "Düğüm",
"deployTo": "Şuraya dağıt",
"localPanel": "Yerel panel",
+ "portFallback": {
+ "title": "Yedek inbound'lar",
+ "help": "Bu VLESS-TLS inbound'unun eşleşmediği trafiği almasını istediğiniz inbound'ları seçin. Yönlendirilen bağlantıları alabilmek için her alt inbound 127.0.0.1 üzerinde dinlemelidir.",
+ "child": "Inbound",
+ "path": "Yol"
+ },
"protocol": "Protokol",
"port": "Port",
"portMap": "Port Atama",
@@ -307,6 +315,32 @@
"IPLimitlogDesc": "IP geçmiş günlüğü. (devre dışı bırakıldıktan sonra gelini etkinleştirmek için günlüğü temizleyin)",
"IPLimitlogclear": "Günlüğü Temizle",
"setDefaultCert": "Panelden Sertifikayı Ayarla",
+ "streamTab": "Akış",
+ "securityTab": "Güvenlik",
+ "sniffingTab": "Sniffing",
+ "sniffingMetadataOnly": "Yalnızca üst veri",
+ "sniffingRouteOnly": "Yalnızca yönlendirme",
+ "sniffingIpsExcluded": "Hariç tutulan IP'ler",
+ "sniffingDomainsExcluded": "Hariç tutulan alan adları",
+ "decryption": "Şifre çözme",
+ "encryption": "Şifreleme",
+ "vlessAuthX25519": "X25519 kimlik doğrulama",
+ "vlessAuthMlkem768": "ML-KEM-768 kimlik doğrulama",
+ "vlessAuthCustom": "Özel",
+ "vlessAuthSelected": "Seçili: {auth}",
+ "advanced": {
+ "title": "Inbound JSON bölümleri",
+ "subtitle": "Tam inbound JSON'u ve settings, sniffing, streamSettings için odaklanmış düzenleyiciler.",
+ "all": "Tümü",
+ "allHelp": "Tüm alanları tek bir düzenleyicide içeren tam inbound nesnesi.",
+ "settings": "Ayarlar",
+ "settingsHelp": "Xray settings bloğunun sarmalayıcısı:",
+ "sniffing": "Sniffing",
+ "sniffingHelp": "Xray sniffing bloğunun sarmalayıcısı:",
+ "stream": "Akış",
+ "streamHelp": "Xray stream bloğunun sarmalayıcısı:",
+ "jsonErrorPrefix": "Gelişmiş JSON"
+ },
"telegramDesc": "Lütfen Telegram Sohbet Kimliği sağlayın. (botta '/id' komutunu kullanın) veya ({'@'}userinfobot)",
"subscriptionDesc": "Abonelik URL'inizi bulmak için 'Detaylar'a gidin. Ayrıca, aynı adı birden fazla müşteri için kullanabilirsiniz.",
"info": "Bilgi",
@@ -362,45 +396,103 @@
"requestHeader": "İstek Başlığı",
"responseHeader": "Yanıt Başlığı"
}
- },
- "portFallback": {
- "title": "Yedek inbound'lar",
- "help": "Bu VLESS-TLS inbound'unun eşleşmediği trafiği almasını istediğiniz inbound'ları seçin. Yönlendirilen bağlantıları alabilmek için her alt inbound 127.0.0.1 üzerinde dinlemelidir.",
- "child": "Inbound",
- "path": "Yol"
}
},
- "client": {
- "add": "Müşteri Ekle",
- "edit": "Müşteriyi Düzenle",
- "submitAdd": "Müşteri Ekle",
- "submitEdit": "Değişiklikleri Kaydet",
- "clientCount": "Müşteri Sayısı",
- "bulk": "Toplu Ekle",
- "copyFromInbound": "Gelen bağlantıdan istemcileri kopyala",
- "copyToInbound": "İstemcileri şuraya kopyala",
- "copySelected": "Seçilenleri kopyala",
+ "clients": {
+ "add": "İstemci ekle",
+ "edit": "İstemciyi düzenle",
+ "submitAdd": "İstemci ekle",
+ "submitEdit": "Değişiklikleri kaydet",
+ "clientCount": "İstemci sayısı",
+ "bulk": "Toplu ekle",
+ "copyFromInbound": "Inbound'dan istemcileri kopyala",
+ "copyToInbound": "İstemcileri kopyalanacak yer",
+ "copySelected": "Seçileni kopyala",
"copySource": "Kaynak",
- "copyEmailPreview": "Sonuç e-posta önizlemesi",
- "copySelectSourceFirst": "Önce bir kaynak gelen bağlantı seçin.",
- "copyResult": "Kopyalama sonucu",
+ "copyEmailPreview": "Oluşacak e-posta önizlemesi",
+ "copySelectSourceFirst": "Önce bir kaynak inbound seçin.",
+ "copyResult": "Kopya sonucu",
"copyResultSuccess": "Başarıyla kopyalandı",
- "copyResultNone": "Kopyalanacak bir şey yok: istemci seçilmedi veya kaynak boş",
+ "copyResultNone": "Kopyalanacak bir şey yok: istemci seçilmemiş veya kaynak boş",
"copyResultErrors": "Kopyalama hataları",
"copyFlowLabel": "Yeni istemciler için Flow (VLESS)",
- "copyFlowHint": "Kopyalanan tüm istemcilere uygulanır. Boş bırakırsanız atlanır.",
+ "copyFlowHint": "Kopyalanan tüm istemcilere uygulanır. Atlamak için boş bırakın.",
"selectAll": "Tümünü seç",
"clearAll": "Tümünü temizle",
"method": "Yöntem",
"first": "İlk",
"last": "Son",
+ "ipLog": "IP günlüğü",
"prefix": "Önek",
"postfix": "Sonek",
- "delayedStart": "İlk Kullanımdan Sonra Başlat",
+ "delayedStart": "İlk kullanımdan sonra başla",
"expireDays": "Süre",
"days": "Gün",
- "renew": "Otomatik Yenile",
- "renewDesc": "Süresi dolduktan sonra otomatik yenileme. (0 = devre dışı)(birim: gün)"
+ "renew": "Otomatik yenileme",
+ "renewDesc": "Süre dolduktan sonra otomatik yenileme. (0 = devre dışı) (birim: gün)",
+ "title": "İstemciler",
+ "actions": "Eylemler",
+ "totalGB": "Toplam Gönderilen/Alınan (GB)",
+ "expiryTime": "Son kullanma",
+ "addClients": "İstemci ekle",
+ "limitIp": "IP limiti",
+ "password": "Şifre",
+ "subId": "Abonelik ID'si",
+ "online": "Çevrimiçi",
+ "email": "E-posta",
+ "comment": "Yorum",
+ "traffic": "Trafik",
+ "offline": "Çevrimdışı",
+ "addTitle": "İstemci ekle",
+ "qrCode": "QR kodu",
+ "moreInformation": "Daha fazla bilgi",
+ "delete": "Sil",
+ "reset": "Trafiği sıfırla",
+ "editTitle": "İstemciyi düzenle",
+ "client": "İstemci",
+ "enabled": "Etkin",
+ "remaining": "Kalan",
+ "duration": "Süre",
+ "attachedInbounds": "Bağlı inbound'lar",
+ "selectInbound": "Bir veya daha fazla inbound seçin",
+ "noSubId": "Bu istemcinin subId'si yok, paylaşılabilir bağlantı yok.",
+ "noLinks": "Paylaşılabilir bağlantı yok — önce bu istemciyi protokol destekli bir inbound'a bağlayın.",
+ "link": "Bağlantı",
+ "resetNotPossible": "Önce bu istemciyi bir inbound'a bağlayın.",
+ "general": "Genel",
+ "resetAllTraffics": "Tüm istemcilerin trafiğini sıfırla",
+ "resetAllTrafficsTitle": "Tüm istemcilerin trafiği sıfırlansın mı?",
+ "resetAllTrafficsContent": "Her istemcinin yükleme/indirme sayaçları sıfırlanır. Kotalar ve son kullanma tarihleri etkilenmez. Geri alınamaz.",
+ "empty": "Henüz istemci yok — başlamak için bir tane ekleyin.",
+ "deleteConfirmTitle": "{email} istemcisi silinsin mi?",
+ "deleteConfirmContent": "Bu işlem istemciyi bağlı tüm inbound'lardan kaldırır ve trafik kaydını siler. Geri alınamaz.",
+ "deleteSelected": "Sil ({count})",
+ "bulkDeleteConfirmTitle": "{count} istemci silinsin mi?",
+ "bulkDeleteConfirmContent": "Seçili her istemci bağlı tüm inbound'lardan kaldırılır ve trafik kaydı silinir. Geri alınamaz.",
+ "delDepleted": "Tükenmişleri sil",
+ "delDepletedConfirmTitle": "Tükenmiş istemciler silinsin mi?",
+ "delDepletedConfirmContent": "Trafik kotası dolan veya süresi geçen tüm istemciler silinir. Geri alınamaz.",
+ "auth": "Auth",
+ "hysteriaAuth": "Hysteria Auth",
+ "uuid": "UUID",
+ "flow": "Flow",
+ "reverseTag": "Reverse tag",
+ "reverseTagPlaceholder": "İsteğe bağlı Reverse tag",
+ "telegramId": "Telegram kullanıcı ID'si",
+ "telegramIdPlaceholder": "Sayısal Telegram kullanıcı ID'si (0 = yok)",
+ "created": "Oluşturuldu",
+ "updated": "Güncellendi",
+ "ipLimit": "IP limiti",
+ "toasts": {
+ "deleted": "İstemci silindi",
+ "trafficReset": "Trafik sıfırlandı",
+ "allTrafficsReset": "Tüm istemcilerin trafiği sıfırlandı",
+ "bulkDeleted": "{count} istemci silindi",
+ "bulkDeletedMixed": "{ok} silindi, {failed} başarısız",
+ "bulkCreated": "{count} istemci oluşturuldu",
+ "bulkCreatedMixed": "{ok} oluşturuldu, {failed} başarısız",
+ "delDepleted": "{count} tükenmiş istemci silindi"
+ }
},
"nodes": {
"title": "Düğümler",
@@ -433,6 +525,7 @@
"latency": "Gecikme",
"lastHeartbeat": "Son Sinyal",
"xrayVersion": "Xray Sürümü",
+ "panelVersion": "Panel sürümü",
"actions": "İşlemler",
"probe": "Şimdi Test Et",
"testConnection": "Bağlantıyı Test Et",
@@ -457,8 +550,7 @@
"test": "Bağlantıyı test et",
"fillRequired": "Ad, adres, port ve API token gereklidir",
"probeFailed": "Test başarısız"
- },
- "panelVersion": "Panel sürümü"
+ }
},
"settings": {
"title": "Panel Ayarları",
@@ -783,9 +875,6 @@
"unexpectIPs": "Beklenmeyen IP'ler",
"useSystemHosts": "Sistem Hosts'larını Kullan",
"useSystemHostsDesc": "Yüklü bir sistemden hosts dosyasını kullan",
- "usePreset": "Şablon kullan",
- "dnsPresetTitle": "DNS Şablonları",
- "dnsPresetFamily": "Aile",
"serveStale": "Süresi Dolmuş Sonuçları Sun",
"serveStaleDesc": "Arka planda yenilenirken süresi dolmuş önbellek sonuçlarını döndür",
"serveExpiredTTL": "Süresi Dolmuş TTL",
@@ -798,6 +887,9 @@
"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, tüm DNS sunucularını listeden kaldırır. Geri alınamaz."
@@ -808,102 +900,6 @@
"ipPool": "IP Havuzu Alt Ağı",
"poolSize": "Havuz Boyutu"
}
- },
- "clients": {
- "add": "İstemci ekle",
- "edit": "İstemciyi düzenle",
- "submitAdd": "İstemci ekle",
- "submitEdit": "Değişiklikleri kaydet",
- "clientCount": "İstemci sayısı",
- "bulk": "Toplu ekle",
- "copyFromInbound": "Inbound'dan istemcileri kopyala",
- "copyToInbound": "İstemcileri kopyalanacak yer",
- "copySelected": "Seçileni kopyala",
- "copySource": "Kaynak",
- "copyEmailPreview": "Oluşacak e-posta önizlemesi",
- "copySelectSourceFirst": "Önce bir kaynak inbound seçin.",
- "copyResult": "Kopya sonucu",
- "copyResultSuccess": "Başarıyla kopyalandı",
- "copyResultNone": "Kopyalanacak bir şey yok: istemci seçilmemiş veya kaynak boş",
- "copyResultErrors": "Kopyalama hataları",
- "copyFlowLabel": "Yeni istemciler için Flow (VLESS)",
- "copyFlowHint": "Kopyalanan tüm istemcilere uygulanır. Atlamak için boş bırakın.",
- "selectAll": "Tümünü seç",
- "clearAll": "Tümünü temizle",
- "method": "Yöntem",
- "first": "İlk",
- "last": "Son",
- "ipLog": "IP günlüğü",
- "prefix": "Önek",
- "postfix": "Sonek",
- "delayedStart": "İlk kullanımdan sonra başla",
- "expireDays": "Süre",
- "days": "Gün",
- "renew": "Otomatik yenileme",
- "renewDesc": "Süre dolduktan sonra otomatik yenileme. (0 = devre dışı) (birim: gün)",
- "title": "İstemciler",
- "actions": "Eylemler",
- "totalGB": "Toplam Gönderilen/Alınan (GB)",
- "expiryTime": "Son kullanma",
- "addClients": "İstemci ekle",
- "limitIp": "IP limiti",
- "password": "Şifre",
- "subId": "Abonelik ID'si",
- "online": "Çevrimiçi",
- "email": "E-posta",
- "comment": "Yorum",
- "traffic": "Trafik",
- "offline": "Çevrimdışı",
- "addTitle": "İstemci ekle",
- "qrCode": "QR kodu",
- "moreInformation": "Daha fazla bilgi",
- "delete": "Sil",
- "reset": "Trafiği sıfırla",
- "editTitle": "İstemciyi düzenle",
- "client": "İstemci",
- "enabled": "Etkin",
- "remaining": "Kalan",
- "duration": "Süre",
- "attachedInbounds": "Bağlı inbound'lar",
- "selectInbound": "Bir veya daha fazla inbound seçin",
- "noSubId": "Bu istemcinin subId'si yok, paylaşılabilir bağlantı yok.",
- "noLinks": "Paylaşılabilir bağlantı yok — önce bu istemciyi protokol destekli bir inbound'a bağlayın.",
- "link": "Bağlantı",
- "resetNotPossible": "Önce bu istemciyi bir inbound'a bağlayın.",
- "general": "Genel",
- "resetAllTraffics": "Tüm istemcilerin trafiğini sıfırla",
- "resetAllTrafficsTitle": "Tüm istemcilerin trafiği sıfırlansın mı?",
- "resetAllTrafficsContent": "Her istemcinin yükleme/indirme sayaçları sıfırlanır. Kotalar ve son kullanma tarihleri etkilenmez. Geri alınamaz.",
- "empty": "Henüz istemci yok — başlamak için bir tane ekleyin.",
- "deleteConfirmTitle": "{email} istemcisi silinsin mi?",
- "deleteConfirmContent": "Bu işlem istemciyi bağlı tüm inbound'lardan kaldırır ve trafik kaydını siler. Geri alınamaz.",
- "deleteSelected": "Sil ({count})",
- "bulkDeleteConfirmTitle": "{count} istemci silinsin mi?",
- "bulkDeleteConfirmContent": "Seçili her istemci bağlı tüm inbound'lardan kaldırılır ve trafik kaydı silinir. Geri alınamaz.",
- "delDepleted": "Tükenmişleri sil",
- "delDepletedConfirmTitle": "Tükenmiş istemciler silinsin mi?",
- "delDepletedConfirmContent": "Trafik kotası dolan veya süresi geçen tüm istemciler silinir. Geri alınamaz.",
- "auth": "Auth",
- "hysteriaAuth": "Hysteria Auth",
- "uuid": "UUID",
- "flow": "Flow",
- "reverseTag": "Reverse tag",
- "reverseTagPlaceholder": "İsteğe bağlı Reverse tag",
- "telegramId": "Telegram kullanıcı ID'si",
- "telegramIdPlaceholder": "Sayısal Telegram kullanıcı ID'si (0 = yok)",
- "created": "Oluşturuldu",
- "updated": "Güncellendi",
- "ipLimit": "IP limiti",
- "toasts": {
- "deleted": "İstemci silindi",
- "trafficReset": "Trafik sıfırlandı",
- "allTrafficsReset": "Tüm istemcilerin trafiği sıfırlandı",
- "bulkDeleted": "{count} istemci silindi",
- "bulkDeletedMixed": "{ok} silindi, {failed} başarısız",
- "bulkCreated": "{count} istemci oluşturuldu",
- "bulkCreatedMixed": "{ok} oluşturuldu, {failed} başarısız",
- "delDepleted": "{count} tükenmiş istemci silindi"
- }
}
},
"tgbot": {
@@ -1081,6 +1077,5 @@
"chooseClient": "Gelen {{ .Inbound }} için bir Müşteri Seçin",
"chooseInbound": "Bir Gelen Seçin"
}
- },
- "refresh": "Yenile"
-}
+ }
+}
\ No newline at end of file
diff --git a/web/translation/uk-UA.json b/web/translation/uk-UA.json
index 337ca5f0..ee3ed16b 100644
--- a/web/translation/uk-UA.json
+++ b/web/translation/uk-UA.json
@@ -18,6 +18,8 @@
"search": "Пошук",
"filter": "Фільтр",
"loading": "Завантаження...",
+ "refresh": "Оновити",
+ "clear": "Очистити",
"second": "Секунда",
"minute": "Хвилина",
"hour": "Година",
@@ -94,13 +96,13 @@
"ultraDark": "Ультра темна",
"dashboard": "Огляд",
"inbounds": "Вхідні",
+ "clients": "Клієнти",
"nodes": "Вузли",
"settings": "Параметри панелі",
"xray": "Конфігурації Xray",
"apiDocs": "Документація API",
"logout": "Вийти",
- "link": "Керувати",
- "clients": "Клієнти"
+ "link": "Керувати"
},
"pages": {
"login": {
@@ -128,9 +130,9 @@
"stopXray": "Зупинити",
"restartXray": "Перезапустити",
"xraySwitch": "Версія",
+ "xrayUpdates": "Оновлення Xray",
"xraySwitchClick": "Виберіть версію, на яку ви хочете перейти.",
"xraySwitchClickDesk": "Вибирайте уважно, оскільки старіші версії можуть бути несумісними з поточними конфігураціями.",
- "xrayUpdates": "Оновлення Xray",
"updatePanel": "Оновити панель",
"panelUpdateDesc": "Це оновить 3X-UI до останнього релізу та перезапустить сервіс панелі.",
"currentPanelVersion": "Поточна версія панелі",
@@ -180,20 +182,6 @@
"geofilesUpdateDialogDesc": "Це оновить усі геофайли.",
"geofilesUpdateAll": "Оновити все",
"geofileUpdatePopover": "Геофайл успішно оновлено",
- "dontRefresh": "Інсталяція триває, будь ласка, не оновлюйте цю сторінку",
- "logs": "Журнали",
- "config": "Конфігурація",
- "backup": "Резервна копія",
- "backupTitle": "Резервне копіювання та відновлення",
- "exportDatabase": "Резервна копія",
- "exportDatabaseDesc": "Натисніть, щоб завантажити файл .db, що містить резервну копію вашої поточної бази даних на ваш пристрій.",
- "importDatabase": "Відновити",
- "importDatabaseDesc": "Натисніть, щоб вибрати та завантажити файл .db з вашого пристрою для відновлення бази даних з резервної копії.",
- "importDatabaseSuccess": "Базу даних успішно імпортовано",
- "importDatabaseError": "Виникла помилка під час імпорту бази даних",
- "readDatabaseError": "Виникла помилка під час читання бази даних",
- "getDatabaseError": "Виникла помилка під час отримання бази даних",
- "getConfigError": "Виникла помилка під час отримання файлу конфігурації",
"customGeoTitle": "Користувацькі GeoSite / GeoIP",
"customGeoAdd": "Додати",
"customGeoType": "Тип",
@@ -235,7 +223,21 @@
"customGeoErrNotFound": "Джерело geo не знайдено",
"customGeoErrDownload": "Помилка завантаження",
"customGeoErrUpdateAllIncomplete": "Не вдалося оновити один або кілька користувацьких джерел",
- "customGeoEmpty": "Користувацьких джерел geo поки немає — натисніть «Додати», щоб створити"
+ "customGeoEmpty": "Користувацьких джерел geo поки немає — натисніть «Додати», щоб створити",
+ "dontRefresh": "Інсталяція триває, будь ласка, не оновлюйте цю сторінку",
+ "logs": "Журнали",
+ "config": "Конфігурація",
+ "backup": "Резервна копія",
+ "backupTitle": "Резервне копіювання та відновлення",
+ "exportDatabase": "Резервна копія",
+ "exportDatabaseDesc": "Натисніть, щоб завантажити файл .db, що містить резервну копію вашої поточної бази даних на ваш пристрій.",
+ "importDatabase": "Відновити",
+ "importDatabaseDesc": "Натисніть, щоб вибрати та завантажити файл .db з вашого пристрою для відновлення бази даних з резервної копії.",
+ "importDatabaseSuccess": "Базу даних успішно імпортовано",
+ "importDatabaseError": "Виникла помилка під час імпорту бази даних",
+ "readDatabaseError": "Виникла помилка під час читання бази даних",
+ "getDatabaseError": "Виникла помилка під час отримання бази даних",
+ "getConfigError": "Виникла помилка під час отримання файлу конфігурації"
},
"inbounds": {
"title": "Вхідні",
@@ -248,6 +250,12 @@
"node": "Вузол",
"deployTo": "Розгорнути на",
"localPanel": "Локальна панель",
+ "portFallback": {
+ "title": "Резервні вхідні",
+ "help": "Виберіть вхідні, які мають отримувати трафік, що не відповідає цьому вхідному VLESS-TLS. Кожен дочірній вхідний повинен слухати на 127.0.0.1 для приймання переадресованих з'єднань.",
+ "child": "Вхідний",
+ "path": "Шлях"
+ },
"protocol": "Протокол",
"port": "Порт",
"portMap": "Порт-перехід",
@@ -307,6 +315,32 @@
"IPLimitlogDesc": "Журнал історії IP-адрес. (щоб увімкнути вхідну після вимкнення, очистіть журнал)",
"IPLimitlogclear": "Очистити журнал",
"setDefaultCert": "Установити сертифікат з панелі",
+ "streamTab": "Потік",
+ "securityTab": "Безпека",
+ "sniffingTab": "Сніфінг",
+ "sniffingMetadataOnly": "Лише метадані",
+ "sniffingRouteOnly": "Лише маршрутизація",
+ "sniffingIpsExcluded": "Виключені IP",
+ "sniffingDomainsExcluded": "Виключені домени",
+ "decryption": "Розшифрування",
+ "encryption": "Шифрування",
+ "vlessAuthX25519": "Автентифікація X25519",
+ "vlessAuthMlkem768": "Автентифікація ML-KEM-768",
+ "vlessAuthCustom": "Користувацький",
+ "vlessAuthSelected": "Вибрано: {auth}",
+ "advanced": {
+ "title": "Розділи JSON вхідного",
+ "subtitle": "Повний JSON вхідного та окремі редактори для settings, sniffing і streamSettings.",
+ "all": "Усе",
+ "allHelp": "Повний об'єкт вхідного з усіма полями в одному редакторі.",
+ "settings": "Налаштування",
+ "settingsHelp": "Обгортка блоку settings Xray:",
+ "sniffing": "Сніфінг",
+ "sniffingHelp": "Обгортка блоку sniffing Xray:",
+ "stream": "Потік",
+ "streamHelp": "Обгортка блоку stream Xray:",
+ "jsonErrorPrefix": "Розширений JSON"
+ },
"telegramDesc": "Будь ласка, вкажіть ID чату Telegram. (використовуйте команду '/id' у боті) або ({'@'}userinfobot)",
"subscriptionDesc": "Щоб знайти URL-адресу вашої підписки, перейдіть до «Деталі». Крім того, ви можете використовувати одне ім'я для кількох клієнтів.",
"info": "Інформація",
@@ -362,45 +396,103 @@
"requestHeader": "Заголовок запиту",
"responseHeader": "Заголовок відповіді"
}
- },
- "portFallback": {
- "title": "Резервні вхідні",
- "help": "Виберіть вхідні, які мають отримувати трафік, що не відповідає цьому вхідному VLESS-TLS. Кожен дочірній вхідний повинен слухати на 127.0.0.1 для приймання переадресованих з'єднань.",
- "child": "Вхідний",
- "path": "Шлях"
}
},
- "client": {
+ "clients": {
"add": "Додати клієнта",
"edit": "Редагувати клієнта",
"submitAdd": "Додати клієнта",
"submitEdit": "Зберегти зміни",
"clientCount": "Кількість клієнтів",
- "bulk": "Додати групу",
- "copyFromInbound": "Скопіювати клієнтів з інбаунда",
+ "bulk": "Масове додавання",
+ "copyFromInbound": "Скопіювати клієнтів із вхідного",
"copyToInbound": "Скопіювати клієнтів у",
- "copySelected": "Скопіювати вибраних",
+ "copySelected": "Скопіювати вибране",
"copySource": "Джерело",
- "copyEmailPreview": "Попередній перегляд підсумкових email",
- "copySelectSourceFirst": "Спочатку виберіть джерело.",
+ "copyEmailPreview": "Перегляд email, що буде створено",
+ "copySelectSourceFirst": "Спочатку виберіть вхідний-джерело.",
"copyResult": "Результат копіювання",
- "copyResultSuccess": "Успішно скопійовано",
- "copyResultNone": "Нічого копіювати: жодного клієнта не вибрано або список джерела порожній",
- "copyResultErrors": "Помилки під час копіювання",
+ "copyResultSuccess": "Скопійовано успішно",
+ "copyResultNone": "Нічого копіювати: не вибрано клієнтів або джерело порожнє",
+ "copyResultErrors": "Помилки копіювання",
"copyFlowLabel": "Flow для нових клієнтів (VLESS)",
- "copyFlowHint": "Застосується до всіх скопійованих клієнтів. Залиште порожнім, щоб не задавати.",
- "selectAll": "Вибрати всіх",
- "clearAll": "Зняти все",
+ "copyFlowHint": "Застосовується до всіх скопійованих клієнтів. Залишіть порожнім, щоб пропустити.",
+ "selectAll": "Вибрати все",
+ "clearAll": "Очистити все",
"method": "Метод",
"first": "Перший",
"last": "Останній",
+ "ipLog": "Журнал IP",
"prefix": "Префікс",
"postfix": "Постфікс",
- "delayedStart": "Початок використання",
+ "delayedStart": "Запуск після першого використання",
"expireDays": "Тривалість",
- "days": "Дні(в)",
- "renew": "Автоматичне оновлення",
- "renewDesc": "Автоматичне поновлення після закінчення терміну дії. (0 = вимкнено)(одиниця: день)"
+ "days": "Дні",
+ "renew": "Авто-продовження",
+ "renewDesc": "Автоматичне продовження після закінчення. (0 = вимкнено) (одиниця: день)",
+ "title": "Клієнти",
+ "actions": "Дії",
+ "totalGB": "Усього надіслано/отримано (ГБ)",
+ "expiryTime": "Термін дії",
+ "addClients": "Додати клієнтів",
+ "limitIp": "Ліміт IP",
+ "password": "Пароль",
+ "subId": "ID підписки",
+ "online": "У мережі",
+ "email": "Email",
+ "comment": "Коментар",
+ "traffic": "Трафік",
+ "offline": "Не в мережі",
+ "addTitle": "Додати клієнта",
+ "qrCode": "QR-код",
+ "moreInformation": "Докладніше",
+ "delete": "Видалити",
+ "reset": "Скинути трафік",
+ "editTitle": "Редагувати клієнта",
+ "client": "Клієнт",
+ "enabled": "Увімкнено",
+ "remaining": "Залишок",
+ "duration": "Тривалість",
+ "attachedInbounds": "Прив'язані вхідні",
+ "selectInbound": "Виберіть один або кілька вхідних",
+ "noSubId": "У цього клієнта немає subId, посилання для спільного доступу відсутнє.",
+ "noLinks": "Немає посилань для спільного доступу — спочатку прив'яжіть цього клієнта до вхідного з підтримкою протоколу.",
+ "link": "Посилання",
+ "resetNotPossible": "Спочатку прив'яжіть цього клієнта до вхідного.",
+ "general": "Загальне",
+ "resetAllTraffics": "Скинути трафік усіх клієнтів",
+ "resetAllTrafficsTitle": "Скинути трафік усіх клієнтів?",
+ "resetAllTrafficsContent": "Лічильники відправлення/отримання кожного клієнта обнулюються. Квоти й термін дії не змінюються. Цю дію неможливо скасувати.",
+ "empty": "Клієнтів ще немає — додайте першого, щоб почати.",
+ "deleteConfirmTitle": "Видалити клієнта {email}?",
+ "deleteConfirmContent": "Клієнт буде вилучений з усіх прив'язаних вхідних, його запис трафіку буде знищено. Цю дію неможливо скасувати.",
+ "deleteSelected": "Видалити ({count})",
+ "bulkDeleteConfirmTitle": "Видалити {count} клієнтів?",
+ "bulkDeleteConfirmContent": "Кожен вибраний клієнт вилучається з усіх прив'язаних вхідних, його запис трафіку знищується. Цю дію неможливо скасувати.",
+ "delDepleted": "Видалити вичерпаних",
+ "delDepletedConfirmTitle": "Видалити вичерпаних клієнтів?",
+ "delDepletedConfirmContent": "Видаляються всі клієнти, у яких вичерпана квота трафіку або сплив термін. Цю дію неможливо скасувати.",
+ "auth": "Auth",
+ "hysteriaAuth": "Auth для Hysteria",
+ "uuid": "UUID",
+ "flow": "Flow",
+ "reverseTag": "Reverse tag",
+ "reverseTagPlaceholder": "Необов'язковий Reverse tag",
+ "telegramId": "ID користувача Telegram",
+ "telegramIdPlaceholder": "Числовий ID користувача Telegram (0 = немає)",
+ "created": "Створено",
+ "updated": "Оновлено",
+ "ipLimit": "Ліміт IP",
+ "toasts": {
+ "deleted": "Клієнта видалено",
+ "trafficReset": "Трафік скинуто",
+ "allTrafficsReset": "Трафік усіх клієнтів скинуто",
+ "bulkDeleted": "Видалено клієнтів: {count}",
+ "bulkDeletedMixed": "Видалено: {ok}, не вдалось: {failed}",
+ "bulkCreated": "Створено клієнтів: {count}",
+ "bulkCreatedMixed": "Створено: {ok}, не вдалось: {failed}",
+ "delDepleted": "Видалено вичерпаних клієнтів: {count}"
+ }
},
"nodes": {
"title": "Вузли",
@@ -433,6 +525,7 @@
"latency": "Затримка",
"lastHeartbeat": "Останній пінг",
"xrayVersion": "Версія Xray",
+ "panelVersion": "Версія панелі",
"actions": "Дії",
"probe": "Перевірити зараз",
"testConnection": "Перевірити з'єднання",
@@ -457,8 +550,7 @@
"test": "Перевірити з'єднання",
"fillRequired": "Назва, адреса, порт та токен API є обов'язковими",
"probeFailed": "Помилка перевірки"
- },
- "panelVersion": "Версія панелі"
+ }
},
"settings": {
"title": "Параметри панелі",
@@ -783,9 +875,6 @@
"unexpectIPs": "Неочікувані IP",
"useSystemHosts": "Використовувати системні Hosts",
"useSystemHostsDesc": "Використовувати файл hosts з встановленої системи",
- "usePreset": "Використати шаблон",
- "dnsPresetTitle": "Шаблони DNS",
- "dnsPresetFamily": "Сімейний",
"serveStale": "Видавати застарілі",
"serveStaleDesc": "Повертати застарілі результати з кешу під час фонового оновлення",
"serveExpiredTTL": "TTL застарілих",
@@ -798,6 +887,9 @@
"hostsEmpty": "Host не визначено",
"hostsDomain": "Домен (напр. domain:example.com)",
"hostsValues": "IP або домен — введіть і натисніть Enter",
+ "usePreset": "Використати шаблон",
+ "dnsPresetTitle": "Шаблони DNS",
+ "dnsPresetFamily": "Сімейний",
"clearAll": "Видалити всі",
"clearAllTitle": "Видалити всі DNS-сервери?",
"clearAllConfirm": "Усі DNS-сервери буде видалено зі списку. Дію не можна скасувати."
@@ -808,102 +900,6 @@
"ipPool": "Підмережа IP-пулу",
"poolSize": "Розмір пулу"
}
- },
- "clients": {
- "add": "Додати клієнта",
- "edit": "Редагувати клієнта",
- "submitAdd": "Додати клієнта",
- "submitEdit": "Зберегти зміни",
- "clientCount": "Кількість клієнтів",
- "bulk": "Масове додавання",
- "copyFromInbound": "Скопіювати клієнтів із вхідного",
- "copyToInbound": "Скопіювати клієнтів у",
- "copySelected": "Скопіювати вибране",
- "copySource": "Джерело",
- "copyEmailPreview": "Перегляд email, що буде створено",
- "copySelectSourceFirst": "Спочатку виберіть вхідний-джерело.",
- "copyResult": "Результат копіювання",
- "copyResultSuccess": "Скопійовано успішно",
- "copyResultNone": "Нічого копіювати: не вибрано клієнтів або джерело порожнє",
- "copyResultErrors": "Помилки копіювання",
- "copyFlowLabel": "Flow для нових клієнтів (VLESS)",
- "copyFlowHint": "Застосовується до всіх скопійованих клієнтів. Залишіть порожнім, щоб пропустити.",
- "selectAll": "Вибрати все",
- "clearAll": "Очистити все",
- "method": "Метод",
- "first": "Перший",
- "last": "Останній",
- "ipLog": "Журнал IP",
- "prefix": "Префікс",
- "postfix": "Постфікс",
- "delayedStart": "Запуск після першого використання",
- "expireDays": "Тривалість",
- "days": "Дні",
- "renew": "Авто-продовження",
- "renewDesc": "Автоматичне продовження після закінчення. (0 = вимкнено) (одиниця: день)",
- "title": "Клієнти",
- "actions": "Дії",
- "totalGB": "Усього надіслано/отримано (ГБ)",
- "expiryTime": "Термін дії",
- "addClients": "Додати клієнтів",
- "limitIp": "Ліміт IP",
- "password": "Пароль",
- "subId": "ID підписки",
- "online": "У мережі",
- "email": "Email",
- "comment": "Коментар",
- "traffic": "Трафік",
- "offline": "Не в мережі",
- "addTitle": "Додати клієнта",
- "qrCode": "QR-код",
- "moreInformation": "Докладніше",
- "delete": "Видалити",
- "reset": "Скинути трафік",
- "editTitle": "Редагувати клієнта",
- "client": "Клієнт",
- "enabled": "Увімкнено",
- "remaining": "Залишок",
- "duration": "Тривалість",
- "attachedInbounds": "Прив'язані вхідні",
- "selectInbound": "Виберіть один або кілька вхідних",
- "noSubId": "У цього клієнта немає subId, посилання для спільного доступу відсутнє.",
- "noLinks": "Немає посилань для спільного доступу — спочатку прив'яжіть цього клієнта до вхідного з підтримкою протоколу.",
- "link": "Посилання",
- "resetNotPossible": "Спочатку прив'яжіть цього клієнта до вхідного.",
- "general": "Загальне",
- "resetAllTraffics": "Скинути трафік усіх клієнтів",
- "resetAllTrafficsTitle": "Скинути трафік усіх клієнтів?",
- "resetAllTrafficsContent": "Лічильники відправлення/отримання кожного клієнта обнулюються. Квоти й термін дії не змінюються. Цю дію неможливо скасувати.",
- "empty": "Клієнтів ще немає — додайте першого, щоб почати.",
- "deleteConfirmTitle": "Видалити клієнта {email}?",
- "deleteConfirmContent": "Клієнт буде вилучений з усіх прив'язаних вхідних, його запис трафіку буде знищено. Цю дію неможливо скасувати.",
- "deleteSelected": "Видалити ({count})",
- "bulkDeleteConfirmTitle": "Видалити {count} клієнтів?",
- "bulkDeleteConfirmContent": "Кожен вибраний клієнт вилучається з усіх прив'язаних вхідних, його запис трафіку знищується. Цю дію неможливо скасувати.",
- "delDepleted": "Видалити вичерпаних",
- "delDepletedConfirmTitle": "Видалити вичерпаних клієнтів?",
- "delDepletedConfirmContent": "Видаляються всі клієнти, у яких вичерпана квота трафіку або сплив термін. Цю дію неможливо скасувати.",
- "auth": "Auth",
- "hysteriaAuth": "Auth для Hysteria",
- "uuid": "UUID",
- "flow": "Flow",
- "reverseTag": "Reverse tag",
- "reverseTagPlaceholder": "Необов'язковий Reverse tag",
- "telegramId": "ID користувача Telegram",
- "telegramIdPlaceholder": "Числовий ID користувача Telegram (0 = немає)",
- "created": "Створено",
- "updated": "Оновлено",
- "ipLimit": "Ліміт IP",
- "toasts": {
- "deleted": "Клієнта видалено",
- "trafficReset": "Трафік скинуто",
- "allTrafficsReset": "Трафік усіх клієнтів скинуто",
- "bulkDeleted": "Видалено клієнтів: {count}",
- "bulkDeletedMixed": "Видалено: {ok}, не вдалось: {failed}",
- "bulkCreated": "Створено клієнтів: {count}",
- "bulkCreatedMixed": "Створено: {ok}, не вдалось: {failed}",
- "delDepleted": "Видалено вичерпаних клієнтів: {count}"
- }
}
},
"tgbot": {
@@ -1081,6 +1077,5 @@
"chooseClient": "Виберіть клієнта для Вхідного {{ .Inbound }}",
"chooseInbound": "Виберіть Вхідний"
}
- },
- "refresh": "Оновити"
-}
+ }
+}
\ No newline at end of file
diff --git a/web/translation/vi-VN.json b/web/translation/vi-VN.json
index b23f6522..2beaac2d 100644
--- a/web/translation/vi-VN.json
+++ b/web/translation/vi-VN.json
@@ -18,6 +18,8 @@
"search": "Tìm kiếm",
"filter": "Bộ lọc",
"loading": "Đang tải",
+ "refresh": "Làm mới",
+ "clear": "Xóa",
"second": "Giây",
"minute": "Phút",
"hour": "Giờ",
@@ -94,13 +96,13 @@
"ultraDark": "Siêu tối",
"dashboard": "Trạng thái hệ thống",
"inbounds": "Đầu vào khách hàng",
+ "clients": "Khách hàng",
"nodes": "Nút",
"settings": "Cài đặt bảng điều khiển",
- "logout": "Đăng xuất",
"xray": "Cài đặt Xray",
"apiDocs": "Tài liệu API",
- "link": "Quản lý",
- "clients": "Khách hàng"
+ "logout": "Đăng xuất",
+ "link": "Quản lý"
},
"pages": {
"login": {
@@ -128,9 +130,9 @@
"stopXray": "Dừng lại",
"restartXray": "Khởi động lại",
"xraySwitch": "Phiên bản",
+ "xrayUpdates": "Cập nhật Xray",
"xraySwitchClick": "Chọn phiên bản mà bạn muốn chuyển đổi sang.",
"xraySwitchClickDesk": "Hãy lựa chọn thận trọng, vì các phiên bản cũ có thể không tương thích với các cấu hình hiện tại.",
- "xrayUpdates": "Cập nhật Xray",
"updatePanel": "Cập nhật Panel",
"panelUpdateDesc": "Điều này sẽ cập nhật 3X-UI lên bản phát hành mới nhất và khởi động lại dịch vụ panel.",
"currentPanelVersion": "Phiên bản panel hiện tại",
@@ -180,20 +182,6 @@
"geofilesUpdateDialogDesc": "Thao tác này sẽ cập nhật tất cả các tập tin.",
"geofilesUpdateAll": "Cập nhật tất cả",
"geofileUpdatePopover": "Geofile đã được cập nhật thành công",
- "dontRefresh": "Đang tiến hành cài đặt, vui lòng không làm mới trang này.",
- "logs": "Nhật ký",
- "config": "Cấu hình",
- "backup": "Sao lưu",
- "backupTitle": "Sao lưu & Khôi phục",
- "exportDatabase": "Sao lưu",
- "exportDatabaseDesc": "Nhấp để tải xuống tệp .db chứa bản sao lưu cơ sở dữ liệu hiện tại của bạn vào thiết bị.",
- "importDatabase": "Khôi phục",
- "importDatabaseDesc": "Nhấp để chọn và tải lên tệp .db từ thiết bị của bạn để khôi phục cơ sở dữ liệu từ bản sao lưu.",
- "importDatabaseSuccess": "Đã nhập cơ sở dữ liệu thành công",
- "importDatabaseError": "Lỗi xảy ra khi nhập cơ sở dữ liệu",
- "readDatabaseError": "Lỗi xảy ra khi đọc cơ sở dữ liệu",
- "getDatabaseError": "Lỗi xảy ra khi truy xuất cơ sở dữ liệu",
- "getConfigError": "Lỗi xảy ra khi truy xuất tệp cấu hình",
"customGeoTitle": "GeoSite / GeoIP tùy chỉnh",
"customGeoAdd": "Thêm",
"customGeoType": "Loại",
@@ -235,7 +223,21 @@
"customGeoErrNotFound": "Không tìm thấy nguồn geo tùy chỉnh",
"customGeoErrDownload": "Tải xuống thất bại",
"customGeoErrUpdateAllIncomplete": "Một hoặc nhiều nguồn geo tùy chỉnh không cập nhật được",
- "customGeoEmpty": "Chưa có nguồn geo tùy chỉnh nào — nhấp Thêm để tạo"
+ "customGeoEmpty": "Chưa có nguồn geo tùy chỉnh nào — nhấp Thêm để tạo",
+ "dontRefresh": "Đang tiến hành cài đặt, vui lòng không làm mới trang này.",
+ "logs": "Nhật ký",
+ "config": "Cấu hình",
+ "backup": "Sao lưu",
+ "backupTitle": "Sao lưu & Khôi phục",
+ "exportDatabase": "Sao lưu",
+ "exportDatabaseDesc": "Nhấp để tải xuống tệp .db chứa bản sao lưu cơ sở dữ liệu hiện tại của bạn vào thiết bị.",
+ "importDatabase": "Khôi phục",
+ "importDatabaseDesc": "Nhấp để chọn và tải lên tệp .db từ thiết bị của bạn để khôi phục cơ sở dữ liệu từ bản sao lưu.",
+ "importDatabaseSuccess": "Đã nhập cơ sở dữ liệu thành công",
+ "importDatabaseError": "Lỗi xảy ra khi nhập cơ sở dữ liệu",
+ "readDatabaseError": "Lỗi xảy ra khi đọc cơ sở dữ liệu",
+ "getDatabaseError": "Lỗi xảy ra khi truy xuất cơ sở dữ liệu",
+ "getConfigError": "Lỗi xảy ra khi truy xuất tệp cấu hình"
},
"inbounds": {
"title": "Điểm vào (Inbounds)",
@@ -248,6 +250,12 @@
"node": "Nút",
"deployTo": "Triển khai tới",
"localPanel": "Panel cục bộ",
+ "portFallback": {
+ "title": "Inbound dự phòng",
+ "help": "Chọn các inbound sẽ tiếp nhận lưu lượng mà inbound VLESS-TLS này không khớp. Mỗi inbound con phải lắng nghe trên 127.0.0.1 để nhận các kết nối được chuyển tiếp.",
+ "child": "Inbound",
+ "path": "Đường dẫn"
+ },
"protocol": "Giao thức",
"port": "Cổng",
"portMap": "Cổng tạo",
@@ -307,6 +315,32 @@
"IPLimitlogDesc": "Lịch sử đăng nhập IP (trước khi kích hoạt điểm vào sau khi bị vô hiệu hóa bởi giới hạn IP, bạn nên xóa lịch sử).",
"IPLimitlogclear": "Xóa Lịch sử",
"setDefaultCert": "Đặt chứng chỉ từ bảng điều khiển",
+ "streamTab": "Stream",
+ "securityTab": "Bảo mật",
+ "sniffingTab": "Sniffing",
+ "sniffingMetadataOnly": "Chỉ siêu dữ liệu",
+ "sniffingRouteOnly": "Chỉ định tuyến",
+ "sniffingIpsExcluded": "IP bị loại trừ",
+ "sniffingDomainsExcluded": "Tên miền bị loại trừ",
+ "decryption": "Giải mã",
+ "encryption": "Mã hóa",
+ "vlessAuthX25519": "Xác thực X25519",
+ "vlessAuthMlkem768": "Xác thực ML-KEM-768",
+ "vlessAuthCustom": "Tùy chỉnh",
+ "vlessAuthSelected": "Đã chọn: {auth}",
+ "advanced": {
+ "title": "Các phần JSON của inbound",
+ "subtitle": "JSON inbound đầy đủ và các trình chỉnh sửa riêng cho settings, sniffing và streamSettings.",
+ "all": "Tất cả",
+ "allHelp": "Đối tượng inbound đầy đủ với mọi trường trong một trình chỉnh sửa.",
+ "settings": "Cài đặt",
+ "settingsHelp": "Bao đóng khối settings của Xray:",
+ "sniffing": "Sniffing",
+ "sniffingHelp": "Bao đóng khối sniffing của Xray:",
+ "stream": "Stream",
+ "streamHelp": "Bao đóng khối stream của Xray:",
+ "jsonErrorPrefix": "JSON nâng cao"
+ },
"telegramDesc": "Vui lòng cung cấp ID Trò chuyện Telegram. (sử dụng lệnh '/id' trong bot) hoặc ({'@'}userinfobot)",
"subscriptionDesc": "Bạn có thể tìm liên kết gói đăng ký của mình trong Chi tiết, cũng như bạn có thể sử dụng cùng tên cho nhiều cấu hình khác nhau",
"info": "Thông tin",
@@ -362,45 +396,103 @@
"requestHeader": "Header yêu cầu",
"responseHeader": "Header phản hồi"
}
- },
- "portFallback": {
- "title": "Inbound dự phòng",
- "help": "Chọn các inbound sẽ tiếp nhận lưu lượng mà inbound VLESS-TLS này không khớp. Mỗi inbound con phải lắng nghe trên 127.0.0.1 để nhận các kết nối được chuyển tiếp.",
- "child": "Inbound",
- "path": "Đường dẫn"
}
},
- "client": {
- "add": "Thêm người dùng",
- "edit": "Chỉnh sửa người dùng",
- "submitAdd": "Thêm",
+ "clients": {
+ "add": "Thêm khách hàng",
+ "edit": "Chỉnh sửa khách hàng",
+ "submitAdd": "Thêm khách hàng",
"submitEdit": "Lưu thay đổi",
- "clientCount": "Số lượng người dùng",
+ "clientCount": "Số lượng khách hàng",
"bulk": "Thêm hàng loạt",
- "copyFromInbound": "Sao chép người dùng từ Inbound",
- "copyToInbound": "Sao chép người dùng đến",
+ "copyFromInbound": "Sao chép khách hàng từ inbound",
+ "copyToInbound": "Sao chép khách hàng đến",
"copySelected": "Sao chép đã chọn",
"copySource": "Nguồn",
"copyEmailPreview": "Xem trước email kết quả",
- "copySelectSourceFirst": "Vui lòng chọn Inbound nguồn trước.",
+ "copySelectSourceFirst": "Hãy chọn inbound nguồn trước.",
"copyResult": "Kết quả sao chép",
"copyResultSuccess": "Đã sao chép thành công",
- "copyResultNone": "Không có gì để sao chép: chưa chọn người dùng hoặc nguồn trống",
+ "copyResultNone": "Không có gì để sao chép: chưa chọn khách hàng hoặc nguồn rỗng",
"copyResultErrors": "Lỗi sao chép",
- "copyFlowLabel": "Flow cho người dùng mới (VLESS)",
- "copyFlowHint": "Áp dụng cho tất cả người dùng được sao chép. Để trống để bỏ qua.",
+ "copyFlowLabel": "Flow cho khách hàng mới (VLESS)",
+ "copyFlowHint": "Áp dụng cho tất cả khách hàng được sao chép. Để trống để bỏ qua.",
"selectAll": "Chọn tất cả",
- "clearAll": "Bỏ chọn tất cả",
- "method": "Phương pháp",
- "first": "Đầu tiên",
- "last": "Cuối cùng",
+ "clearAll": "Xóa tất cả",
+ "method": "Phương thức",
+ "first": "Đầu",
+ "last": "Cuối",
+ "ipLog": "Nhật ký IP",
"prefix": "Tiền tố",
"postfix": "Hậu tố",
- "delayedStart": "Bắt đầu ở Lần Đầu",
- "expireDays": "Khoảng thời gian",
- "days": "ngày",
+ "delayedStart": "Bắt đầu sau lần dùng đầu",
+ "expireDays": "Thời hạn",
+ "days": "Ngày",
"renew": "Tự động gia hạn",
- "renewDesc": "Tự động gia hạn sau khi hết hạn. (0 = tắt)(đơn vị: ngày)"
+ "renewDesc": "Tự động gia hạn sau khi hết hạn. (0 = tắt) (đơn vị: ngày)",
+ "title": "Khách hàng",
+ "actions": "Hành động",
+ "totalGB": "Tổng gửi/nhận (GB)",
+ "expiryTime": "Hết hạn",
+ "addClients": "Thêm khách hàng",
+ "limitIp": "Giới hạn IP",
+ "password": "Mật khẩu",
+ "subId": "ID đăng ký",
+ "online": "Trực tuyến",
+ "email": "Email",
+ "comment": "Ghi chú",
+ "traffic": "Lưu lượng",
+ "offline": "Ngoại tuyến",
+ "addTitle": "Thêm khách hàng",
+ "qrCode": "Mã QR",
+ "moreInformation": "Thông tin thêm",
+ "delete": "Xóa",
+ "reset": "Đặt lại lưu lượng",
+ "editTitle": "Chỉnh sửa khách hàng",
+ "client": "Khách hàng",
+ "enabled": "Đã bật",
+ "remaining": "Còn lại",
+ "duration": "Thời hạn",
+ "attachedInbounds": "Inbound đã gắn",
+ "selectInbound": "Chọn một hoặc nhiều inbound",
+ "noSubId": "Khách hàng này không có subId, không có liên kết chia sẻ.",
+ "noLinks": "Không có liên kết chia sẻ — hãy gắn khách hàng này vào một inbound có giao thức tương thích trước.",
+ "link": "Liên kết",
+ "resetNotPossible": "Hãy gắn khách hàng này vào một inbound trước.",
+ "general": "Chung",
+ "resetAllTraffics": "Đặt lại lưu lượng của tất cả khách hàng",
+ "resetAllTrafficsTitle": "Đặt lại lưu lượng của tất cả khách hàng?",
+ "resetAllTrafficsContent": "Bộ đếm gửi/nhận của mỗi khách hàng về 0. Hạn mức và thời hạn không bị ảnh hưởng. Không thể hoàn tác.",
+ "empty": "Chưa có khách hàng nào — thêm một để bắt đầu.",
+ "deleteConfirmTitle": "Xóa khách hàng {email}?",
+ "deleteConfirmContent": "Hành động này gỡ khách hàng khỏi mọi inbound đã gắn và xóa bản ghi lưu lượng. Không thể hoàn tác.",
+ "deleteSelected": "Xóa ({count})",
+ "bulkDeleteConfirmTitle": "Xóa {count} khách hàng?",
+ "bulkDeleteConfirmContent": "Mỗi khách hàng được chọn sẽ bị gỡ khỏi tất cả inbound đã gắn và bản ghi lưu lượng cũng bị xóa. Không thể hoàn tác.",
+ "delDepleted": "Xóa hết hạn mức",
+ "delDepletedConfirmTitle": "Xóa khách hàng hết hạn mức?",
+ "delDepletedConfirmContent": "Gỡ tất cả khách hàng đã dùng hết hạn mức lưu lượng hoặc đã quá hạn. Không thể hoàn tác.",
+ "auth": "Auth",
+ "hysteriaAuth": "Auth Hysteria",
+ "uuid": "UUID",
+ "flow": "Flow",
+ "reverseTag": "Reverse tag",
+ "reverseTagPlaceholder": "Reverse tag tùy chọn",
+ "telegramId": "ID người dùng Telegram",
+ "telegramIdPlaceholder": "ID người dùng Telegram dạng số (0 = không có)",
+ "created": "Tạo",
+ "updated": "Cập nhật",
+ "ipLimit": "Giới hạn IP",
+ "toasts": {
+ "deleted": "Đã xóa khách hàng",
+ "trafficReset": "Đã đặt lại lưu lượng",
+ "allTrafficsReset": "Đã đặt lại lưu lượng của tất cả khách hàng",
+ "bulkDeleted": "Đã xóa {count} khách hàng",
+ "bulkDeletedMixed": "Đã xóa {ok}, thất bại {failed}",
+ "bulkCreated": "Đã tạo {count} khách hàng",
+ "bulkCreatedMixed": "Đã tạo {ok}, thất bại {failed}",
+ "delDepleted": "Đã xóa {count} khách hàng hết hạn mức"
+ }
},
"nodes": {
"title": "Nút",
@@ -433,6 +525,7 @@
"latency": "Độ trễ",
"lastHeartbeat": "Heartbeat gần nhất",
"xrayVersion": "Phiên bản Xray",
+ "panelVersion": "Phiên bản panel",
"actions": "Hành động",
"probe": "Kiểm tra ngay",
"testConnection": "Kiểm tra kết nối",
@@ -457,8 +550,7 @@
"test": "Kiểm tra kết nối",
"fillRequired": "Tên, địa chỉ, cổng và token API là bắt buộc",
"probeFailed": "Kiểm tra thất bại"
- },
- "panelVersion": "Phiên bản panel"
+ }
},
"settings": {
"title": "Cài đặt",
@@ -783,9 +875,6 @@
"unexpectIPs": "IP không mong muốn",
"useSystemHosts": "Sử dụng Hosts hệ thống",
"useSystemHostsDesc": "Sử dụng file hosts từ hệ thống đã cài đặt",
- "usePreset": "Dùng mẫu",
- "dnsPresetTitle": "Mẫu DNS",
- "dnsPresetFamily": "Gia đình",
"serveStale": "Phục vụ kết quả hết hạn",
"serveStaleDesc": "Trả về kết quả cache đã hết hạn trong khi làm mới ở chế độ nền",
"serveExpiredTTL": "TTL hết hạn",
@@ -798,6 +887,9 @@
"hostsEmpty": "Chưa có Host nào",
"hostsDomain": "Tên miền (vd. domain:example.com)",
"hostsValues": "IP hoặc tên miền — nhập và nhấn Enter",
+ "usePreset": "Dùng mẫu",
+ "dnsPresetTitle": "Mẫu DNS",
+ "dnsPresetFamily": "Gia đình",
"clearAll": "Xóa tất cả",
"clearAllTitle": "Xóa tất cả máy chủ DNS?",
"clearAllConfirm": "Thao tác này sẽ xóa toàn bộ máy chủ DNS khỏi danh sách. Không thể hoàn tác."
@@ -808,102 +900,6 @@
"ipPool": "Mạng con nhóm IP",
"poolSize": "Kích thước bể bơi"
}
- },
- "clients": {
- "add": "Thêm khách hàng",
- "edit": "Chỉnh sửa khách hàng",
- "submitAdd": "Thêm khách hàng",
- "submitEdit": "Lưu thay đổi",
- "clientCount": "Số lượng khách hàng",
- "bulk": "Thêm hàng loạt",
- "copyFromInbound": "Sao chép khách hàng từ inbound",
- "copyToInbound": "Sao chép khách hàng đến",
- "copySelected": "Sao chép đã chọn",
- "copySource": "Nguồn",
- "copyEmailPreview": "Xem trước email kết quả",
- "copySelectSourceFirst": "Hãy chọn inbound nguồn trước.",
- "copyResult": "Kết quả sao chép",
- "copyResultSuccess": "Đã sao chép thành công",
- "copyResultNone": "Không có gì để sao chép: chưa chọn khách hàng hoặc nguồn rỗng",
- "copyResultErrors": "Lỗi sao chép",
- "copyFlowLabel": "Flow cho khách hàng mới (VLESS)",
- "copyFlowHint": "Áp dụng cho tất cả khách hàng được sao chép. Để trống để bỏ qua.",
- "selectAll": "Chọn tất cả",
- "clearAll": "Xóa tất cả",
- "method": "Phương thức",
- "first": "Đầu",
- "last": "Cuối",
- "ipLog": "Nhật ký IP",
- "prefix": "Tiền tố",
- "postfix": "Hậu tố",
- "delayedStart": "Bắt đầu sau lần dùng đầu",
- "expireDays": "Thời hạn",
- "days": "Ngày",
- "renew": "Tự động gia hạn",
- "renewDesc": "Tự động gia hạn sau khi hết hạn. (0 = tắt) (đơn vị: ngày)",
- "title": "Khách hàng",
- "actions": "Hành động",
- "totalGB": "Tổng gửi/nhận (GB)",
- "expiryTime": "Hết hạn",
- "addClients": "Thêm khách hàng",
- "limitIp": "Giới hạn IP",
- "password": "Mật khẩu",
- "subId": "ID đăng ký",
- "online": "Trực tuyến",
- "email": "Email",
- "comment": "Ghi chú",
- "traffic": "Lưu lượng",
- "offline": "Ngoại tuyến",
- "addTitle": "Thêm khách hàng",
- "qrCode": "Mã QR",
- "moreInformation": "Thông tin thêm",
- "delete": "Xóa",
- "reset": "Đặt lại lưu lượng",
- "editTitle": "Chỉnh sửa khách hàng",
- "client": "Khách hàng",
- "enabled": "Đã bật",
- "remaining": "Còn lại",
- "duration": "Thời hạn",
- "attachedInbounds": "Inbound đã gắn",
- "selectInbound": "Chọn một hoặc nhiều inbound",
- "noSubId": "Khách hàng này không có subId, không có liên kết chia sẻ.",
- "noLinks": "Không có liên kết chia sẻ — hãy gắn khách hàng này vào một inbound có giao thức tương thích trước.",
- "link": "Liên kết",
- "resetNotPossible": "Hãy gắn khách hàng này vào một inbound trước.",
- "general": "Chung",
- "resetAllTraffics": "Đặt lại lưu lượng của tất cả khách hàng",
- "resetAllTrafficsTitle": "Đặt lại lưu lượng của tất cả khách hàng?",
- "resetAllTrafficsContent": "Bộ đếm gửi/nhận của mỗi khách hàng về 0. Hạn mức và thời hạn không bị ảnh hưởng. Không thể hoàn tác.",
- "empty": "Chưa có khách hàng nào — thêm một để bắt đầu.",
- "deleteConfirmTitle": "Xóa khách hàng {email}?",
- "deleteConfirmContent": "Hành động này gỡ khách hàng khỏi mọi inbound đã gắn và xóa bản ghi lưu lượng. Không thể hoàn tác.",
- "deleteSelected": "Xóa ({count})",
- "bulkDeleteConfirmTitle": "Xóa {count} khách hàng?",
- "bulkDeleteConfirmContent": "Mỗi khách hàng được chọn sẽ bị gỡ khỏi tất cả inbound đã gắn và bản ghi lưu lượng cũng bị xóa. Không thể hoàn tác.",
- "delDepleted": "Xóa hết hạn mức",
- "delDepletedConfirmTitle": "Xóa khách hàng hết hạn mức?",
- "delDepletedConfirmContent": "Gỡ tất cả khách hàng đã dùng hết hạn mức lưu lượng hoặc đã quá hạn. Không thể hoàn tác.",
- "auth": "Auth",
- "hysteriaAuth": "Auth Hysteria",
- "uuid": "UUID",
- "flow": "Flow",
- "reverseTag": "Reverse tag",
- "reverseTagPlaceholder": "Reverse tag tùy chọn",
- "telegramId": "ID người dùng Telegram",
- "telegramIdPlaceholder": "ID người dùng Telegram dạng số (0 = không có)",
- "created": "Tạo",
- "updated": "Cập nhật",
- "ipLimit": "Giới hạn IP",
- "toasts": {
- "deleted": "Đã xóa khách hàng",
- "trafficReset": "Đã đặt lại lưu lượng",
- "allTrafficsReset": "Đã đặt lại lưu lượng của tất cả khách hàng",
- "bulkDeleted": "Đã xóa {count} khách hàng",
- "bulkDeletedMixed": "Đã xóa {ok}, thất bại {failed}",
- "bulkCreated": "Đã tạo {count} khách hàng",
- "bulkCreatedMixed": "Đã tạo {ok}, thất bại {failed}",
- "delDepleted": "Đã xóa {count} khách hàng hết hạn mức"
- }
}
},
"tgbot": {
@@ -1081,6 +1077,5 @@
"chooseClient": "Chọn một Khách hàng cho Inbound {{ .Inbound }}",
"chooseInbound": "Chọn một Inbound"
}
- },
- "refresh": "Làm mới"
-}
+ }
+}
\ No newline at end of file
diff --git a/web/translation/zh-CN.json b/web/translation/zh-CN.json
index be80fe9b..92a34fe0 100644
--- a/web/translation/zh-CN.json
+++ b/web/translation/zh-CN.json
@@ -18,6 +18,8 @@
"search": "搜索",
"filter": "筛选",
"loading": "加载中...",
+ "refresh": "刷新",
+ "clear": "清除",
"second": "秒",
"minute": "分钟",
"hour": "小时",
@@ -94,13 +96,13 @@
"ultraDark": "超暗色",
"dashboard": "系统状态",
"inbounds": "入站列表",
+ "clients": "客户端",
"nodes": "节点",
"settings": "面板设置",
"xray": "Xray 设置",
"apiDocs": "API 文档",
"logout": "退出登录",
- "link": "管理",
- "clients": "客户端"
+ "link": "管理"
},
"pages": {
"login": {
@@ -128,9 +130,9 @@
"stopXray": "停止",
"restartXray": "重启",
"xraySwitch": "版本",
+ "xrayUpdates": "Xray 更新",
"xraySwitchClick": "选择你要切换到的版本",
"xraySwitchClickDesk": "请谨慎选择,因为较旧版本可能与当前配置不兼容",
- "xrayUpdates": "Xray 更新",
"updatePanel": "更新面板",
"panelUpdateDesc": "这将把 3X-UI 更新到最新版本并重启面板服务。",
"currentPanelVersion": "当前面板版本",
@@ -180,20 +182,6 @@
"geofilesUpdateDialogDesc": "这将更新所有文件。",
"geofilesUpdateAll": "全部更新",
"geofileUpdatePopover": "地理文件更新成功",
- "dontRefresh": "安装中,请勿刷新此页面",
- "logs": "日志",
- "config": "配置",
- "backup": "备份",
- "backupTitle": "备份和恢复",
- "exportDatabase": "备份",
- "exportDatabaseDesc": "点击下载包含当前数据库备份的 .db 文件到您的设备。",
- "importDatabase": "恢复",
- "importDatabaseDesc": "点击选择并上传设备中的 .db 文件以从备份恢复数据库。",
- "importDatabaseSuccess": "数据库导入成功",
- "importDatabaseError": "导入数据库时出错",
- "readDatabaseError": "读取数据库时出错",
- "getDatabaseError": "检索数据库时出错",
- "getConfigError": "检索配置文件时出错",
"customGeoTitle": "自定义 GeoSite / GeoIP",
"customGeoAdd": "添加",
"customGeoType": "类型",
@@ -235,7 +223,21 @@
"customGeoErrNotFound": "未找到自定义 geo 源",
"customGeoErrDownload": "下载失败",
"customGeoErrUpdateAllIncomplete": "有一个或多个自定义 geo 源更新失败",
- "customGeoEmpty": "暂无自定义 geo 源 — 点击「添加」以创建"
+ "customGeoEmpty": "暂无自定义 geo 源 — 点击「添加」以创建",
+ "dontRefresh": "安装中,请勿刷新此页面",
+ "logs": "日志",
+ "config": "配置",
+ "backup": "备份",
+ "backupTitle": "备份和恢复",
+ "exportDatabase": "备份",
+ "exportDatabaseDesc": "点击下载包含当前数据库备份的 .db 文件到您的设备。",
+ "importDatabase": "恢复",
+ "importDatabaseDesc": "点击选择并上传设备中的 .db 文件以从备份恢复数据库。",
+ "importDatabaseSuccess": "数据库导入成功",
+ "importDatabaseError": "导入数据库时出错",
+ "readDatabaseError": "读取数据库时出错",
+ "getDatabaseError": "检索数据库时出错",
+ "getConfigError": "检索配置文件时出错"
},
"inbounds": {
"title": "入站列表",
@@ -248,6 +250,12 @@
"node": "节点",
"deployTo": "部署到",
"localPanel": "本地面板",
+ "portFallback": {
+ "title": "回退入站",
+ "help": "选择当此 VLESS-TLS 入站不匹配时应接收流量的入站。每个子入站必须监听 127.0.0.1 才能接收转发的连接。",
+ "child": "入站",
+ "path": "路径"
+ },
"protocol": "协议",
"port": "端口",
"portMap": "端口映射",
@@ -307,6 +315,32 @@
"IPLimitlogDesc": "IP 历史日志(要启用被禁用的入站流量,请清除日志)",
"IPLimitlogclear": "清除日志",
"setDefaultCert": "从面板设置证书",
+ "streamTab": "流",
+ "securityTab": "安全",
+ "sniffingTab": "嗅探",
+ "sniffingMetadataOnly": "仅元数据",
+ "sniffingRouteOnly": "仅路由",
+ "sniffingIpsExcluded": "排除的 IP",
+ "sniffingDomainsExcluded": "排除的域名",
+ "decryption": "解密",
+ "encryption": "加密",
+ "vlessAuthX25519": "X25519 认证",
+ "vlessAuthMlkem768": "ML-KEM-768 认证",
+ "vlessAuthCustom": "自定义",
+ "vlessAuthSelected": "已选择:{auth}",
+ "advanced": {
+ "title": "入站 JSON 部分",
+ "subtitle": "完整入站 JSON 以及针对 settings、sniffing 和 streamSettings 的专用编辑器。",
+ "all": "全部",
+ "allHelp": "在单个编辑器中编辑包含所有字段的完整入站对象。",
+ "settings": "设置",
+ "settingsHelp": "Xray settings 块包装:",
+ "sniffing": "嗅探",
+ "sniffingHelp": "Xray sniffing 块包装:",
+ "stream": "流",
+ "streamHelp": "Xray stream 块包装:",
+ "jsonErrorPrefix": "高级 JSON"
+ },
"telegramDesc": "请提供Telegram聊天ID。(在机器人中使用'/id'命令)或({'@'}userinfobot",
"subscriptionDesc": "要找到你的订阅 URL,请导航到“详细信息”。此外,你可以为多个客户端使用相同的名称。",
"info": "信息",
@@ -362,45 +396,103 @@
"requestHeader": "请求头",
"responseHeader": "响应头"
}
- },
- "portFallback": {
- "title": "回退入站",
- "help": "选择当此 VLESS-TLS 入站不匹配时应接收流量的入站。每个子入站必须监听 127.0.0.1 才能接收转发的连接。",
- "child": "入站",
- "path": "路径"
}
},
- "client": {
+ "clients": {
"add": "添加客户端",
"edit": "编辑客户端",
"submitAdd": "添加客户端",
- "submitEdit": "保存修改",
+ "submitEdit": "保存更改",
"clientCount": "客户端数量",
- "bulk": "批量创建",
+ "bulk": "批量添加",
"copyFromInbound": "从入站复制客户端",
"copyToInbound": "复制客户端到",
"copySelected": "复制所选",
"copySource": "来源",
- "copyEmailPreview": "最终邮箱预览",
- "copySelectSourceFirst": "请先选择来源入站。",
+ "copyEmailPreview": "生成的邮箱预览",
+ "copySelectSourceFirst": "请先选择一个来源入站。",
"copyResult": "复制结果",
"copyResultSuccess": "复制成功",
- "copyResultNone": "没有可复制的内容:未选择客户端或来源为空",
+ "copyResultNone": "没有内容可复制:未选中客户端或来源为空",
"copyResultErrors": "复制错误",
"copyFlowLabel": "新客户端的 Flow (VLESS)",
- "copyFlowHint": "应用于所有复制的客户端。留空则跳过。",
+ "copyFlowHint": "应用于所有被复制的客户端。留空则跳过。",
"selectAll": "全选",
- "clearAll": "全不选",
- "method": "方法",
- "first": "置顶",
- "last": "置底",
+ "clearAll": "全部清除",
+ "method": "方式",
+ "first": "首个",
+ "last": "末位",
+ "ipLog": "IP 日志",
"prefix": "前缀",
"postfix": "后缀",
"delayedStart": "首次使用后开始",
- "expireDays": "期间",
+ "expireDays": "时长",
"days": "天",
- "renew": "自动续订",
- "renewDesc": "到期后自动续订。(0 = 禁用)(单位: 天)"
+ "renew": "自动续期",
+ "renewDesc": "到期后自动续期。(0 = 禁用) (单位: 天)",
+ "title": "客户端",
+ "actions": "操作",
+ "totalGB": "总上传/下载 (GB)",
+ "expiryTime": "过期时间",
+ "addClients": "添加客户端",
+ "limitIp": "IP 限制",
+ "password": "密码",
+ "subId": "订阅 ID",
+ "online": "在线",
+ "email": "邮箱",
+ "comment": "备注",
+ "traffic": "流量",
+ "offline": "离线",
+ "addTitle": "添加客户端",
+ "qrCode": "二维码",
+ "moreInformation": "更多信息",
+ "delete": "删除",
+ "reset": "重置流量",
+ "editTitle": "编辑客户端",
+ "client": "客户端",
+ "enabled": "已启用",
+ "remaining": "剩余",
+ "duration": "时长",
+ "attachedInbounds": "关联入站",
+ "selectInbound": "选择一个或多个入站",
+ "noSubId": "该客户端没有 subId,无法生成共享链接。",
+ "noLinks": "没有可共享的链接 — 请先将此客户端关联到支持协议的入站。",
+ "link": "链接",
+ "resetNotPossible": "请先将此客户端关联到入站。",
+ "general": "通用",
+ "resetAllTraffics": "重置所有客户端流量",
+ "resetAllTrafficsTitle": "重置所有客户端流量?",
+ "resetAllTrafficsContent": "所有客户端的上下行计数器将归零。配额与过期时间不受影响。该操作不可撤销。",
+ "empty": "尚无客户端 — 添加一个开始使用。",
+ "deleteConfirmTitle": "删除客户端 {email}?",
+ "deleteConfirmContent": "将从所有关联入站中移除该客户端并删除其流量记录。该操作不可撤销。",
+ "deleteSelected": "删除 ({count})",
+ "bulkDeleteConfirmTitle": "删除 {count} 个客户端?",
+ "bulkDeleteConfirmContent": "每个所选客户端都会从关联的入站中被移除,其流量记录也会被删除。该操作不可撤销。",
+ "delDepleted": "删除已耗尽",
+ "delDepletedConfirmTitle": "删除已耗尽的客户端?",
+ "delDepletedConfirmContent": "删除所有流量配额已用尽或已过期的客户端。该操作不可撤销。",
+ "auth": "Auth",
+ "hysteriaAuth": "Hysteria Auth",
+ "uuid": "UUID",
+ "flow": "Flow",
+ "reverseTag": "Reverse tag",
+ "reverseTagPlaceholder": "可选 Reverse tag",
+ "telegramId": "Telegram 用户 ID",
+ "telegramIdPlaceholder": "数字形式的 Telegram 用户 ID (0 = 无)",
+ "created": "创建时间",
+ "updated": "更新时间",
+ "ipLimit": "IP 限制",
+ "toasts": {
+ "deleted": "客户端已删除",
+ "trafficReset": "流量已重置",
+ "allTrafficsReset": "所有客户端流量已重置",
+ "bulkDeleted": "已删除 {count} 个客户端",
+ "bulkDeletedMixed": "已删除 {ok} 个,失败 {failed} 个",
+ "bulkCreated": "已创建 {count} 个客户端",
+ "bulkCreatedMixed": "已创建 {ok} 个,失败 {failed} 个",
+ "delDepleted": "已删除 {count} 个已耗尽的客户端"
+ }
},
"nodes": {
"title": "节点",
@@ -433,6 +525,7 @@
"latency": "延迟",
"lastHeartbeat": "上次心跳",
"xrayVersion": "Xray 版本",
+ "panelVersion": "面板版本",
"actions": "操作",
"probe": "立即探测",
"testConnection": "测试连接",
@@ -457,8 +550,7 @@
"test": "测试连接",
"fillRequired": "名称、地址、端口和 API 令牌为必填项",
"probeFailed": "探测失败"
- },
- "panelVersion": "面板版本"
+ }
},
"settings": {
"title": "面板设置",
@@ -783,9 +875,6 @@
"unexpectIPs": "意外IP",
"useSystemHosts": "使用系统Hosts",
"useSystemHostsDesc": "使用已安装系统的hosts文件",
- "usePreset": "使用模板",
- "dnsPresetTitle": "DNS模板",
- "dnsPresetFamily": "家庭",
"serveStale": "提供过期结果",
"serveStaleDesc": "在后台刷新时返回过期的缓存结果",
"serveExpiredTTL": "过期TTL",
@@ -798,6 +887,9 @@
"hostsEmpty": "未定义任何 Host",
"hostsDomain": "域名 (例如 domain:example.com)",
"hostsValues": "IP 或域名 — 输入后按 Enter",
+ "usePreset": "使用模板",
+ "dnsPresetTitle": "DNS模板",
+ "dnsPresetFamily": "家庭",
"clearAll": "删除全部",
"clearAllTitle": "删除所有 DNS 服务器?",
"clearAllConfirm": "此操作将从列表中删除所有 DNS 服务器,且无法撤销。"
@@ -808,102 +900,6 @@
"ipPool": "IP 池子网",
"poolSize": "池大小"
}
- },
- "clients": {
- "add": "添加客户端",
- "edit": "编辑客户端",
- "submitAdd": "添加客户端",
- "submitEdit": "保存更改",
- "clientCount": "客户端数量",
- "bulk": "批量添加",
- "copyFromInbound": "从入站复制客户端",
- "copyToInbound": "复制客户端到",
- "copySelected": "复制所选",
- "copySource": "来源",
- "copyEmailPreview": "生成的邮箱预览",
- "copySelectSourceFirst": "请先选择一个来源入站。",
- "copyResult": "复制结果",
- "copyResultSuccess": "复制成功",
- "copyResultNone": "没有内容可复制:未选中客户端或来源为空",
- "copyResultErrors": "复制错误",
- "copyFlowLabel": "新客户端的 Flow (VLESS)",
- "copyFlowHint": "应用于所有被复制的客户端。留空则跳过。",
- "selectAll": "全选",
- "clearAll": "全部清除",
- "method": "方式",
- "first": "首个",
- "last": "末位",
- "ipLog": "IP 日志",
- "prefix": "前缀",
- "postfix": "后缀",
- "delayedStart": "首次使用后开始",
- "expireDays": "时长",
- "days": "天",
- "renew": "自动续期",
- "renewDesc": "到期后自动续期。(0 = 禁用) (单位: 天)",
- "title": "客户端",
- "actions": "操作",
- "totalGB": "总上传/下载 (GB)",
- "expiryTime": "过期时间",
- "addClients": "添加客户端",
- "limitIp": "IP 限制",
- "password": "密码",
- "subId": "订阅 ID",
- "online": "在线",
- "email": "邮箱",
- "comment": "备注",
- "traffic": "流量",
- "offline": "离线",
- "addTitle": "添加客户端",
- "qrCode": "二维码",
- "moreInformation": "更多信息",
- "delete": "删除",
- "reset": "重置流量",
- "editTitle": "编辑客户端",
- "client": "客户端",
- "enabled": "已启用",
- "remaining": "剩余",
- "duration": "时长",
- "attachedInbounds": "关联入站",
- "selectInbound": "选择一个或多个入站",
- "noSubId": "该客户端没有 subId,无法生成共享链接。",
- "noLinks": "没有可共享的链接 — 请先将此客户端关联到支持协议的入站。",
- "link": "链接",
- "resetNotPossible": "请先将此客户端关联到入站。",
- "general": "通用",
- "resetAllTraffics": "重置所有客户端流量",
- "resetAllTrafficsTitle": "重置所有客户端流量?",
- "resetAllTrafficsContent": "所有客户端的上下行计数器将归零。配额与过期时间不受影响。该操作不可撤销。",
- "empty": "尚无客户端 — 添加一个开始使用。",
- "deleteConfirmTitle": "删除客户端 {email}?",
- "deleteConfirmContent": "将从所有关联入站中移除该客户端并删除其流量记录。该操作不可撤销。",
- "deleteSelected": "删除 ({count})",
- "bulkDeleteConfirmTitle": "删除 {count} 个客户端?",
- "bulkDeleteConfirmContent": "每个所选客户端都会从关联的入站中被移除,其流量记录也会被删除。该操作不可撤销。",
- "delDepleted": "删除已耗尽",
- "delDepletedConfirmTitle": "删除已耗尽的客户端?",
- "delDepletedConfirmContent": "删除所有流量配额已用尽或已过期的客户端。该操作不可撤销。",
- "auth": "Auth",
- "hysteriaAuth": "Hysteria Auth",
- "uuid": "UUID",
- "flow": "Flow",
- "reverseTag": "Reverse tag",
- "reverseTagPlaceholder": "可选 Reverse tag",
- "telegramId": "Telegram 用户 ID",
- "telegramIdPlaceholder": "数字形式的 Telegram 用户 ID (0 = 无)",
- "created": "创建时间",
- "updated": "更新时间",
- "ipLimit": "IP 限制",
- "toasts": {
- "deleted": "客户端已删除",
- "trafficReset": "流量已重置",
- "allTrafficsReset": "所有客户端流量已重置",
- "bulkDeleted": "已删除 {count} 个客户端",
- "bulkDeletedMixed": "已删除 {ok} 个,失败 {failed} 个",
- "bulkCreated": "已创建 {count} 个客户端",
- "bulkCreatedMixed": "已创建 {ok} 个,失败 {failed} 个",
- "delDepleted": "已删除 {count} 个已耗尽的客户端"
- }
}
},
"tgbot": {
@@ -1081,6 +1077,5 @@
"chooseClient": "为入站 {{ .Inbound }} 选择一个客户",
"chooseInbound": "选择一个入站"
}
- },
- "refresh": "刷新"
-}
+ }
+}
\ No newline at end of file
diff --git a/web/translation/zh-TW.json b/web/translation/zh-TW.json
index fe4beef1..a6ac97b0 100644
--- a/web/translation/zh-TW.json
+++ b/web/translation/zh-TW.json
@@ -18,6 +18,8 @@
"search": "搜尋",
"filter": "篩選",
"loading": "載入中...",
+ "refresh": "重新整理",
+ "clear": "清除",
"second": "秒",
"minute": "分鐘",
"hour": "小時",
@@ -94,13 +96,13 @@
"ultraDark": "超深色",
"dashboard": "系統狀態",
"inbounds": "入站列表",
+ "clients": "客戶端",
"nodes": "節點",
"settings": "面板設定",
"xray": "Xray 設定",
"apiDocs": "API 文件",
"logout": "退出登入",
- "link": "管理",
- "clients": "客戶端"
+ "link": "管理"
},
"pages": {
"login": {
@@ -128,9 +130,9 @@
"stopXray": "停止",
"restartXray": "重啟",
"xraySwitch": "版本",
+ "xrayUpdates": "Xray 更新",
"xraySwitchClick": "選擇你要切換到的版本",
"xraySwitchClickDesk": "請謹慎選擇,因為較舊版本可能與當前配置不相容",
- "xrayUpdates": "Xray 更新",
"updatePanel": "更新面板",
"panelUpdateDesc": "這將把 3X-UI 更新到最新版本並重新啟動面板服務。",
"currentPanelVersion": "目前面板版本",
@@ -180,20 +182,6 @@
"geofilesUpdateDialogDesc": "這將更新所有文件。",
"geofilesUpdateAll": "全部更新",
"geofileUpdatePopover": "地理檔案更新成功",
- "dontRefresh": "安裝中,請勿重新整理此頁面",
- "logs": "日誌",
- "config": "配置",
- "backup": "備份和恢復",
- "backupTitle": "備份和恢復",
- "exportDatabase": "備份",
- "exportDatabaseDesc": "點擊下載包含當前資料庫備份的 .db 文件到您的設備。",
- "importDatabase": "恢復",
- "importDatabaseDesc": "點擊選擇並上傳設備中的 .db 文件以從備份恢復資料庫。",
- "importDatabaseSuccess": "資料庫匯入成功",
- "importDatabaseError": "匯入資料庫時發生錯誤",
- "readDatabaseError": "讀取資料庫時發生錯誤",
- "getDatabaseError": "檢索資料庫時發生錯誤",
- "getConfigError": "檢索設定檔時發生錯誤",
"customGeoTitle": "自訂 GeoSite / GeoIP",
"customGeoAdd": "新增",
"customGeoType": "類型",
@@ -235,7 +223,21 @@
"customGeoErrNotFound": "找不到自訂 geo 來源",
"customGeoErrDownload": "下載失敗",
"customGeoErrUpdateAllIncomplete": "有一個或多個自訂 geo 來源更新失敗",
- "customGeoEmpty": "尚無自訂 geo 來源 — 點擊「新增」以建立"
+ "customGeoEmpty": "尚無自訂 geo 來源 — 點擊「新增」以建立",
+ "dontRefresh": "安裝中,請勿重新整理此頁面",
+ "logs": "日誌",
+ "config": "配置",
+ "backup": "備份和恢復",
+ "backupTitle": "備份和恢復",
+ "exportDatabase": "備份",
+ "exportDatabaseDesc": "點擊下載包含當前資料庫備份的 .db 文件到您的設備。",
+ "importDatabase": "恢復",
+ "importDatabaseDesc": "點擊選擇並上傳設備中的 .db 文件以從備份恢復資料庫。",
+ "importDatabaseSuccess": "資料庫匯入成功",
+ "importDatabaseError": "匯入資料庫時發生錯誤",
+ "readDatabaseError": "讀取資料庫時發生錯誤",
+ "getDatabaseError": "檢索資料庫時發生錯誤",
+ "getConfigError": "檢索設定檔時發生錯誤"
},
"inbounds": {
"title": "入站列表",
@@ -248,6 +250,12 @@
"node": "節點",
"deployTo": "部署到",
"localPanel": "本機面板",
+ "portFallback": {
+ "title": "回退入站",
+ "help": "選擇當此 VLESS-TLS 入站未匹配時應接收流量的入站。每個子入站必須監聽 127.0.0.1 才能接收轉發的連線。",
+ "child": "入站",
+ "path": "路徑"
+ },
"protocol": "協議",
"port": "埠",
"portMap": "埠映射",
@@ -307,6 +315,32 @@
"IPLimitlogDesc": "IP 歷史日誌(要啟用被禁用的入站流量,請清除日誌)",
"IPLimitlogclear": "清除日誌",
"setDefaultCert": "從面板設定證書",
+ "streamTab": "串流",
+ "securityTab": "安全",
+ "sniffingTab": "嗅探",
+ "sniffingMetadataOnly": "僅中繼資料",
+ "sniffingRouteOnly": "僅路由",
+ "sniffingIpsExcluded": "排除的 IP",
+ "sniffingDomainsExcluded": "排除的網域",
+ "decryption": "解密",
+ "encryption": "加密",
+ "vlessAuthX25519": "X25519 認證",
+ "vlessAuthMlkem768": "ML-KEM-768 認證",
+ "vlessAuthCustom": "自訂",
+ "vlessAuthSelected": "已選擇:{auth}",
+ "advanced": {
+ "title": "入站 JSON 部分",
+ "subtitle": "完整入站 JSON 以及針對 settings、sniffing 和 streamSettings 的專用編輯器。",
+ "all": "全部",
+ "allHelp": "在單一編輯器中編輯包含所有欄位的完整入站物件。",
+ "settings": "設定",
+ "settingsHelp": "Xray settings 區塊包裝:",
+ "sniffing": "嗅探",
+ "sniffingHelp": "Xray sniffing 區塊包裝:",
+ "stream": "串流",
+ "streamHelp": "Xray stream 區塊包裝:",
+ "jsonErrorPrefix": "進階 JSON"
+ },
"telegramDesc": "請提供Telegram聊天ID。(在機器人中使用'/id'命令)或({'@'}userinfobot",
"subscriptionDesc": "要找到你的訂閱 URL,請導航到“詳細資訊”。此外,你可以為多個客戶端使用相同的名稱。",
"info": "資訊",
@@ -362,45 +396,103 @@
"requestHeader": "請求頭",
"responseHeader": "響應頭"
}
- },
- "portFallback": {
- "title": "回退入站",
- "help": "選擇當此 VLESS-TLS 入站未匹配時應接收流量的入站。每個子入站必須監聽 127.0.0.1 才能接收轉發的連線。",
- "child": "入站",
- "path": "路徑"
}
},
- "client": {
+ "clients": {
"add": "新增客戶端",
"edit": "編輯客戶端",
"submitAdd": "新增客戶端",
- "submitEdit": "儲存修改",
+ "submitEdit": "儲存變更",
"clientCount": "客戶端數量",
- "bulk": "批量建立",
- "copyFromInbound": "從入站複製用戶端",
- "copyToInbound": "複製用戶端到",
+ "bulk": "批次新增",
+ "copyFromInbound": "從入站複製客戶端",
+ "copyToInbound": "複製客戶端至",
"copySelected": "複製所選",
"copySource": "來源",
- "copyEmailPreview": "最終郵箱預覽",
- "copySelectSourceFirst": "請先選擇來源入站。",
+ "copyEmailPreview": "產生的信箱預覽",
+ "copySelectSourceFirst": "請先選擇一個來源入站。",
"copyResult": "複製結果",
"copyResultSuccess": "複製成功",
- "copyResultNone": "沒有可複製的內容:未選擇用戶端或來源為空",
+ "copyResultNone": "沒有內容可複製:未選取客戶端或來源為空",
"copyResultErrors": "複製錯誤",
- "copyFlowLabel": "新用戶端的 Flow (VLESS)",
- "copyFlowHint": "套用於所有複製的用戶端。留空則略過。",
+ "copyFlowLabel": "新客戶端的 Flow (VLESS)",
+ "copyFlowHint": "套用至所有被複製的客戶端。留空則略過。",
"selectAll": "全選",
- "clearAll": "全不選",
+ "clearAll": "全部清除",
"method": "方法",
- "first": "置頂",
- "last": "置底",
- "prefix": "字首",
- "postfix": "字尾",
+ "first": "首個",
+ "last": "末位",
+ "ipLog": "IP 日誌",
+ "prefix": "前綴",
+ "postfix": "後綴",
"delayedStart": "首次使用後開始",
- "expireDays": "期間",
+ "expireDays": "時長",
"days": "天",
- "renew": "自動續訂",
- "renewDesc": "到期後自動續訂。(0 = 禁用)(單位: 天)"
+ "renew": "自動續期",
+ "renewDesc": "到期後自動續期。(0 = 停用) (單位: 天)",
+ "title": "客戶端",
+ "actions": "操作",
+ "totalGB": "總上傳/下載 (GB)",
+ "expiryTime": "到期時間",
+ "addClients": "新增客戶端",
+ "limitIp": "IP 限制",
+ "password": "密碼",
+ "subId": "訂閱 ID",
+ "online": "上線",
+ "email": "信箱",
+ "comment": "備註",
+ "traffic": "流量",
+ "offline": "離線",
+ "addTitle": "新增客戶端",
+ "qrCode": "QR 碼",
+ "moreInformation": "更多資訊",
+ "delete": "刪除",
+ "reset": "重設流量",
+ "editTitle": "編輯客戶端",
+ "client": "客戶端",
+ "enabled": "已啟用",
+ "remaining": "剩餘",
+ "duration": "時長",
+ "attachedInbounds": "關聯入站",
+ "selectInbound": "選擇一個或多個入站",
+ "noSubId": "此客戶端沒有 subId,無法產生共享連結。",
+ "noLinks": "沒有可共享的連結 — 請先將此客戶端關聯至支援協定的入站。",
+ "link": "連結",
+ "resetNotPossible": "請先將此客戶端關聯至入站。",
+ "general": "通用",
+ "resetAllTraffics": "重設所有客戶端流量",
+ "resetAllTrafficsTitle": "重設所有客戶端流量?",
+ "resetAllTrafficsContent": "所有客戶端的上下行計數器將歸零。配額與到期時間不受影響。此操作無法復原。",
+ "empty": "尚無客戶端 — 新增一個開始使用。",
+ "deleteConfirmTitle": "刪除客戶端 {email}?",
+ "deleteConfirmContent": "將從所有關聯入站中移除該客戶端並刪除其流量紀錄。此操作無法復原。",
+ "deleteSelected": "刪除 ({count})",
+ "bulkDeleteConfirmTitle": "刪除 {count} 個客戶端?",
+ "bulkDeleteConfirmContent": "每個所選客戶端都會從關聯的入站中被移除,其流量紀錄也會被刪除。此操作無法復原。",
+ "delDepleted": "刪除已耗盡",
+ "delDepletedConfirmTitle": "刪除已耗盡的客戶端?",
+ "delDepletedConfirmContent": "刪除所有流量配額已用盡或已過期的客戶端。此操作無法復原。",
+ "auth": "Auth",
+ "hysteriaAuth": "Hysteria Auth",
+ "uuid": "UUID",
+ "flow": "Flow",
+ "reverseTag": "Reverse tag",
+ "reverseTagPlaceholder": "選用 Reverse tag",
+ "telegramId": "Telegram 使用者 ID",
+ "telegramIdPlaceholder": "數字形式的 Telegram 使用者 ID (0 = 無)",
+ "created": "建立時間",
+ "updated": "更新時間",
+ "ipLimit": "IP 限制",
+ "toasts": {
+ "deleted": "客戶端已刪除",
+ "trafficReset": "流量已重設",
+ "allTrafficsReset": "所有客戶端流量已重設",
+ "bulkDeleted": "已刪除 {count} 個客戶端",
+ "bulkDeletedMixed": "已刪除 {ok} 個,失敗 {failed} 個",
+ "bulkCreated": "已建立 {count} 個客戶端",
+ "bulkCreatedMixed": "已建立 {ok} 個,失敗 {failed} 個",
+ "delDepleted": "已刪除 {count} 個已耗盡的客戶端"
+ }
},
"nodes": {
"title": "節點",
@@ -433,6 +525,7 @@
"latency": "延遲",
"lastHeartbeat": "上次心跳",
"xrayVersion": "Xray 版本",
+ "panelVersion": "面板版本",
"actions": "操作",
"probe": "立即探測",
"testConnection": "測試連線",
@@ -457,8 +550,7 @@
"test": "測試連線",
"fillRequired": "名稱、位址、埠與 API 權杖為必填",
"probeFailed": "探測失敗"
- },
- "panelVersion": "面板版本"
+ }
},
"settings": {
"title": "面板設定",
@@ -783,9 +875,6 @@
"unexpectIPs": "意外IP",
"useSystemHosts": "使用系統Hosts",
"useSystemHostsDesc": "使用已安裝系統的hosts檔案",
- "usePreset": "使用範本",
- "dnsPresetTitle": "DNS範本",
- "dnsPresetFamily": "家庭",
"serveStale": "提供過期結果",
"serveStaleDesc": "在背景重新整理時傳回過期的快取結果",
"serveExpiredTTL": "過期TTL",
@@ -798,6 +887,9 @@
"hostsEmpty": "未定義任何 Host",
"hostsDomain": "網域 (例如 domain:example.com)",
"hostsValues": "IP 或網域 — 輸入後按 Enter",
+ "usePreset": "使用範本",
+ "dnsPresetTitle": "DNS範本",
+ "dnsPresetFamily": "家庭",
"clearAll": "全部刪除",
"clearAllTitle": "刪除所有 DNS 伺服器?",
"clearAllConfirm": "此操作將從清單中刪除所有 DNS 伺服器,無法復原。"
@@ -808,102 +900,6 @@
"ipPool": "IP 池子網",
"poolSize": "池大小"
}
- },
- "clients": {
- "add": "新增客戶端",
- "edit": "編輯客戶端",
- "submitAdd": "新增客戶端",
- "submitEdit": "儲存變更",
- "clientCount": "客戶端數量",
- "bulk": "批次新增",
- "copyFromInbound": "從入站複製客戶端",
- "copyToInbound": "複製客戶端至",
- "copySelected": "複製所選",
- "copySource": "來源",
- "copyEmailPreview": "產生的信箱預覽",
- "copySelectSourceFirst": "請先選擇一個來源入站。",
- "copyResult": "複製結果",
- "copyResultSuccess": "複製成功",
- "copyResultNone": "沒有內容可複製:未選取客戶端或來源為空",
- "copyResultErrors": "複製錯誤",
- "copyFlowLabel": "新客戶端的 Flow (VLESS)",
- "copyFlowHint": "套用至所有被複製的客戶端。留空則略過。",
- "selectAll": "全選",
- "clearAll": "全部清除",
- "method": "方法",
- "first": "首個",
- "last": "末位",
- "ipLog": "IP 日誌",
- "prefix": "前綴",
- "postfix": "後綴",
- "delayedStart": "首次使用後開始",
- "expireDays": "時長",
- "days": "天",
- "renew": "自動續期",
- "renewDesc": "到期後自動續期。(0 = 停用) (單位: 天)",
- "title": "客戶端",
- "actions": "操作",
- "totalGB": "總上傳/下載 (GB)",
- "expiryTime": "到期時間",
- "addClients": "新增客戶端",
- "limitIp": "IP 限制",
- "password": "密碼",
- "subId": "訂閱 ID",
- "online": "上線",
- "email": "信箱",
- "comment": "備註",
- "traffic": "流量",
- "offline": "離線",
- "addTitle": "新增客戶端",
- "qrCode": "QR 碼",
- "moreInformation": "更多資訊",
- "delete": "刪除",
- "reset": "重設流量",
- "editTitle": "編輯客戶端",
- "client": "客戶端",
- "enabled": "已啟用",
- "remaining": "剩餘",
- "duration": "時長",
- "attachedInbounds": "關聯入站",
- "selectInbound": "選擇一個或多個入站",
- "noSubId": "此客戶端沒有 subId,無法產生共享連結。",
- "noLinks": "沒有可共享的連結 — 請先將此客戶端關聯至支援協定的入站。",
- "link": "連結",
- "resetNotPossible": "請先將此客戶端關聯至入站。",
- "general": "通用",
- "resetAllTraffics": "重設所有客戶端流量",
- "resetAllTrafficsTitle": "重設所有客戶端流量?",
- "resetAllTrafficsContent": "所有客戶端的上下行計數器將歸零。配額與到期時間不受影響。此操作無法復原。",
- "empty": "尚無客戶端 — 新增一個開始使用。",
- "deleteConfirmTitle": "刪除客戶端 {email}?",
- "deleteConfirmContent": "將從所有關聯入站中移除該客戶端並刪除其流量紀錄。此操作無法復原。",
- "deleteSelected": "刪除 ({count})",
- "bulkDeleteConfirmTitle": "刪除 {count} 個客戶端?",
- "bulkDeleteConfirmContent": "每個所選客戶端都會從關聯的入站中被移除,其流量紀錄也會被刪除。此操作無法復原。",
- "delDepleted": "刪除已耗盡",
- "delDepletedConfirmTitle": "刪除已耗盡的客戶端?",
- "delDepletedConfirmContent": "刪除所有流量配額已用盡或已過期的客戶端。此操作無法復原。",
- "auth": "Auth",
- "hysteriaAuth": "Hysteria Auth",
- "uuid": "UUID",
- "flow": "Flow",
- "reverseTag": "Reverse tag",
- "reverseTagPlaceholder": "選用 Reverse tag",
- "telegramId": "Telegram 使用者 ID",
- "telegramIdPlaceholder": "數字形式的 Telegram 使用者 ID (0 = 無)",
- "created": "建立時間",
- "updated": "更新時間",
- "ipLimit": "IP 限制",
- "toasts": {
- "deleted": "客戶端已刪除",
- "trafficReset": "流量已重設",
- "allTrafficsReset": "所有客戶端流量已重設",
- "bulkDeleted": "已刪除 {count} 個客戶端",
- "bulkDeletedMixed": "已刪除 {ok} 個,失敗 {failed} 個",
- "bulkCreated": "已建立 {count} 個客戶端",
- "bulkCreatedMixed": "已建立 {ok} 個,失敗 {failed} 個",
- "delDepleted": "已刪除 {count} 個已耗盡的客戶端"
- }
}
},
"tgbot": {
@@ -1081,6 +1077,5 @@
"chooseClient": "為入站 {{ .Inbound }} 選擇一個客戶",
"chooseInbound": "選擇一個入站"
}
- },
- "refresh": "重新整理"
-}
+ }
+}
\ No newline at end of file