|
|
@@ -446,6 +446,7 @@
|
|
|
"inboundClientAddSuccess": "Клієнт(и) вхідного підключення додано",
|
|
|
"inboundClientDeleteSuccess": "Клієнта вхідного підключення видалено",
|
|
|
"inboundClientUpdateSuccess": "Клієнта вхідного підключення оновлено",
|
|
|
+ "savedNodeOfflineWillSync": "Збережено локально. Опорний вузол вимкнено або недоступний — зміни синхронізуються після повторного підключення.",
|
|
|
"delDepletedClientsSuccess": "Усі вичерпані клієнти видалені",
|
|
|
"resetAllClientTrafficSuccess": "Весь трафік клієнта скинуто",
|
|
|
"resetAllTrafficSuccess": "Весь трафік скинуто",
|
|
|
@@ -912,6 +913,8 @@
|
|
|
"status": "Статус",
|
|
|
"cpu": "CPU",
|
|
|
"mem": "Пам'ять",
|
|
|
+ "netUp": "Вихідний (KB/s)",
|
|
|
+ "netDown": "Вхідний (KB/s)",
|
|
|
"uptime": "Час роботи",
|
|
|
"latency": "Затримка",
|
|
|
"lastHeartbeat": "Останній пінг",
|
|
|
@@ -953,13 +956,29 @@
|
|
|
"probeFailed": "Помилка перевірки",
|
|
|
"updateStarted": "Оновлення панелі розпочато",
|
|
|
"updateResult": "Оновлення запущено на {ok} вузлах, {failed} не вдалося",
|
|
|
- "updateNoneEligible": "Виберіть принаймні один увімкнений вузол у мережі"
|
|
|
+ "updateNoneEligible": "Виберіть принаймні один увімкнений вузол у мережі",
|
|
|
+ "saveMtls": "Зберегти mTLS вузла"
|
|
|
},
|
|
|
"tlsVerifyMode": "Перевірка TLS",
|
|
|
"tlsVerifyModeHint": "Як панель перевіряє HTTPS-сертифікат вузла. Закріплення або Пропуск — для самопідписаних сертифікатів (лише https-вузли).",
|
|
|
"tlsVerify": "Перевіряти (стандартний CA)",
|
|
|
"tlsPin": "Закріпити сертифікат (SHA-256)",
|
|
|
"tlsSkip": "Пропустити перевірку",
|
|
|
+ "tlsMtls": "Взаємний TLS (клієнтський сертифікат)",
|
|
|
+ "mtlsFormHint": "Цей вузол автентифікує панель за допомогою клієнтського сертифіката. Скопіюйте CA цієї панелі з розділу «mTLS вузла» на вузол, задайте його довірений CA та перезапустіть вузол.",
|
|
|
+ "mtls": {
|
|
|
+ "title": "mTLS вузла",
|
|
|
+ "intro": "Взаємний TLS додає фактор клієнтського сертифіката поверх API-токена для викликів між вузлами. Це необов’язково: залиште порожнім, щоб використовувати лише автентифікацію за токеном.",
|
|
|
+ "copyCa": "Скопіювати CA цієї панелі",
|
|
|
+ "copyCaHint": "Передайте цей CA вузлам, якими керує ця панель, потім встановіть їхній режим перевірки TLS на «Взаємний TLS».",
|
|
|
+ "caCopied": "Сертифікат CA скопійовано в буфер обміну",
|
|
|
+ "caFailed": "Не вдалося отримати сертифікат CA",
|
|
|
+ "trustLabel": "Довірений CA (батьківська панель)",
|
|
|
+ "trustHint": "Якщо ця панель сама є вузлом, вставте сюди CA керуючої панелі, щоб вимагати її клієнтський сертифікат. Перезапустіть панель для застосування.",
|
|
|
+ "trustPlaceholder": "-----BEGIN CERTIFICATE-----",
|
|
|
+ "save": "Зберегти довірений CA",
|
|
|
+ "saved": "Довірений CA збережено — перезапустіть панель для застосування"
|
|
|
+ },
|
|
|
"tlsSkipWarning": "Пропуск перевірки прибирає захист від атак «людина посередині» — токен API можуть перехопити. Краще закріпити сертифікат.",
|
|
|
"pinnedCert": "SHA-256 закріпленого сертифіката",
|
|
|
"pinnedCertHint": "SHA-256 сертифіката вузла у base64 або hex. Натисніть «Отримати», щоб зчитати його з вузла зараз.",
|
|
|
@@ -1210,55 +1229,60 @@
|
|
|
"getOutboundTrafficError": "Помилка отримання вихідного трафіку",
|
|
|
"resetOutboundTrafficError": "Помилка скидання вихідного трафіку"
|
|
|
},
|
|
|
- "emailNotifications": "Сповіщення",
|
|
|
+ "smtpSettings": "Налаштування SMTP",
|
|
|
+ "smtpEnable": "Увімкнути сповіщення електронною поштою",
|
|
|
+ "smtpEnableDesc": "Увімкнути сповіщення електронною поштою через SMTP",
|
|
|
+ "smtpHost": "Хост SMTP",
|
|
|
+ "smtpHostDesc": "Ім'я хоста сервера SMTP (наприклад, smtp.gmail.com)",
|
|
|
+ "smtpPort": "Порт SMTP",
|
|
|
+ "smtpPortDesc": "Порт сервера SMTP (типово: 587)",
|
|
|
+ "smtpUsername": "Ім'я користувача SMTP",
|
|
|
+ "smtpUsernameDesc": "Ім'я користувача для автентифікації SMTP",
|
|
|
+ "smtpPassword": "Пароль SMTP",
|
|
|
+ "smtpPasswordDesc": "Пароль для автентифікації SMTP",
|
|
|
+ "smtpTo": "Отримувачі",
|
|
|
+ "smtpToDesc": "Адреси електронної пошти отримувачів, розділені комами",
|
|
|
"emailSettings": "Електронна пошта",
|
|
|
- "eventCPUHigh": "Високе навантаження на CPU (%)",
|
|
|
+ "emailNotifications": "Сповіщення",
|
|
|
+ "smtpEventBusNotify": "Сповіщення про події електронною поштою",
|
|
|
+ "smtpEventBusNotifyDesc": "Виберіть, які події спричиняють сповіщення електронною поштою",
|
|
|
+ "tgEventBusNotify": "Сповіщення про події в Telegram",
|
|
|
+ "tgEventBusNotifyDesc": "Виберіть, які події спричиняють сповіщення в Telegram",
|
|
|
+ "testSmtp": "Надіслати тестовий лист",
|
|
|
+ "testTgBot": "Надіслати тестове повідомлення",
|
|
|
"eventGroupOutbound": "Вихідні з'єднання",
|
|
|
- "eventGroupSecurity": "Безпека",
|
|
|
- "eventGroupSystem": "Система",
|
|
|
"eventGroupXray": "Ядро Xray",
|
|
|
- "eventLoginAttempt": "Спроба входу",
|
|
|
+ "eventGroupSystem": "Система",
|
|
|
+ "eventGroupSecurity": "Безпека",
|
|
|
+ "eventGroupNode": "Вузли",
|
|
|
"eventOutboundDown": "Недоступне",
|
|
|
"eventOutboundUp": "Доступне",
|
|
|
"eventXrayCrash": "Збій",
|
|
|
+ "eventNodeDown": "Недоступний",
|
|
|
+ "eventNodeUp": "Доступний",
|
|
|
+ "eventCPUHigh": "Високе навантаження на CPU (%)",
|
|
|
"requestFailed": "Запит не вдалося виконати",
|
|
|
- "smtpEnable": "Увімкнути сповіщення електронною поштою",
|
|
|
- "smtpEnableDesc": "Увімкнути сповіщення електронною поштою через SMTP",
|
|
|
"smtpEncryption": "Шифрування",
|
|
|
"smtpEncryptionDesc": "Метод шифрування з'єднання SMTP",
|
|
|
"smtpEncryptionNone": "Немає (відкритий текст)",
|
|
|
"smtpEncryptionStartTLS": "STARTTLS",
|
|
|
"smtpEncryptionTLS": "TLS (неявне)",
|
|
|
- "smtpEventBusNotify": "Сповіщення про події електронною поштою",
|
|
|
- "smtpEventBusNotifyDesc": "Виберіть, які події спричиняють сповіщення електронною поштою",
|
|
|
- "smtpHost": "Хост SMTP",
|
|
|
- "smtpHostDesc": "Ім'я хоста сервера SMTP (наприклад, smtp.gmail.com)",
|
|
|
- "smtpHostNotConfigured": "Хост SMTP не налаштовано",
|
|
|
- "smtpNoRecipients": "Отримувачів не налаштовано",
|
|
|
- "smtpNotInitialized": "SMTP не ініціалізовано",
|
|
|
- "smtpPassword": "Пароль SMTP",
|
|
|
- "smtpPasswordDesc": "Пароль для автентифікації SMTP",
|
|
|
- "smtpPort": "Порт SMTP",
|
|
|
- "smtpPortDesc": "Порт сервера SMTP (типово: 587)",
|
|
|
- "smtpSettings": "Налаштування SMTP",
|
|
|
- "smtpStageAuth": "Автентифікація",
|
|
|
"smtpStageConnect": "З'єднання",
|
|
|
+ "smtpStageAuth": "Автентифікація",
|
|
|
"smtpStageSend": "Надсилання",
|
|
|
"smtpTestSuccess": "Тестовий лист успішно надіслано",
|
|
|
- "smtpTo": "Отримувачі",
|
|
|
- "smtpToDesc": "Адреси електронної пошти отримувачів, розділені комами",
|
|
|
- "smtpUsername": "Ім'я користувача SMTP",
|
|
|
- "smtpUsernameDesc": "Ім'я користувача для автентифікації SMTP",
|
|
|
+ "smtpHostNotConfigured": "Хост SMTP не налаштовано",
|
|
|
+ "smtpNoRecipients": "Отримувачів не налаштовано",
|
|
|
+ "eventLoginAttempt": "Спроба входу",
|
|
|
"telegramTokenConfigured": "Налаштовано; залиште порожнім, щоб зберегти поточний токен.",
|
|
|
"telegramTokenPlaceholder": "Налаштовано — введіть новий токен для заміни",
|
|
|
- "testSmtp": "Надіслати тестовий лист",
|
|
|
- "testTgBot": "Надіслати тестове повідомлення",
|
|
|
+ "smtpPasswordConfigured": "Налаштовано; залиште порожнім, щоб зберегти поточний пароль.",
|
|
|
+ "smtpPasswordPlaceholder": "Налаштовано — введіть новий пароль для заміни",
|
|
|
+ "smtpNotInitialized": "SMTP не ініціалізовано",
|
|
|
"tgBotNotEnabled": "Бот Telegram не увімкнено",
|
|
|
- "tgBotNotRunning": "Бот Telegram не запущено",
|
|
|
- "tgEventBusNotify": "Сповіщення про події в Telegram",
|
|
|
- "tgEventBusNotifyDesc": "Виберіть, які події спричиняють сповіщення в Telegram",
|
|
|
"tgTestFailed": "Тест Telegram не вдався",
|
|
|
"tgTestSuccess": "Тестове повідомлення надіслано в Telegram",
|
|
|
+ "tgBotNotRunning": "Бот Telegram не запущено",
|
|
|
"smtpErrorAuth": "Помилка автентифікації — перевірте ім'я користувача та пароль",
|
|
|
"smtpErrorStarttls": "Сервер вимагає STARTTLS — змініть тип шифрування",
|
|
|
"smtpErrorTls": "Сервер вимагає TLS — змініть тип шифрування",
|
|
|
@@ -1266,12 +1290,7 @@
|
|
|
"smtpErrorTimeout": "Час очікування з'єднання вичерпано — хост недоступний",
|
|
|
"smtpErrorRelay": "Сервер відхиляє надсилання з цієї адреси",
|
|
|
"smtpErrorEof": "З'єднання закрито сервером",
|
|
|
- "smtpErrorUnknown": "Помилка SMTP: {{ .Error }}",
|
|
|
- "eventGroupNode": "Вузли",
|
|
|
- "eventNodeDown": "Недоступний",
|
|
|
- "eventNodeUp": "Доступний",
|
|
|
- "smtpPasswordConfigured": "Налаштовано; залиште порожнім, щоб зберегти поточний пароль.",
|
|
|
- "smtpPasswordPlaceholder": "Налаштовано — введіть новий пароль для заміни"
|
|
|
+ "smtpErrorUnknown": "Помилка SMTP: {{ .Error }}"
|
|
|
},
|
|
|
"xray": {
|
|
|
"title": "Xray конфігурації",
|
|
|
@@ -1319,6 +1338,8 @@
|
|
|
"Inbounds": "Вхідні",
|
|
|
"InboundsDesc": "Прийняття певних клієнтів.",
|
|
|
"Outbounds": "Вихідні",
|
|
|
+ "OutboundSubscriptions": "Підписки вихідних",
|
|
|
+ "OutboundSubscriptionsDesc": "Імпортуйте вихідні з віддалених URL підписок (vmess/vless/trojan/ss/...). Теги залишаються стабільними для використання в балансувальниках і правилах маршрутизації. Оновлення відбувається автоматично.",
|
|
|
"Balancers": "Балансери",
|
|
|
"balancerTagRequired": "Тег обов'язковий",
|
|
|
"balancerSelectorRequired": "Виберіть принаймні один вихідний",
|
|
|
@@ -1496,8 +1517,6 @@
|
|
|
"privateKey": "Приватний ключ",
|
|
|
"load": "Навантаження"
|
|
|
},
|
|
|
- "OutboundSubscriptions": "Підписки вихідних",
|
|
|
- "OutboundSubscriptionsDesc": "Імпортуйте вихідні з віддалених URL підписок (vmess/vless/trojan/ss/...). Теги залишаються стабільними для використання в балансувальниках і правилах маршрутизації. Оновлення відбувається автоматично.",
|
|
|
"outboundSub": {
|
|
|
"manage": "Підписки",
|
|
|
"title": "Підписки вихідних",
|
|
|
@@ -1775,17 +1794,17 @@
|
|
|
"SuccessResetTraffic": "📧 Електронна пошта: {{ .ClientEmail }}\n🏁 Результат: ✅ Успішно",
|
|
|
"FailedResetTraffic": "📧 Електронна пошта: {{ .ClientEmail }}\n🏁 Результат: ❌ Невдача \n\n🛠️ Помилка: [ {{ .ErrorMessage }} ]",
|
|
|
"FinishProcess": "🔚 Процес скидання трафіку завершено для всіх клієнтів.",
|
|
|
- "eventCPUHigh": "Високе навантаження на CPU",
|
|
|
- "eventCPUHighDetail": "CPU: {{ .Detail }}",
|
|
|
- "eventDelayDetail": "Затримка: {{ .Delay }} мс",
|
|
|
- "eventErrorDetail": "Помилка: {{ .Error }}",
|
|
|
- "eventLoginFallback": "Невдала спроба входу з {{ .Source }}",
|
|
|
"eventOutboundDown": "Вихідне з'єднання {{ .Tag }} НЕДОСТУПНЕ",
|
|
|
"eventOutboundUp": "Вихідне з'єднання {{ .Tag }} ДОСТУПНЕ",
|
|
|
+ "eventErrorDetail": "Помилка: {{ .Error }}",
|
|
|
+ "eventDelayDetail": "Затримка: {{ .Delay }} мс",
|
|
|
"eventXrayCrash": "Стався збій Xray",
|
|
|
"eventXrayCrashError": "Помилка: {{ .Error }}",
|
|
|
"eventNodeDown": "Вузол {{ .Name }} НЕДОСТУПНИЙ",
|
|
|
- "eventNodeUp": "Вузол {{ .Name }} ДОСТУПНИЙ"
|
|
|
+ "eventNodeUp": "Вузол {{ .Name }} ДОСТУПНИЙ",
|
|
|
+ "eventCPUHigh": "Високе навантаження на CPU",
|
|
|
+ "eventCPUHighDetail": "CPU: {{ .Detail }}",
|
|
|
+ "eventLoginFallback": "Невдала спроба входу з {{ .Source }}"
|
|
|
},
|
|
|
"buttons": {
|
|
|
"closeKeyboard": "❌ Закрити клавіатуру",
|
|
|
@@ -1857,55 +1876,35 @@
|
|
|
}
|
|
|
},
|
|
|
"email": {
|
|
|
+ "subjectOutboundDown": "Вихідне з'єднання {{ .Tag }} НЕДОСТУПНЕ",
|
|
|
+ "subjectOutboundUp": "Вихідне з'єднання {{ .Tag }} ДОСТУПНЕ",
|
|
|
+ "subjectXrayCrash": "Стався збій Xray",
|
|
|
+ "subjectCPUHigh": "Високе навантаження на CPU",
|
|
|
+ "subjectLoginSuccess": "Успішний вхід",
|
|
|
+ "subjectLoginFailed": "Невдалий вхід",
|
|
|
+ "titleOutboundDown": "Вихідне з'єднання НЕДОСТУПНЕ",
|
|
|
+ "titleOutboundUp": "Вихідне з'єднання ДОСТУПНЕ",
|
|
|
+ "titleXrayCrash": "Стався збій Xray",
|
|
|
+ "titleCPUHigh": "Високе навантаження на CPU",
|
|
|
+ "titleLoginSuccess": "Успішний вхід",
|
|
|
+ "titleLoginFailed": "Невдалий вхід",
|
|
|
+ "labelStatus": "Статус",
|
|
|
+ "labelOutbound": "Вихідне з'єднання",
|
|
|
+ "labelNode": "Вузол",
|
|
|
+ "labelError": "Помилка",
|
|
|
"labelDelay": "Затримка",
|
|
|
"labelDetail": "Деталі",
|
|
|
- "labelError": "Помилка",
|
|
|
+ "labelUsername": "Ім'я користувача",
|
|
|
"labelIP": "IP",
|
|
|
- "labelOutbound": "Вихідне з'єднання",
|
|
|
"labelReason": "Причина",
|
|
|
"labelSource": "Джерело",
|
|
|
- "labelStatus": "Статус",
|
|
|
"labelTime": "Час",
|
|
|
- "labelUsername": "Ім'я користувача",
|
|
|
- "statusBanned": "BANNED",
|
|
|
"statusCrashed": "ЗБІЙ",
|
|
|
- "statusDown": "НЕДОСТУПНО",
|
|
|
- "statusFailed": "НЕВДАЛО",
|
|
|
- "statusFull": "FULL",
|
|
|
- "statusHigh": "ВИСОКЕ",
|
|
|
- "statusOffline": "OFFLINE",
|
|
|
- "statusOnline": "ONLINE",
|
|
|
"statusRunning": "Працює",
|
|
|
+ "statusHigh": "ВИСОКЕ",
|
|
|
"statusSuccess": "УСПІШНО",
|
|
|
- "statusUp": "ДОСТУПНО",
|
|
|
- "statusXrayDown": "Xray DOWN",
|
|
|
- "statusXrayUp": "Xray UP",
|
|
|
- "subjectCPUHigh": "Високе навантаження на CPU",
|
|
|
- "subjectDiskFull": "Disk full",
|
|
|
- "subjectIPBanned": "IP banned: {{ .IP }}",
|
|
|
- "subjectLoginFailed": "Невдалий вхід",
|
|
|
- "subjectLoginSuccess": "Успішний вхід",
|
|
|
- "subjectNodeOffline": "Node {{ .Node }} is OFFLINE",
|
|
|
- "subjectNodeOnline": "Node {{ .Node }} is ONLINE",
|
|
|
- "subjectNodeXrayDown": "Node {{ .Node }} Xray is DOWN",
|
|
|
- "subjectNodeXrayUp": "Node {{ .Node }} Xray is UP",
|
|
|
- "subjectOutboundDown": "Вихідне з'єднання {{ .Tag }} НЕДОСТУПНЕ",
|
|
|
- "subjectOutboundUp": "Вихідне з'єднання {{ .Tag }} ДОСТУПНЕ",
|
|
|
- "subjectXrayCrash": "Стався збій Xray",
|
|
|
- "subjectXrayUp": "Xray is UP",
|
|
|
- "titleCPUHigh": "Високе навантаження на CPU",
|
|
|
- "titleDiskFull": "Disk full",
|
|
|
- "titleIPBanned": "IP banned",
|
|
|
- "titleLoginFailed": "Невдалий вхід",
|
|
|
- "titleLoginSuccess": "Успішний вхід",
|
|
|
- "titleNodeOffline": "Node OFFLINE",
|
|
|
- "titleNodeOnline": "Node ONLINE",
|
|
|
- "titleNodeXrayDown": "Node Xray DOWN",
|
|
|
- "titleNodeXrayUp": "Node Xray UP",
|
|
|
- "titleOutboundDown": "Вихідне з'єднання НЕДОСТУПНЕ",
|
|
|
- "titleOutboundUp": "Вихідне з'єднання ДОСТУПНЕ",
|
|
|
- "titleXrayCrash": "Стався збій Xray",
|
|
|
- "titleXrayUp": "Xray UP",
|
|
|
- "labelNode": "Вузол"
|
|
|
+ "statusFailed": "НЕВДАЛО",
|
|
|
+ "statusDown": "НЕДОСТУПНО",
|
|
|
+ "statusUp": "ДОСТУПНО"
|
|
|
}
|
|
|
}
|