i18n(panel): migrate hardcoded panel strings to en-US and translate all locales

Surface ~400 hardcoded English labels, tooltips, placeholders, dt/divider
text, modal okText/cancelText, and Spin loading from the panel pages
(clients/groups/inbounds/nodes/settings/xray/sub/index) into
web/translation/en-US.json under existing pages.<page>.* namespaces, with
JSX swapped to t(...). Brand and protocol identifiers (TLS, MTU, SNI,
NordVPN, Cloudflare WARP, etc.) stay literal.

Sync all 12 non-English locales (ar-EG, es-ES, fa-IR, id-ID, ja-JP,
pt-BR, ru-RU, tr-TR, uk-UA, vi-VN, zh-CN, zh-TW) to match en-US's
structure and translate the 521 new key paths per locale. Every locale
file now has 1539 lines, mirroring en-US ordering.

Also remove a dead duplicate "info": "Info" key under pages.inbounds
that collided with the new pages.inbounds.info.* object.

Backend: bulk attach/detach errors in web/service/client.go now route
through logger.Warningf (so they appear under /panel/api/server/logs/)
instead of only living on the response payload.
This commit is contained in:
MHSanaei
2026-05-28 18:03:07 +02:00
parent 0829f1ecd4
commit 72b97efa8a
34 changed files with 6391 additions and 1125 deletions
+476 -59
View File
@@ -8,15 +8,22 @@
"save": "Зберегти",
"logout": "Вийти",
"create": "Створити",
"add": "Додати",
"remove": "Видалити",
"update": "Оновити",
"copy": "Копіювати",
"copied": "Скопійовано",
"more": "більше",
"download": "Завантажити",
"remark": "Примітка",
"enable": "Увімкнути",
"protocol": "Протокол",
"search": "Пошук",
"filter": "Фільтр",
"all": "Усі",
"from": "Від",
"to": "До",
"done": "Готово",
"loading": "Завантаження...",
"refresh": "Оновити",
"clear": "Очистити",
@@ -30,7 +37,7 @@
"none": "Немає",
"qrCode": "QR-Код",
"info": "Більше інформації",
"edit": "Редагувати",
"edit": "Змінити",
"delete": "Видалити",
"reset": "Скидання",
"noData": "Немає даних.",
@@ -41,14 +48,14 @@
"transmission": "Протокол передачи",
"host": "Хост",
"path": "Шлях",
"camouflage": "Маскування",
"camouflage": "Обфускація",
"status": "Статус",
"enabled": "Увімкнено",
"disabled": "Вимкнено",
"depleted": "Вичерпано",
"depletingSoon": "Вичерпується",
"offline": "Офлайн",
"online": "Онлайн",
"offline": "Не в мережі",
"online": "У мережі",
"domainName": "Доменне ім`я",
"monitor": "Слухати IP",
"certificate": "Цифровий сертифікат",
@@ -97,8 +104,9 @@
"dashboard": "Огляд",
"inbounds": "Вхідні",
"clients": "Клієнти",
"groups": "Групи",
"nodes": "Вузли",
"settings": "Параметри панелі",
"settings": "Налаштування панелі",
"xray": "Конфігурації Xray",
"apiDocs": "Документація API",
"logout": "Вийти",
@@ -120,16 +128,16 @@
},
"index": {
"title": "Огляд",
"cpu": "ЦП",
"cpu": "CPU",
"logicalProcessors": "Логічні процесори",
"frequency": "Частота",
"swap": "Своп",
"swap": "Swap",
"storage": "Сховище",
"memory": "ОЗП",
"memory": "RAM",
"threads": "Потоки",
"xrayStatus": "Xray",
"stopXray": "Зупинити",
"restartXray": "Перезапустити",
"stopXray": "Стоп",
"restartXray": "Перезапуск",
"xraySwitch": "Версія",
"xrayUpdates": "Оновлення Xray",
"xraySwitchClick": "Виберіть версію, на яку ви хочете перейти.",
@@ -165,8 +173,8 @@
"ipAddresses": "IP-адреси",
"toggleIpVisibility": "Перемкнути видимість IP",
"overallSpeed": "Загальна швидкість",
"upload": "Відправка",
"download": "Завантаження",
"upload": "Завантаження",
"download": "Завантажити",
"totalData": "Загальний обсяг даних",
"sent": "Відправлено",
"received": "Отримано",
@@ -226,7 +234,7 @@
"customGeoErrUpdateAllIncomplete": "Не вдалося оновити один або кілька користувацьких джерел",
"customGeoEmpty": "Користувацьких джерел geo поки немає — натисніть «Додати», щоб створити",
"dontRefresh": "Інсталяція триває, будь ласка, не оновлюйте цю сторінку",
"logs": "Журнали",
"logs": "Логи",
"config": "Конфігурація",
"backup": "Резервна копія",
"backupTitle": "Резервне копіювання та відновлення",
@@ -252,7 +260,7 @@
"deployTo": "Розгорнути на",
"localPanel": "Локальна панель",
"fallbacks": {
"title": "Фолбеки",
"title": "Fallback'и",
"help": "Коли з'єднання на цьому інбаунді не збігається з жодним клієнтом, воно перенаправляється на інший інбаунд. Оберіть дочірній інбаунд нижче — поля маршрутизації (SNI / ALPN / Path / xver) заповняться автоматично з його транспорту; для більшості налаштувань більше нічого змінювати не треба. Кожен дочірній має слухати на 127.0.0.1 з security=none.",
"empty": "Фолбеків поки немає",
"add": "Додати фолбек",
@@ -270,7 +278,7 @@
},
"protocol": "Протокол",
"port": "Порт",
"portMap": "Порт-перехід",
"portMap": "Відображення портів",
"traffic": "Трафік",
"details": "Деталі",
"transportConfig": "Транспорт",
@@ -292,11 +300,29 @@
"delAllClients": "Видалити всіх клієнтів",
"delAllClientsConfirmTitle": "Видалити всіх {count} клієнтів із \"{remark}\"?",
"delAllClientsConfirmContent": "Видаляє всіх клієнтів цього вхідного й скидає їхні записи трафіку. Сам вхідний зберігається. Цю дію не можна скасувати.",
"attachClients": "Прив'язати клієнтів до…",
"addClientsToGroup": "Додати клієнтів до групи…",
"attachClientsTitle": "Прив'язати клієнтів з «{remark}»",
"attachClientsDesc": "Прив'язує тих самих {count} клієнт(ів) (з тим самим UUID/паролем і спільним трафіком) до обраних вхідних. Вони залишаються і на цьому вхідному.",
"attachClientsTargets": "Цільові вхідні",
"attachClientsNoTargets": "Немає інших сумісних вхідних для прив'язки.",
"attachClientsResult": "Прив'язано {attached}, пропущено {skipped}.",
"attachClientsResultMixed": "Прив'язано {attached}, пропущено {skipped}, помилок {errors}.",
"attachClientsSelectLabel": "Клієнти для прив'язки",
"attachClientsSearchPlaceholder": "Пошук email або коментаря",
"attachClientsStatusDisabled": "Вимкнено",
"attachClientsSelectedCount": "Обрано {selected} з {total}",
"detachClients": "Від'єднати клієнтів",
"detachClientsTitle": "Від'єднати клієнтів з «{remark}»",
"detachClientsDesc": "Видаляє обраних клієнт(ів) лише з цього вхідного. Записи клієнтів зберігаються (використовуйте Delete для повного видалення). У джерела всього {count} клієнт(ів).",
"detachClientsResult": "Від'єднано {detached}, пропущено {skipped}.",
"detachClientsResultMixed": "Від'єднано {detached}, пропущено {skipped}, помилок {errors}.",
"detachClientsSelectLabel": "Клієнти для від'єднання",
"exportLinksTitle": "Експортувати посилання вхідних",
"exportSubsTitle": "Експортувати посилання підписок",
"exportAllLinksTitle": "Експортувати всі посилання вхідних",
"exportAllSubsTitle": "Експортувати всі посилання підписок",
"inboundJsonTitle": "JSON вхідних",
"inboundJsonTitle": "JSON вхідного",
"deleteClient": "Видалити клієнта",
"deleteClientContent": "Ви впевнені, що хочете видалити клієнт?",
"resetTrafficContent": "Ви впевнені, що хочете скинути трафік?",
@@ -306,7 +332,7 @@
"destinationPort": "Порт призначення",
"targetAddress": "Цільова адреса",
"monitorDesc": "Залиште порожнім, щоб слухати всі IP-адреси",
"meansNoLimit": "= Необмежено. (одиниця: ГБ)",
"meansNoLimit": "= Без обмежень. (одиниця: ГБ)",
"totalFlow": "Загальна витрата",
"leaveBlankToNeverExpire": "Залиште порожнім, щоб ніколи не закінчувався",
"noRecommendKeepDefault": "Рекомендується зберегти значення за замовчуванням",
@@ -333,7 +359,7 @@
"delDepletedClients": "Видалити вичерпані клієнти",
"delDepletedClientsTitle": "Видалити вичерпані клієнти",
"delDepletedClientsContent": "Ви впевнені, що хочете видалити всі вичерпані клієнти?",
"email": "Електронна пошта",
"email": "Email",
"emailDesc": "Будь ласка, надайте унікальну адресу електронної пошти.",
"IPLimit": "Обмеження IP",
"IPLimitDesc": "Вимикає вхідний, якщо кількість перевищує встановлене значення. (0 = вимкнено)",
@@ -341,9 +367,10 @@
"IPLimitlogDesc": "Журнал історії IP-адрес. (щоб увімкнути вхідну після вимкнення, очистіть журнал)",
"IPLimitlogclear": "Очистити журнал",
"setDefaultCert": "Установити сертифікат з панелі",
"streamTab": "Потік",
"setDefaultCertEmpty": "Для панелі не налаштовано сертифікат. Спочатку встановіть його в Налаштуваннях.",
"streamTab": "Stream",
"securityTab": "Безпека",
"sniffingTab": "Сніфінг",
"sniffingTab": "Sniffing",
"sniffingMetadataOnly": "Лише метадані",
"sniffingRouteOnly": "Лише маршрутизація",
"sniffingIpsExcluded": "Виключені IP",
@@ -361,15 +388,14 @@
"allHelp": "Повний об'єкт вхідного з усіма полями в одному редакторі.",
"settings": "Налаштування",
"settingsHelp": "Обгортка блоку settings Xray:",
"sniffing": "Сніфінг",
"sniffing": "Sniffing",
"sniffingHelp": "Обгортка блоку sniffing Xray:",
"stream": "Потік",
"stream": "Stream",
"streamHelp": "Обгортка блоку stream Xray:",
"jsonErrorPrefix": "Розширений JSON"
},
"telegramDesc": "Будь ласка, вкажіть ID чату Telegram. (використовуйте команду '/id' у боті) або ({'@'}userinfobot)",
"subscriptionDesc": "Щоб знайти URL-адресу вашої підписки, перейдіть до «Деталі». Крім того, ви можете використовувати одне ім'я для кількох клієнтів.",
"info": "Інформація",
"same": "Те саме",
"inboundData": "Вхідні дані",
"exportInbound": "Експортувати вхідні",
@@ -406,6 +432,139 @@
"getNewmldsa65Error": "Помилка при отриманні сертифіката mldsa65.",
"getNewVlessEncError": "Помилка при отриманні сертифіката VlessEnc."
},
"form": {
"moveUp": "Вгору",
"moveDown": "Вниз",
"addAll": "Додати всі",
"addAllFallbackTooltip": "Додає рядок fallback для кожного придатного вхідного, ще не приєднаного",
"peers": "Peers",
"addPeer": "Додати peer",
"keepAlive": "Keep-alive",
"autoSystemRoutesTooltip": "Лише для Windows. CIDR'и автоматично додаються до системної таблиці маршрутизації, щоб відповідний трафік проходив через TUN.",
"autoOutboundsInterface": "Авто-інтерфейс вихідних",
"autoOutboundsInterfaceTooltip": "Фізичний інтерфейс для вихідного трафіку. Використовуйте 'auto' для виявлення; вмикається автоматично, коли налаштовано Auto system routes.",
"rewriteAddress": "Переписати адресу",
"rewritePort": "Переписати порт",
"allowedNetwork": "Дозволена мережа",
"followRedirect": "Слідувати redirect",
"accounts": "Акаунти",
"allowTransparent": "Дозволити прозорий",
"encryptionMethod": "Метод шифрування",
"visionTestseed": "Vision testseed",
"version": "Версія",
"udpIdleTimeout": "UDP idle timeout (с)",
"masquerade": "Masquerade",
"type": "Тип",
"upstreamUrl": "Upstream URL",
"rewriteHost": "Переписати Host",
"skipTlsVerify": "Пропустити TLS verify",
"directory": "Каталог",
"statusCode": "Код статусу",
"body": "Body",
"headers": "Заголовки",
"proxyProtocol": "Proxy Protocol",
"requestVersion": "Версія запиту",
"requestMethod": "Метод запиту",
"requestPath": "Шлях запиту",
"requestHeaders": "Заголовки запиту",
"responseVersion": "Версія відповіді",
"responseStatus": "Статус відповіді",
"responseReason": "Причина відповіді",
"responseHeaders": "Заголовки відповіді",
"heartbeatPeriod": "Період heartbeat",
"serviceName": "Назва сервісу",
"authority": "Authority",
"multiMode": "Multi Mode",
"maxBufferedUpload": "Макс. буферизоване завантаження",
"maxUploadSize": "Макс. розмір завантаження (байт)",
"streamUpServer": "Stream-Up Server",
"serverMaxHeaderBytes": "Server Max Header Bytes",
"paddingBytes": "Padding Bytes",
"uplinkHttpMethod": "HTTP-метод Uplink",
"paddingObfsMode": "Padding Obfs Mode",
"paddingKey": "Padding Key",
"paddingHeader": "Padding Header",
"paddingPlacement": "Padding Placement",
"paddingMethod": "Padding Method",
"sessionPlacement": "Session Placement",
"sessionKey": "Session Key",
"sequencePlacement": "Sequence Placement",
"sequenceKey": "Sequence Key",
"uplinkDataPlacement": "Uplink Data Placement",
"uplinkDataKey": "Uplink Data Key",
"noSseHeader": "Без заголовка SSE",
"ttiMs": "TTI (мс)",
"uplinkMbps": "Uplink (МБ/с)",
"downlinkMbps": "Downlink (МБ/с)",
"cwndMultiplier": "Множник CWND",
"maxSendingWindow": "Макс. вікно відправки",
"externalProxy": "External Proxy",
"sniPlaceholder": "SNI (за замовчуванням = host)",
"fingerprint": "Fingerprint",
"defaultOption": "За замовчуванням",
"routeMark": "Route Mark",
"tcpKeepAliveInterval": "TCP Keep Alive Interval",
"tcpKeepAliveIdle": "TCP Keep Alive Idle",
"tcpMaxSeg": "TCP Max Seg",
"tcpUserTimeout": "TCP User Timeout",
"tcpWindowClamp": "TCP Window Clamp",
"tcpFastOpen": "TCP Fast Open",
"multipathTcp": "Multipath TCP",
"penetrate": "Penetrate",
"v6Only": "Лише V6",
"tcpCongestion": "TCP Congestion",
"dialerProxy": "Dialer Proxy",
"trustedXForwardedFor": "Довірений X-Forwarded-For",
"addressPortStrategy": "Стратегія адрес+порт",
"tryDelayMs": "Затримка спроби (мс)",
"prioritizeIPv6": "Пріоритет IPv6",
"interleave": "Interleave",
"maxConcurrentTry": "Макс. одночасних спроб",
"customSockopt": "Користувацький sockopt",
"addCustomOption": "Додати опцію",
"serverNameIndication": "SNI",
"cipherSuites": "Cipher Suites",
"autoOption": "Авто",
"minMaxVersion": "Мін/Макс версія",
"rejectUnknownSni": "Відхиляти невідомий SNI",
"disableSystemRoot": "Вимкнути System Root",
"sessionResumption": "Відновлення сесії",
"oneTimeLoading": "Одноразове завантаження",
"usageOption": "Опція використання",
"buildChain": "Build Chain",
"echKey": "ECH key",
"echConfig": "ECH config",
"getNewEchCert": "Отримати новий ECH-сертифікат",
"show": "Показати",
"xver": "Xver",
"target": "Ціль",
"maxTimeDiff": "Макс. різниця в часі (мс)",
"minClientVer": "Мін. версія клієнта",
"maxClientVer": "Макс. версія клієнта",
"shortIds": "Short IDs",
"spiderX": "SpiderX",
"getNewCert": "Отримати новий сертифікат",
"mldsa65Seed": "mldsa65 Seed",
"mldsa65Verify": "mldsa65 Verify",
"getNewSeed": "Отримати новий Seed"
},
"info": {
"mode": "Режим",
"grpcServiceName": "grpc serviceName",
"grpcMultiMode": "grpc multiMode",
"interfaceName": "Назва інтерфейсу",
"mtu": "MTU",
"gateway": "Gateway",
"dns": "DNS",
"outboundsInterface": "Інтерфейс вихідних",
"autoSystemRoutes": "Авто-маршрути системи",
"followRedirect": "FollowRedirect",
"auth": "Auth",
"noKernelTun": "TUN без kernel",
"keepAlive": "Keep alive",
"peerNumber": "Peer {n}",
"peerNumberConfig": "Конфіг Peer {n}"
},
"stream": {
"general": {
"request": "Запит",
@@ -456,6 +615,20 @@
"days": "Дні",
"renew": "Авто-продовження",
"renewDesc": "Автоматичне продовження після закінчення. (0 = вимкнено) (одиниця: день)",
"searchPlaceholder": "Пошук email, коментаря, sub ID, UUID, паролю, auth…",
"filterTitle": "Фільтр клієнтів",
"clearAllFilters": "Очистити все",
"sortOldest": "Спочатку старі",
"sortNewest": "Спочатку нові",
"sortRecentlyUpdated": "Нещодавно оновлені",
"sortRecentlyOnline": "Нещодавно у мережі",
"sortEmailAZ": "Email А→Я",
"sortEmailZA": "Email Я→А",
"sortMostTraffic": "Більше трафіку",
"sortHighestRemaining": "Більше залишку",
"sortExpiringSoonest": "Швидше закінчуються",
"has": "Має",
"hasNot": "Не має",
"title": "Клієнти",
"actions": "Дії",
"totalGB": "Усього надіслано/отримано (ГБ)",
@@ -466,6 +639,9 @@
"subId": "ID підписки",
"online": "У мережі",
"email": "Email",
"group": "Група",
"groupDesc": "Логічна мітка для групування пов'язаних клієнтів (напр. команда, клієнт, регіон). Фільтрується з панелі інструментів.",
"groupPlaceholder": "напр. customer-a",
"comment": "Коментар",
"traffic": "Трафік",
"offline": "Не в мережі",
@@ -489,11 +665,45 @@
"resetAllTraffics": "Скинути трафік усіх клієнтів",
"resetAllTrafficsTitle": "Скинути трафік усіх клієнтів?",
"resetAllTrafficsContent": "Лічильники відправлення/отримання кожного клієнта обнулюються. Квоти й термін дії не змінюються. Цю дію неможливо скасувати.",
"empty": "Клієнтів ще немає — додайте першого, щоб почати.",
"deleteConfirmTitle": "Видалити клієнта {email}?",
"deleteConfirmContent": "Клієнт буде вилучений з усіх прив'язаних вхідних, його запис трафіку буде знищено. Цю дію неможливо скасувати.",
"deleteSelected": "Видалити ({count})",
"adjustSelected": "Змінити ({count})",
"subLinksSelected": "Sub-посилання ({count})",
"addToGroupTitle": "Додати {count} клієнт(ів) до групи",
"addToGroupTooltip": "Виберіть існуючу групу або введіть нову назву. Використовуйте Ungroup, щоб вилучити клієнтів із поточної групи.",
"addToGroupPlaceholder": "Назва групи",
"addToGroupSuccessToast": "{count} клієнт(ів) додано до {group}",
"ungroupSuccessToast": "Групу очищено у {count} клієнт(ів)",
"ungroup": "Розгрупувати",
"ungroupConfirmTitle": "Видалити {count} клієнт(ів) з їхньої групи?",
"ungroupConfirmContent": "Очищує мітку групи у кожного обраного клієнта. Самі клієнти зберігаються (використовуйте Delete для повного видалення).",
"addToGroup": "Додати до групи",
"attach": "Прив'язати",
"adjust": "Коригування",
"subLinks": "Sub-посилання",
"selectedCount": "Обрано {count}",
"attachSelected": "Прив'язати ({count})",
"attachToInboundsTitle": "Прив'язати {count} клієнт(ів) до вхідних",
"attachToInboundsDesc": "Прив'язує обрані {count} клієнт(ів) (той самий UUID/пароль і спільний трафік) до обраних вхідних. Існуючі прив'язки зберігаються.",
"attachToInboundsTargets": "Цільові вхідні",
"attachToInboundsNoTargets": "Немає доступних багатокористувацьких вхідних для прив'язки.",
"detachSelected": "Від'єднати ({count})",
"detach": "Від'єднати",
"detachFromInboundsTitle": "Від'єднати {count} клієнт(ів) від вхідних",
"detachFromInboundsDesc": "Видаляє обраних {count} клієнт(ів) з обраних вхідних. Пари, де клієнт не був прив'язаний, тихо пропускаються. Записи клієнтів зберігаються (використовуйте Delete для повного видалення).",
"detachFromInboundsTargets": "Вхідні для від'єднання",
"detachFromInboundsNoTargets": "Немає доступних багатокористувацьких вхідних.",
"detachFromInboundsResult": "Від'єднано {detached}, пропущено {skipped}.",
"detachFromInboundsResultMixed": "Від'єднано {detached}, пропущено {skipped}, помилок {errors}.",
"subLinksTitle": "Sub-посилання ({count})",
"subLinkColumn": "URL підписки",
"subJsonLinkColumn": "URL JSON-підписки",
"subLinksCopyAll": "Копіювати все",
"subLinksCopiedAll": "Скопійовано {count} посилань",
"subLinksEmpty": "Жоден з обраних клієнтів не має ID підписки.",
"subLinksDisabled": "Сервіс підписки вимкнено.",
"subLinksDisabledHint": "Увімкніть підписку в Налаштування панелі → Підписка для генерації посилань.",
"bulkDeleteConfirmTitle": "Видалити {count} клієнтів?",
"bulkDeleteConfirmContent": "Кожен вибраний клієнт вилучається з усіх прив'язаних вхідних, його запис трафіку знищується. Цю дію неможливо скасувати.",
"bulkAdjustTitle": "Змінити {count} клієнтів",
@@ -504,11 +714,12 @@
"delDepleted": "Видалити вичерпаних",
"delDepletedConfirmTitle": "Видалити вичерпаних клієнтів?",
"delDepletedConfirmContent": "Видаляються всі клієнти, у яких вичерпана квота трафіку або сплив термін. Цю дію неможливо скасувати.",
"auth": "Auth",
"hysteriaAuth": "Auth для Hysteria",
"auth": "Авторизація",
"hysteriaAuth": "Hysteria Auth",
"uuid": "UUID",
"flow": "Flow",
"reverseTag": "Reverse tag",
"vmessSecurity": "Безпека VMess",
"reverseTag": "Зворотний тег",
"reverseTagPlaceholder": "Необов'язковий Reverse tag",
"telegramId": "ID користувача Telegram",
"telegramIdPlaceholder": "Числовий ID користувача Telegram (0 = немає)",
@@ -528,13 +739,51 @@
"delDepleted": "Видалено вичерпаних клієнтів: {count}"
}
},
"groups": {
"title": "Групи",
"name": "Назва",
"clientCount": "Клієнтів у групі",
"totalGroups": "Всього груп",
"totalGroupedClients": "Клієнти з групою",
"emptyGroups": "Порожні групи",
"addGroup": "Додати групу",
"createSuccess": "Групу «{name}» створено.",
"rename": "Перейменувати",
"renameTitle": "Перейменувати {name}",
"renameCollision": "Група з назвою «{name}» вже існує.",
"renameSuccess": "Групу перейменовано на {count} клієнт(ах).",
"deleteConfirmTitle": "Видалити групу {name}?",
"deleteConfirmContent": "Це видаляє групу й очищує її мітку у {count} клієнт(ів). Самі клієнти не видаляються.",
"deleteSuccess": "Групу очищено у {count} клієнт(ів).",
"resetTraffic": "Скинути трафік",
"resetConfirmTitle": "Скинути трафік групи {name}?",
"resetConfirmContent": "Це обнулить up/down для всіх {count} клієнт(ів) у цій групі.",
"resetSuccess": "Скинуто трафік у {count} клієнт(ів).",
"adjustSuccess": "Скориговано {count} клієнт(ів) у {name}.",
"emptyForAction": "У цій групі ще немає клієнтів.",
"deleteGroupOnly": "Видалити групу (зберегти клієнтів)",
"deleteClients": "Видалити клієнтів групи",
"deleteClientsConfirmTitle": "Видалити всіх клієнтів у {name}?",
"deleteClientsConfirmContent": "Це безповоротно видалить {count} клієнт(ів) разом з їхніми записами трафіку. Мітка групи також очищується. Дію не можна скасувати.",
"deleteClientsSuccess": "Видалено {count} клієнт(ів).",
"deleteClientsMixed": "{ok} видалено, {failed} пропущено",
"addToGroup": "Додати клієнтів…",
"addToGroupTitle": "Додати клієнтів до групи «{name}»",
"addToGroupDesc": "Виберіть клієнтів для додавання в цю групу. Існуючі прив'язки до вхідних зберігаються; змінюється лише мітка групи. Клієнти, які вже в цій групі, не відображаються.",
"addToGroupEmpty": "Немає інших клієнтів для додавання.",
"addToGroupResult": "Додано {count} клієнт(ів) до {name}.",
"removeFromGroup": "Видалити клієнтів…",
"removeFromGroupTitle": "Видалити клієнтів з групи «{name}»",
"removeFromGroupDesc": "Виберіть учасників для видалення з цієї групи. Самі клієнти зберігаються (використовуйте «Видалити клієнтів групи» для повного видалення).",
"removeFromGroupResult": "Видалено {count} клієнт(ів) з {name}."
},
"nodes": {
"title": "Вузли",
"addNode": "Додати вузол",
"editNode": "Редагувати вузол",
"editNode": "Змінити вузол",
"totalNodes": "Усього вузлів",
"onlineNodes": "Онлайн",
"offlineNodes": "Офлайн",
"onlineNodes": "У мережі",
"offlineNodes": "Не в мережі",
"avgLatency": "Середня затримка",
"name": "Назва",
"namePlaceholder": "напр. de-frankfurt-1",
@@ -544,7 +793,7 @@
"address": "Адреса",
"port": "Порт",
"basePath": "Базовий шлях",
"apiToken": "Токен API",
"apiToken": "API Token",
"apiTokenPlaceholder": "Токен зі сторінки Налаштувань віддаленої панелі",
"apiTokenHint": "Віддалена панель показує свій токен API в Налаштуваннях → Токен API.",
"regenerate": "Перегенерувати токен",
@@ -570,8 +819,8 @@
"deleteConfirmTitle": "Видалити вузол \"{name}\"?",
"deleteConfirmContent": "Це зупинить моніторинг вузла. Сама віддалена панель не зазнає змін.",
"statusValues": {
"online": "Онлайн",
"offline": "Офлайн",
"online": "У мережі",
"offline": "Не в мережі",
"unknown": "Невідомо"
},
"toasts": {
@@ -604,7 +853,7 @@
"warnDefaultBasePath": "Базовий шлях за замовчуванням \"/\" широко відомий — змініть його на випадковий.",
"warnDefaultSubPath": "Шлях підписки за замовчуванням \"/sub/\" широко відомий — змініть його.",
"warnDefaultJsonPath": "JSON-шлях підписки за замовчуванням \"/json/\" широко відомий — змініть його.",
"TGBotSettings": "Telegram Бот",
"TGBotSettings": "Telegram-бот",
"panelListeningIP": "Слухати IP",
"panelListeningIPDesc": "IP-адреса для веб-панелі. (залиште порожнім, щоб слухати всі IP-адреси)",
"panelListeningDomain": "Домен прослуховування",
@@ -615,10 +864,12 @@
"publicKeyPathDesc": "Шлях до файлу відкритого ключа для веб-панелі. (починається з ‘/‘)",
"privateKeyPath": "Шлях приватного ключа",
"privateKeyPathDesc": "Шлях до файлу приватного ключа для веб-панелі. (починається з ‘/‘)",
"panelUrlPath": "Шлях URL",
"panelUrlPath": "URI-шлях",
"panelUrlPathDesc": "Шлях URL для веб-панелі. (починається з ‘/‘ і закінчується ‘/‘)",
"pageSize": "Розмір сторінки",
"pageSizeDesc": "Визначити розмір сторінки для вхідної таблиці. (0 = вимкнено)",
"panelProxy": "Мережевий проксі панелі",
"panelProxyDesc": "Маршрутизує власні вихідні запити панелі (оновлення geo, перевірки версій Xray/панелі, Telegram) через цей проксі для обходу фільтрації GitHub/Telegram на стороні сервера. Приймає socks5:// або http(s)://, напр. локальний SOCKS-вхідний Xray. Залиште порожнім для прямого підключення.",
"remarkModel": "Модель зауваження та роздільний символ",
"datepicker": "Тип календаря",
"datepickerPlaceholder": "Виберіть дату",
@@ -630,11 +881,11 @@
"newPassword": "Новий пароль",
"telegramBotEnable": "Увімкнути Telegram Bot",
"telegramBotEnableDesc": "Вмикає бота Telegram.",
"telegramToken": "Telegram Токен",
"telegramToken": "Telegramокен",
"telegramTokenDesc": "Токен бота Telegram, отриманий від '{'@'}BotFather'.",
"telegramProxy": "SOCKS Проксі",
"telegramProxy": "SOCKS-проксі",
"telegramProxyDesc": "Вмикає проксі-сервер SOCKS5 для підключення до Telegram. (відкоригуйте параметри відповідно до посібника)",
"telegramAPIServer": "Сервер Telegram API",
"telegramAPIServer": "Telegram API сервер",
"telegramAPIServerDesc": "Сервер Telegram API для використання. Залиште поле порожнім, щоб використовувати сервер за умовчанням.",
"telegramChatId": "Ідентифікатор чату адміністратора",
"telegramChatIdDesc": "Ідентифікатори чату адміністратора Telegram. (розділені комами) (отримайте тут {'@'}userinfobot) або (використовуйте команду '/id' у боті)",
@@ -658,6 +909,8 @@
"subEnable": "Увімкнути службу підписки",
"subEnableDesc": "Вмикає службу підписки.",
"subJsonEnable": "Увімкнути/вимкнути JSON-кінець підписки незалежно.",
"subJsonEnableTitle": "JSON-підписка",
"subClashEnableTitle": "Підписка Clash / Mihomo",
"subTitle": "Назва Підписки",
"subTitleDesc": "Назва, яка відображається у VPN-клієнті",
"subSupportUrl": "URL підтримки",
@@ -678,13 +931,13 @@
"subCertPathDesc": "Шлях до файлу відкритого ключа для служби підписки. (починається з ‘/‘)",
"subKeyPath": "Шлях приватного ключа",
"subKeyPathDesc": "Шлях до файлу приватного ключа для служби підписки. (починається з ‘/‘)",
"subPath": "Шлях URI",
"subPath": "URI-шлях",
"subPathDesc": "Шлях URI для служби підписки. (починається з ‘/‘ і закінчується ‘/‘)",
"subDomain": "Домен прослуховування",
"subDomainDesc": "Ім'я домену для служби підписки. (залиште порожнім, щоб слухати всі домени та IP-адреси)",
"subUpdates": "Інтервали оновлення",
"subUpdatesDesc": "Інтервали оновлення URL-адреси підписки в клієнтських програмах. (одиниця: година)",
"subEncrypt": "Закодувати",
"subEncrypt": "Кодувати",
"subEncryptDesc": "Повернений вміст послуги підписки матиме кодування Base64.",
"subShowInfo": "Показати інформацію про використання",
"subShowInfoDesc": "Залишок трафіку та дата відображатимуться в клієнтських програмах.",
@@ -693,7 +946,7 @@
"subURI": "URI зворотного проксі",
"subURIDesc": "URI до URL-адреси підписки для використання за проксі.",
"externalTrafficInformEnable": "Інформація про зовнішній трафік",
"externalTrafficInformEnableDesc": "Інформувати зовнішній API про кожне оновлення трафіку.",
"externalTrafficInformEnableDesc": "Повідомляти зовнішній API про кожне оновлення трафіку.",
"externalTrafficInformURI": "Інформаційний URI зовнішнього трафіку",
"externalTrafficInformURIDesc": "Оновлення трафіку надсилаються на цей URI.",
"restartXrayOnClientDisable": "Перезапускати Xray після авто-вимкнення",
@@ -703,6 +956,54 @@
"fragmentSett": "Параметри фрагментації",
"noisesDesc": "Увімкнути Noises.",
"noisesSett": "Налаштування Noises",
"trustedProxyCidrs": "Довірені CIDR проксі",
"trustedProxyCidrsDesc": "IP/CIDR через кому, яким дозволено встановлювати заголовки forwarded host, proto та client IP.",
"ldap": {
"enable": "Увімкнути LDAP-синхронізацію",
"host": "LDAP-хост",
"port": "Порт LDAP",
"useTls": "Використовувати TLS (LDAPS)",
"bindDn": "Bind DN",
"passwordConfigured": "Налаштовано; залиште порожнім для збереження поточного паролю.",
"passwordUnconfigured": "Не налаштовано.",
"passwordPlaceholder": "Налаштовано — введіть нове значення для заміни",
"baseDn": "Base DN",
"userFilter": "Фільтр користувача",
"userAttr": "Атрибут користувача (username/email)",
"vlessField": "Атрибут VLESS-flag",
"flagField": "Загальний атрибут flag (опц.)",
"flagFieldDesc": "Якщо задано, перевизначає VLESS flag — напр. shadowInactive.",
"truthyValues": "Truthy-значення",
"truthyValuesDesc": "Через кому; за замовч.: true,1,yes,on",
"invertFlag": "Інвертувати flag",
"invertFlagDesc": "Увімкніть, коли атрибут означає «вимкнено» (напр. shadowInactive).",
"syncSchedule": "Розклад синхронізації",
"syncScheduleDesc": "Рядок типу cron, напр. @every 1m",
"inboundTags": "Теги вхідних",
"inboundTagsDesc": "Вхідні, на яких LDAP-синхронізація може авто-створювати або авто-видаляти клієнтів.",
"noInbounds": "Вхідних не знайдено. Спочатку створіть один у Вхідних.",
"autoCreate": "Авто-створення клієнтів",
"autoDelete": "Авто-видалення клієнтів",
"defaultTotalGb": "Обсяг за замовч. (ГБ)",
"defaultExpiryDays": "Термін за замовч. (дні)",
"defaultIpLimit": "Ліміт IP за замовч."
},
"subFormats": {
"packets": "Пакети",
"length": "Довжина",
"interval": "Інтервал",
"maxSplit": "Макс. розбиття",
"noises": "Шуми",
"noiseItem": "Шум №{n}",
"type": "Тип",
"packet": "Пакет",
"delayMs": "Затримка (мс)",
"applyTo": "Застосувати до",
"addNoise": "+ Шум",
"concurrency": "Паралельність",
"xudpConcurrency": "Паралельність xudp",
"xudpUdp443": "xudp UDP 443"
},
"mux": "Mux",
"muxDesc": "Передавати кілька незалежних потоків даних у межах встановленого потоку даних.",
"muxSett": "Налаштування Mux",
@@ -756,8 +1057,11 @@
"xray": {
"title": "Xray конфігурації",
"save": "Зберегти",
"restart": "Перезапустити Xray",
"restart": "Перезапуск Xray",
"restartSuccess": "Xray успішно перезапущено",
"restartOutputTitle": "Вивід перезапуску Xray",
"restartConfirmTitle": "Перезапустити xray?",
"restartConfirmContent": "Перезавантажує сервіс xray зі збереженою конфігурацією.",
"stopSuccess": "Xray успішно зупинено",
"restartError": "Виникла помилка під час перезапуску Xray.",
"stopError": "Виникла помилка під час зупинки Xray.",
@@ -765,7 +1069,7 @@
"advancedTemplate": "Додатково",
"generalConfigs": "Загальні конфігурації",
"generalConfigsDesc": "Ці параметри визначатимуть загальні налаштування.",
"logConfigs": "Журнал",
"logConfigs": "Лог",
"logConfigsDesc": "Журнали можуть вплинути на ефективність вашого сервера. Рекомендується вмикати його з розумом лише у випадку ваших потреб",
"blockConfigsDesc": "Ці параметри блокуватимуть трафік на основі конкретних запитуваних протоколів і веб-сайтів.",
"basicRouting": "Основна Маршрутизація",
@@ -792,8 +1096,10 @@
"Torrent": "Блокувати протокол BitTorrent",
"Inbounds": "Вхідні",
"InboundsDesc": "Прийняття певних клієнтів.",
"Outbounds": "Вихід",
"Outbounds": "Вихідні",
"Balancers": "Балансери",
"balancerTagRequired": "Тег обов'язковий",
"balancerSelectorRequired": "Виберіть принаймні один вихідний",
"OutboundsDesc": "Встановити шлях вихідного трафіку.",
"Routings": "Правила маршрутизації",
"RoutingsDesc": "Пріоритет кожного правила важливий!",
@@ -827,11 +1133,78 @@
"inbound": "Вхідний",
"outbound": "Вихідний",
"balancer": "Балансувальник",
"info": "Інформація",
"info": "Інфо",
"add": "Додати правило",
"edit": "Редагувати правило",
"useComma": "Елементи, розділені комами"
},
"routing": {
"dragToReorder": "Перетягніть для зміни порядку"
},
"ruleForm": {
"sourceIps": "IP джерела",
"sourcePort": "Порт джерела",
"vlessRoute": "VLESS route",
"attributes": "Атрибути",
"value": "Значення",
"user": "Користувач",
"inboundTags": "Теги вхідних",
"outboundTag": "Тег вихідного",
"balancerTag": "Тег балансувальника",
"balancerTagTooltip": "Спрямовує трафік через один з налаштованих балансувальників навантаження"
},
"outboundForm": {
"tagDuplicate": "Тег уже використовується іншим вихідним",
"tagRequired": "Тег обов'язковий",
"tagPlaceholder": "унікальний-тег",
"localIpPlaceholder": "локальний IP",
"addressRequired": "Адреса обов'язкова",
"portRequired": "Порт обов'язковий",
"optional": "опційно",
"udpOverTcp": "UDP over TCP",
"uotVersion": "Версія UoT",
"inboundTag": "Тег вхідного",
"inboundTagPlaceholder": "тег вхідного у правилах маршрутизації",
"responseType": "Тип відповіді",
"rewriteNetwork": "Переписати мережу",
"unchanged": "(без змін)",
"unchangedAddress": "(без змін) напр. 1.1.1.1",
"rules": "Правила",
"ruleN": "Правило {n}",
"action": "Дія",
"redirect": "Redirect",
"fragment": "Fragment",
"finalRules": "Фінальні правила",
"overrideXrayPrivateIp": "Перевизначити дефолтний блок приватних IP у Xray",
"blockDelay": "Затримка блоку (мс)",
"reverseSniffing": "Зворотний sniffing",
"workers": "Воркери",
"reserved": "Зарезервовано",
"minUploadInterval": "Мін. інтервал завантаження (мс)",
"maxUploadSizeBytes": "Макс. розмір завантаження (байт)",
"uplinkChunkSize": "Розмір chunk Uplink",
"noGrpcHeader": "Без gRPC-заголовка",
"maxConcurrency": "Макс. паралельність",
"maxConnections": "Макс. з'єднань",
"maxReuseTimes": "Макс. повторних використань",
"maxRequestTimes": "Макс. запитів",
"maxReusableSecs": "Макс. секунд повторного використання",
"keepAlivePeriod": "Період keep alive",
"authPassword": "Пароль авторизації",
"visionTestpre": "Vision testpre",
"serverNamePlaceholder": "ім'я сервера",
"verifyPeerName": "Перевіряти ім'я peer",
"pinnedSha256": "Pinned SHA256",
"shortId": "Short ID",
"sockopts": "Sockopts",
"keepAliveInterval": "Інтервал keep alive",
"markFwmark": "Mark (fwmark)",
"interface": "Інтерфейс",
"ipv6Only": "Лише IPv6",
"acceptProxyProtocol": "Приймати proxy protocol",
"tcpUserTimeoutMs": "TCP user timeout (мс)",
"tcpKeepAliveIdleS": "TCP keep-alive idle (с)"
},
"outbound": {
"addOutbound": "Додати вихідний",
"addReverse": "Додати реверс",
@@ -846,8 +1219,8 @@
"reverse": "Зворотний",
"domain": "Домен",
"type": "Тип",
"bridge": "Міст",
"portal": "Портал",
"bridge": "Bridge",
"portal": "Portal",
"link": "Посилання",
"intercon": "Взаємозв'язок",
"settings": "Налаштування",
@@ -860,6 +1233,8 @@
"testSuccess": "Тест успішний",
"testFailed": "Тест не пройдено",
"testError": "Не вдалося протестувати вихідне з'єднання",
"testModeTooltip": "TCP: швидкий dial-only probe. HTTP: повний запит через xray.",
"testAll": "Тестувати всі",
"nordvpn": "NordVPN",
"accessToken": "Токен доступу",
"country": "Країна",
@@ -876,6 +1251,16 @@
"balancerSelectors": "Селектори",
"tag": "Тег",
"tagDesc": "Унікальний тег",
"tagDuplicate": "Тег уже використовується іншим балансувальником",
"tagPlaceholder": "унікальний тег балансувальника",
"selector": "Селектор",
"fallback": "Fallback",
"expected": "Очікуване",
"expectedPlaceholder": "оптимальна кількість вузлів",
"maxRtt": "Макс. RTT",
"tolerance": "Допуск",
"baselines": "Baselines",
"costs": "Costs",
"balancerDesc": "Неможливо використовувати balancerTag і outboundTag одночасно. Якщо використовувати одночасно, працюватиме лише outboundTag."
},
"wireguard": {
@@ -892,6 +1277,38 @@
"userLevel": "Рівень користувача",
"userLevelDesc": "Всі з'єднання, встановлені через цей вхід, використовуватимуть цей рівень користувача. Значення за замовчуванням - 0"
},
"nord": {
"accessToken": "Access token",
"privateKey": "Приватний ключ",
"noServers": "Серверів для обраної країни не знайдено",
"noPublicKey": "Обраний сервер не повідомляє публічного ключа NordLynx.",
"outboundAdded": "Вихідний NordVPN додано",
"outboundUpdated": "Вихідний NordVPN оновлено"
},
"warp": {
"licenseError": "Не вдалося встановити ліцензію WARP.",
"fetchFirst": "Спочатку отримайте WARP-конфіг.",
"createAccount": "Створити акаунт WARP",
"accessToken": "Access token",
"deviceId": "ID пристрою",
"licenseKey": "Ключ ліцензії",
"privateKey": "Приватний ключ",
"deleteAccount": "Видалити акаунт",
"settings": "Налаштування",
"licenseKeyLabel": "Ключ ліцензії WARP / WARP+",
"key": "Ключ",
"keyPlaceholder": "26-символьний ключ WARP+",
"accountInfo": "Інформація про акаунт",
"deviceName": "Назва пристрою",
"deviceModel": "Модель пристрою",
"deviceEnabled": "Пристрій увімкнено",
"accountType": "Тип акаунта",
"role": "Роль",
"warpPlusData": "WARP+ data",
"quota": "Квота",
"usage": "Використання",
"addOutbound": "Додати вихідний"
},
"dns": {
"enable": "Увімкнути DNS",
"enableDesc": "Увімкнути вбудований DNS-сервер",
@@ -961,8 +1378,8 @@
"unknown": "Невідомо",
"inbounds": "Вхідні",
"clients": "Клієнти",
"offline": "🔴 Офлайн",
"online": "🟢 Онлайн",
"offline": "🔴 Не в мережі",
"online": "🟢 У мережі",
"commands": {
"unknown": "❗ Невідома команда.",
"pleaseChoose": "👇 Будь ласка, виберіть:\r\n",
@@ -998,7 +1415,7 @@
"ipv6": "🌐 IPv6: {{ .IPv6 }}\r\n",
"ipv4": "🌐 IPv4: {{ .IPv4 }}\r\n",
"ip": "🌐 IP: {{ .IP }}\r\n",
"ips": "🔢 IP-адреси:\r\n{{ .IPs }}\r\n",
"ips": "🔢 IP:\r\n{{ .IPs }}\r\n",
"serverUpTime": "⏳ Час роботи: {{ .UpTime }} {{ .Unit }}\r\n",
"serverLoad": "📈 Завантаження системи: {{ .Load1 }}, {{ .Load2 }}, {{ .Load3 }}\r\n",
"serverMemory": "📋 RAM: {{ .Current }}/{{ .Total }}\r\n",
@@ -1009,7 +1426,7 @@
"username": "👤 Ім'я користувача: {{ .Username }}\r\n",
"reason": "❗️ Причина: {{ .Reason }}\r\n",
"time": "⏰ Час: {{ .Time }}\r\n",
"inbound": "📍 Inbound: {{ .Remark }}\r\n",
"inbound": "📍 Вхідний: {{ .Remark }}\r\n",
"port": "🔌 Порт: {{ .Port }}\r\n",
"expire": "📅 Дата закінчення: {{ .Time }}\r\n",
"expireIn": "📅 Термін дії: {{ .Time }}\r\n",
@@ -1017,10 +1434,10 @@
"enabled": "🚨 Увімкнено: {{ .Enable }}\r\n",
"online": "🌐 Стан підключення: {{ .Status }}\r\n",
"lastOnline": "🔙 Був(ла) онлайн: {{ .Time }}\r\n",
"email": "📧 Електронна пошта: {{ .Email }}\r\n",
"upload": "🔼 Upload: ↑{{ .Upload }}\r\n",
"download": "🔽 Download: ↓{{ .Download }}\r\n",
"total": "📊 Всього: ↑↓{{ .UpDown }} / {{ .Total }}\r\n",
"email": "📧 Email: {{ .Email }}\r\n",
"upload": "🔼 Завантаження: ↑{{ .Upload }}\r\n",
"download": "🔽 Завантаження: ↓{{ .Download }}\r\n",
"total": "📊 Усього: ↑↓{{ .UpDown }} / {{ .Total }}\r\n",
"TGUser": "👤 Користувач Telegram: {{ .TelegramID }}\r\n",
"exhaustedMsg": "🚨 Вичерпано {{ .Type }}:\r\n",
"exhaustedCount": "🚨 Вичерпано кількість {{ .Type }} count:\r\n",
@@ -1077,7 +1494,7 @@
"ipLimit": "🔢 IP Ліміт",
"setTGUser": "👤 Встановити користувача Telegram",
"toggle": "🔘 Увімкнути / Вимкнути",
"custom": "🔢 Custom",
"custom": "🔢 Своє",
"confirmNumber": "✅ Підтвердити: {{ .Num }}",
"confirmNumberAdd": "✅ Підтвердити додавання: {{ .Num }}",
"limitTraffic": "🚧 Ліміт трафіку",
@@ -1089,9 +1506,9 @@
"use_default": "🏷️ Використати типове",
"change_id": "⚙️🔑 ID",
"change_password": "⚙️🔑 Пароль",
"change_email": "⚙️📧 Електронна пошта",
"change_email": "⚙️📧 Email",
"change_comment": "⚙️💬 Коментар",
"change_flow": "⚙️🚦 Потік",
"change_flow": "⚙️🚦 Flow",
"ResetAllTraffics": "Скинути весь трафік",
"SortedTrafficUsageReport": "Відсортований звіт про використання трафіку"
},
@@ -1119,4 +1536,4 @@
"chooseInbound": "Виберіть Вхідний"
}
}
}
}