merge fix/settings-trim: dead settings, upstream remnants, JSON/Clash subscriptions removed

# Conflicts:
#	frontend/src/models/setting.ts
#	frontend/src/pages/settings/GeneralTab.tsx
#	frontend/src/pages/settings/SettingsPage.tsx
#	frontend/src/pages/settings/SubscriptionBalancersTab.tsx
#	frontend/src/pages/xray/outbounds/OutboundsTab.css
#	frontend/src/schemas/setting.ts
This commit is contained in:
Muse
2026-10-23 00:39:44 +00:00
109 changed files with 386 additions and 11297 deletions
+1 -108
View File
@@ -70,7 +70,6 @@
"install": "Установка",
"clients": "Клиенты",
"usage": "Использование",
"twoFactorCode": "Код 2FA",
"remained": "Остаток",
"security": "Безопасность",
"somethingWentWrong": "Что-то пошло не так",
@@ -103,8 +102,7 @@
"docs": "Документация",
"openMenu": "Открыть меню",
"pinSidebar": "Закрепить боковую панель",
"unpinSidebar": "Открепить боковую панель",
"subFormats": "Форматы подписки"
"unpinSidebar": "Открепить боковую панель"
},
"pages": {
"login": {
@@ -716,7 +714,6 @@
"detachFromInboundsResultMixed": "Отвязано {detached}, пропущено {skipped}, ошибок {errors}.",
"subLinksTitle": "Sub-ссылки ({count})",
"subLinkColumn": "URL подписки",
"subJsonLinkColumn": "URL JSON-подписки",
"subLinksCopyAll": "Копировать все",
"subLinksCopiedAll": "Скопировано {count} ссылок",
"subLinksEmpty": "Ни у одного из выбранных клиентов нет ID подписки.",
@@ -1068,7 +1065,6 @@
"warnDefaultPort": "Стандартный порт 2053 широко известен — измените его на случайный.",
"warnDefaultBasePath": "Базовый путь по умолчанию \"/\" широко известен — измените его на случайный.",
"warnDefaultSubPath": "Путь подписки по умолчанию \"/sub/\" широко известен — измените его.",
"warnDefaultJsonPath": "JSON-путь подписки по умолчанию \"/json/\" широко известен — измените его.",
"panelListeningIP": "IP-адрес для управления панелью",
"panelListeningIPDesc": "Оставьте пустым для подключения с любого IP",
"panelListeningDomain": "Домен панели",
@@ -1083,12 +1079,7 @@
"panelUrlPathDesc": "Должен начинаться с '/' и заканчиваться '/'",
"pageSize": "Размер нумерации страниц",
"pageSizeDesc": "Определить размер страницы для таблицы подключений. Установите 0, чтобы отключить",
"panelOutbound": "Исходящий для трафика панели",
"panelOutboundDesc": "Маршрутизирует собственные запросы панели — проверки версий и загрузки панели/Xray, Telegram и обычное обновление geo-файлов — через этот исходящий Xray для обхода серверной фильтрации GitHub/Telegram. Локальный мост-входящий добавляется в работающую конфигурацию автоматически и применяется на лету. Встроенное в Xray автообновление Geodata не затрагивается; у него свой исходящий для загрузки. Оставьте пустым для прямого подключения.",
"panelOutboundPh": "Прямое подключение",
"datepicker": "Тип календаря",
"datepickerPlaceholder": "Выберите дату",
"datepickerDescription": "Запланированные задачи будут выполняться в соответствии с этим календарем.",
"oldUsername": "Текущий логин",
"currentPassword": "Текущий пароль",
"newUsername": "Новый логин",
@@ -1104,22 +1095,6 @@
"subSettings": "Подписка",
"subEnable": "Включить подписку",
"subEnableDesc": "Функция подписки с отдельной конфигурацией",
"subJsonEnable": "Включить/отключить JSON-эндпоинт подписки независимо.",
"subJsonEnableTitle": "JSON-подписка",
"subClashEnableTitle": "Подписка Clash / Mihomo",
"subFormatsTipTitle": "Настройки подписки для отдельных форматов",
"subFormatsTipDesc": "Настройте отдельно URL-пути, обратные URL и автоматическое определение клиентов для JSON и Clash / Mihomo.",
"subFormatsTipAction": "Открыть форматы подписки",
"subJsonAutoDetect": "Автоматически определять клиентов Xray JSON",
"subJsonAutoDetectDesc": "Если параметр включён, распознанные совместимые клиенты при запросе стандартного URL подписки автоматически получают массив конфигураций Xray JSON. Остальные клиенты получают прежний ответ raw/Base64. Для применения требуется включить JSON-подписку и перезапустить панель.",
"subJsonAlwaysArray": "Всегда возвращать массив JSON",
"subJsonAlwaysArrayDesc": "Возвращает явную JSON-подписку как массив даже при одном профиле согласно стандарту XTLS. Автоматически определённые JSON-ответы всегда используют массив. Отключите, чтобы сохранить прежний ответ в виде одного объекта.",
"subJsonUserAgentRegex": "Регулярное выражение User-Agent Xray JSON",
"subJsonUserAgentRegexDesc": "Регулярное выражение Go RE2, сопоставляемое с User-Agent клиента для автоматического выбора формата Xray JSON на стандартном URL подписки. По умолчанию пустое, поэтому автоопределение отключено, пока вы не зададите шаблон для нужных клиентов. Остальные клиенты получают ответ raw/Base64. После изменения перезапустите панель.",
"subClashAutoDetect": "Автоматически определять клиентов Clash/Mihomo",
"subClashAutoDetectDesc": "Если параметр включён, распознанные клиенты Clash/Mihomo при запросе стандартного URL подписки автоматически получают Clash YAML. Браузеры по-прежнему показывают страницу подписки, остальные клиенты получают прежний ответ raw/Base64, а явные URL JSON и Clash остаются доступными. Для применения требуется включить подписку Clash/Mihomo и перезапустить панель.",
"subClashUserAgentRegex": "Регулярное выражение User-Agent Clash/Mihomo",
"subClashUserAgentRegexDesc": "Регулярное выражение Go RE2, сопоставляемое с User-Agent клиента для распознавания клиентов Clash/Mihomo на стандартном URL подписки. Оставьте поле пустым, чтобы использовать шаблон по умолчанию. После изменения перезапустите панель.",
"subTitle": "Заголовок подписки",
"subTitleDesc": "Название подписки, которое видит клиент в VPN-клиенте. Поддерживает токены идентификации клиента: {{EMAIL}}, {{ID}}, {{SHORT_ID}}, {{SUB_ID}}, {{TELEGRAM_ID}}.",
"subSupportUrl": "URL поддержки",
@@ -1128,23 +1103,8 @@
"subProfileUrlDesc": "Ссылка на ваш сайт, отображаемая в VPN-клиенте. Поддерживает токены идентификации клиента: {{EMAIL}}, {{ID}}, {{SHORT_ID}}, {{SUB_ID}}, {{TELEGRAM_ID}}.",
"subAnnounce": "Объявление",
"subAnnounceDesc": "Текст объявления, отображаемый в VPN-клиенте. Поддерживает токены идентификации клиента: {{EMAIL}}, {{ID}}, {{SHORT_ID}}, {{SUB_ID}}, {{TELEGRAM_ID}}.",
"subThemeDir": "Каталог темы подписки",
"subThemeDirDesc": "Абсолютный путь к папке с пользовательским шаблоном (index.html/sub.html) для страницы подписки (например, /etc/3x-ui/sub_templates/my-theme/). Оставьте пустым, чтобы использовать страницу по умолчанию.",
"subThemeDirDocs": "Руководство по шаблонам ↗",
"subEnableRouting": "Включить маршрутизацию",
"subEnableRoutingDesc": "Глобальная настройка для включения маршрутизации в VPN-клиенте. (Только для Happ)",
"subRoutingRules": "Правила маршрутизации",
"subRoutingRulesDesc": "Вставьте готовый happ:// deeplink либо одну постоянную HTTPS-ссылку на deeplink или JSON. Панель обновляет удалённые правила в фоне и хранит последнее рабочее значение, поэтому запрос подписки не ждёт источник. (Только для Happ)",
"subHideSettings": "Скрыть настройки сервера",
"subHideSettingsDesc": "Скрыть возможность просмотра и редактирования конфигурации сервера в VPN-клиенте. (Только для Happ)",
"subIncyEnableRouting": "Включить маршрутизацию",
"subIncyEnableRoutingDesc": "Внедрять профиль маршрутизации в тело подписки для клиента Incy. (Только для Incy)",
"subIncyRoutingRules": "Правила маршрутизации",
"subIncyRoutingRulesDesc": "Вставьте готовый incy:// deeplink либо одну постоянную HTTPS-ссылку на JSON. Для HTTPS-ссылки создаётся autorouting-профиль, который Incy обновляет самостоятельно. (Только для Incy)",
"subClashEnableRouting": "Включить маршрутизацию",
"subClashEnableRoutingDesc": "Добавлять глобальные правила маршрутизации Clash/Mihomo в сгенерированные YAML-подписки.",
"subClashRoutingRules": "Глобальные правила маршрутизации",
"subClashRoutingRulesDesc": "Вставьте правила/YAML либо одну постоянную HTTPS-ссылку. Панель обновляет её в фоне, импортирует только группы, провайдеры правил и правила, сохраняет созданные VPN-узлы и последнее рабочее значение.",
"subListen": "Прослушивание IP",
"subListenDesc": "Оставьте пустым по умолчанию, чтобы отслеживать все IP-адреса",
"subPort": "Порт подписки",
@@ -1173,8 +1133,6 @@
"trustedProxyCidrs": "Доверенные CIDR прокси",
"trustedProxyCidrsDesc": "IP/CIDR через запятую, которым разрешено устанавливать заголовки forwarded host, proto и client IP.",
"subFormats": {
"finalMask": "Final Mask",
"finalMaskDesc": "Добавляет TCP/UDP-маски finalmask Xray и параметры QUIC в каждый созданный профиль Xray JSON. Требуется приложение с поддержкой подписок Xray JSON и свежая версия ядра Xray.",
"packets": "Пакеты",
"length": "Длина",
"interval": "Интервал",
@@ -1185,16 +1143,12 @@
"packet": "Пакет",
"delayMs": "Задержка (мс)",
"applyTo": "Применить к",
"addNoise": "+ Шум",
"concurrency": "Параллелизм",
"xudpConcurrency": "Параллелизм xudp",
"xudpUdp443": "xudp UDP 443"
},
"mux": "Mux",
"muxDesc": "Передача нескольких независимых потоков данных в одном соединении.",
"muxSett": "Настройки Mux",
"direct": "Прямое подключение",
"directDesc": "Устанавливает прямые соединения с доменами или IP-адресами определённой страны.",
"certs": "Сертификаты",
"dateAndTime": "Дата и время",
"proxyAndServer": "Прокси и сервер",
@@ -1204,7 +1158,6 @@
"language": "Язык интерфейса",
"security": {
"admin": "Учетные данные администратора",
"twoFactorModalError": "Неверный код",
"show": "Показать",
"hide": "Скрыть",
"apiTokenNew": "Новый токен",
@@ -1226,9 +1179,6 @@
"getOutboundTrafficError": "Ошибка получения трафика исходящего подключения",
"resetOutboundTrafficError": "Ошибка сброса трафика исходящего подключения"
},
"eventOutboundDown": "Недоступен",
"eventOutboundUp": "Работает",
"eventXrayCrash": "Сбой",
"eventNodeDown": "Недоступен",
"eventNodeUp": "В сети",
"eventCPUHigh": "Превышение порога CPU (%)",
@@ -1244,59 +1194,6 @@
},
"secretClear": "Очистить",
"secretClearUndo": "Отменить очистку",
"calendarGregorian": "Григорианский (обычный)",
"calendarJalalian": "Джалали (شمسی)",
"ipLimitAllowlist": "Доверенные адреса для лимита",
"ipLimitAllowlistDesc": "Адреса и подсети, которые лимит не считает и не банит: общий офисный или студенческий адрес не израсходует лимит клиента. Через запятую, адрес или подсеть.",
"subBalancers": {
"menu": "Балансировщики подписки",
"title": "Балансировщик подписки",
"add": "Добавить балансировщик",
"desc": "Каждый включённый балансировщик добавляется в JSON-подписку как отдельный профиль, автоматически выбирающий лучший из эндпоинтов выбранных инбаундов (routing.balancers + burstObservatory в клиентском конфиге).",
"remark": "Примечание",
"remarkPlaceholder": "Авто · самый быстрый",
"strategy": "Стратегия",
"strategyLeastLoad": "Минимальная нагрузка",
"strategyLeastPing": "Минимальный пинг",
"strategyRandom": "Случайный",
"strategyRoundRobin": "По очереди",
"sortOrder": "Порядок",
"sortOrderHelp": "Позиция в списке подписки, чередуется с порядком инбаундов; при равных номерах балансировщик идёт после инбаунда.",
"inbounds": "Инбаунды",
"inboundsCount": "{count} Инбаунды",
"enabled": "Включён",
"empty": "Балансировщиков пока нет",
"deleteConfirm": "Удалить этот балансировщик?",
"errRemarkRequired": "Укажите примечание",
"errInboundsRequired": "Выберите хотя бы один инбаунд",
"errSortOrder": "Порядок — целое число ≥ 1",
"toasts": {
"list": "Не удалось получить список балансировщиков подписки",
"create": "Не удалось создать балансировщик подписки",
"update": "Не удалось обновить балансировщик подписки",
"delete": "Не удалось удалить балансировщик подписки",
"invalidId": "Некорректный id"
},
"tabBalancers": "Балансировщик",
"tabObservatory": "Обсерватория",
"observatory": {
"title": "Обсерватория балансировщика",
"desc": "Параметры probe-запросов для burstObservatory, добавляемого в профили leastPing/leastLoad. random/roundRobin обходятся без обсерватории. Хранится как общая настройка JSON-подписки.",
"destination": "URL проверки",
"destinationDesc": "Адрес, по которому клиент проверяет доступность каждого участника.",
"connectivity": "URL связности",
"connectivityDesc": "Необязательный адрес для однократной проверки доступности цели. Оставьте пустым, чтобы пропустить.",
"interval": "Интервал проверок",
"intervalDesc": "Время между раундами проверок, например 1m.",
"timeout": "Тайм-аут проверки",
"timeoutDesc": "Тайм-аут одной проверки, например 5s.",
"sampling": "Выборка",
"samplingDesc": "Число подряд проверок для усреднения стабильности.",
"httpMethod": "HTTP-метод",
"httpMethodDesc": "Метод запросов при проверках.",
"note": "Балансировщики leastPing/leastLoad всегда содержат burst-обсерваторию. Этот переключатель настраивает её параметры проб — выключите, чтобы использовать встроенные значения по умолчанию. Изменения применяются после перезапуска панели."
}
},
"TGBotSettings": "Telegram-бот",
"notifications": "Уведомления",
"notifyTime": {
@@ -1640,12 +1537,8 @@
"SuccessResetTraffic": "📧 Почта: {{ .ClientEmail }}\n🏁 Результат: ✅ Успешно",
"FailedResetTraffic": "📧 Почта: {{ .ClientEmail }}\n🏁 Результат: ❌ Неудача \n\n🛠️ Ошибка: [ {{ .ErrorMessage }} ]",
"FinishProcess": "🔚 Сброс трафика завершён для всех клиентов.",
"eventOutboundDown": "Исходящее подключение {{ .Tag }} НЕДОСТУПНО",
"eventOutboundUp": "Исходящее подключение {{ .Tag }} РАБОТАЕТ",
"eventErrorDetail": "Ошибка: {{ .Error }}",
"eventDelayDetail": "Задержка: {{ .Delay }} мс",
"eventXrayCrash": "Сбой Xray",
"eventXrayCrashError": "Ошибка: {{ .Error }}",
"eventNodeDown": "Узел {{ .Name }} НЕДОСТУПЕН",
"eventNodeUp": "Узел {{ .Name }} В СЕТИ",
"eventLoginFallback": "Неудачный вход с {{ .Source }}",