agent_nodes gains probe_only; getConfig always serves the flag and withholds the sing-box payload (null config, empty hash) for flagged nodes while probe tasks, fast interval, stat iface and update intents ride as usual. The agent gates both core branches when the local agent.json preset or the master flag is on, retires a running core once (best-effort tail flush, switchover bookkeeping untouched so turning the flag off self-heals through the existing hash-current-but-not-running path), and makes the traffic cycle an explicit no-op. Panel: node create/update accept probeOnly, the node view overlays it from the binding, the node form gains a switch (carried into the generated install command), the list shows a probe-only tag in the core-version cell, and install-agent.sh --probe-only writes the preset, skips the core download/self-check and inherits the flag on no-arg reruns.
1644 lines
124 KiB
JSON
1644 lines
124 KiB
JSON
{
|
||
"username": "Имя пользователя",
|
||
"password": "Пароль",
|
||
"login": "Войти",
|
||
"confirm": "Подтвердить",
|
||
"cancel": "Отмена",
|
||
"close": "Закрыть",
|
||
"save": "Сохранить",
|
||
"logout": "Выход",
|
||
"create": "Создать",
|
||
"add": "Добавить",
|
||
"remove": "Удалить",
|
||
"update": "Обновить",
|
||
"copy": "Копировать",
|
||
"copied": "Скопировано",
|
||
"more": "ещё",
|
||
"download": "Скачать",
|
||
"regenerate": "Сгенерировать заново",
|
||
"jsonEditor": "Редактор JSON",
|
||
"downloadImage": "Скачать изображение",
|
||
"sort": "Сортировка",
|
||
"remark": "Примечание",
|
||
"enable": "Включить",
|
||
"protocol": "Протокол",
|
||
"search": "Поиск",
|
||
"filter": "Фильтр",
|
||
"all": "Все",
|
||
"from": "От",
|
||
"to": "До",
|
||
"done": "Готово",
|
||
"loading": "Загрузка...",
|
||
"refresh": "Обновить",
|
||
"clear": "Очистить",
|
||
"second": "Секунда",
|
||
"minute": "Минута",
|
||
"hour": "Час",
|
||
"day": "День",
|
||
"check": "Проверить",
|
||
"indefinite": "Бесконечно",
|
||
"unlimited": "Безлимит",
|
||
"none": "Нет",
|
||
"qrCode": "QR-код",
|
||
"info": "Информация",
|
||
"edit": "Изменить",
|
||
"delete": "Удалить",
|
||
"reset": "Сброс",
|
||
"noData": "Нет данных.",
|
||
"copySuccess": "Скопировано",
|
||
"sure": "Да",
|
||
"encryption": "Шифрование",
|
||
"transmission": "Транспорт",
|
||
"host": "Хост",
|
||
"path": "Путь",
|
||
"camouflage": "Обфускация",
|
||
"status": "Статус",
|
||
"enabled": "Включено",
|
||
"disabled": "Отключено",
|
||
"depleted": "Исчерпано",
|
||
"depletingSoon": "Почти исчерпано",
|
||
"offline": "Не в сети",
|
||
"online": "В сети",
|
||
"domainName": "Домен",
|
||
"monitor": "Мониторинг IP",
|
||
"certificate": "SSL-сертификат",
|
||
"fail": "Сбой",
|
||
"comment": "Комментарий",
|
||
"success": "Успешно",
|
||
"lastOnline": "Был(а) в сети",
|
||
"lastSubFetch": "Последнее получение подписки",
|
||
"install": "Установка",
|
||
"clients": "Клиенты",
|
||
"usage": "Использование",
|
||
"remained": "Остаток",
|
||
"security": "Безопасность",
|
||
"somethingWentWrong": "Что-то пошло не так",
|
||
"subscription": {
|
||
"title": "Информация о подписке",
|
||
"subId": "ID подписки",
|
||
"status": "Статус",
|
||
"downloaded": "Загружено",
|
||
"uploaded": "Отправлено",
|
||
"expiry": "Срок действия",
|
||
"totalQuota": "Общий лимит",
|
||
"active": "Активна",
|
||
"inactive": "Неактивна",
|
||
"unlimited": "Неограниченно",
|
||
"noExpiry": "Бессрочно",
|
||
"copyAllConfigs": "Копировать все конфигурации",
|
||
"copyAllConfigsCopied": "Все конфигурации скопированы",
|
||
"email": "Email",
|
||
"individualLinks": "Индивидуальные ссылки"
|
||
},
|
||
"menu": {
|
||
"theme": "Тема",
|
||
"dashboard": "Дашборд",
|
||
"inbounds": "Входящие",
|
||
"clients": "Клиенты",
|
||
"nodes": "Узлы",
|
||
"settings": "Настройки панели",
|
||
"donate": "Поддержать",
|
||
"hosts": "Хосты",
|
||
"docs": "Документация",
|
||
"openMenu": "Открыть меню",
|
||
"pinSidebar": "Закрепить боковую панель",
|
||
"unpinSidebar": "Открепить боковую панель"
|
||
},
|
||
"pages": {
|
||
"login": {
|
||
"hello": "Привет!",
|
||
"title": "Добро пожаловать!",
|
||
"loginAgain": "Сессия истекла. Войдите в систему снова",
|
||
"toasts": {
|
||
"invalidFormData": "Недопустимый формат данных",
|
||
"emptyUsername": "Введите имя пользователя",
|
||
"emptyPassword": "Введите пароль",
|
||
"wrongUsernameOrPassword": "Неверные данные учетной записи.",
|
||
"successLogin": "Вход выполнен успешно"
|
||
}
|
||
},
|
||
"index": {
|
||
"cpu": "ЦП",
|
||
"swap": "Подкачка",
|
||
"storage": "Диск",
|
||
"memory": "Память",
|
||
"updatePanel": "Обновить панель",
|
||
"panelUpdateDesc": "Это обновит L-UI до последнего релиза и перезапустит сервис панели.",
|
||
"currentPanelVersion": "Текущая версия панели",
|
||
"latestPanelVersion": "Последняя версия панели",
|
||
"panelUpToDate": "Панель обновлена",
|
||
"devChannel": "Канал разработки",
|
||
"devChannelWarning": "Сборки разработки отслеживают каждый коммит в main и не являются стабильными релизами — автоматического отката нет.",
|
||
"currentCommit": "Текущий коммит",
|
||
"latestCommit": "Последний коммит",
|
||
"updateChannelChanged": "Канал обновления изменён",
|
||
"connectionCount": "Количество соединений",
|
||
"ipAddresses": "IP-адреса сервера",
|
||
"toggleIpVisibility": "Скрыть или показать IP-адреса сервера",
|
||
"overallSpeed": "Общая скорость передачи трафика",
|
||
"upload": "Загрузка",
|
||
"download": "Скачать",
|
||
"sent": "Отправлено",
|
||
"received": "Получено",
|
||
"panelUpdateDialog": "Вы действительно хотите обновить панель?",
|
||
"panelUpdateDialogDesc": "Это обновит L-UI до версии #version# и перезапустит сервис панели.",
|
||
"panelUpdateStartedPopover": "Обновление панели началось",
|
||
"panelUpdateFailedTitle": "Не удалось обновить панель",
|
||
"panelUpdateFailedDesc": "Обновление не завершилось успешно. Проверьте журналы сервера или выполните 'x-ui update' в командной строке.",
|
||
"panelUpdateUnknownTitle": "Не удалось подтвердить завершение обновления",
|
||
"panelUpdateUnknownDesc": "Панель не сообщила результат вовремя. Перезагрузите страницу, чтобы проверить текущую версию, или проверьте журналы сервера.",
|
||
"dontRefresh": "Установка в процессе. Не обновляйте страницу",
|
||
"config": "Конфигурация",
|
||
"backupTitle": "Бэкап и восстановление",
|
||
"exportDatabase": "Экспорт базы данных",
|
||
"exportDatabaseDesc": "Нажмите, чтобы скачать файл .db, содержащий резервную копию вашей текущей базы данных на ваше устройство. Этот же файл можно восстановить на панели, работающей на PostgreSQL.",
|
||
"importDatabase": "Импорт базы данных",
|
||
"importDatabaseDesc": "Нажмите, чтобы выбрать и загрузить резервную копию .db или миграционный дамп (.dump) с вашего устройства для восстановления базы данных.",
|
||
"importDatabaseSuccess": "База данных успешно импортирована",
|
||
"importDatabaseError": "Произошла ошибка при импорте базы данных",
|
||
"readDatabaseError": "Произошла ошибка при чтении базы данных",
|
||
"getDatabaseError": "Произошла ошибка при получении базы данных",
|
||
"getConfigError": "Произошла ошибка при получении конфигурационного файла",
|
||
"backupPostgresNote": "Эта панель работает на PostgreSQL. «Резервная копия» скачивает архив pg_dump (.dump), а «Восстановление» загружает его обратно через pg_restore. «Восстановление» также принимает базу данных SQLite (.db) или миграционный дамп SQLite и импортирует их данные в PostgreSQL. На сервере должны быть установлены клиентские инструменты PostgreSQL (pg_dump и pg_restore).",
|
||
"exportDatabasePgDesc": "Нажмите, чтобы скачать дамп PostgreSQL (.dump) текущей базы данных на ваше устройство.",
|
||
"importDatabasePgDesc": "Нажмите, чтобы выбрать и загрузить резервную копию PostgreSQL (.dump), базу данных SQLite (.db) или миграционный дамп SQLite для восстановления базы данных. Это заменит все текущие данные.",
|
||
"migrationDownload": "Скачать файл миграции",
|
||
"migrationDownloadPgDesc": "Нажмите, чтобы скачать базу данных SQLite (.db), собранную из ваших данных PostgreSQL и готовую для запуска панели на SQLite.",
|
||
"free": "свободно",
|
||
"openSockets": "открытых сокетов",
|
||
"throughputSub": "Всего по интерфейсу",
|
||
"healthWarm": "{list} — повышенная нагрузка",
|
||
"healthCritical": "{list} — критический уровень",
|
||
"panel": "Панель",
|
||
"threads": "Потоки",
|
||
"uptime": "Время работы",
|
||
"importKeepHostSettings": "Сохранить настройки этой машины",
|
||
"importKeepHostSettingsDesc": "Оставляет адреса и порты этой панели, базовый путь, сертификаты и удостоверение для узлов вместо тех, что в загруженном файле."
|
||
},
|
||
"inbounds": {
|
||
"totalDownUp": "Отправлено/получено",
|
||
"totalUsage": "Всего трафика",
|
||
"inboundCount": "Всего подключений",
|
||
"operate": "Меню",
|
||
"enable": "Включить",
|
||
"remark": "Примечание",
|
||
"node": "Узел",
|
||
"deployTo": "Развернуть на",
|
||
"localPanel": "Локальная панель",
|
||
"fallbacks": {
|
||
"title": "Fallback'и",
|
||
"empty": "Фолбэков пока нет",
|
||
"add": "Добавить фолбэк",
|
||
"pickInbound": "Выберите инбаунд",
|
||
"matchAny": "любой",
|
||
"destPlaceholder": "авто (listen:порт дочернего)",
|
||
"needsTls": "Fallbacks станут доступны после выбора TLS или Reality на вкладке «Безопасность» (только VLESS/Trojan поверх RAW)."
|
||
},
|
||
"protocol": "Протокол",
|
||
"port": "Порт",
|
||
"portMap": "Сопоставление портов",
|
||
"traffic": "Трафик",
|
||
"speed": "Скорость",
|
||
"expireDate": "Дата окончания",
|
||
"createdAt": "Создано",
|
||
"updatedAt": "Обновлено",
|
||
"resetTraffic": "Сбросить трафик",
|
||
"addInbound": "Создать подключение",
|
||
"generalActions": "Общие действия",
|
||
"modifyInbound": "Изменить подключение",
|
||
"deleteConfirmTitle": "Удалить подключение \"{remark}\"?",
|
||
"deleteConfirmContent": "Подключение и все его клиенты будут удалены. Это действие нельзя отменить.",
|
||
"resetConfirmTitle": "Сбросить трафик \"{remark}\"?",
|
||
"resetConfirmContent": "Сбрасывает счётчики отправки/получения этого подключения до 0.",
|
||
"selectedCount": "{count} выбрано",
|
||
"selectAll": "Выбрать всё",
|
||
"bulkDeleteConfirmTitle": "Удалить {count} подключений?",
|
||
"bulkDeleteConfirmContent": "Выбранные подключения и все их клиенты будут удалены. Это действие нельзя отменить.",
|
||
"cloneConfirmTitle": "Клонировать подключение \"{remark}\"?",
|
||
"cloneConfirmContent": "Создаёт копию с новым портом и пустым списком клиентов.",
|
||
"delAllClients": "Удалить всех клиентов",
|
||
"delAllClientsConfirmTitle": "Удалить всех {count} клиентов из \"{remark}\"?",
|
||
"delAllClientsConfirmContent": "Удаляет всех клиентов этого подключения и сбрасывает их записи трафика. Само подключение сохраняется. Это действие нельзя отменить.",
|
||
"attachClients": "Привязать клиентов к…",
|
||
"attachClientsTitle": "Привязать клиентов из «{remark}»",
|
||
"attachClientsDesc": "Привязывает тех же {count} клиент(ов) (с тем же UUID/паролем и общим трафиком) к выбранным входящим. Они остаются и на этом входящем.",
|
||
"attachClientsTargets": "Целевые входящие",
|
||
"attachClientsNoTargets": "Нет других совместимых входящих для привязки.",
|
||
"attachClientsResult": "Привязано {attached}, пропущено {skipped}.",
|
||
"attachClientsResultMixed": "Привязано {attached}, пропущено {skipped}, ошибок {errors}.",
|
||
"attachClientsSelectLabel": "Клиенты для привязки",
|
||
"attachClientsSearchPlaceholder": "Поиск email или комментария",
|
||
"attachClientsStatusDisabled": "Отключено",
|
||
"attachClientsSelectedCount": "{selected} из {total} выбрано",
|
||
"attachExistingClients": "Привязать существующих клиентов…",
|
||
"attachExistingTitle": "Привязать существующих клиентов к «{remark}»",
|
||
"attachExistingDesc": "Привязывает существующих клиентов (доступно {count}) к этому входящему — тот же UUID/пароль и общий трафик. Клиенты, уже привязанные к нему, пропускаются.",
|
||
"attachExistingNoClients": "Клиентов пока нет. Сначала создайте клиентов, затем привяжите их здесь.",
|
||
"attachExistingStatusAttached": "Уже привязан",
|
||
"detachClients": "Отвязать клиентов",
|
||
"detachClientsTitle": "Отвязать клиентов из «{remark}»",
|
||
"detachClientsDesc": "Удаляет выбранных клиент(ов) только с этого входящего. Записи клиентов сохраняются (используйте Delete для полного удаления). У источника всего {count} клиент(ов).",
|
||
"detachClientsResult": "Отвязано {detached}, пропущено {skipped}.",
|
||
"detachClientsResultMixed": "Отвязано {detached}, пропущено {skipped}, ошибок {errors}.",
|
||
"detachClientsSelectLabel": "Клиенты для отвязки",
|
||
"exportLinksTitle": "Экспортировать ссылки подключения",
|
||
"exportSubsTitle": "Экспортировать ссылки подписки",
|
||
"exportAllLinksTitle": "Экспортировать все ссылки подключений",
|
||
"exportAllSubsTitle": "Экспортировать все ссылки подписок",
|
||
"exportAllLinksFileName": "Все-входящие",
|
||
"exportAllSubsFileName": "Все-входящие-Subs",
|
||
"inboundJsonTitle": "JSON входящего",
|
||
"resetTrafficContent": "Вы уверены, что хотите сбросить трафик?",
|
||
"copyLink": "Копировать ссылку",
|
||
"address": "Адрес",
|
||
"network": "Сеть",
|
||
"destinationPort": "Порт назначения",
|
||
"targetAddress": "Целевой адрес",
|
||
"monitorDesc": "Оставьте пустым для прослушивания всех IP-адресов",
|
||
"meansNoLimit": "= Безлимит. (единица: ГБ)",
|
||
"totalFlow": "Общий расход",
|
||
"leaveBlankToNeverExpire": "Оставьте пустым, чтобы было бесконечным",
|
||
"certificatePath": "Путь к сертификату",
|
||
"certificateContent": "Содержимое сертификата",
|
||
"publicKey": "Публичный ключ",
|
||
"privatekey": "Приватный ключ",
|
||
"client": "Клиент",
|
||
"export": "Экспорт ссылок",
|
||
"clone": "Клонировать",
|
||
"resetAllTraffic": "Сброс трафика всех подключений",
|
||
"resetAllTrafficTitle": "Сброс трафика всех подключений",
|
||
"email": "Email",
|
||
"IPLimit": "Лимит по количеству IP",
|
||
"IPLimitlog": "Лог IP-адресов",
|
||
"IPLimitlogclear": "Очистить лог",
|
||
"setDefaultCert": "Установить сертификат панели",
|
||
"setDefaultCertEmpty": "Для панели не настроен сертификат. Сначала установите его в Настройках.",
|
||
"streamTab": "Поток",
|
||
"securityTab": "Безопасность",
|
||
"sniffingTab": "Сниффинг",
|
||
"forwardingTab": "Forwarding",
|
||
"forwarding": {
|
||
"mode": "Forwarding",
|
||
"direct": "Direct",
|
||
"forward": "Forward (entry → exit)",
|
||
"landing": "Landing",
|
||
"managed": "Managed landing",
|
||
"manual": "Manual endpoint",
|
||
"target": "Landing inbound",
|
||
"targetPlaceholder": "Pick a SOCKS (mixed) inbound",
|
||
"targetDisabled": "disabled",
|
||
"address": "Landing address",
|
||
"port": "Exit port",
|
||
"protocol": "Entry → exit protocol",
|
||
"username": "SOCKS5 username",
|
||
"password": "Landing password",
|
||
"importLink": "Import from link",
|
||
"importPlaceholder": "socks5://user:pass@host:port",
|
||
"importApply": "Import",
|
||
"importFailed": "Could not parse that link",
|
||
"help": "Applies when this inbound is deployed to an agent node: on every config pull the panel compiles this forwarding into a dedicated outbound plus a routing rule for that agent. A managed landing's address and credentials are resolved from the chosen inbound at build time."
|
||
},
|
||
"sniffingMetadataOnly": "Только метаданные",
|
||
"sniffingRouteOnly": "Только маршрутизация",
|
||
"sniffingIpsExcluded": "Исключённые IP",
|
||
"sniffingDomainsExcluded": "Исключённые домены",
|
||
"decryption": "Расшифрование",
|
||
"encryption": "Шифрование",
|
||
"vlessAuthX25519": "X25519 (native)",
|
||
"vlessAuthMlkem768": "ML-KEM-768 (native)",
|
||
"vlessAuthX25519Xorpub": "X25519 (xorpub)",
|
||
"vlessAuthX25519Random": "X25519 (random)",
|
||
"vlessAuthMlkem768Xorpub": "ML-KEM-768 (xorpub)",
|
||
"vlessAuthMlkem768Random": "ML-KEM-768 (random)",
|
||
"vlessAuthCustom": "Свой",
|
||
"vlessAuthSelected": "Выбрано: {auth}",
|
||
"vlessAuthGenerate": "Генерация ключей",
|
||
"vlessAuthGenerateButton": "Сгенерировать",
|
||
"advanced": {
|
||
"title": "Разделы JSON входящего",
|
||
"subtitle": "Полный JSON входящего и отдельные редакторы для settings, sniffing и streamSettings.",
|
||
"all": "Всё",
|
||
"allHelp": "Полный объект входящего со всеми полями в одном редакторе.",
|
||
"settings": "Настройки",
|
||
"settingsHelp": "Обёртка блока settings Xray:",
|
||
"sniffing": "Sniffing",
|
||
"sniffingHelp": "Обёртка блока sniffing Xray:",
|
||
"stream": "Stream",
|
||
"streamHelp": "Обёртка блока stream Xray:"
|
||
},
|
||
"subSortIndex": "Порядок",
|
||
"inboundInfo": "Информация о подключении",
|
||
"exportInbound": "Экспорт подключений",
|
||
"import": "Импортировать",
|
||
"importInbound": "Импорт подключений",
|
||
"periodicTrafficResetTitle": "Сброс трафика",
|
||
"periodicTrafficResetDay": "День ежемесячного сброса",
|
||
"periodicTrafficReset": {
|
||
"never": "Никогда",
|
||
"daily": "Ежедневно",
|
||
"weekly": "Еженедельно",
|
||
"monthly": "Ежемесячно",
|
||
"hourly": "Ежечасно"
|
||
},
|
||
"toasts": {
|
||
"obtain": "Получить",
|
||
"updateSuccess": "Обновление прошло успешно",
|
||
"logCleanSuccess": "Лог был очищен",
|
||
"inboundUpdateSuccess": "Подключение успешно обновлено",
|
||
"inboundCreateSuccess": "Подключение успешно создано",
|
||
"bulkDeleted": "Удалено подключений: {count}",
|
||
"bulkDeletedMixed": "Удалено: {ok}, не удалось: {failed}",
|
||
"clonedMany": "Скопировано подключений: {count}",
|
||
"clonedMixed": "Скопировано: {ok}, не удалось: {failed}",
|
||
"inboundDeleteSuccess": "Подключение успешно удалено",
|
||
"inboundClientAddSuccess": "Клиент(ы) подключения добавлен(ы)",
|
||
"inboundClientDeleteSuccess": "Клиент подключения удалён",
|
||
"inboundClientUpdateSuccess": "Клиент подключения обновлён",
|
||
"savedNodeOfflineWillSync": "Сохранено локально. Опорный узел отключён или недоступен — изменение синхронизируется после повторного подключения.",
|
||
"resetAllClientTrafficSuccess": "Весь трафик клиента сброшен",
|
||
"resetAllTrafficSuccess": "Весь трафик сброшен",
|
||
"resetInboundClientTrafficSuccess": "Трафик сброшен",
|
||
"resetInboundTrafficSuccess": "Входящий трафик сброшен",
|
||
"trafficGetError": "Ошибка получения данных о трафике",
|
||
"getNewX25519CertError": "Ошибка при получении сертификата X25519.",
|
||
"getNewmldsa65Error": "Ошибка при получении сертификата mldsa65.",
|
||
"getNewVlessEncError": "Ошибка при получении сертификата VlessEnc.",
|
||
"scanRealityTargetError": "Не удалось просканировать цель REALITY.",
|
||
"scanRealityTargetFeasible": "Цель подходит — поля target и SNI заполнены.",
|
||
"scanRealityTargetNotFeasible": "Цель доступна, но не подходит для REALITY.",
|
||
"scanRealityTargetPrivate": "Цель работает, но находится в приватной (локальной) сети.",
|
||
"invalidClientField": "Клиент {client}: поле {field} — {reason}",
|
||
"invalidField": "{field} — {reason}",
|
||
"moreIssues": "{message} (+{count} ещё)"
|
||
},
|
||
"form": {
|
||
"echSockopt": "ECH Sockopt",
|
||
"echSockoptTip": "Параметры сокета для соединения, через которое Xray получает список конфигураций ECH (например, можно направить запрос через исходящее dialerProxy). Оставьте отключённым для значений по умолчанию.",
|
||
"curvePreferences": "Предпочтения кривых",
|
||
"curvePreferencesTip": "Ограничьте кривые обмена ключами TLS, которые предлагает сервер, в порядке предпочтения (например, X25519MLKEM768, X25519). Оставьте пустым для значений по умолчанию Xray-core.",
|
||
"masterKeyLog": "Лог мастер-ключей",
|
||
"masterKeyLogTip": "Путь для записи мастер-ключей TLS (формат SSLKEYLOGFILE) для отладки с помощью Wireshark. В рабочей среде оставляйте пустым — любой, у кого есть этот файл, сможет расшифровать трафик.",
|
||
"verifyPeerCertByName": "Проверять сертификат пира по имени",
|
||
"verifyPeerCertByNameTip": "Указывает клиентам проверять сертификат сервера по этому имени вместо SNI. Имена через запятую. Только для панели — включается в ссылки для обмена (vcn). Современная замена allowInsecure, который Xray удалил после 2026-06-01.",
|
||
"pinFromCert": "Заполнить из сертификата этого входящего",
|
||
"pinFromRemote": "Получить хеш, пингуя SNI (xray tls ping)",
|
||
"pinFromRemoteNoSni": "Сначала задайте SNI (serverName), чтобы пинговать удалённый сертификат.",
|
||
"pinFromRemoteFailed": "Не удалось получить хеш удалённого сертификата.",
|
||
"limitFallback": "Ограничение fallback",
|
||
"limitFallbackUpload": "Ограничение загрузки fallback",
|
||
"limitFallbackDownload": "Ограничение скачивания fallback",
|
||
"afterBytes": "После байтов",
|
||
"afterBytesTip": "Позволяет fallback работать на полной скорости в течение этого количества байтов, после чего начинается ограничение. 0 = ограничивать с первого байта.",
|
||
"bytesPerSec": "Байт в секунду",
|
||
"bytesPerSecTip": "Ограничение скорости (байт/с) для трафика fallback после порога, чтобы пробы не могли использовать ваш сервер как бесплатный канал к цели. 0 = без ограничения (отключает это направление).",
|
||
"burstBytesPerSec": "Пиковые байты в секунду",
|
||
"burstBytesPerSecTip": "Допуск для коротких всплесков выше постоянной скорости (размер token-bucket). Если меньше, чем «Байт в секунду», повышается до этого значения.",
|
||
"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": "Метод шифрования",
|
||
"fakeTlsDomain": "Домен FakeTLS (SNI)",
|
||
"mtprotoSecret": "Секрет",
|
||
"mtgDomainFrontingIp": "IP домен-фронтинга",
|
||
"mtgDomainFrontingPort": "Порт домен-фронтинга",
|
||
"mtgDomainFrontingProxyProtocol": "PROXY-протокол домен-фронтинга",
|
||
"mtgDomainFrontingHint": "Куда mtg отправляет не-Telegram трафик — например, на ваш фейковый сайт NGINX. Оставьте IP пустым, чтобы использовать домен FakeTLS через DNS; порт по умолчанию — 443.",
|
||
"mtgProxyProtocolListener": "Принимать PROXY-протокол (слушатель)",
|
||
"mtgPreferIp": "Предпочтение IP",
|
||
"mtgDebug": "Журнал отладки",
|
||
"mtgRouteThroughXray": "Маршрутизация через Xray",
|
||
"mtgRouteThroughXrayHint": "Направляйте трафик Telegram этого прокси через Xray, чтобы он подчинялся вашим правилам маршрутизации. Сайдкар mtg выходит через локальный SOCKS-мост с тегом этого входящего подключения; используйте этот тег на вкладке «Маршрутизация» для расширенных правил.",
|
||
"mtgRouteOutbound": "Исходящее",
|
||
"mtgRouteOutboundHint": "Необязательно. Принудительно направить трафик Telegram через это исходящее соединение (или балансировщик). Оставьте пустым, чтобы решали ваши правила маршрутизации.",
|
||
"mtgRouteOutboundPlaceholder": "Использовать правила маршрутизации",
|
||
"mtprotoFakeTlsDomainHint": "Домен FakeTLS по умолчанию для генерации секрета нового клиента. Каждый клиент может использовать свой домен.",
|
||
"mtgThrottleMaxConnections": "Макс. подключений",
|
||
"mtgThrottleMaxConnectionsHint": "Ограничение одновременных подключений всех пользователей по справедливому распределению. 0 — отключено.",
|
||
"mtgAdTagInvalid": "Рекламный тег должен содержать ровно 32 шестнадцатеричных символа.",
|
||
"mtgPublicIpv4": "Публичный IPv4",
|
||
"mtgPublicIpv6": "Публичный IPv6",
|
||
"mtgPublicIpHint": "Доступный публичный адрес этого сервера, используемый промежуточным прокси рекламного тега. Оставьте пустым, чтобы mtg определил его автоматически.",
|
||
"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",
|
||
"sessionIDTable": "Таблица Session ID",
|
||
"sessionIDTableHint": "Набор символов для генерации session ID: предопределённое имя (ALPHABET, Base62, hex, number, …) или строка ASCII. Оставьте пустым для значения xray-core по умолчанию.",
|
||
"sessionIDLength": "Длина Session ID",
|
||
"sessionIDLengthHint": "Длина или диапазон (например, 8-16) генерируемого session ID. Используется только когда задана таблица; минимум должен быть больше 0.",
|
||
"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",
|
||
"forceTls": "Принудительный TLS",
|
||
"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",
|
||
"tcpWindowClampHint": "Оставьте 0, чтобы использовать значение по умолчанию ОС. Ненулевые значения ограничивают объявляемое окно приёма TCP; значения вроде 600 (из примера в документации Xray) могут обрушить пропускную способность на каналах с высокой задержкой.",
|
||
"tcpFastOpen": "TCP Fast Open",
|
||
"multipathTcp": "Multipath TCP",
|
||
"penetrate": "Penetrate",
|
||
"v6Only": "Только V6",
|
||
"tcpCongestion": "TCP Congestion",
|
||
"dialerProxy": "Dialer Proxy",
|
||
"trustedXForwardedFor": "Доверенный X-Forwarded-For",
|
||
"trustedXForwardedForHint": "Доверять этому заголовку запроса для определения реального IP клиента (например, CF-Connecting-IP за CDN Cloudflare). Работает только на транспортах WebSocket, HTTPUpgrade, XHTTP и gRPC. Оставьте пустым, чтобы игнорировать заголовки пересылки.",
|
||
"proxyProtocolHint": "Принимать заголовок PROXY protocol, чтобы получить реальный IP клиента от вышестоящего L4-туннеля или релея (HAProxy, gost, nginx-stream, Xray dokodemo-door) либо Cloudflare Spectrum. Вышестоящий узел ДОЛЖЕН отправлять PROXY protocol. Работает на TCP, WebSocket, HTTPUpgrade и gRPC; не работает на mKCP.",
|
||
"realClientIp": "Реальный IP клиента",
|
||
"realClientIpHint": "Получать реальный IP посетителя, когда трафик приходит на этот входящий через CDN или релей, вместо адреса промежуточного узла. Выберите пресет, чтобы заполнить соответствующие поля sockopt ниже. Эти поля никогда не отправляются клиентам в подписках.",
|
||
"realClientIpPresetOff": "Выкл. / напрямую",
|
||
"realClientIpPresetCloudflare": "Cloudflare CDN",
|
||
"realClientIpPresetProxyProtocol": "L4-релей / Spectrum (PROXY)",
|
||
"realClientIpTrustedHeaderTransportWarn": "Trusted X-Forwarded-For работает только на WebSocket, HTTPUpgrade и XHTTP. На текущем транспорте этот заголовок игнорируется.",
|
||
"realClientIpProxyProtocolTransportWarn": "PROXY protocol не поддерживается на этом транспорте (mKCP). Используйте TCP/RAW, WebSocket, HTTPUpgrade, gRPC или XHTTP.",
|
||
"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",
|
||
"pinnedPeerCertSha256": "SHA-256 сертификата пира",
|
||
"pinnedPeerCertSha256Tip": "SHA-256-хеши сертификата пира в виде шестнадцатеричной строки (напр. e8e2d3…), через запятую. Только для панели — не записывается в конфиг xray сервера, но включается в ссылки-приглашения, чтобы клиенты могли закрепить сертификат.",
|
||
"pinnedPeerCertSha256Placeholder": "шестнадцатеричный хеш(и), через запятую",
|
||
"getNewEchCert": "Получить новый ECH-сертификат",
|
||
"show": "Показать",
|
||
"xver": "Xver",
|
||
"target": "Цель",
|
||
"maxTimeDiff": "Макс. разница во времени (мс)",
|
||
"minClientVer": "Мин. версия клиента",
|
||
"maxClientVer": "Макс. версия клиента",
|
||
"minClientVerHint": "Пустое поле не означает «без ограничений»: Xray-core применит встроенный минимум используемой сборки ядра (26.3.27 в текущих релизах) и отклонит клиентов, сообщающих более старую версию, — включая сторонние ядра, такие как Mihomo и sing-box. Значение 1.0.0 разрешит их, но допустит устаревшие TLS-отпечатки.",
|
||
"maxClientVerHint": "Пустое поле — без верхнего предела. Если задано, значение не должно быть ниже действующего минимума — «Мин. версия клиента», а при пустом том поле — встроенного минимума Xray-core, иначе все клиенты будут отклонены.",
|
||
"clientVerInvalid": "Версия клиента — до трёх чисел через точку, каждое 0-255 (например 26.3.27)",
|
||
"maxClientVerBelowMin": "Макс. версия клиента не должна быть ниже минимальной версии клиента",
|
||
"shortIds": "Short IDs",
|
||
"realityTargetHint": "Обязательно. Должно содержать порт (например, example.com:443). Без порта Xray-core не запускается.",
|
||
"realityTargetRequired": "Цель REALITY обязательна",
|
||
"realityTargetNeedsPort": "Цель REALITY должна содержать порт (например, example.com:443)",
|
||
"realityTargetInvalidPort": "У цели REALITY указан недопустимый порт",
|
||
"scan": "Сканировать",
|
||
"findTargets": "Найти цели",
|
||
"scanModalTitle": "Сканер целей REALITY",
|
||
"scanModalDesc": "Проверьте домен или просканируйте диапазон IP / CIDR, чтобы обнаружить новые цели REALITY по их сертификатам. Оставьте поле пустым для проверки обычных кандидатов.",
|
||
"scanDiscoverPlaceholder": "IP, CIDR или домен — пусто для обычных кандидатов",
|
||
"scanStatus": "Статус",
|
||
"scanFeasible": "Подходит",
|
||
"scanNotFeasible": "Не подходит",
|
||
"scanCurve": "Обмен ключами",
|
||
"scanCert": "Сертификат",
|
||
"scanCertInvalid": "Не доверенный",
|
||
"scanCertExpiry": "Сертификат истекает",
|
||
"scanSniUsed": "Использованный SNI",
|
||
"scanPrivateNote": "Проверено во внутренней (локальной) сети — этот адрес недоступен из интернета.",
|
||
"scanPrivateConfirmTitle": "Цель в локальной сети",
|
||
"scanPrivateConfirmContent": "«{target}» указывает на приватный или локальный адрес. Проверка обойдёт SSRF-защиту панели только для этого запроса. Продолжить?",
|
||
"scanLatency": "Задержка",
|
||
"scanUse": "Выбрать",
|
||
"scanRescan": "Пересканировать",
|
||
"spiderX": "SpiderX",
|
||
"spiderXHint": "Сид на клиента — панель формирует из него уникальный путь spx для каждого клиента; перегенерируйте, чтобы обновить пути всех",
|
||
"getNewCert": "Получить новый сертификат",
|
||
"mldsa65Seed": "mldsa65 Seed",
|
||
"mldsa65Verify": "mldsa65 Verify",
|
||
"getNewSeed": "Получить новый Seed",
|
||
"listenHelp": "Можно также указать путь Unix-сокета (например, /run/xray/in.sock) или имя абстрактного сокета с префиксом @ (например, @xray/in.sock), чтобы слушать сокет вместо TCP-порта — в этом случае задайте порт 0.",
|
||
"shareAddrStrategy": "Стратегия адреса для ссылок",
|
||
"shareAddrStrategyHelp": "Определяет, какой адрес записывать в экспортируемые ссылки, QR-коды и выдачу подписки.",
|
||
"shareAddr": "Пользовательский адрес для ссылок",
|
||
"shareAddrHelp": "Используется только когда стратегия адреса для ссылок — пользовательская. Укажите хост или IP без схемы и порта.",
|
||
"subSortIndex": "Порядок в подписке",
|
||
"subSortIndexHelp": "Позиция ссылок этого входящего в выдаче подписки (страница подписки и клиентские приложения). Меньшие значения идут первыми; при равных значениях сохраняется порядок создания. Не влияет на список входящих в панели.",
|
||
"disableFlow": "Отключить поток XTLS",
|
||
"disableFlowHelp": "Исключить этот inbound из автоматического добавления xtls-rprx-vision, даже если его транспорт поддерживает flow (например, туннелированный XHTTP inbound с шифрованием VLESS). Клиенты сохраняют Vision на других подходящих inbound в той же подписке. Только VLESS.",
|
||
"shareAddrStrategyOptions": {
|
||
"node": "Адрес узла",
|
||
"listen": "Адрес прослушивания inbound",
|
||
"custom": "Пользовательская"
|
||
}
|
||
},
|
||
"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}"
|
||
},
|
||
"sniffingDestOverride": "Переопределение назначения"
|
||
},
|
||
"clients": {
|
||
"tabBasics": "Основные",
|
||
"tabCredentials": "Учетные данные",
|
||
"tabLinks": "Ссылки",
|
||
"wireguardConfig": "Конфигурация WireGuard",
|
||
"config": "Конфигурация",
|
||
"linksHint": "Добавьте сторонние ссылки и URL удалённых подписок, чтобы включить их в подписку этого клиента.",
|
||
"addExternalLink": "Добавить внешнюю ссылку",
|
||
"addExternalSubscription": "Добавить внешнюю подписку",
|
||
"noExternalLinks": "Пока нет внешних ссылок.",
|
||
"noExternalSubscriptions": "Пока нет внешних подписок.",
|
||
"namePrefix": "Префикс имени",
|
||
"lastFetchAt": "Последнее обновление",
|
||
"lastFetchError": "Ошибка обновления",
|
||
"neverFetched": "Ещё не загружено",
|
||
"submitEdit": "Сохранить изменения",
|
||
"clientCount": "Количество клиентов",
|
||
"bulk": "Массовое добавление",
|
||
"selectAll": "Выбрать всё",
|
||
"clearAll": "Очистить всё",
|
||
"method": "Метод",
|
||
"first": "Первый",
|
||
"last": "Последний",
|
||
"ipLog": "Журнал IP",
|
||
"prefix": "Префикс",
|
||
"postfix": "Постфикс",
|
||
"delayedStart": "Старт после первого использования",
|
||
"expireDays": "Длительность (дней)",
|
||
"renew": "Автопродление",
|
||
"renewDesc": "Автоматическое продление после окончания. (0 = отключено) (единица: день)",
|
||
"renewDays": "Автопродление (дней)",
|
||
"searchPlaceholder": "Поиск email, комментария, sub ID, UUID, пароля, auth, Telegram ID…",
|
||
"filterTitle": "Фильтр клиентов",
|
||
"clearAllFilters": "Очистить все",
|
||
"filters": {
|
||
"nodes": "Узлы",
|
||
"localPanel": "Локально (эта панель)"
|
||
},
|
||
"showingCount": "Показано {shown} из {total}",
|
||
"sortOldest": "Сначала старые",
|
||
"sortNewest": "Сначала новые",
|
||
"sortRecentlyUpdated": "Недавно обновлены",
|
||
"sortRecentlyOnline": "Недавно в сети",
|
||
"sortEmailAZ": "Email А→Я",
|
||
"sortEmailZA": "Email Я→А",
|
||
"sortMostTraffic": "Больше трафика",
|
||
"sortHighestRemaining": "Больше остатка",
|
||
"sortExpiringSoonest": "Скорее истекают",
|
||
"has": "Есть",
|
||
"hasNot": "Нет",
|
||
"actions": "Действия",
|
||
"totalGB": "Лимит трафика (ГБ)",
|
||
"totalGBDesc": "Квота трафика для этого клиента. 0 = без ограничений.",
|
||
"expiryTime": "Срок действия",
|
||
"addClients": "Добавить клиентов",
|
||
"limitIp": "Лимит IP",
|
||
"limitIpDesc": "Максимум одновременных IP-адресов. 0 = без ограничений.",
|
||
"limitHwid": "Лимит HWID",
|
||
"limitHwidDesc": "Максимум зарегистрированных устройств для запросов подписки. 0 = без ограничений.",
|
||
"hwidLog": "Устройства HWID",
|
||
"hwidDevice": "Зарегистрированное устройство",
|
||
"noHwids": "Устройств HWID пока нет",
|
||
"firstSeen": "Первое появление",
|
||
"lastSeen": "Последнее появление",
|
||
"deleteHwid": "Удалить устройство",
|
||
"deleteHwidConfirm": "Удалить это устройство? При следующем запросе подписки оно зарегистрируется заново.",
|
||
"hwidDeleted": "Устройство удалено.",
|
||
"clearHwidsConfirm": "Удалить все зарегистрированные устройства? Каждое устройство зарегистрируется заново при следующем запросе подписки.",
|
||
"limitIpFail2banMissing": "Fail2ban не установлен, поэтому ограничение по IP не может быть применено. Установите Fail2ban из bash-меню x-ui, чтобы включить эту опцию.",
|
||
"limitIpFail2banWindows": "Fail2ban недоступен в Windows, поэтому ограничение по IP не может быть применено.",
|
||
"limitIpDisabled": "Функция ограничения по IP отключена на этом сервере.",
|
||
"password": "Пароль",
|
||
"passwordDesc": "Используется только клиентами Trojan и Shadowsocks; игнорируется для VLESS, VMess, Hysteria и WireGuard.",
|
||
"subId": "ID подписки",
|
||
"online": "В сети",
|
||
"email": "Email",
|
||
"emailInvalidChars": "Email не может содержать пробелы, '/', '\\' или управляющие символы",
|
||
"subIdInvalidChars": "ID подписки не может содержать пробелы, '/', '\\' или управляющие символы",
|
||
"group": "Группа",
|
||
"groupDesc": "Логическая метка для группировки связанных клиентов (например, команда, клиент, регион). Фильтруется из панели инструментов.",
|
||
"groupPlaceholder": "например, customer-a",
|
||
"comment": "Комментарий",
|
||
"traffic": "Трафик",
|
||
"speed": "Скорость",
|
||
"offline": "Не в сети",
|
||
"addClient": "Добавить клиента",
|
||
"qrCode": "QR-код",
|
||
"clientInfo": "Информация о клиенте",
|
||
"editClient": "Изменить клиента",
|
||
"client": "Клиент",
|
||
"enabled": "Включён",
|
||
"remaining": "Остаток",
|
||
"duration": "Длительность",
|
||
"attachedInbounds": "Привязанные входящие",
|
||
"selectInbound": "Выберите один или несколько входящих",
|
||
"selectAllInbounds": "Выбрать всё",
|
||
"clearAllInbounds": "Очистить всё",
|
||
"noSubId": "У этого клиента нет subId, ссылка для общего доступа недоступна.",
|
||
"noLinks": "Нет ссылок для общего доступа — сначала привяжите клиента к входящему с поддерживаемым протоколом.",
|
||
"link": "Ссылка",
|
||
"resetNotPossible": "Сначала привяжите этого клиента к входящему.",
|
||
"resetAllTraffics": "Сбросить трафик всех клиентов",
|
||
"resetAllTrafficsTitle": "Сбросить трафик всех клиентов?",
|
||
"resetAllTrafficsContent": "Счётчики отправки/приёма всех клиентов сбрасываются в ноль. Квоты и срок действия не затрагиваются. Это действие нельзя отменить.",
|
||
"deleteConfirmTitle": "Удалить клиента {email}?",
|
||
"deleteConfirmContent": "Клиент будет удалён из всех привязанных входящих, а его запись трафика будет уничтожена. Это действие нельзя отменить.",
|
||
"attach": "Привязать",
|
||
"adjust": "Корректировка",
|
||
"subLinks": "Sub-ссылки",
|
||
"enable": "Включить",
|
||
"disable": "Отключить",
|
||
"bulkEnableConfirmTitle": "Включить {count} клиентов?",
|
||
"bulkEnableConfirmContent": "Включает каждого выбранного клиента на всех привязанных подключениях. Клиенты с исчерпанной квотой или истёкшим сроком будут автоматически отключены снова.",
|
||
"bulkDisableConfirmTitle": "Отключить {count} клиентов?",
|
||
"bulkDisableConfirmContent": "Отключает каждого выбранного клиента на всех привязанных подключениях. Они сразу теряют доступ, но их записи и трафик сохраняются.",
|
||
"selectedCount": "{count} выбрано",
|
||
"attachToInboundsTitle": "Привязать {count} клиент(ов) к входящим",
|
||
"attachToInboundsDesc": "Привязывает выбранных {count} клиент(ов) (тот же UUID/пароль и общий трафик) к выбранным входящим. Существующие привязки сохраняются.",
|
||
"attachToInboundsTargets": "Целевые входящие",
|
||
"attachToInboundsNoTargets": "Нет доступных многопользовательских входящих для привязки.",
|
||
"detach": "Отвязать",
|
||
"detachFromInboundsTitle": "Отвязать {count} клиент(ов) от входящих",
|
||
"detachFromInboundsDesc": "Удаляет выбранных {count} клиент(ов) из выбранных входящих. Пары, где клиент не был привязан, тихо пропускаются. Записи клиентов сохраняются (используйте Delete для полного удаления).",
|
||
"detachFromInboundsTargets": "Входящие для отвязки",
|
||
"detachFromInboundsNoTargets": "Нет доступных многопользовательских входящих.",
|
||
"detachFromInboundsResult": "Отвязано {detached}, пропущено {skipped}.",
|
||
"detachFromInboundsResultMixed": "Отвязано {detached}, пропущено {skipped}, ошибок {errors}.",
|
||
"subLinksTitle": "Sub-ссылки ({count})",
|
||
"subLinkColumn": "URL подписки",
|
||
"subLinksCopyAll": "Копировать все",
|
||
"subLinksCopiedAll": "Скопировано {count} ссылок",
|
||
"subLinksEmpty": "Ни у одного из выбранных клиентов нет ID подписки.",
|
||
"subLinksDisabled": "Сервис подписки отключён.",
|
||
"subLinksDisabledHint": "Включите подписку в Настройки панели → Подписка для генерации ссылок.",
|
||
"bulkDeleteConfirmTitle": "Удалить {count} клиентов?",
|
||
"bulkDeleteConfirmContent": "Каждый выбранный клиент удаляется из всех привязанных входящих, его запись трафика уничтожается. Это действие нельзя отменить.",
|
||
"bulkAdjustTitle": "Изменить {count} клиентов",
|
||
"bulkAdjustHint": "Положительные значения добавляют, отрицательные — уменьшают. Клиенты с неограниченным сроком или трафиком пропускаются для соответствующего поля.",
|
||
"bulkAdjustNothing": "Укажите дни или трафик перед применением.",
|
||
"addDays": "Добавить дни",
|
||
"addTrafficGB": "Добавить трафик (ГБ)",
|
||
"bulkFlow": "Задать flow",
|
||
"bulkFlowNoChange": "Без изменений",
|
||
"bulkFlowDisable": "Отключить (очистить flow)",
|
||
"delDepleted": "Удалить исчерпанных",
|
||
"delDepletedConfirmTitle": "Удалить исчерпанных клиентов?",
|
||
"delDepletedConfirmContent": "Удаляются все клиенты, у которых исчерпана квота трафика или истёк срок. Это действие нельзя отменить.",
|
||
"exportClients": "Экспортировать клиентов",
|
||
"importClients": "Импортировать клиентов",
|
||
"import": "Импорт",
|
||
"delOrphans": "Удалить клиентов без входящего",
|
||
"delOrphansConfirmTitle": "Удалить клиентов без входящего?",
|
||
"delOrphansConfirmContent": "Удаляются все клиенты, не привязанные ни к одному входящему, вместе с их записями трафика. Это действие нельзя отменить.",
|
||
"auth": "Авторизация",
|
||
"hysteriaAuth": "Hysteria Auth",
|
||
"hysteriaAuthDesc": "Учётные данные, используемые только клиентами Hysteria. Для Trojan и Shadowsocks используйте поле «Пароль».",
|
||
"uuid": "UUID",
|
||
"flow": "Flow",
|
||
"vmessSecurity": "VMess Security",
|
||
"wireguardPrivateKey": "Приватный ключ WireGuard",
|
||
"wireguardPublicKey": "Публичный ключ WireGuard",
|
||
"wireguardPreSharedKey": "Общий ключ WireGuard",
|
||
"wireguardAllowedIPs": "Разрешённые IP WireGuard",
|
||
"wireguardAllowedIPsHint": "Оставьте пустым для автоназначения; разделяйте записи запятыми",
|
||
"amneziaWgPrivateKey": "Приватный ключ AmneziaWG",
|
||
"amneziaWgPublicKey": "Публичный ключ AmneziaWG",
|
||
"amneziaWgPreSharedKey": "Общий ключ AmneziaWG",
|
||
"amneziaWgAllowedIPs": "Разрешённые IP AmneziaWG",
|
||
"amneziaWgAllowedIPsHint": "Оставьте пустым для автоназначения; разделяйте записи запятыми",
|
||
"amneziaWgForwardedPorts": "Проброс портов",
|
||
"amneziaWgForwardedPortsHint": "Порты/диапазоны, DNAT'ящиеся на этого клиента, например 80, 443, 8000-8100. Оставьте пустым, если не нужно.",
|
||
"amneziaWgConfig": "Конфиг AmneziaWG",
|
||
"mtprotoSecret": "Секрет MTProto",
|
||
"mtprotoSecretHint": "Секрет FakeTLS клиента. Перегенерируйте, чтобы сменить.",
|
||
"mtprotoAdTag": "Рекламный тег (спонсорский канал)",
|
||
"mtprotoAdTagHint": "Необязательный шестнадцатеричный тег из 32 символов, получаемый при регистрации прокси в Telegram. Если задан, этот клиент маршрутизируется через промежуточные прокси Telegram, и спонсорский канал появляется вверху списка чатов.",
|
||
"reverseTag": "Обратный тег",
|
||
"reverseTagPlaceholder": "Необязательный Reverse tag",
|
||
"telegramId": "ID пользователя Telegram",
|
||
"telegramIdPlaceholder": "Числовой ID пользователя Telegram (0 = нет)",
|
||
"ipLimit": "Лимит IP",
|
||
"toasts": {
|
||
"deleted": "Клиент удалён",
|
||
"trafficReset": "Трафик сброшен",
|
||
"allTrafficsReset": "Трафик всех клиентов сброшен",
|
||
"bulkDeleted": "Удалено клиентов: {count}",
|
||
"bulkDeletedMixed": "Удалено: {ok}, не удалось: {failed}",
|
||
"bulkEnabled": "Включено клиентов: {count}",
|
||
"bulkEnabledMixed": "Включено: {ok}, не удалось: {failed}",
|
||
"bulkDisabled": "Отключено клиентов: {count}",
|
||
"bulkDisabledMixed": "Отключено: {ok}, не удалось: {failed}",
|
||
"bulkCreated": "Создано клиентов: {count}",
|
||
"bulkCreatedMixed": "Создано: {ok}, не удалось: {failed}",
|
||
"bulkAdjusted": "Изменено клиентов: {count}",
|
||
"bulkAdjustedMixed": "Изменено: {ok}, пропущено: {skipped}",
|
||
"delDepleted": "Удалено исчерпанных клиентов: {count}",
|
||
"delOrphans": "Удалено клиентов без входящего: {count}",
|
||
"imported": "Импортировано клиентов: {count}",
|
||
"importedMixed": "Импортировано: {ok}, пропущено: {failed}"
|
||
},
|
||
"renewMax": "Лимит продлений",
|
||
"renewMaxDesc": "Сколько раз автопродление может сработать, прежде чем клиент будет оставлен истекать. 0 — без ограничения. Догон нескольких пропущенных периодов расходует по одному продлению на период.",
|
||
"renewOnDay": "Продлевать числа",
|
||
"renewOnDayDesc": "Продлевать этого числа каждого месяца, в полночь по часовому поясу панели, вместо интервала в днях. Если в месяце такого числа нет, продление придётся на последний день. 0 — оставить режим интервала.",
|
||
"renewsUsed": "Продлений израсходовано"
|
||
},
|
||
"nodes": {
|
||
"addNode": "Добавить узел",
|
||
"editNode": "Изменить узел",
|
||
"totalNodes": "Всего узлов",
|
||
"onlineNodes": "В сети",
|
||
"offlineNodes": "Не в сети",
|
||
"avgLatency": "Средняя задержка",
|
||
"name": "Имя",
|
||
"namePlaceholder": "напр. de-frankfurt-1",
|
||
"addressPlaceholder": "panel.example.com или 1.2.3.4",
|
||
"remark": "Примечание",
|
||
"scheme": "Схема",
|
||
"address": "Адрес",
|
||
"port": "Порт",
|
||
"basePath": "Базовый путь",
|
||
"apiToken": "API Токен",
|
||
"apiTokenPlaceholder": "Токен со страницы Настроек удалённой панели",
|
||
"apiTokenHint": "Удалённая панель показывает свой токен API в разделе Учетная запись → Токен API.",
|
||
"apiTokenKeepHint": "Оставьте пустым, чтобы сохранить текущий токен",
|
||
"allowPrivateAddress": "Разрешить частный адрес",
|
||
"allowPrivateAddressHint": "Включить только для узлов в частной сети или VPN.",
|
||
"outboundTag": "Исходящее подключение",
|
||
"outboundTagHint": "Маршрутизируйте трафик API панели этого узла через выбранный исходящий Xray. Входящий мост обратной петли автоматически добавляется в текущую конфигурацию и применяется в реальном времени. Оставьте пустым для прямого подключения.",
|
||
"outboundTagPlaceholder": "Прямое подключение",
|
||
"inboundSyncMode": "Импорт инбаундов",
|
||
"inboundSyncModeHint": "Выберите, какие инбаунды импортировать с этой ноды. Для существующих нод по умолчанию импортируются все.",
|
||
"allInbounds": "Все инбаунды",
|
||
"selectedInbounds": "Выбранные инбаунды",
|
||
"inboundTags": "Инбаунды",
|
||
"inboundTagsHint": "Выбор сопоставляется по тегу инбаунда. Пустой список не импортирует ничего.",
|
||
"inboundTagsPlaceholder": "Загрузите и выберите инбаунды",
|
||
"loadInbounds": "Загрузить инбаунды с ноды",
|
||
"inboundsLoaded": "Загружено инбаундов: {{count}}",
|
||
"inboundsLoadFailed": "Не удалось загрузить инбаунды",
|
||
"enable": "Включён",
|
||
"status": "Статус",
|
||
"cpu": "CPU",
|
||
"mem": "Память",
|
||
"netUp": "Отдача (KB/s)",
|
||
"netDown": "Приём (KB/s)",
|
||
"uptime": "Аптайм",
|
||
"latency": "Задержка",
|
||
"lastHeartbeat": "Последний пинг",
|
||
"coreVersion": "Core version",
|
||
"panelVersion": "Версия панели",
|
||
"actions": "Действия",
|
||
"probe": "Проверить сейчас",
|
||
"updatePanel": "Обновить панель",
|
||
"updateSelected": "Обновить выбранные ({count})",
|
||
"updateAvailable": "Доступно обновление",
|
||
"updateConfirmTitle": "Обновить {count} узлов до последней версии?",
|
||
"updateConfirmContent": "Каждый выбранный узел загрузит последний релиз и перезапустится. Обновляются только включённые узлы в сети.",
|
||
"updateAgent": "Update Agent",
|
||
"updateAgentConfirmContent": "The agent on this node will download the latest release, verify it, and restart onto it. If the update fails, the node keeps running the current version.",
|
||
"agentInstallCommand": "Install Command",
|
||
"agentTokenNotStored": "This node's token is not stored on the master yet, so the command below has no token. The token is saved on the node itself in /etc/x-ui/agent.json; it will be filled in here automatically after the agent's next authenticated request.",
|
||
"updateDevChannel": "Обновить до канала разработки (последний коммит)",
|
||
"testConnection": "Проверить соединение",
|
||
"connectionOk": "Соединение в порядке ({ms} мс)",
|
||
"connectionFailed": "Не удалось подключиться",
|
||
"never": "никогда",
|
||
"justNow": "только что",
|
||
"subNode": "Подузел",
|
||
"subNodeTip": "Только для чтения: подчинённый узел, доступный через {parent}. Управляйте им из собственной панели {parent}.",
|
||
"deleteConfirmTitle": "Удалить узел \"{name}\"?",
|
||
"deleteConfirmContent": "Это остановит мониторинг узла. Сама удалённая панель не будет затронута.",
|
||
"statusValues": {
|
||
"online": "В сети",
|
||
"offline": "Не в сети",
|
||
"unknown": "Неизвестно",
|
||
"xrayError": "Ошибка Xray",
|
||
"xrayStopped": "Остановлен"
|
||
},
|
||
"toasts": {
|
||
"list": "Не удалось загрузить узлы",
|
||
"obtain": "Не удалось загрузить узел",
|
||
"add": "Добавить узел",
|
||
"update": "Обновить узел",
|
||
"delete": "Удалить узел",
|
||
"deleted": "Узел удалён",
|
||
"test": "Проверить соединение",
|
||
"fillRequired": "Имя, адрес, порт и токен API обязательны",
|
||
"probeFailed": "Проверка не удалась",
|
||
"updateStarted": "Обновление панели запущено",
|
||
"updateResult": "Обновление запущено на {ok} узлах, {failed} не удалось",
|
||
"updateNoneEligible": "Выберите хотя бы один включённый узел в сети",
|
||
"saveMtls": "Сохранить mTLS узла",
|
||
"reloadMtls": "Reload master mTLS credential"
|
||
},
|
||
"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. Нажмите «Получить», чтобы считать его с узла сейчас.",
|
||
"pinnedCertPlaceholder": "SHA-256 в base64 или hex",
|
||
"fetchPin": "Получить",
|
||
"pinFetched": "Текущий сертификат узла получен",
|
||
"pinFetchFailed": "Не удалось получить сертификат",
|
||
"nodeType": "Node Type",
|
||
"nodeTypeTraditional": "Traditional Panel Node",
|
||
"nodeTypeAgent": "Agent Lightweight Node",
|
||
"agentHint": "Agent nodes connect out to the master; no address, port or API token needed. An install command is generated on creation.",
|
||
"probeOnly": "Probe only",
|
||
"probeOnlyHint": "Probe-only mode: no proxy core runs on this node; only monitoring (heartbeat, metrics and latency probes) is active.",
|
||
"agentTokenTitle": "Agent Node Setup",
|
||
"agentTokenCreated": "Node {{name}} created successfully",
|
||
"agentTokenHint": "Copy the command below and run it on the node machine. This token is shown only once!",
|
||
"agentTokenInstructions": "The command downloads the installer, configures the master URL and token. The node comes online in ~30s.",
|
||
"agentTokenCopied": "Install command copied",
|
||
"agentTokenCopyFailed": "Copy failed, please copy manually",
|
||
"copyToken": "Copy Install Command",
|
||
"agentMasterUrlHint": "Master URL (used by agent to reach the master; change to public address if behind proxy):",
|
||
"agentMasterUrlRequired": "Master URL is empty — enter the master address first; the install command is generated only then.",
|
||
"probe": {
|
||
"title": "Public status page",
|
||
"hint": "Display and plan data for the public status page. Saving takes effect immediately.",
|
||
"public": "Show on public page",
|
||
"publicRemark": "Public remark",
|
||
"group": "Group",
|
||
"sort": "Sort order",
|
||
"price": "Price",
|
||
"currency": "Currency",
|
||
"billingCycle": "Billing cycle",
|
||
"cycleOnce": "One-time",
|
||
"cycleMonthly": "Monthly",
|
||
"cycleQuarterly": "Quarterly",
|
||
"cycleSemiannual": "Semiannual",
|
||
"cycleYearly": "Yearly",
|
||
"cycleBiennial": "Biennial",
|
||
"cycleTriennial": "Triennial",
|
||
"expiresAt": "Expires on (YYYY-MM-DD)",
|
||
"trafficLimit": "Traffic limit (GB, 0 = unlimited)",
|
||
"trafficMode": "Traffic counting",
|
||
"modeSum": "Up + down",
|
||
"modeUp": "Up only",
|
||
"modeDown": "Down only",
|
||
"modeMax": "Larger of up/down",
|
||
"trafficResetDay": "Traffic reset day",
|
||
"notify": "Expiry / traffic alerts",
|
||
"countryPin": "Country pin (e.g. JP)",
|
||
"ipv4Pin": "IPv4 pin",
|
||
"ipv6Pin": "IPv6 pin",
|
||
"calUp": "Uplink correction (GB)",
|
||
"calDown": "Downlink correction (GB)",
|
||
"calHint": "Corrections are added to the counted traffic (negative values subtract) and apply to panel statistics, the public page and traffic alerts.",
|
||
"statIface": "Counted interface",
|
||
"movedHint": "Probe metadata (pricing, traffic limits, calibration…) is edited on the probe settings page.",
|
||
"goSettings": "Open probe settings",
|
||
"save": "Save status page info",
|
||
"saved": "Status page info saved",
|
||
"saveFailed": "Saving status page info failed"
|
||
},
|
||
"probeTasks": {
|
||
"title": "Probe tasks",
|
||
"intro": "TCP latency probes run by agent nodes. Changes apply on each agent's next config poll (about 30 s); nothing restarts.",
|
||
"loading": "Loading…",
|
||
"empty": "No probe tasks yet. Add one to start measuring latency.",
|
||
"add": "Add probe",
|
||
"name": "Name",
|
||
"target": "Target",
|
||
"targetPlaceholder": "host:port, e.g. 1.1.1.1:443",
|
||
"interval": "Interval (s)",
|
||
"region": "Region",
|
||
"ungrouped": "Ungrouped",
|
||
"autoJoin": "Auto-join",
|
||
"autoJoinOn": "Auto",
|
||
"nodes": "Nodes",
|
||
"nodesPlaceholder": "Assign nodes",
|
||
"actions": "Actions",
|
||
"edit": "Edit",
|
||
"delete": "Delete",
|
||
"deleteConfirm": "Delete this probe and its history?",
|
||
"save": "Save",
|
||
"cancel": "Cancel",
|
||
"saved": "Probe task saved",
|
||
"deleted": "Probe task deleted",
|
||
"loadFailed": "Failed to load probe tasks",
|
||
"saveFailed": "Operation failed",
|
||
"batchTitle": "Batch add",
|
||
"batchPlaceholder": "One target per line, or comma-separated — host:port, e.g. 1.1.1.1:443",
|
||
"batchSubmit": "Add all",
|
||
"batchHint": "The shared fields apply to every target; leave the name empty to name each task after its target.",
|
||
"batchEmpty": "Enter at least one target",
|
||
"batchDone": "Added {{count}} probe tasks"
|
||
}
|
||
},
|
||
"settings": {
|
||
"probeThemes": {
|
||
"title": "Theme store",
|
||
"settingsTitle": "Public status page",
|
||
"publicPage": "Public page",
|
||
"publicPageHint": "When off, the status page and its API answer only to the logged-in panel.",
|
||
"siteName": "Site name",
|
||
"site": "Site URL",
|
||
"githubProxy": "GitHub proxy",
|
||
"githubProxyHint": "Prefix used when downloading theme packages from GitHub; leave empty to connect directly.",
|
||
"favicon": "Site icon (favicon)",
|
||
"touchIcon": "Touch icon (apple-touch-icon)",
|
||
"chooseImage": "Choose image",
|
||
"iconHint": "PNG, ICO, SVG, WebP, JPEG or GIF, at most 20 KiB; larger photos are scaled down. The icon follows the site across theme switches.",
|
||
"iconTooLarge": "The image cannot be fitted into 20 KiB",
|
||
"saved": "Saved",
|
||
"saveFailed": "Operation failed",
|
||
"uploadInstall": "Upload theme.tar.gz",
|
||
"installed": "Theme \"{{name}}\" installed",
|
||
"uploadFailed": "Upload failed",
|
||
"installByUrl": "Install by address",
|
||
"installByUrlPlaceholder": "Theme GitHub repository, e.g. https://github.com/author/repo",
|
||
"installFailed": "Install failed",
|
||
"inUse": "In use",
|
||
"use": "Use",
|
||
"builtin": "Built-in",
|
||
"deleteConfirm": "Delete this theme?",
|
||
"updatedTo": "Updated to {{version}}",
|
||
"alreadyLatest": "Already the latest version",
|
||
"config": "Theme settings"
|
||
},
|
||
"probe": {
|
||
"title": "Probe settings",
|
||
"retentionDays": "History retention (days)",
|
||
"retentionHint": "How long probe history (metrics and latency) is kept.",
|
||
"fastInterval": "Fast report interval",
|
||
"fastIntervalHint": "How often agents report runtime metrics; everything else still rides the 60 s heartbeat.",
|
||
"metaTitle": "Per-node probe metadata",
|
||
"metaNodePlaceholder": "Select a node"
|
||
},
|
||
"probeNotify": {
|
||
"notifyTitle": "Notifications",
|
||
"notifyHint": "Offline, traffic and expiry alerts, delivered to the channels below (Telegram reuses the panel bot settings).",
|
||
"grace": "Offline grace (minutes)",
|
||
"graceHint": "An alert fires only after reporting has stopped for this long; a recovery inside the grace stays silent.",
|
||
"trafficPct": "Traffic alert threshold (%)",
|
||
"trafficHint": "Alerts once at this percentage and once more at 100%, once per billing period each; 0 disables traffic alerts.",
|
||
"expiryDays": "Expiry alert (days)",
|
||
"expiryHint": "A daily digest of nodes expiring within this many days; online nodes roll over automatically by billing cycle; 0 disables.",
|
||
"loginAlert": "Panel sign-in alerts",
|
||
"telegramChannel": "Telegram channel",
|
||
"telegramHint": "The token and chat IDs are configured in the Telegram bot settings.",
|
||
"webhookChannel": "Webhook channel",
|
||
"configured": "Configured",
|
||
"notConfigured": "Not configured",
|
||
"telegramText": "Telegram text template",
|
||
"webhookUrl": "Webhook URL",
|
||
"webhookHeaders": "Headers (one Name: value per line)",
|
||
"webhookBody": "Body template (JSON)",
|
||
"secretSet": "Set (leave empty to keep)",
|
||
"clearSecret": "Clear",
|
||
"templateHint": "Placeholders: {{title}} {{message}} {{node}} {{event}} {{time}} {{count}} {{site}}",
|
||
"testSend": "Send a test alert",
|
||
"testSent": "Test alert sent: {{channels}}"
|
||
},
|
||
"defaultTag": "По умолчанию",
|
||
"title": "Настройки",
|
||
"save": "Сохранить",
|
||
"restartPanel": "Перезапустить панель",
|
||
"restartPanelDesc": "Вы уверены, что хотите перезапустить панель? Подтвердите, и перезапуск произойдёт через 3 секунды. Если панель будет недоступна, проверьте лог сервера",
|
||
"restartPanelSuccess": "Панель успешно перезапущена",
|
||
"actions": "Действия",
|
||
"resetDefaultConfig": "Восстановить настройки по умолчанию",
|
||
"panelSettings": "Панель",
|
||
"securitySettings": "Учетная запись",
|
||
"securityWarnings": "Предупреждения безопасности",
|
||
"panelExposed": "Ваша панель может быть открыта:",
|
||
"warnHttp": "Панель работает по обычному HTTP — настройте TLS для продакшна.",
|
||
"warnDefaultPort": "Стандартный порт 2053 широко известен — измените его на случайный.",
|
||
"warnDefaultBasePath": "Базовый путь по умолчанию \"/\" широко известен — измените его на случайный.",
|
||
"warnDefaultSubPath": "Путь подписки по умолчанию \"/sub/\" широко известен — измените его.",
|
||
"panelListeningIP": "IP-адрес для управления панелью",
|
||
"panelListeningIPDesc": "Оставьте пустым для подключения с любого IP",
|
||
"panelListeningDomain": "Домен панели",
|
||
"panelListeningDomainDesc": "Оставьте пустым для подключения с любых доменов и IP.",
|
||
"panelPort": "Порт панели",
|
||
"panelPortDesc": "Порт, на котором работает панель",
|
||
"publicKeyPath": "Путь к файлу публичного ключа сертификата панели",
|
||
"publicKeyPathDesc": "Введите полный путь, начинающийся с '/'",
|
||
"privateKeyPath": "Путь к файлу приватного ключа сертификата панели",
|
||
"privateKeyPathDesc": "Введите полный путь, начинающийся с '/'",
|
||
"panelUrlPath": "URI-путь",
|
||
"panelUrlPathDesc": "Должен начинаться с '/' и заканчиваться '/'",
|
||
"pageSize": "Размер нумерации страниц",
|
||
"pageSizeDesc": "Определить размер страницы для таблицы подключений. Установите 0, чтобы отключить",
|
||
"datepickerPlaceholder": "Выберите дату",
|
||
"oldUsername": "Текущий логин",
|
||
"currentPassword": "Текущий пароль",
|
||
"newUsername": "Новый логин",
|
||
"newPassword": "Новый пароль",
|
||
"sessionMaxAge": "Продолжительность сессии",
|
||
"sessionMaxAgeDesc": "Продолжительность сессии в системе (значение: минута)",
|
||
"expireTimeDiff": "Задержка уведомления об истечении сессии",
|
||
"expireTimeDiffDesc": "Получение уведомления об истечении срока действия сессии до достижения порогового значения (значение: день)",
|
||
"trafficDiff": "Порог трафика для уведомления",
|
||
"trafficDiffDesc": "Получение уведомления об исчерпании трафика до достижения порога (значение: ГБ)",
|
||
"timeZone": "Часовой пояс",
|
||
"timeZoneDesc": "Запланированные задачи выполняются в соответствии со временем в этом часовом поясе",
|
||
"subSettings": "Подписка",
|
||
"subEnable": "Включить подписку",
|
||
"subEnableDesc": "Функция подписки с отдельной конфигурацией",
|
||
"subTitle": "Заголовок подписки",
|
||
"subTitleDesc": "Название подписки, которое видит клиент в VPN-клиенте. Поддерживает токены идентификации клиента: {{EMAIL}}, {{ID}}, {{SHORT_ID}}, {{SUB_ID}}, {{TELEGRAM_ID}}.",
|
||
"subSupportUrl": "URL поддержки",
|
||
"subSupportUrlDesc": "Ссылка на техническую поддержку, отображаемая в VPN-клиенте. Поддерживает токены идентификации клиента: {{EMAIL}}, {{ID}}, {{SHORT_ID}}, {{SUB_ID}}, {{TELEGRAM_ID}}.",
|
||
"subProfileUrl": "URL профиля",
|
||
"subProfileUrlDesc": "Ссылка на ваш сайт, отображаемая в VPN-клиенте. Поддерживает токены идентификации клиента: {{EMAIL}}, {{ID}}, {{SHORT_ID}}, {{SUB_ID}}, {{TELEGRAM_ID}}.",
|
||
"subAnnounce": "Объявление",
|
||
"subAnnounceDesc": "Текст объявления, отображаемый в VPN-клиенте. Поддерживает токены идентификации клиента: {{EMAIL}}, {{ID}}, {{SHORT_ID}}, {{SUB_ID}}, {{TELEGRAM_ID}}.",
|
||
"subHideSettings": "Скрыть настройки сервера",
|
||
"subHideSettingsDesc": "Скрыть возможность просмотра и редактирования конфигурации сервера в VPN-клиенте. (Только для Happ)",
|
||
"subListen": "Прослушивание IP",
|
||
"subListenDesc": "Оставьте пустым по умолчанию, чтобы отслеживать все IP-адреса",
|
||
"subPort": "Порт подписки",
|
||
"subPortDesc": "Номер порта для обслуживания службы подписки не должен использоваться на сервере. Также используется для построения ссылки подписки в панели, если поле «URI обратного прокси» ниже пустое — если подписка доступна через reverse-proxy на другом порту, укажите «URI обратного прокси».",
|
||
"subCertPath": "Путь к файлу публичного ключа сертификата подписки",
|
||
"subCertPathDesc": "Введите полный путь, начинающийся с '/'",
|
||
"subKeyPath": "Путь к файлу приватного ключа сертификата подписки",
|
||
"subKeyPathDesc": "Введите полный путь, начинающийся с '/'",
|
||
"subPath": "URI-путь",
|
||
"subPathDesc": "Должен начинаться с '/' и заканчиваться на '/'",
|
||
"subDomain": "Домен прослушивания",
|
||
"subDomainDesc": "Оставьте пустым по умолчанию, чтобы слушать все домены и IP-адреса. Также используется как домен по умолчанию для отображаемой ссылки подписки, если поле «URI обратного прокси» пустое — заполните «URI обратного прокси», если панель и подписка доступны на разных доменах (например, за reverse-proxy).",
|
||
"subUpdates": "Интервалы обновления подписки",
|
||
"subUpdatesDesc": "Интервал между обновлениями в клиентском приложении (в часах)",
|
||
"subEncrypt": "Кодировать",
|
||
"subEncryptDesc": "Шифровать возвращенные конфиги в подписке",
|
||
"subURI": "URI обратного прокси",
|
||
"subURIDesc": "Полный базовый URL (schema://домен[:порт]/путь/) для ссылки подписки и QR-кода вместо «Домена прослушивания»/«Порта подписки». Заполните, если подписка доступна через reverse-proxy или на другом домене/порту.",
|
||
"restartXrayOnClientDisable": "Перезапускать Xray после автоотключения",
|
||
"restartXrayOnClientDisableDesc": "Когда клиент автоматически отключается из-за окончания срока действия или лимита трафика, перезапускать Xray.",
|
||
"fragment": "Фрагментация",
|
||
"fragmentDesc": "Включить фрагментацию TLS-хэндшейка",
|
||
"fragmentSett": "Настройки фрагментации",
|
||
"noisesDesc": "Включить Noises.",
|
||
"noisesSett": "Настройки Noises",
|
||
"trustedProxyCidrs": "Доверенные CIDR прокси",
|
||
"trustedProxyCidrsDesc": "IP/CIDR через запятую, которым разрешено устанавливать заголовки forwarded host, proto и client IP.",
|
||
"subFormats": {
|
||
"packets": "Пакеты",
|
||
"length": "Длина",
|
||
"interval": "Интервал",
|
||
"maxSplit": "Макс. разбиение",
|
||
"noises": "Шумы",
|
||
"noiseItem": "Шум №{n}",
|
||
"type": "Тип",
|
||
"packet": "Пакет",
|
||
"delayMs": "Задержка (мс)",
|
||
"applyTo": "Применить к",
|
||
"concurrency": "Параллелизм",
|
||
"xudpConcurrency": "Параллелизм xudp",
|
||
"xudpUdp443": "xudp UDP 443"
|
||
},
|
||
"mux": "Mux",
|
||
"muxSett": "Настройки Mux",
|
||
"certs": "Сертификаты",
|
||
"dateAndTime": "Дата и время",
|
||
"proxyAndServer": "Прокси и сервер",
|
||
"intervals": "Интервалы",
|
||
"information": "Информация",
|
||
"profile": "Профиль",
|
||
"language": "Язык интерфейса",
|
||
"security": {
|
||
"admin": "Учетные данные администратора",
|
||
"show": "Показать",
|
||
"hide": "Скрыть",
|
||
"apiTokenNew": "Новый токен",
|
||
"apiTokenName": "Имя",
|
||
"apiTokenNamePlaceholder": "например, central-panel-a",
|
||
"apiTokenNameRequired": "Имя обязательно",
|
||
"apiTokenEmpty": "Токенов пока нет — создайте один для аутентификации ботов или удалённых панелей.",
|
||
"apiTokenDeleteWarning": "Любой клиент, использующий этот токен, немедленно потеряет аутентификацию.",
|
||
"apiTokenCreatedTitle": "Токен создан",
|
||
"apiTokenCreatedNotice": "Скопируйте этот токен сейчас. В целях безопасности он не хранится в читаемом виде и больше не будет показан."
|
||
},
|
||
"toasts": {
|
||
"modifySettings": "Настройки изменены",
|
||
"getSettings": "Произошла ошибка при получении параметров.",
|
||
"modifyUserError": "Произошла ошибка при изменении учетных данных администратора.",
|
||
"modifyUser": "Вы успешно изменили учетные данные администратора.",
|
||
"originalUserPassIncorrect": "Неверное имя пользователя или пароль",
|
||
"userPassMustBeNotEmpty": "Новое имя пользователя и новый пароль должны быть заполнены",
|
||
"getOutboundTrafficError": "Ошибка получения трафика исходящего подключения",
|
||
"resetOutboundTrafficError": "Ошибка сброса трафика исходящего подключения"
|
||
},
|
||
"eventNodeDown": "Недоступен",
|
||
"eventNodeUp": "В сети",
|
||
"eventCPUHigh": "Превышение порога CPU (%)",
|
||
"requestFailed": "Запрос не удался",
|
||
"eventLoginAttempt": "Попытка входа",
|
||
"eventMemoryHigh": "Превышение порога памяти (%)",
|
||
"remarkTemplate": "Шаблон примечания",
|
||
"remarkTemplateDesc": "Если задан, заменяет модель примечания для каждой ссылки подписки — задайте собственный формат с помощью токенов переменных (используйте кнопку для их вставки). Оставьте пустым, чтобы использовать модель выше.",
|
||
"subShowIdentityOnAllLinks": "Показывать идентификатор на каждой ссылке",
|
||
"subShowIdentityOnAllLinksDesc": "Если включено, {{EMAIL}} и {{USERNAME}} остаются в примечании каждой ссылки тела подписки. Токены использования по-прежнему только на первой ссылке.",
|
||
"validation": {
|
||
"pathLeadingSlash": "Путь должен начинаться с /"
|
||
},
|
||
"secretClear": "Очистить",
|
||
"secretClearUndo": "Отменить очистку",
|
||
"TGBotSettings": "Telegram-бот",
|
||
"notifications": "Уведомления",
|
||
"notifyTime": {
|
||
"custom": "Произвольный (crontab)",
|
||
"daily": "@daily — каждый день в 00:00",
|
||
"every": "@every — повторять с интервалом",
|
||
"hourly": "@hourly — каждый час",
|
||
"hours": "Часы",
|
||
"interval": "Интервал",
|
||
"minutes": "Минуты",
|
||
"monthly": "@monthly — каждый месяц",
|
||
"seconds": "Секунды",
|
||
"unit": "Единица",
|
||
"weekly": "@weekly — каждую неделю"
|
||
},
|
||
"telegramAPIServer": "Telegram API Server",
|
||
"telegramAPIServerDesc": "Используемый API-сервер Telegram. Оставьте пустым, чтобы использовать сервер по умолчанию.",
|
||
"telegramBotEnable": "Включить Telegram бота",
|
||
"telegramBotEnableDesc": "Доступ к функциям панели через Telegram-бота",
|
||
"telegramBotLanguage": "Язык Telegram-бота",
|
||
"telegramChatId": "User ID администратора бота",
|
||
"telegramChatIdDesc": "Один или несколько User ID администратора(-ов) Telegram-бота. Для получения User ID используйте {'@'}userinfobot или команду '/id' в боте.",
|
||
"telegramNotifyTime": "Частота уведомлений для администраторов от бота",
|
||
"telegramNotifyTimeDesc": "Как часто бот Telegram отправляет периодические отчёты. Выберите готовый интервал или «Произвольный», чтобы ввести выражение crontab.",
|
||
"telegramToken": "Telegram-токен",
|
||
"telegramTokenConfigured": "Настроен; оставьте пустым для сохранения текущего токена.",
|
||
"telegramTokenDesc": "Необходимо получить токен у менеджера ботов Telegram {'@'}botfather",
|
||
"telegramTokenPlaceholder": "Настроен - введите новый токен для замены",
|
||
"testTgBot": "Отправить тестовое сообщение",
|
||
"tgBotNotEnabled": "Telegram бот не включен",
|
||
"tgBotNotRunning": "Telegram бот не запущен",
|
||
"tgEventBusNotify": "Telegram уведомления о событиях",
|
||
"tgEventBusNotifyDesc": "Выберите события для Telegram уведомлений",
|
||
"tgNotifyBackup": "Резервное копирование базы данных",
|
||
"tgNotifyBackupDesc": "Отправлять уведомление с файлом резервной копии базы данных",
|
||
"tgTestFailed": "Тест Telegram не удался",
|
||
"tgTestSuccess": "Тестовое сообщение отправлено в Telegram",
|
||
"trafficStatsInboundUplink": "Inbound Upload Accounting",
|
||
"trafficStatsInboundDownlink": "Inbound Download Accounting",
|
||
"trafficStatsOutboundUplink": "Outbound Upload Accounting",
|
||
"trafficStatsOutboundDownlink": "Outbound Download Accounting",
|
||
"trafficStatsDesc": "Applies to the whole network. A direction pair (inbound or outbound) is counted only while both of its switches are on. While counting is off, that traffic is never recorded and the gap is permanent — it is not backfilled later — and expiry / over-quota auto-disable loses the data it relies on."
|
||
},
|
||
"xray": {
|
||
"basicTemplate": "Основное",
|
||
"advancedTemplate": "Расширенный шаблон",
|
||
"Outbounds": "Исходящие",
|
||
"Balancers": "Балансировщик",
|
||
"rules": {
|
||
"inbound": "Входящее подключение"
|
||
},
|
||
"outboundForm": {
|
||
"minUploadInterval": "Мин. интервал загрузки (мс)",
|
||
"maxConcurrency": "Макс. параллелизм",
|
||
"maxConnections": "Макс. соединений",
|
||
"maxReuseTimes": "Макс. повторных использований",
|
||
"maxRequestTimes": "Макс. запросов",
|
||
"maxReusableSecs": "Макс. секунд повторного использования",
|
||
"keepAlivePeriod": "Период keep alive"
|
||
},
|
||
"wireguard": {
|
||
"secretKey": "Секретный ключ",
|
||
"publicKey": "Публичный ключ",
|
||
"subnetIp": "Подсеть",
|
||
"subnetCidr": "Маска подсети (CIDR)",
|
||
"allowedIPs": "Разрешенные IP-адреса",
|
||
"domainStrategy": "Стратегия домена"
|
||
},
|
||
"amneziawg": {
|
||
"privateKey": "Приватный ключ",
|
||
"publicKey": "Публичный ключ",
|
||
"subnetIp": "Подсеть",
|
||
"subnetCidr": "Маска подсети (CIDR)",
|
||
"mtu": "MTU",
|
||
"primaryDns": "Основной DNS",
|
||
"secondaryDns": "Резервный DNS",
|
||
"externalInterface": "Внешний интерфейс",
|
||
"externalInterfaceHint": "Сетевой интерфейс хоста для NAT (PostUp/PostDown). Оставьте пустым для автоопределения.",
|
||
"ipv6Enabled": "Включить IPv6",
|
||
"ipv6Subnet": "Подсеть IPv6",
|
||
"ipv6SubnetHint": "Например, fd86:ea04:1115::/64. Обязательно при включённом IPv6.",
|
||
"ipv6ExternalInterface": "Внешний интерфейс для IPv6",
|
||
"ipv6ExternalInterfaceHint": "Сетевой интерфейс хоста, на который алиасится IPv6-адрес каждого клиента. Оставьте пустым, чтобы использовать «Внешний интерфейс».",
|
||
"obfuscation": "Параметры обфускации",
|
||
"regenerateObfuscation": "Сгенерировать заново",
|
||
"jc": "Jc (кол-во мусорных пакетов)",
|
||
"jmin": "Jmin (мин. размер мусорного пакета)",
|
||
"jmax": "Jmax (макс. размер мусорного пакета)",
|
||
"s1": "S1 (мусор init-пакета)",
|
||
"s2": "S2 (мусор response-пакета)",
|
||
"s3": "S3 (паддинг cookie reply)",
|
||
"s4": "S4 (паддинг transport-пакета)",
|
||
"h1": "H1 (магический заголовок)",
|
||
"h2": "H2 (магический заголовок)",
|
||
"h3": "H3 (магический заголовок)",
|
||
"h4": "H4 (магический заголовок)",
|
||
"hHint": "Целое число или диапазон low-high. Оставьте пустым для классических значений 1/2/3/4.",
|
||
"i1": "I1 (сигнатурный пакет)",
|
||
"i1Hint": "Необязательный сигнатурный пакет. Оставьте пустым, чтобы не отправлять.",
|
||
"i2": "I2 (сигнатурный пакет)",
|
||
"i3": "I3 (сигнатурный пакет)",
|
||
"i4": "I4 (сигнатурный пакет)",
|
||
"i5": "I5 (сигнатурный пакет)",
|
||
"headerProtectionKey": "HeaderProtectionKey (защита заголовков)",
|
||
"headerProtectionKeyHint": "Ключ Base64 длиной 32 байта; должен совпадать в конфигурации каждого клиента. Оставьте пустым, чтобы отключить защиту заголовков.",
|
||
"contentPaddingAddition": "ContentPaddingAddition (паддинг содержимого)",
|
||
"contentPaddingAdditionHint": "Целое число или диапазон байт, добавляемых к пакетам с данными. Оставьте пустым, чтобы отключить.",
|
||
"rekeyAfterTime": "RekeyAfterTime (секунды)",
|
||
"rekeyTimeout": "RekeyTimeout (секунды)",
|
||
"rejectAfterTime": "RejectAfterTime (секунды)",
|
||
"keepaliveTimeout": "KeepaliveTimeout (секунды)",
|
||
"maxHandshakeAttempts": "MaxHandshakeAttempts",
|
||
"timingRangeHint": "Целое число или диапазон low-high. Оставьте пустым для значения WireGuard по умолчанию.",
|
||
"maxHandshakeAttemptsHint": "Число повторов рукопожатия до отказа. Оставьте пустым для значения по умолчанию.",
|
||
"randomTrailers": "RandomTrailers",
|
||
"randomTrailersHint": "Добавляет случайные байты в конец каждого пакета. Обе стороны должны поддерживать AmneziaWG 3.1+.",
|
||
"disableCookies": "DisableCookies",
|
||
"disableCookiesHint": "Не отправлять cookie reply — убирает сигнатуру для DPI, но ослабляет защиту от флуда."
|
||
},
|
||
"tun": {
|
||
"userLevel": "Уровень пользователя"
|
||
}
|
||
},
|
||
"hosts": {
|
||
"addHost": "Добавить хост",
|
||
"editHost": "Изменить хост",
|
||
"selectInbound": "Выберите входящее",
|
||
"selectedCount": "{count} выбрано",
|
||
"summary": {
|
||
"total": "Всего",
|
||
"enabled": "Включено",
|
||
"disabled": "Отключено"
|
||
},
|
||
"moveUp": "Вверх",
|
||
"moveDown": "Вниз",
|
||
"bulkEnable": "Включить",
|
||
"bulkDisable": "Отключить",
|
||
"bulkDelete": "Удалить",
|
||
"bulkDeleteConfirm": "Удалить выбранные хосты ({count})?",
|
||
"deleteConfirmTitle": "Удалить хост \"{name}\"?",
|
||
"sections": {
|
||
"basic": "Основное",
|
||
"security": "Безопасность",
|
||
"advanced": "Дополнительно",
|
||
"general": "Общие",
|
||
"clash": "Clash (mihomo)"
|
||
},
|
||
"fields": {
|
||
"remark": "Примечание",
|
||
"serverDescription": "Описание",
|
||
"inbound": "Входящие",
|
||
"address": "Адрес",
|
||
"port": "Порт",
|
||
"endpoint": "Конечная точка",
|
||
"enable": "Включить",
|
||
"actions": "Действия",
|
||
"security": "Безопасность",
|
||
"sni": "SNI",
|
||
"overrideSniFromAddress": "Использовать адрес как SNI",
|
||
"keepSniBlank": "Оставить SNI пустым",
|
||
"hostHeader": "Заголовок Host",
|
||
"path": "Путь",
|
||
"alpn": "ALPN",
|
||
"fingerprint": "Fingerprint",
|
||
"pins": "Закреплённый SHA-256 сертификата",
|
||
"verifyPeerCertByName": "Проверять сертификат пира по имени",
|
||
"allowInsecure": "Разрешить небезопасное",
|
||
"echConfigList": "Список конфигураций ECH",
|
||
"muxParams": "Mux",
|
||
"sockoptParams": "Sockopt",
|
||
"finalMask": "Final Mask",
|
||
"vlessRoute": "Маршрут VLESS",
|
||
"mihomoIpVersion": "Версия IP",
|
||
"mihomoX25519": "Mihomo X25519",
|
||
"shuffleHost": "Перемешивать хост",
|
||
"tags": "Теги",
|
||
"nodeGuids": "Узлы",
|
||
"excludeFromSubTypes": "Исключить из форматов",
|
||
"inheritAddress": "Наследует адрес"
|
||
},
|
||
"hints": {
|
||
"address": "Оставьте пустым, чтобы унаследовать собственный адрес входящего.",
|
||
"port": "0 наследует порт входящего.",
|
||
"tags": "Не видны конечным пользователям; отправляются только с RAW-подпиской. Только заглавные буквы, цифры, _ и :.",
|
||
"nodeGuids": "Выберите узлы, которые разрешаются с этого хоста. Только визуальное назначение.",
|
||
"serverDescription": "Необязательная заметка, отображаемая под примечанием.",
|
||
"allowInsecure": "Пропустить проверку TLS-сертификата (allowInsecure / skip-cert-verify).",
|
||
"vlessRoute": "Одно значение маршрута VLESS (0-65535), встраиваемое в UUID, напр. 443. Оставьте пустым, чтобы отключить.",
|
||
"remark": "Обычная метка для этого хоста. Используется как имя конфигурации, только если у входящего нет собственного примечания."
|
||
},
|
||
"remarkVars": {
|
||
"title": "Переменные шаблона",
|
||
"intro": "Нажмите на переменную, чтобы добавить её. Она заменяется для каждого клиента при генерации подписки.",
|
||
"preview": "Предпросмотр",
|
||
"groups": {
|
||
"client": "Клиент",
|
||
"traffic": "Трафик",
|
||
"time": "Время и статус",
|
||
"connection": "Подключение"
|
||
},
|
||
"descEMAIL": "Email клиента",
|
||
"descINBOUND": "Собственное примечание входящего (имя конфигурации)",
|
||
"descHOST": "Примечание хоста",
|
||
"descID": "UUID клиента",
|
||
"descSHORT_ID": "Первые 8 символов UUID",
|
||
"descTELEGRAM_ID": "Telegram ID клиента (пусто, если не задан)",
|
||
"descSUB_ID": "ID подписки",
|
||
"descCOMMENT": "Комментарий клиента",
|
||
"descTRAFFIC_USED": "Использованный трафик (в читаемом виде)",
|
||
"descTRAFFIC_LEFT": "Оставшийся трафик (скрыт при безлимите)",
|
||
"descTRAFFIC_TOTAL": "Всего трафика (скрыт при безлимите)",
|
||
"descTRAFFIC_USED_BYTES": "Использованный трафик в байтах",
|
||
"descTRAFFIC_LEFT_BYTES": "Оставшийся трафик в байтах",
|
||
"descTRAFFIC_TOTAL_BYTES": "Всего трафика в байтах",
|
||
"descUP": "Исходящий трафик",
|
||
"descDOWN": "Входящий трафик",
|
||
"descSTATUS": "активен / истёк / отключён / исчерпан",
|
||
"descSTATUS_EMOJI": "Статус в виде эмодзи (✅ ⏳ 🚫)",
|
||
"descDAYS_LEFT": "Дней до окончания (скрыто при безлимите)",
|
||
"descTIME_LEFT": "Оставшееся время (например, 12d 4h 30m)",
|
||
"descUSAGE_PERCENTAGE": "Использованный трафик в процентах (скрыт при безлимите)",
|
||
"descEXPIRE_DATE": "Дата окончания (ГГГГ-ММ-ДД)",
|
||
"descJALALI_EXPIRE_DATE": "Дата окончания по календарю Jalali (ГГГГ/ММ/ДД)",
|
||
"descEXPIRE_UNIX": "Окончание в виде Unix-метки времени (секунды)",
|
||
"descCREATED_UNIX": "Время создания в виде Unix-метки времени (секунды)",
|
||
"descRESET_DAYS": "Период сброса трафика в днях",
|
||
"descRESET_DAY": "Число месяца, в которое продлевается доступ",
|
||
"descPROTOCOL": "Протокол входящего (VLESS, VMess, Trojan, …)",
|
||
"descTRANSPORT": "Транспортная сеть (tcp, ws, grpc, …)",
|
||
"descSECURITY": "Безопасность транспорта (TLS, REALITY, NONE)"
|
||
},
|
||
"toasts": {
|
||
"list": "Не удалось загрузить хосты",
|
||
"obtain": "Не удалось загрузить хост",
|
||
"add": "Добавить хост",
|
||
"update": "Обновить хост",
|
||
"delete": "Удалить хост",
|
||
"badTag": "Недопустимый тег",
|
||
"badVlessRoute": "Введите одно число от 0 до 65535"
|
||
}
|
||
}
|
||
},
|
||
"tgbot": {
|
||
"noIpRecord": "❗ Нет записей об IP-адресе.",
|
||
"keyboardClosed": "❌ Клавиатура закрыта.",
|
||
"noResult": "❗ Нет результатов.",
|
||
"noQuery": "❌ Запрос не найден. Пожалуйста, повторите команду.",
|
||
"wentWrong": "❌ Что-то пошло не так...",
|
||
"noInbounds": "❗ У вас не настроено ни одного входящего подключения.",
|
||
"unlimited": "♾ Безлимит",
|
||
"add": "Добавить",
|
||
"month": "Месяц",
|
||
"months": "Месяцев",
|
||
"days": "Дней",
|
||
"hours": "Часов",
|
||
"minutes": "Минуты",
|
||
"unknown": "Неизвестно",
|
||
"inbounds": "Входящие",
|
||
"clients": "Клиенты",
|
||
"offline": "🔴 Не в сети",
|
||
"commands": {
|
||
"unknown": "❗ Неизвестная команда",
|
||
"pleaseChoose": "👇 Пожалуйста, выберите:\r\n",
|
||
"help": "🤖 Добро пожаловать! Этот бот предназначен для предоставления вам данных с сервера и позволяет вносить изменения на него.\r\n\r\n",
|
||
"start": "👋 Привет, <i>{{ .Firstname }}</i>.\r\n",
|
||
"welcome": "🤖 Добро пожаловать в бота управления <b>{{ .Hostname }}</b>!\r\n",
|
||
"status": "✅ Бот функционирует нормально.",
|
||
"usage": "❗ Пожалуйста, укажите email для поиска.",
|
||
"getID": "🆔 Ваш User ID: <code>{{ .ID }}</code>",
|
||
"helpAdminCommands": "🔃 Для перезапуска Xray Core:\r\n<code>/restart</code>\r\n\r\n🔎 Для поиска клиента по email:\r\n<code>/usage [Email]</code>\r\n\r\n📊 Для поиска входящих подключений (со статистикой клиентов):\r\n<code>/inbound [имя подключения]</code>\r\n\r\n🆔 Ваш Telegram User ID:\r\n<code>/id</code>",
|
||
"helpClientCommands": "💲 Для просмотра информации о вашей подписке используйте команду:\r\n<code>/usage [Email]</code>\r\n\r\n🆔 Ваш Telegram User ID:\r\n<code>/id</code>",
|
||
"restartUsage": "\r\n\r\n<code>/restart</code>",
|
||
"xrayNotRunning": "❗ Xray Core не запущен.",
|
||
"startDesc": "Показать главное меню",
|
||
"helpDesc": "Справка по боту",
|
||
"statusDesc": "Проверить статус бота",
|
||
"idDesc": "Показать ваш Telegram ID",
|
||
"usageDesc": "Показать трафик клиента: /usage email",
|
||
"inboundDesc": "Поиск входящих: /inbound имя (админ)",
|
||
"restartDesc": "Перезапустить ядро Xray (админ)",
|
||
"clearallDesc": "Сбросить трафик всех клиентов (админ)"
|
||
},
|
||
"messages": {
|
||
"cpuThreshold": "Загрузка процессора составляет {{ .Percent }}%, что превышает пороговое значение {{ .Threshold }}%",
|
||
"selectUserFailed": "❌ Ошибка при выборе пользователя.",
|
||
"userSaved": "✅ Пользователь Telegram сохранен.",
|
||
"loginSuccess": "✅ Успешный вход в панель.\r\n",
|
||
"loginFailed": "❗️ Ошибка входа в панель.\r\n",
|
||
"report": "🕰 Запланированные отчеты: {{ .RunTime }}\r\n",
|
||
"datetime": "⏰ Дата и время: {{ .DateTime }}\r\n",
|
||
"hostname": "💻 Хост: {{ .Hostname }}\r\n",
|
||
"version": "🚀 Версия X-UI: {{ .Version }}\r\n",
|
||
"xrayVersion": "📡 Версия Xray: {{ .XrayVersion }}\r\n",
|
||
"ipv6": "🌐 IPv6: {{ .IPv6 }}\r\n",
|
||
"ipv4": "🌐 IPv4: {{ .IPv4 }}\r\n",
|
||
"ip": "🌐 IP: {{ .IP }}\r\n",
|
||
"ips": "🔢 IP:\r\n{{ .IPs }}\r\n",
|
||
"serverUpTime": "⏳ Время работы сервера: {{ .UpTime }} {{ .Unit }}\r\n",
|
||
"serverLoad": "📈 Нагрузка сервера: {{ .Load1 }}, {{ .Load2 }}, {{ .Load3 }}\r\n",
|
||
"serverMemory": "📋 RAM: {{ .Current }}/{{ .Total }}\r\n",
|
||
"tcpCount": "🔹 TCP: {{ .Count }}\r\n",
|
||
"udpCount": "🔸 UDP: {{ .Count }}\r\n",
|
||
"traffic": "🚦 Трафик: {{ .Total }} (↑{{ .Upload }},↓{{ .Download }})\r\n",
|
||
"xrayStatus": "ℹ️ Статус: {{ .State }}\r\n",
|
||
"username": "👤 Имя пользователя: {{ .Username }}\r\n",
|
||
"reason": "❗️ Причина: {{ .Reason }}\r\n",
|
||
"time": "⏰ Время: {{ .Time }}\r\n",
|
||
"inbound": "📍 Входящий: {{ .Remark }}\r\n",
|
||
"port": "🔌 Порт: {{ .Port }}\r\n",
|
||
"expire": "📅 Дата окончания: {{ .Time }}\r\n",
|
||
"expireIn": "📅 Окончание через: {{ .Time }}\r\n",
|
||
"active": "💡 Активен: {{ .Enable }}\r\n",
|
||
"enabled": "🚨 Активен: {{ .Enable }}\r\n",
|
||
"online": "🌐 Статус соединения: {{ .Status }}\r\n",
|
||
"lastOnline": "🔙 Был(а) в сети: {{ .Time }}\r\n",
|
||
"email": "📧 Email: {{ .Email }}\r\n",
|
||
"upload": "🔼 Загрузка: ↑{{ .Upload }}\r\n",
|
||
"download": "🔽 Загрузка: ↓{{ .Download }}\r\n",
|
||
"total": "📊 Всего: ↑↓{{ .UpDown }} / {{ .Total }}\r\n",
|
||
"TGUser": "👤 Telegram User ID: {{ .TelegramID }}\r\n",
|
||
"exhaustedCount": "🚨 Количество исчерпанных {{ .Type }}:\r\n",
|
||
"onlinesCount": "🌐 Клиентов онлайн: {{ .Count }}\r\n",
|
||
"disabled": "🛑 Отключено: {{ .Disabled }}\r\n",
|
||
"depleteSoon": "🔜 Клиенты, у которых скоро исчерпание: {{ .Deplete }}\r\n\r\n",
|
||
"backupTime": "🗄 Время резервного копирования: {{ .Time }}\r\n",
|
||
"refreshedOn": "\r\n📋🔄 Обновлено: {{ .Time }}\r\n\r\n",
|
||
"yes": "✅ Да",
|
||
"no": "❌ Нет",
|
||
"received_email": "📧📥 Email обновлен.",
|
||
"received_comment": "💬📥 Комментарий обновлён.",
|
||
"email_prompt": "📧 Стандартный email: {{ .ClientEmail }}\n\nВведите ваш email.",
|
||
"comment_prompt": "💬 Стандартный комментарий: {{ .ClientComment }}\n\nВведите ваш комментарий.",
|
||
"cancel": "❌ Процесс отменён! \n\nВы можете снова начать с /start в любое время. 🔄",
|
||
"error_add_client": "⚠️ Ошибка:\n\n {{ .error }}",
|
||
"using_default_value": "Используется значение по умолчанию👌",
|
||
"incorrect_input": "Ваш ввод недействителен.\nФразы должны быть непрерывными без пробелов.\nПравильный пример: aaaaaa\nНеправильный пример: aaa aaa 🚫",
|
||
"AreYouSure": "Вы уверены? 🤔",
|
||
"SuccessResetTraffic": "📧 Почта: {{ .ClientEmail }}\n🏁 Результат: ✅ Успешно",
|
||
"FailedResetTraffic": "📧 Почта: {{ .ClientEmail }}\n🏁 Результат: ❌ Неудача \n\n🛠️ Ошибка: [ {{ .ErrorMessage }} ]",
|
||
"FinishProcess": "🔚 Сброс трафика завершён для всех клиентов.",
|
||
"eventErrorDetail": "Ошибка: {{ .Error }}",
|
||
"eventDelayDetail": "Задержка: {{ .Delay }} мс",
|
||
"eventNodeDown": "Узел {{ .Name }} НЕДОСТУПЕН",
|
||
"eventNodeUp": "Узел {{ .Name }} В СЕТИ",
|
||
"eventLoginFallback": "Неудачный вход с {{ .Source }}",
|
||
"memoryThreshold": "🔴 Использование памяти {{ .Percent }}% превышает пороговое значение {{ .Threshold }}%"
|
||
},
|
||
"buttons": {
|
||
"closeKeyboard": "❌ Закрыть клавиатуру",
|
||
"cancel": "❌ Отмена",
|
||
"cancelReset": "❌ Отменить сброс",
|
||
"cancelIpLimit": "❌ Отменить лимит IP",
|
||
"confirmResetTraffic": "✅ Подтвердить сброс трафика?",
|
||
"confirmClearIps": "✅ Подтвердить очистку IP?",
|
||
"confirmRemoveTGUser": "✅ Подтвердить удаление пользователя Telegram?",
|
||
"confirmToggle": "✅ Подтвердить вкл/выкл пользователя?",
|
||
"dbBackup": "📂 Бэкап БД",
|
||
"serverUsage": "💻 Состояние сервера",
|
||
"getInbounds": "🔌 Входящие подключения",
|
||
"depleteSoon": "⚠️ Скоро конец",
|
||
"clientUsage": "Статистика клиента",
|
||
"onlines": "🟢 Онлайн",
|
||
"commands": "🖱️ Команды",
|
||
"refresh": "🔄 Обновить",
|
||
"clearIPs": "❌ Очистить IP",
|
||
"removeTGUser": "❌ Удалить пользователя Telegram",
|
||
"selectTGUser": "👤 Выбрать пользователя Telegram",
|
||
"selectOneTGUser": "👤 Выберите пользователя Telegram:",
|
||
"resetTraffic": "📈 Сбросить трафик",
|
||
"resetExpire": "📅 Изменить дату окончания",
|
||
"ipLog": "🔢 Лог IP",
|
||
"ipLimit": "🔢 Лимит IP",
|
||
"setTGUser": "👤 Установить пользователя Telegram",
|
||
"toggle": "🔘 Вкл./Выкл.",
|
||
"custom": "🔢 Своё",
|
||
"confirmNumber": "✅ Подтвердить: {{ .Num }}",
|
||
"confirmNumberAdd": "✅ Подтвердить добавление: {{ .Num }}",
|
||
"limitTraffic": "🚧 Лимит трафика",
|
||
"getBanLogs": "📄 Лог банов",
|
||
"allClients": "👥 Все клиенты",
|
||
"addClient": "➕ Новый клиент",
|
||
"submitDisable": "Добавить отключенным ☑️",
|
||
"submitEnable": "Добавить включенным ✅",
|
||
"use_default": "🏷️ Использовать по умолчанию",
|
||
"change_email": "⚙️📧 Email",
|
||
"change_comment": "⚙️💬 Комментарий",
|
||
"ResetAllTraffics": "Сбросить весь трафик",
|
||
"SortedTrafficUsageReport": "Отсортированный отчет об использовании трафика"
|
||
},
|
||
"answers": {
|
||
"successfulOperation": "✅ Успешно!",
|
||
"errorOperation": "❗ Ошибка в операции.",
|
||
"getInboundsFailed": "❌ Не удалось получить входящие подключения.",
|
||
"getClientsFailed": "❌ Не удалось получить клиентов.",
|
||
"canceled": "❌ {{ .Email }}: Операция отменена.",
|
||
"clientRefreshSuccess": "✅ {{ .Email }}: Клиент успешно обновлен.",
|
||
"IpRefreshSuccess": "✅ {{ .Email }}: IP-адреса успешно обновлены.",
|
||
"TGIdRefreshSuccess": "✅ {{ .Email }}: Пользователь Telegram клиента успешно обновлен.",
|
||
"resetTrafficSuccess": "✅ {{ .Email }}: Трафик успешно сброшен.",
|
||
"setTrafficLimitSuccess": "✅ {{ .Email }}: Лимит трафика успешно установлен.",
|
||
"expireResetSuccess": "✅ {{ .Email }}: Срок действия успешно сброшен.",
|
||
"resetIpSuccess": "✅ {{ .Email }}: Лимит IP ({{ .Count }}) успешно сохранен.",
|
||
"clearIpSuccess": "✅ {{ .Email }}: IP-адреса успешно очищены.",
|
||
"getIpLog": "✅ {{ .Email }}: Получен лог IP.",
|
||
"getUserInfo": "✅ {{ .Email }}: Получена информация о пользователе Telegram.",
|
||
"removedTGUserSuccess": "✅ {{ .Email }}: Пользователь Telegram успешно удален.",
|
||
"enableSuccess": "✅ {{ .Email }}: Включено успешно.",
|
||
"disableSuccess": "✅ {{ .Email }}: Отключено успешно.",
|
||
"askToAddUserId": "❌ Ваша конфигурация не найдена!\r\n💭 Пожалуйста, попросите администратора использовать ваш Telegram User ID в конфигурации.\r\n\r\n🆔 Ваш User ID: <code>{{ .TgUserID }}</code>",
|
||
"chooseClient": "Выберите клиента для входящего подключения {{ .Inbound }}",
|
||
"chooseInbound": "Выберите входящее подключение"
|
||
}
|
||
}
|
||
}
|