From 305e14d44ed33b55d12b7d156e6bd421fc1902bf Mon Sep 17 00:00:00 2001 From: Dushnilin Date: Thu, 13 Aug 2026 21:06:39 +0300 Subject: [PATCH] =?UTF-8?q?feat(reset):=20=D0=BA=D0=BD=D0=BE=D0=BF=D0=BA?= =?UTF-8?q?=D0=B0=20=D1=81=D0=B1=D1=80=D0=BE=D1=81=D0=B0=20=D0=BD=D0=B0?= =?UTF-8?q?=D1=81=D1=82=D1=80=D0=BE=D0=B5=D0=BA=20=D0=B2=20LuCI=20=D0=B8?= =?UTF-8?q?=20=D0=B4=D0=B5=D1=84=D0=BE=D0=BB=D1=82=D0=BD=D0=BE=D0=B5=20?= =?UTF-8?q?=D1=81=D0=BE=D1=81=D1=82=D0=BE=D1=8F=D0=BD=D0=B8=D0=B5=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B8=20=D1=87=D0=B8=D1=81=D1=82=D0=BE=D0=B9=20=D1=83?= =?UTF-8?q?=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BA=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - новый модуль service/reset.uc (режим reset-settings, флаг no-start): остановка сервиса, чистка runtime/кэшей, сохранение tailscale, запись дефолтного конфига --- fe-app-tachyon/extract-calls.js | 2 + fe-app-tachyon/fill-po-translations.js | 1064 +++- fe-app-tachyon/generate-po.js | 19 +- fe-app-tachyon/locales/calls.json | 4802 ++++++++++++++++- fe-app-tachyon/locales/tachyon.pot | 2841 +++++++++- fe-app-tachyon/locales/tachyon.ru.po | 2462 ++++++++- .../partials/renderServiceCheckModal.ts | 151 +- install.sh | 13 + .../resources/view/tachyon/main.js | 149 +- .../resources/view/tachyon/settings.js | 90 + luci-app-tachyon/po/ru/tachyon.po | 2462 ++++++++- luci-app-tachyon/po/templates/tachyon.pot | 2841 +++++++++- tachyon/Makefile | 3 + tachyon/files/usr/bin/tachyon | 4 + tachyon/files/usr/lib/service/reset.uc | 143 + tests/reset_settings_contract.sh | 150 + 16 files changed, 16626 insertions(+), 570 deletions(-) create mode 100644 tachyon/files/usr/lib/service/reset.uc create mode 100644 tests/reset_settings_contract.sh diff --git a/fe-app-tachyon/extract-calls.js b/fe-app-tachyon/extract-calls.js index c7824ab1..5ebffb97 100644 --- a/fe-app-tachyon/extract-calls.js +++ b/fe-app-tachyon/extract-calls.js @@ -20,6 +20,8 @@ function stripIllegalReturn(code) { const files = await glob([ 'src/**/*.ts', 'src/**/*.tsx', + '../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js', + '../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js', ], { cwd: __dirname, ignore: [ diff --git a/fe-app-tachyon/fill-po-translations.js b/fe-app-tachyon/fill-po-translations.js index 9887ce6e..92f44e10 100644 --- a/fe-app-tachyon/fill-po-translations.js +++ b/fe-app-tachyon/fill-po-translations.js @@ -28,6 +28,7 @@ const dictionary = { "Send": "Отправить", "Thinking...": "Думаю...", "Failed to receive response from AI service.": "Не удалось получить ответ от ИИ-сервиса.", + "Failed to reset settings": "Не удалось сбросить настройки", "Server unavailable": "Сервер недоступен", "AI service error": "Ошибка ИИ-сервиса", "Check YouTube": "Проверить YouTube", @@ -66,19 +67,1064 @@ const dictionary = { "Removing binaries & package files...": "Удаление бинарных файлов и пакетов...", "Cleaning configuration & reloading...": "Очистка конфигураций и перезапуск...", "Environment preparation & dependency check...": "Подготовка окружения и проверка зависимостей...", - "Downloading package from repository...": "Загрузка пакета из репозитория...", "Unpacking & installing binaries...": "Распаковка и установка компонентов...", "Updating configuration & access permissions...": "Обновление конфигураций и прав доступа...", - "Applying changes & reloading services...": "Применение изменений и перезапуск служб...", "Update completed successfully!": "Обновление успешно завершено!", "Installation completed successfully!": "Установка успешно завершена!", "Removal completed successfully!": "Удаление успешно завершено!", "Check completed!": "Проверка завершена!", "Reloading page in": "Перезагрузка страницы через", "Please wait, operation is running...": "Пожалуйста, подождите, выполняется операция...", - "Operation failed": "Операция не выполнена" + "Operation failed": "Операция не выполнена", + "Direct": "Напрямую", + + // === Новые UI-строки (settings.js, section.js) === + + // Вкладки и заголовки + "Settings": "Настройки", + "Tachyon Settings": "Настройки Tachyon", + "DNS": "DNS", + "Security": "Безопасность", + "Network & Interfaces": "Сеть и интерфейсы", + "Updates & Downloads": "Обновления и загрузки", + "Advanced System": "Расширенные настройки", + "AI & Watchdog": "ИИ и Watchdog", + "AI Chat Assistant": "ИИ Чат-ассистент", + "AI Doctor Diagnosis": "Диагностика ИИ-доктора", + "AI Doctor Language": "Язык ИИ-доктора", + "AI Model": "Модель ИИ", + "Run AI Doctor": "Запустить ИИ-доктора", + "Full System Diagnostic": "Полная диагностика системы", + "Current Diagnosis": "Текущий диагноз", + "History": "История", + "Check Services": "Проверить сервисы", + "All Services": "Все сервисы", + "Service Availability Check": "Проверка доступности сервисов", + "Filter by service:": "Фильтр по сервису:", + "Search domain or service...": "Поиск домена или сервиса...", + "Service / Target": "Сервис / Цель", + "Route Type": "Тип маршрута", + "Active Routes": "Активные маршруты", + "Custom Domains": "Свои домены", + "Unavailable": "Недоступно", + "Available": "Доступно", + "Auto": "Авто", + "Proxy": "Прокси", + "TCP": "TCP", + "TLS": "TLS", + "Recommended Quick Fixes:": "Рекомендуемые исправления:", + "Applying fix": "Применение исправления", + "Fix applied": "Исправление применено", + "Failed to apply fix": "Не удалось применить исправление", + "No quick fix required": "Быстрая починка не требуется", + "Another component action is already running": "Другое действие уже выполняется", + "Transient connection error": "Временная ошибка соединения", + "No diagnostic history available yet.": "История проверок пока пуста.", + "AI Doctor failed": "Ошибка ИИ-доктора", + "Ollama (Local PC / Server)": "Ollama (локальный ПК / сервер)", + "LM Studio (Local PC / Server)": "LM Studio (локальный ПК / сервер)", + "Optional for local LLM": "Опционально для локальных LLM", + + // DNS + "DNS over HTTPS (DoH)": "DNS через HTTPS (DoH)", + "DNS over TLS (DoT)": "DNS через TLS (DoT)", + "DNS over QUIC (DoQ)": "DNS через QUIC (DoQ)", + "UDP (Unprotected DNS)": "UDP (незащищённый DNS)", + "Default (auto)": "По умолчанию (авто)", + "DNS Settings": "Настройки DNS", + "DNS Servers": "DNS-серверы", + "Bootstrap DNS Servers": "Bootstrap DNS-серверы", + "DNS Protocol Type": "Тип протокола DNS", + "DNS Strategy": "Стратегия DNS", + "DNS Rewrite TTL": "TTL DNS-записей", + "Time in seconds for DNS record caching (default: 60)": "Время кэширования DNS-записей в секундах (по умолчанию: 60)", + "DNS Check Interval": "Интервал проверки DNS", + "DNS Check Interval (s)": "Интервал проверки DNS (с)", + "DNS Failures Before Switching": "Ошибок DNS до переключения", + "DNS Successful Checks Before Recovery": "Успешных проверок DNS до восстановления", + "DNS Unavailability Timeout": "Таймаут недоступности DNS", + "Higher-priority DNS Check": "Проверка DNS с более высоким приоритетом", + "Enable DNS Continuous Check": "Непрерывная проверка DNS", + "Enable WAN DNS Fallback for Bootstrap DNS": "Резервный WAN DNS для Bootstrap DNS", + "Enable WAN DNS Fallback for Main DNS": "Резервный WAN DNS для основного DNS", + "DNS through proxy": "DNS через прокси", + "DNS through section": "DNS через секцию", + "DNS requests through section": "DNS-запросы через секцию", + "Domain Resolver": "Резолвер доменов", + "Bootstrap DNS": "Bootstrap DNS", + "Strict ECH + DoQ DNS Enforcer": "Строгий ECH + DoQ DNS Enforcer", + + // Серверы и протоколы + "Server Address": "Адрес сервера", + "Server Port": "Порт сервера", + "Server Name Indication — leave empty to use server address": "Server Name Indication — оставьте пустым для использования адреса сервера", + "Server filtering": "Фильтрация серверов", + "Servers on dashboard": "Серверы на дашборде", + "Name displayed on the dashboard": "Имя, отображаемое на дашборде", + "Latency test URL": "URL для теста задержки", + "Check URL": "URL проверки", + "URL used to test server latency": "URL для теста задержки сервера", + "URL used to check whether a server is alive": "URL для проверки доступности сервера", + "Check timeout after which the server is considered dead": "Таймаут проверки, после которого сервер считается недоступным", + "How often the currently selected server is checked": "Как часто проверяется текущий сервер", + "Protocol": "Протокол", + "Cipher": "Шифр", + "Method": "Метод", + "Password": "Пароль", + "Username": "Имя пользователя", + "Transport": "Транспорт", + "ALPN": "ALPN", + "TLS SNI": "TLS SNI", + "TLS / HTTPS": "TLS / HTTPS", + "Skip TLS certificate verification (not recommended)": "Пропустить проверку TLS-сертификатов (не рекомендуется)", + "Allow Insecure TLS": "Разрешить небезопасный TLS", + "VLESS flow": "VLESS flow", + "FakeTLS host": "FakeTLS host", + "Concurrency": "Параллелизм", + "Connection URL": "URL подключения", + "Connection": "Соединение", + + // Валидация + "This field is required": "Это поле обязательно", + "Value cannot be empty": "Значение не может быть пустым", + "Port must be between 1 and 65535": "Порт должен быть от 1 до 65535", + "Port cannot be empty": "Порт не может быть пустым", + "Password cannot be empty": "Пароль не может быть пустым", + "Username cannot be empty": "Имя пользователя не может быть пустым", + "Invalid regular expression": "Неверное регулярное выражение", + "Invalid port or range. Use 80 or 1000-2000": "Неверный порт или диапазон. Используйте 80 или 1000-2000", + "Duplicate value": "Дублирующееся значение", + "Backend validation failed: %s": "Ошибка проверки бэкенда: %s", + "Option \"%s\" contains an invalid input value.": "Параметр \"%s\" содержит недопустимое значение.", + "Validation errors:": "Ошибки валидации:", + "Fix the highlighted fields and save again.": "Исправьте выделенные поля и сохраните снова.", + + // Управление секциями + "Add a section": "Добавить секцию", + "Delete": "Удалить", + "Enable": "Включить", + "Cancel": "Отмена", + "Done": "Готово", + "Clear": "Очистить", + "Start": "Старт", + "Stop": "Стоп", + "Import": "Импорт", + "Trace": "Трассировка", + "Error": "Ошибка", + "Success": "Успех", + "Information": "Информация", + "Loading...": "Загрузка...", + "Saving...": "Сохранение...", + "Generating...": "Генерация...", + "Starting...": "Запуск...", + "Stopping...": "Остановка...", + "Checking...": "Проверка...", + "Testing...": "Тестирование...", + "Not set": "Не задано", + "None": "Нет", + "Enabled": "Включено", + "Disabled": "Отключено", + "Action": "Действие", + "Section action": "Действие секции", + "Section name": "Имя секции", + "Display name": "Отображаемое имя", + "Visible name of this section": "Видимое имя этой секции", + "What Tachyon should do when this section matches": "Что должен делать Tachyon при совпадении этой секции", + "Direct connection": "Прямое подключение", + "Direct (Default)": "Прямое (по умолчанию)", + "Cascade connection": "Каскадное подключение", + "Connect through": "Подключаться через", + "Configuration for Tachyon service": "Конфигурация сервиса Tachyon", + + // Интерфейсы и мониторинг + "Network Interface": "Сетевой интерейс", + "Network interface settings": "Настройки сетевого интерфейса", + "Interface Monitoring": "Мониторинг интерфейсов", + "Interface Monitoring Delay": "Задержка мониторинга интерфейсов", + "Interface monitoring for Bad WAN": "Мониторинг интерфейсов для坏 WAN", + "Monitored Interfaces": "Отслеживаемые интерфейсы", + "Select the WAN interfaces to be monitored": "Выберите WAN-интерфейсы для отслеживания", + "Output Network Interface": "Выходной сетевой интерфейс", + "Source Network Interface": "Исходный сетевой интерфейс", + "Enable Output Network Interface": "Включить выходной сетевой интерфейс", + "Select a network interface": "Выберите сетевой интерфейс", + "Select an existing network interface": "Выберите существующий сетевой интерфейс", + "Select network interface for VPN connection": "Выберите интерфейс для VPN-подключения", + "Select the network interface from which the traffic will originate": "Выберите интерфейс, с которого будет идти трафик", + "Select the network interface to which the traffic will originate": "Выберите интерфейс, на который будет идти трафик", + "Mixed Proxy Port": "Порт смешанного прокси", + "Mixed Proxy Username": "Имя пользователя смешанного прокси", + "Mixed Proxy Password": "Пароль смешанного прокси", + "Enable Mixed Proxy": "Включить смешанный прокси", + "Enable Mixed Proxy Authentication": "Включить аутентификацию смешанного прокси", + "Expose this section as a local HTTP+SOCKS proxy": "Предоставить эту секцию как локальный HTTP+SOCKS прокси", + "Port for the local mixed proxy of this section": "Порт локального смешанного прокси для этой секции", + "Require a username and password for the local mixed proxy": "Требовать имя пользователя и пароль для локального смешанного прокси", + + // Приоритеты и фильтрация + "Priority": "Приоритет", + "Priority levels": "Уровни приоритета", + "Priority level settings": "Настройки уровня приоритета", + "Priority settings": "Настройки приоритета", + "Level name": "Имя уровня", + "Name shown in the priority level list": "Имя в списке уровней приоритета", + "Enter a level name": "Введите имя уровня", + "All servers": "Все серверы", + "All remaining servers": "Все остальные серверы", + "All remaining servers means every server not already assigned to a higher-priority level.": "Все остальные серверы — это все серверы, не назначенные на уровень с более высоким приоритетом.", + "All except selected": "Все кроме выбранных", + "All remaining except selected": "Все остальные кроме выбранных", + "Only selected": "Только выбранные", + "Only selected except exclusions": "Только выбранные кроме исключений", + "Only the specified servers": "Только указанные серверы", + "Select all": "Выбрать все", + "Hide selected servers.": "Скрыть выбранные серверы.", + "Show only selected servers.": "Показать только выбранные серверы.", + "Exclude servers": "Исключить серверы", + "Include servers": "Включить серверы", + "Show servers only from the specified countries.": "Показывать серверы только из указанных стран.", + "Show servers whose names match the expression.": "Показывать серверы, чьи имена соответствуют выражению.", + "Show only servers with one of the selected protocols.": "Показывать только серверы с одним из выбранных протоколов.", + "Show only servers with one of the selected security types.": "Показывать только серверы с одним из выбранных типов безопасности.", + "Show only servers with one of the selected transports.": "Показывать только серверы с одним из выбранных транспортов.", + "Hide servers from the specified countries.": "Скрыть серверы из указанных стран.", + "Hide servers whose names match the expression.": "Скрыть серверы, чьи имена соответствуют выражению.", + "Hide servers with one of the selected protocols.": "Скрыть серверы с одним из выбранных протоколов.", + "Hide servers with one of the selected security types.": "Скрыть серверы с одним из выбранных типов безопасности.", + "Hide servers with one of the selected transports.": "Скрыть серверы с одним из выбранных транспортов.", + "Do not test servers from these countries.": "Не тестировать серверы из этих стран.", + "Do not test servers whose names match the expression.": "Не тестировать серверы, чьи имена соответствуют выражению.", + "Do not test servers with one of the selected protocols.": "Не тестировать серверы с одним из выбранных протоколов.", + "Do not test servers with one of the selected security types.": "Не тестировать серверы с одним из выбранных типов безопасности.", + "Do not test servers with one of the selected transports.": "Не тестировать серверы с одним из выбранных транспортов.", + "Do not test specified servers.": "Не тестировать указанные серверы.", + "Test only selected servers.": "Тестировать только выбранные серверы.", + "Test servers only from the specified countries.": "Тестировать серверы только из указанных стран.", + "Test servers whose names match the expression.": "Тестировать серверы, чьи имена соответствуют выражению.", + "Test only servers with one of the selected protocols.": "Тестировать только серверы с одним из выбранных протоколов.", + "Test only servers with one of the selected security types.": "Тестировать только серверы с одним из выбранных типов безопасности.", + "Test only servers with one of the selected transports.": "Тестировать только серверы с одним из выбранных транспортов.", + "Only servers whose names match the expression.": "Только серверы, чьи имена соответствуют выражению.", + "Only servers with one of the selected protocols.": "Только серверы с одним из выбранных протоколов.", + "Only servers with one of the selected security types.": "Только серверы с одним из выбранных типов безопасности.", + "Only servers with one of the selected transports.": "Только серверы с одним из выбранных транспортов.", + "Only from the specified countries.": "Только из указанных стран.", + "Remove servers from the specified countries from this level.": "Удалить серверы из указанных стран с этого уровня.", + "Remove servers whose names match the expression from this level.": "Удалить серверы, чьи имена соответствуют выражению, с этого уровня.", + "Remove the specified servers from this level.": "Удалить указанные серверы с этого уровня.", + "Exclude servers with one of the selected protocols from this level.": "Исключить серверы с одним из выбранных протоколов с этого уровня.", + "Exclude servers with one of the selected security types from this level.": "Исключить серверы с одним из выбранных типов безопасности с этого уровня.", + "Exclude servers with one of the selected transports from this level.": "Исключить серверы с одним из выбранных транспортов с этого уровня.", + "Hide servers from selected groups without repeating their filtering criteria.": "Скрыть серверы из выбранных групп без повторения критериев фильтрации.", + "Show servers from selected groups without repeating their filtering criteria.": "Показать серверы из выбранных групп без повторения критериев фильтрации.", + "Traffic for this level goes directly.": "Трафик этого уровня идёт напрямую.", + "Traffic will go through the default route (Direct/Default).": "Трафик пойдёт через маршрут по умолчанию (Direct/Default).", + + // URLTest и группы + "URLTest": "URLTest", + "URLTest settings": "Настройки URLTest", + "Allows limiting the list of servers for URLTest": "Позволяет ограничить список серверов для URLTest", + "Server group for automatic lowest-latency selection": "Группа серверов для автоматического выбора с наименьшей задержкой", + "Server group for priority failover": "Группа серверов для приоритетного переключения", + "Keep URLTest before latency-sorted servers": "Сохранять URLTest перед серверами, отсортированными по задержке", + "Keep Priority before latency-sorted servers": "Сохранять приоритет перед серверами, отсортированными по задержке", + "Hide URLTest group nodes": "Скрыть узлы групп URLTest", + "Hide cascade connection nodes": "Скрыть узлы каскадных подключений", + "Hide intermediate nodes used as detours by other subscription nodes": "Скрыть промежуточные узлы, используемые как detour другими узлами подписки", + "Hide individual nodes that are already included in imported subscription URLTest groups": "Скрыть отдельные узлы, уже включённые в импортированные группы URLTest подписки", + "Interrupt connections when URLTest switches the selected server": "Разрывать соединения при переключении URLTest на другой сервер", + "Interrupt connections when priority failover switches server": "Разрывать соединения при переключении приоритетного failover", + "How often higher priority levels are checked while a lower level is active": "Как часто проверяются уровни с более высоким приоритетом, когда активен нижний уровень", + "Periodically check the current level and switch to a faster server even when the current one works.": "Периодически проверять текущий уровень и переключаться на более быстрый сервер, даже если текущий работает.", + "When switching to another level, test every server and select the fastest instead of the first working one.": "При переключении на другой уровень тестировать каждый сервер и выбирать самый быстрый вместо первого рабочего.", + "Stop checking when URLTest group is not used. Use sing-box duration format like 1d, 12h or 30m.": "Остановить проверку, когда группа URLTest не используется. Используйте формат длительности sing-box, например 1d, 12h или 30m.", + + // Подписки + "Subscription URL": "URL подписки", + "Subscription URL settings": "Настройки URL подписки", + "Enter the subscription URL": "Введите URL подписки", + "Subscription auto update": "Автообновление подписки", + "Subscription update interval": "Интервал обновления подписки", + "Update this subscription automatically": "Обновлять эту подписку автоматически", + "Download subscription through a section": "Загружать подписку через секцию", + "Download subscriptions via the selected section": "Загружать подписки через выбранную секцию", + "Download through": "Загружать через", + "Download lists through": "Загружать списки через", + "Download lists through a section": "Загружать списки через секцию", + "Download components through": "Загружать компоненты через", + "Download components through a section": "Загружать компоненты через секцию", + "Download component packages via the selected section": "Загружать пакеты компонентов через выбранную секцию", + "Download remote lists and rule sets via the selected section": "Загружать удалённые списки и наборы правил через выбранную секцию", + "Import subscription URLTest groups": "Импортировать группы URLTest подписки", + "Import URLTest groups returned by this subscription provider": "Импортировать группы URLTest, возвращённые этим провайдером подписки", + "Import URLTest groups returned by this subscription provider": "Импортировать группы URLTest, возвращённые этим провайдером подписки", + "Auto-update Hosts Lists": "Автообновление списков Hosts", + "Hosts Lists Update Interval": "Интервал обновления списков Hosts", + "Automatically update remote hosts lists on schedule": "Автоматически обновлять удалённые списки Hosts по расписанию", + "Pre-download all preset lists": "Предзагрузить все предустановленные списки", + "Enable list updates": "Включить обновление списков", + "Enable automatic updates for remote lists and rule sets": "Включить автообновление удалённых списков и наборов правил", + "List Update Frequency": "Частота обновления списков", + + // Правила и маршрутизация + "Rule Sets (.srs / .json)": "Наборы правил (.srs / .json)", + "Rule set settings": "Настройки набора правил", + "Rule sets": "Наборы правил", + "Built-in rule sets": "Встроенные наборы правил", + "Rule": "Правило", + "Section Rules Content": "Содержимое правил секции", + "Routing Rule Tracer": "Трассировщик правил маршрутизации", + "Tracing routing rules...": "Трассировка правил маршрутизации...", + "No Custom Rules Matched": "Нет совпадений с пользовательскими правилами", + "Routing mode": "Режим маршрутизации", + "Routing section": "Секция маршрутизации", + "Traffic type filter": "Фильтр типа трафика", + "Traffic of specified protocols (e.g. BitTorrent, QUIC, STUN) will bypass this section.": "Трафик указанных протоколов (например BitTorrent, QUIC, STUN) будет обходить эту секцию.", + "BitTorrent / P2P": "BitTorrent / P2P", + "STUN (P2P Calls)": "STUN (P2P-звонки)", + "QUIC (HTTP/3)": "QUIC (HTTP/3)", + "RDP": "RDP", + "SSH": "SSH", + "Apply rules of this section only to selected protocols.": "Применять правила этой секции только к выбранным протоколам.", + "Resolve domain names before routing so sing-box can use real destination IPs.": "Разрешать имена доменов перед маршрутизацией, чтобы sing-box мог использовать реальные IP назначения.", + "Resolve real IP for routing": "Разрешать реальный IP для маршрутизации", + "Reset": "Сбросить", + "Reset Settings": "Сбросить настройки", + "Resetting…": "Сброс…", + "Restores the Tachyon factory defaults: all rules, subscriptions, custom DNS servers and other options will be lost.": "Восстанавливает заводские настройки Tachyon: все правила, подписки, пользовательские DNS-серверы и другие параметры будут удалены.", + "Settings have been reset to defaults. The page will reload.": "Настройки сброшены к значениям по умолчанию. Страница будет перезагружена.", + "This will erase all Tachyon settings and restore the factory defaults. The service will restart. This action cannot be undone.": "Все настройки Tachyon будут удалены и восстановлены заводские значения. Сервис будет перезапущен. Это действие нельзя отменить.", + "DSCP marks (QoS)": "DSCP-метки (QoS)", + + // FakeIP и кэш + "Cache File Path": "Путь к файлу кэша", + "Cache file path cannot be empty": "Путь к файлу кэша не может быть пустым", + "Config File Path": "Путь к файлу конфигурации", + "Enable Config Validation": "Включить проверку конфигурации", + "Validates sing-box config before restart to prevent boot loops on broken configs.": "Проверять конфигурацию sing-box перед перезапуском, чтобы предотвратить циклические перезагрузки.", + "Enable Graceful Degradation": "Включить мягкое деградирование", + "If one health check fails with an error, continue running other checks instead of stopping.": "Если одна проверка завершается ошибкой, продолжать другие проверки, а не останавливаться.", + + // Watchdog и мониторинг + "Enable Watchdog": "Включить Watchdog", + "Watchdog Status": "Статус Watchdog", + "Enable Health Metrics": "Включить метрики здоровья", + "Enable Proxy Health Monitor": "Включить мониторинг здоровья прокси", + "Enable Anomaly Detection": "Включить обнаружение аномалий", + "Enable Adaptive Intervals": "Включить адаптивные интервалы", + "Enable Smart Cooldowns": "Включить умные cooldown'ы", + "Monitoring": "Мониторинг", + "Use 3-tier check intervals: fast (15s), normal (120s), slow (300s) instead of a single interval.": "Использовать 3-уровневые интервалы проверки: быстрый (15с), нормальный (120с), медленный (300с).", + "Automatically increase check intervals when healthy (to 5 min) and decrease on problems (to 120s).": "Автоматически увеличивать интервалы проверки при нормальном состоянии (до 5 мин) и уменьшать при проблемах (до 120с).", + "Periodically checks if the proxy is responding. Restarts Tachyon after consecutive failures.": "Периодически проверяет, отвечает ли прокси. Перезапускает Tachyon после последовательных ошибок.", + "Records proxy/DNS latency and health status in hourly buckets for analysis.": "Записывает задержку прокси/DNS и состояние здоровья в почасовые блоки для анализа.", + "Monitors sing-box reconnect frequency. Alerts if too many reconnects per hour.": "Отслеживает частоту переподключений sing-box. Оповещает при слишком частых переподключениях.", + "Max reconnects per hour before alert (default 10).": "Макс. переподключений в час до оповещения (по умолчанию 10).", + "Proxy Health Check Interval (s)": "Интервал проверки здоровья прокси (с)", + "Proxy Health Check URL": "URL проверки здоровья прокси", + "How often to check proxy health in seconds (fast tier, default 30).": "Как часто проверять здоровье прокси в секундах (быстрый уровень, по умолчанию 30).", + "Number of consecutive failures before restarting (default 3).": "Количество последовательных ошибок до перезапуска (по умолчанию 3).", + "URL to test through the proxy (default: Cloudflare 204).": "URL для теста через прокси (по умолчанию: Cloudflare 204).", + "Metrics Retention (hours)": "Хранение метрик (часы)", + "How many hours of metrics to keep (default 24).": "Сколько часов хранить метрики (по умолчанию 24).", + "Polling Interval (seconds)": "Интервал опроса (секунды)", + "How often to check DNS health in seconds (default 60).": "Как часто проверять здоровье DNS в секундах (по умолчанию 60).", + "How often to check the active DNS servers.": "Как часто проверять активные DNS-серверы.", + "How often to check whether a higher-priority DNS server has recovered.": "Как часто проверять, восстановился ли DNS-сервер с более высоким приоритетом.", + "Number of consecutive failed checks required before switching DNS servers.": "Количество последовательных неудачных проверок до переключения DNS-серверов.", + "Number of consecutive successful checks required before returning to a higher-priority DNS server.": "Количество последовательных успешных проверок до возврата на DNS-сервер с более высоким приоритетом.", + "Maximum time to wait for example.com to resolve during a DNS health check.": "Максимальное время ожидания разрешения example.com при проверке DNS.", + "Minimum latency difference in milliseconds that triggers switching to a faster server.": "Минимальная разница задержки в миллисекундах, при которой происходит переключение на более быстрый сервер.", + "Check interval": "Интервал проверки", + + // Telegram + "Enable Telegram Bot": "Включить Telegram-бота", + "Telegram Bot Token": "Токен Telegram-бота", + "Enter the API token obtained from @BotFather.": "Введите токен API, полученный от @BotFather.", + "Token is required when the bot is enabled": "Токен обязателен, когда бот включён", + "Proxy Section for Bot": "Секция прокси для бота", + "Route bot API requests through this section. Leave empty to use the default mixed proxy.": "Маршрутизировать запросы API бота через эту секцию. Оставьте пустым для использования смешанного прокси по умолчанию.", + "Administrator Chat IDs": "Chat ID администраторов", + "Comma-separated list of Telegram user IDs authorized to control the bot.": "Список Telegram user ID через запятую, авторизованных для управления ботом.", + "At least one Admin Chat ID is required": "Требуется как минимум один Chat ID администратора", + "Bot Status": "Статус бота", + "Start bot": "Запустить бота", + "Stop bot": "Остановить бота", + "Failed to start bot": "Не удалось запустить бота", + "Failed to stop bot": "Не удалось остановить бота", + "Failed to start watchdog": "Не удалось запустить watchdog", + "Failed to stop watchdog": "Не удалось остановить watchdog", + "Start Watchdog first": "Сначала запустите Watchdog", + "Polling interval must be at least 1 second": "Интервал опроса должен быть не менее 1 секунды", + "How often to check Telegram for new messages (default: 5).": "Как часто проверять Telegram на новые сообщения (по умолчанию: 5).", + "Notify on Service Restarts": "Уведомлять о перезапусках сервиса", + "Notify on Server Switches": "Уведомлять о переключениях серверов", + "Notify on Subscription Updates": "Уведомлять об обновлениях подписок", + "Notify on Certificate Warnings": "Уведомлять о предупреждениях сертификатов", + "Notify on Core Crashes": "Уведомлять о падениях ядра", + "Notify on DNS Leaks": "Уведомлять об утечках DNS", + "Send a Telegram notification if the Tachyon service is restarted by the watchdog.": "Отправлять уведомление в Telegram, если сервис Tachyon перезапущен watchdog.", + "Send a Telegram notification when a URLTest group switches to a new server.": "Отправлять уведомление в Telegram при переключении группы URLTest на новый сервер.", + "Send a Telegram notification when proxy subscriptions are successfully updated.": "Отправлять уведомление в Telegram при успешном обновлении подписок прокси.", + "Send a Telegram notification if SSL/TLS certificates are close to expiration.": "Отправлять уведомление в Telegram, если SSL/TLS-сертификаты скоро истекут.", + "Send a Telegram notification if sing-box or nftables rules crash and get auto-restored.": "Отправлять уведомление в Telegram, если правила sing-box или nftables упали и были автоматически восстановлены.", + "Send a Telegram notification if a potential DNS leak is detected.": "Отправлять уведомление в Telegram при обнаружении потенциальной утечки DNS.", + + // AI Doctor / LLM + "Enable AI Doctor (ChatGPT / LLM Analysis)": "Включить ИИ-доктора (анализ ChatGPT / LLM)", + "Select AI LLM provider for diagnostics": "Выберите провайдер ИИ LLM для диагностики", + "Language for AI Doctor diagnosis responses": "Язык ответов диагностики ИИ-доктора", + "API Key for OpenAI (sk-...) or DeepSeek (optional for Ollama / LM Studio)": "API-ключ для OpenAI (sk-...) или DeepSeek (опционально для Ollama / LM Studio)", + "Custom OpenAI-Compatible API (OpenRouter)": "Пользовательский OpenAI-совместимый API (OpenRouter)", + "Custom OpenAI-compatible API endpoint URL (e.g. http://192.168.1.100:11434/v1/chat/completions)": "Пользовательский URL эндпоинта OpenAI-совместимого API (напр. http://192.168.1.100:11434/v1/chat/completions)", + "Connect ChatGPT, DeepSeek or local LLM to get automated diagnostic reports and intelligent root-cause analysis.": "Подключите ChatGPT, DeepSeek или локальную LLM для получения автоматических диагностических отчётов и умного анализа причин проблем.", + "Allows Tachyon to send diagnostic snapshots to ChatGPT or DeepSeek API for intelligent root-cause analysis and auto-repair recommendations.": "Позволяет Tachyon отправлять диагностические снимки в ChatGPT или DeepSeek API для умного анализа причин проблем и рекомендаций по исправлению.", + "Model name to use. Leave empty to use default (gpt-4o-mini / claude-3-5-haiku / deepseek-chat / llama3:latest).": "Имя модели. Оставьте пустым для использования по умолчанию (gpt-4o-mini / claude-3-5-haiku / deepseek-chat / llama3:latest).", + "AI Watchdog": "ИИ Watchdog", + "AI Watchdog settings saved. Restart watchdog to apply.": "Настройки ИИ Watchdog сохранены. Перезапустите watchdog для применения.", + "Failed to save AI Watchdog settings": "Не удалось сохранить настройки ИИ Watchdog", + "Save AI Watchdog Settings": "Сохранить настройки ИИ Watchdog", + "Advanced self-healing features. Requires Watchdog to be enabled.": "Расширенные функции самовосстановления. Требуется включённый Watchdog.", + "Smart Detect": "Умное определение", + "Smart Detect settings saved": "Настройки умного определения сохранены", + "Failed to save Smart Detect settings": "Не удалось сохранить настройки умного определения", + "Save Smart Detect Settings": "Сохранить настройки умного определения", + "Persistent Smart Detect": "Постоянное умное определение", + "Store auto-detected domains in /etc instead of /tmp to survive reboots.": "Хранить автоопределённые домены в /etc вместо /tmp для сохранения после перезагрузки.", + "Domains automatically detected by Smart Detect or added via Telegram bot. You can manually edit or remove them here.": "Домены, автоматически определённые Smart Detect или добавленные через Telegram-бота. Вы можете вручную отредактировать или удалить их здесь.", + "No domains detected yet": "Домены пока не обнаружены", + "Auto-detected Domains": "Автоопределённые домены", + "Auto-detected domains": "Автоопределённые домены", + "New domains:": "Новые домены:", + "List of domains automatically detected and the section they were added to. To edit or remove them, open the routing rules of the respective section.": "Список автоматически определённых доменов и секций, в которые они были добавлены. Для редактирования или удаления откройте правила маршрутизации соответствующей секции.", + "DNS Turbo Cache": "Быстрый DNS-кэш", + "DNS Turbo Cache saved": "DNS Turbo Cache сохранён", + "Failed to save DNS Turbo Cache": "Не удалось сохранить DNS Turbo Cache", + "Enable DNS Turbo Cache": "Включить быстрый DNS-кэш", + "Keeps FakeIP cache persistent across reboots and pre-resolves popular blocked domains on startup so first-visit latency is 0 ms.": "Сохраняет кэш FakeIP между перезагрузками и предварительно разрешает популярные заблокированные домены при запуске, чтобы задержка первого обращения была 0 мс.", + "Cache all built-in lists and databases even if they are not currently selected in any section. Recommended if you have plenty of storage space or USB drive.": "Кэшировать все встроенные списки и базы данных, даже если они не выбраны ни в одной секции. Рекомендуется при большом объёме хранилища или USB-накопителе.", + + // Устройства и фильтрация + "Device filter": "Фильтр устройств", + "Device or IP": "Устройство или IP", + "Forced device routing": "Принудительная маршрутизация устройств", + "Excluded devices": "Исключённые устройства", + "Source Devices": "Устройства-источники", + "Game Console IPs": "IP игровых консолей", + "Game Console Optimizer (NAT Type 1)": "Оптимизатор игровых консолей (NAT Type 1)", + "Bypasses UDP traffic for selected game consoles (PS5/Xbox) to achieve NAT Type 1 / 2 (Full Cone NAT) for P2P matchmaking, while keeping TCP (PSN/Auth) routed through the proxy.": "Обходит UDP-трафик для выбранных игровых консолей (PS5/Xbox) для достижения NAT Type 1 / 2 (Full Cone NAT) для P2P-матчмейкинга, сохраняя TCP (PSN/Auth) через прокси.", + "Select or enter the IP addresses of your game consoles.": "Выберите или введите IP-адреса ваших игровых консолей.", + "P2P Leak Protection": "Защита от утечек P2P", + "Detects and drops STUN/TURN packets in nftables to prevent real IP leaks via WebRTC.": "Обнаруживает и отбрасывает пакеты STUN/TURN в nftables для предотвращения утечек реального IP через WebRTC.", + "WebRTC Leak Protection": "Защита от утечек WebRTC", + "Disable QUIC": "Отключить QUIC", + "Disable the QUIC protocol to improve compatibility or fix issues with video streaming": "Отключить протокол QUIC для улучшения совместимости или исправления проблем с видео-стримингом", + "Isolate BitTorrent traffic and force it direct to prevent VPN bans": "Изолировать трафик BitTorrent и направить его напрямую для предотвращения блокировок VPN", + "All traffic from these IP addresses will be routed through the section unconditionally, ignoring all other conditions.": "Весь трафик от этих IP-адресов будет маршрутизирован через секцию безусловно, игнорируя все остальные условия.", + "Traffic from these IP addresses will never be routed through this section, even if other conditions match.": "Трафик от этих IP-адресов никогда не будет маршрутизирован через эту секцию, даже если другие условия совпадают.", + "Apply section rules only to the specified local IP addresses": "Применять правила секции только к указанным локальным IP-адресам", + "Include IP addresses and subnets": "Включить IP-адреса и подсети", + + // WARP / AmneziaWG + "AmneziaWG Generator": "Генератор AmneziaWG", + "Import AmneziaWG settings from .conf file": "Импортировать настройки AmneziaWG из файла .conf", + "Load .conf": "Загрузить .conf", + "Load .conf config": "Загрузить конфигурацию .conf", + "Select a file with .conf extension": "Выберите файл с расширением .conf", + "AmneziaWG config loaded successfully!": "Конфигурация AmneziaWG успешно загружена!", + "Generate WARP Config": "Сгенерировать конфигурацию WARP", + "Automatically generate a Cloudflare WARP account and configure all AmneziaWG settings.": "Автоматически создать аккаунт Cloudflare WARP и настроить все параметры AmneziaWG.", + "Cloudflare API access token": "Токен доступа Cloudflare API", + "Cloudflare WARP API access token": "Токен доступа Cloudflare WARP API", + "Cloudflare account / device ID": "Аккаунт / ID устройства Cloudflare", + "Cloudflare WARP account / device ID": "Аккаунт / ID устройства Cloudflare WARP", + "WireGuard private key from your Cloudflare account": "Приватный ключ WireGuard из вашего аккаунта Cloudflare", + "WireGuard private key from your Cloudflare WARP account": "Приватный ключ WireGuard из вашего аккаунта Cloudflare WARP", + "WARP Access Token": "Токен доступа WARP", + "WARP Account ID": "ID аккаунта WARP", + "WARP Private Key": "Приватный ключ WARP", + "WARP Configuration generated and loaded successfully!": "Конфигурация WARP успешно сгенерирована и загружена!", + "Failed to generate WARP config:": "Не удалось сгенерировать конфигурацию WARP:", + "Failed to parse WARP config:": "Не удалось разобрать конфигурацию WARP:", + "Error running generator:": "Ошибка запуска генератора:", + "Proxy to use for WARP API registration (api.cloudflareclient.com)": "Прокси для регистрации WARP API (api.cloudflareclient.com)", + "HWID": "HWID", + "Enter HWID": "Введите HWID", + "Auto-generate HWID": "Авто-генерация HWID", + "Generate HWID": "Сгенерировать HWID", + "Generated!": "Сгенерировано!", + "Generate a random 16-character hexadecimal HWID": "Сгенерировать случайный 16-символьный шестнадцатеричный HWID", + "Generate HWID from router hardware information for this subscription": "Сгенерировать HWID из аппаратной информации роутера для этой подписки", + "Generate HWID from router hardware information for this subscription": "Сгенерировать HWID из аппаратной информации роутера для этой подписки", + "Enter the HWID sent with subscription requests": "Введите HWID, отправляемый с запросами подписки", + "Auto-update Hosts Lists": "Автообновление списков Hosts", + "Custom device headers": "Пользовательские заголовки устройства", + "Override the default OpenWrt device headers for this subscription": "Переопределить стандартные заголовки устройства OpenWrt для этой подписки", + "Configure User-Agent в the item settings": "Настройте User-Agent в параметрах элемента", + "Automatic User-Agent selection": "Автоматический выбор User-Agent", + "Select a common client profile or enter a custom User-Agent": "Выберите общий профиль клиента или введите пользовательский User-Agent", + "Try compatible User-Agent profiles automatically when downloading this subscription": "Пробовать совместимые профили User-Agent автоматически при загрузке этой подписки", + "Select or enter a User-Agent": "Выберите или введите User-Agent", + "User-Agent": "User-Agent", + "Client link": "Клиентская ссылка", + "Client link QR code": "QR-код клиентской ссылки", + "Client link is not available yet": "Клиентская ссылка пока недоступна", + "Loading client link...": "Загрузка клиентской ссылки...", + "Add prefix to nodes": "Добавить префикс к узлам", + "Prefix text": "Текст префикса", + "Automatically add text to the name of each server from this subscription for convenient filtering.": "Автоматически добавлять текст к имени каждого сервера из этой подписки для удобной фильтрации.", + "Sort Alphabetically": "Сортировать по алфавиту", + "Sort by latency": "Сортировать по задержке", + "Sorts servers in this section by lowest latency in the dashboard.": "Сортировать серверы в этой секции по наименьшей задержке на дашборде.", + "Pin on dashboard": "Закрепить на дашборде", + "Show metadata on dashboard": "Показывать метаданные на дашборде", + "Show subscription metadata for this source on the dashboard": "Показывать метаданные подписки для этого источника на дашборде", + "Detect server country": "Определять страну сервера", + "Via country.is": "Через country.is", + "By flag emoji from name": "По эмодзи флага из имени", + "GeoSite / GeoIP": "GeoSite / GeoIP", + "GeoIP Mode": "Режим GeoIP", + "GeoIP Countries": "Страны GeoIP", + "Country code (e.g. ru, us, de)": "Код страны (напр. ru, us, de)", + "Select one or more country ISO codes (e.g. ru, us, de, nl, fr, fi, se, tr, cn, jp, sg, by, kz, ua).": "Выберите один или несколько ISO-кодов стран (напр. ru, us, de, nl, fr, fi, se, tr, cn, jp, sg, by, kz, ua).", + "Belarus (by)": "Беларусь (by)", + "China (cn)": "Китай (cn)", + "Finland (fi)": "Финляндия (fi)", + "France (fr)": "Франция (fr)", + "Germany (de)": "Германия (de)", + "Japan (jp)": "Япония (jp)", + "Kazakhstan (kz)": "Казахстан (kz)", + "Netherlands (nl)": "Нидерланды (nl)", + "Russia (ru)": "Россия (ru)", + "Singapore (sg)": "Сингапур (sg)", + "Sweden (se)": "Швеция (se)", + "Turkey (tr)": "Турция (tr)", + "Ukraine (ua)": "Украина (ua)", + "United Kingdom (gb)": "Великобритания (gb)", + "United States (us)": "США (us)", + "Unknown country": "Неизвестная страна", + + // Дополнительные + "Enable YACD": "Включить YACD", + "Enable YACD WAN Access": "Включить WAN-доступ к YACD", + "YACD Secret Key": "Секретный ключ YACD", + "Secret key for authenticating remote access to YACD when WAN access is enabled.": "Секретный ключ для аутентификации удалённого доступа к YACD при включённом WAN-доступе.", + "Allows access to YACD from the WAN. Make sure to open the appropriate port in your firewall.": "Позволяет доступ к YACD из WAN. Убедитесь, что соответствующий порт открыт в файрволе.", + "Log Level": "Уровень логирования", + "Select the log level for sing-box": "Выберите уровень логирования для sing-box", + "MTU": "MTU", + "Persistent Keepalive": "Постоянный Keepalive", + "Pre-shared key": "Предварительный общий ключ", + "Preshared Key": "Предварительный общий ключ", + "PSK": "PSK", + "Key": "Ключ", + "Secret": "Секрет", + "Private Key": "Приватный ключ", + "Public Key": "Публичный ключ", + "Peer Public Key": "Публичный ключ пира", + "Client Certificate": "Клиентский сертификат", + "Client Key": "Клиентский ключ", + "CA Certificate": "CA-сертификат", + "PEM-encoded CA certificate": "CA-сертификат в формате PEM", + "PEM-encoded client certificate": "Клиентский сертификат в формате PEM", + "PEM-encoded client private key": "Приватный ключ клиента в формате PEM", + "TLS Auth/Crypt Key": "Ключ TLS Auth/Crypt", + "Optional tls-auth or tls-crypt key": "Опциональный ключ tls-auth или tls-crypt", + "Certificate path": "Путь к сертификату", + "Key path": "Путь к ключу", + "Config File Path": "Путь к файлу конфигурации", + "Select path for sing-box config file. Change this ONLY if you know what you are doing": "Выберите путь к файлу конфигурации sing-box. Изменяйте ТОЛЬКО если точно знаете, что делаете", + "Select or enter path for sing-box cache file. Change this ONLY if you know what you are doing": "Выберите или введите путь к файлу кэша sing-box. Изменяйте ТОЛЬКО если точно знаете, что делаете", + "Specify a file path": "Укажите путь к файлу", + "Specify different files": "Укажите разные файлы", + "Path must be absolute (start with /)": "Путь должен быть абсолютным (начинаться с /)", + "Path must end with cache.db": "Путь должен заканчиваться на cache.db", + "Choose Hosts File...": "Выбрать файл Hosts...", + "Or paste hosts file content:": "Или вставьте содержимое файла hosts:", + "Import Hosts File": "Импортировать файл Hosts", + "Load Current Records": "Загрузить текущие записи", + "Hosts": "Hosts", + "Custom DNS Records (Hosts)": "Пользовательские DNS-записи (Hosts)", + "One record per line: example.com 192.168.1.100 or 192.168.1.100 example.com. Lines starting with # are ignored.": "Одна запись на строку: example.com 192.168.1.100 или 192.168.1.100 example.com. Строки, начинающиеся с #, игнорируются.", + "Paste content or upload a file to preview imported DNS records.": "Вставьте содержимое или загрузите файл для предварительного просмотра импортируемых DNS-записей.", + "No file selected": "Файл не выбран", + "Loaded %d current record(s)": "Загружено %d текущих записей", + "Loaded!": "Загружено!", + "Import (%d records)": "Импорт (%d записей)", + "Successfully imported %d DNS record(s)": "Успешно импортировано %d DNS-записей", + "Records: %d": "Записей: %d", + "Skip loopback & local entries (127.0.0.1, ::1, 0.0.0.0, localhost)": "Пропустить loopback и локальные записи (127.0.0.1, ::1, 0.0.0.0, localhost)", + "Overwrite existing records (if unchecked, merge with existing records)": "Перезаписать существующие записи (если снято — объединить с существующими)", + "Community Lists": "Community-списки", + "Domain lists": "Списки доменов", + "Domain and IP lists": "Списки доменов и IP", + "Remote Hosts Lists": "Удалённые списки Hosts", + "Add URLs or local paths to .lst lists containing domains and subnets.": "Добавьте URL или локальные пути к спискам .lst, содержащим домены и подсети.", + "Add URLs or local paths to .lst lists containing domains. IP entries are ignored.": "Добавьте URL или локальные пути к спискам .lst, содержащим домены. IP-записи игнорируются.", + "Add URLs or local paths to .srs / .json lists. Only domain rules are supported.": "Добавьте URL или локальные пути к спискам .srs / .json. Поддерживаются только правила доменов.", + "Add URLs or local paths to .srs / .json lists. Subnets are ignored by default.": "Добавьте URL или локальные пути к спискам .srs / .json. Подсети игнорируются по умолчанию.", + "List must be an HTTP(S) URL or a local .lst path": "Список должен быть HTTP(S) URL или локальным путём .lst", + "Rule set must be an HTTP(S) URL or a local .srs / .json path": "Набор правил должен быть HTTP(S) URL или локальным путём .srs / .json", + "Subnets from the list will be extracted and added to nftables": "Подсети из списка будут извлечены и добавлены в nftables", + "Include IP addresses and subnets": "Включить IP-адреса и подсети", + "Enable built-in DNS resolver for domains handled by this section": "Включить встроенный DNS-резолвер для доменов, обрабатываемых этой секцией", + "Domain test sections": "Секции тестирования доменов", + "Select and order the sections through which blocked domains are tested. Checked sections are tried top-to-bottom.": "Выберите и упорядочите секции, через которые тестируются заблокированные домены. Отмеченные секции проверяются сверху вниз.", + "Section test order (checked = active, drag rows with △▽):": "Порядок тестирования секций (отмечено = активно, перетаскивайте строки △▽):", + "Select a section for downloading this subscription": "Выберите секцию для загрузки этой подписки", + "Select a transit section": "Выберите транзитную секцию", + "Select a section": "Выберите секцию", + "Selected section": "Выбранная секция", + "Select an intermediate section": "Выберите промежуточную секцию", + "Use another section as an intermediate hop to connect to servers in this section. Does not apply to network interfaces or JSON outbounds.": "Использовать другую секцию в качестве промежуточного узла для подключения к серверам в этой секции. Не применяется к сетевым интерфейсам и JSON-выходам.", + "Current section cannot be used as its own transit section": "Текущая секция не может использоваться как собственная транзитная секция", + "Current section cannot download its own subscription": "Текущая секция не может загружать собственную подписку", + "Enter a display name": "Введите отображаемое имя", + "Enter a complete sing-box outbound object": "Введите полный объект outbound sing-box", + "Inbound JSON": "Inbound JSON", + "Inbound JSON cannot be empty": "Inbound JSON не может быть пустым", + "Inbound JSON must be an object with a type field": "Inbound JSON должен быть объектом с полем type", + "JSON outbound": "JSON outbound", + "JSON outbound settings": "Настройки JSON outbound", + "Custom outbound configurations in JSON format": "Пользовательские конфигурации outbound в формате JSON", + "Traffic from these IP addresses will never be routed through this section, even if other conditions match.": "Трафик от этих IP-адресов никогда не будет маршрутизирован через эту секцию, даже если другие условия совпадают.", + "Server information": "Информация о сервере", + "Server name": "Имя сервера", + "Server name / SNI": "Имя сервера / SNI", + "Reality fake site": "Фейковый сайт Reality", + "Reality fake site port": "Порт фейкового сайта Reality", + "Reality max time difference": "Макс. разница времени Reality", + "Reality private key": "Приватный ключ Reality", + "Reality public key": "Публичный ключ Reality", + "Reality short ID": "Короткий ID Reality", + "Reality short ID must contain 1-8 hex digits": "Короткий ID Reality должен содержать 1-8 шестнадцатеричных цифр", + "Auth Digest": "Auth Digest", + "Snell Version": "Версия Snell", + "Fronting IP": "Fronting IP", + "Fronting port": "Fronting порт", + "Fronting proxy protocol": "Протокол Fronting прокси", + "gRPC service": "Сервис gRPC", + "Transport host": "Хост транспорта", + "Transport path": "Путь транспорта", + "Transport path must start with /": "Путь транспорта должен начинаться с /", + "HTTP hosts": "HTTP хосты", + "XHTTP mode": "Режим XHTTP", + "MASQUE Access Token": "Токен доступа MASQUE", + "MASQUE Account ID": "ID аккаунта MASQUE", + "MASQUE Private Key": "Приватный ключ MASQUE", + "Fallback on unknown DC": "Fallback при неизвестном DC", + "Padding": "Padding", + "Handshake timeout": "Таймаут рукопожатия", + "Time skew tolerance": "Допуск отклонения времени", + "Local Address": "Локальный адрес", + "Peer Public Key": "Публичный ключ пира", + "Allowed domain prefixes are full:, keyword:, and regex:": "Допустимые префиксы доменов: full:, keyword:, и regex:", + "The rule applies to the domain and all its subdomains. Use full:, keyword:, or regex: prefixes for exact match, keyword match, or regular expression.": "Правило применяется к домену и всем его поддоменам. Используйте префиксы full:, keyword: или regex: для точного совпадения, совпадения по ключевому слову или регулярного выражения.", + "Keyword must not contain spaces or commas": "Ключевое слово не должно содержать пробелов или запятых", + "Regular expression must not contain spaces or commas": "Регулярное выражение не должно содержать пробелов или запятых", + "Invalid ByeDPI strategy": "Неверная стратегия ByeDPI", + "ByeDPI strategy cannot be empty": "Стратегия ByeDPI не может быть пустой", + "Invalid NFQWS strategy": "Неверная стратегия NFQWS", + "NFQWS strategy cannot be empty": "Стратегия NFQWS не может быть пустой", + "Invalid NFQWS2 strategy": "Неверная стратегия NFQWS2", + "NFQWS2 strategy cannot be empty": "Стратегия NFQWS2 не может быть пустой", + "ByeDPI Strategy": "Стратегия ByeDPI", + "NFQWS Strategy": "Стратегия NFQWS", + "NFQWS2 Strategy": "Стратегия NFQWS2", + "Unable to validate the ByeDPI strategy through the backend parser.": "Не удалось проверить стратегию ByeDPI через парсер бэкенда.", + "Unable to validate the NFQWS strategy through the backend parser.": "Не удалось проверить стратегию NFQWS через парсер бэкенда.", + "Unable to validate the NFQWS2 strategy through the backend parser.": "Не удалось проверить стратегию NFQWS2 через парсер бэкенда.", + "ByeDPI option requires a value: %s": "Параметр ByeDPI требует значение: %s", + "ByeDPI option does not accept a value: %s": "Параметр ByeDPI не принимает значение: %s", + "ByeDPI option does not accept a compact value: %s": "Параметр ByeDPI не принимает компактное значение: %s", + "Unexpected ByeDPI strategy argument: %s": "Неожиданный аргумент стратегии ByeDPI: %s", + "Unknown ByeDPI option: %s": "Неизвестный параметр ByeDPI: %s", + "ByeDPI listen address and port are assigned by Tachyon and must not be set in the strategy.": "Адрес и порт прослушивания ByeDPI назначаются Tachyon и не должны задаваться в стратегии.", + "Invalid Shadowsocks URL: missing method and password separator \":\"": "Неверный Shadowsocks URL: отсутствует разделитель метода и пароля \":\"", + "Invalid path format. Path must start with \"/\" and contain valid characters": "Неверный формат пути. Путь должен начинаться с \"/\" и содержать допустимые символы", + "Invalid line: \"%s\". Use: domain ip or ip domain": "Неверная строка: \"%s\". Используйте: domain ip или ip domain", + "Invalid HY2 URL: obfs-password required when obfs is set": "Неверный HY2 URL: obfs-password обязателен, когда obfs задан", + "Invalid SOCKS URL: must start with socks4://, socks4a://, or socks5://": "Неверный SOCKS URL: должен начинаться с socks4://, socks4a:// или socks5://", + "Invalid TUIC URL: congestion_control must be bbr, cubic, or new_reno": "Неверный TUIC URL: congestion_control должен быть bbr, cubic или new_reno", + "Invalid TUIC URL: udp_relay_mode must be native, quic, or qux": "Неверный TUIC URL: udp_relay_mode должен быть native, quic или qux", + "Invalid TUIC URL: zero_rtt_handshake must be 0, 1, true, or false": "Неверный TUIC URL: zero_rtt_handshake должен быть 0, 1, true или false", + "Invalid Shadowsocks URL: decoded credentials must contain method:password": "Неверный Shadowsocks URL: декодированные учётные данные должны содержать method:password", + "vless://, vmess://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links": "Ссылки vless://, vmess://, ss://, trojan://, socks4/5://, hy2/hysteria2://", + "New version %s is available for %s": "Доступна новая версия %s для %s", + "Checking\u2026": "Проверка\u2026", + "Starting\u2026": "Запуск\u2026", + "Stopping\u2026": "Остановка\u2026", + "Installed build \\u2192 Available build": "Установленная сборка \\u2192 Доступная сборка", + "Component update available": "Доступно обновление компонента", + "Sing-box version is compatible (newer than 1.12.4)": "Версия sing-box совместима (новее 1.12.4)", + "Not required for this listen address": "Не требуется для этого адреса прослушивания", + "Tachyon service is stopped. Start the service to display connections.": "Сервис Tachyon остановлен. Запустите сервис для отображения соединений.", + "Tachyon service is stopped. Start the service to display the dashboard.": "Сервис Tachyon остановлен. Запустите сервис для отображения дашборда.", + "Tachyon will not modify your DHCP configuration": "Tachyon не будет изменять вашу конфигурацию DHCP", + "Dont Touch My DHCP!": "Не трогайте мой DHCP!", + "Prevent multiple reload_firewall calls within 120 seconds to avoid connection drops.": "Предотвращать множественные вызовы reload_firewall в течение 120 секунд для избежания разрыва соединений.", + "Disabling interception is incompatible with action=zapret2 because Tachyon sends matched traffic through NFQUEUE.": "Отключение перехвата несовместимо с action=zapret2, потому что Tachyon направляет совпавший трафик через NFQUEUE.", + "Transparent proxy mode is incompatible with action=byedpi because Tachyon connects to ciadpi through SOCKS.": "Режим прозрачного прокси несовместим с action=byedpi, потому что Tachyon подключается к ciadpi через SOCKS.", + "Fuzzing is not supported here because Tachyon needs deterministic runtime validation.": "Fuzzing не поддерживается здесь, потому что Tachyon нуждается в детерминированной проверке во время выполнения.", + "External nfqws config files bypass Tachyon queue management and explicit validation.": "Внешние файлы конфигурации nfqws обходят управление очередями Tachyon и явную проверку.", + "External nfqws2 config files bypass Tachyon queue management and explicit validation.": "Внешние файлы конфигурации nfqws2 обходят управление очередями Tachyon и явную проверку.", + "Tachyon manages the nfqws process lifecycle itself, so daemon mode is not allowed here.": "Tachyon управляет жизненным циклом процесса nfqws самостоятельно, поэтому режим daemon здесь не допускается.", + "Tachyon manages the nfqws2 process lifecycle itself, so daemon mode is not allowed here.": "Tachyon управляет жизненным циклом процесса nfqws2 самостоятельно, поэтому режим daemon здесь не допускается.", + "Tachyon manages the ciadpi process lifecycle itself, so daemon mode is not allowed here.": "Tachyon управляет жизненным циклом процесса ciadpi самостоятельно, поэтому режим daemon здесь не допускается.", + "Tachyon manages ciadpi pid files itself, so pidfile options are not allowed here.": "Tachyon управляет файлами pid ciadpi самостоятельно, поэтому параметры pidfile здесь не допускаются.", + "This field must start a working nfqws strategy; --dry-run exits immediately and is not allowed here.": "Это поле должно запускать рабочую стратегию nfqws; --dry-run завершается немедленно и здесь не допускается.", + "This field must start a working nfqws strategy; --version exits immediately and is not allowed here.": "Это поле должно запускать рабочую стратегию nfqws; --version завершается немедленно и здесь не допускается.", + "This field must start a working nfqws2 strategy; --dry-run exits immediately and is not allowed here.": "Это поле должно запускать рабочую стратегию nfqws2; --dry-run завершается немедленно и здесь не допускается.", + "This field must start a working nfqws2 strategy; --version exits immediately and is not allowed here.": "Это поле должно запускать рабочую стратегию nfqws2; --version завершается немедленно и здесь не допускается.", + "This field must start a working ciadpi strategy; help/version options exit immediately and are not allowed here.": "Это поле должно запускать рабочую стратегию ciadpi; опции help/version завершаются немедленно и здесь не допускаются.", + "The NFQUEUE number is assigned by Tachyon for each rule and must not be overridden here.": "Номер NFQUEUE назначается Tachyon для каждого правила и не может быть переопределён здесь.", + "The desync fwmark is managed by Tachyon for loop prevention and must not be overridden here.": "fwmark desync управляется Tachyon для предотвращения циклов и не может быть переопределён здесь.", + "Resource selection by IP or CIDR inside nfqws is not supported here; sing-box selects resources before NFQUEUE.": "Выбор ресурсов по IP или CIDR внутри nfqws не поддерживается здесь; sing-box выбирает ресурсы до NFQUEUE.", + "Resource selection by IP or CIDR inside nfqws2 is not supported here; sing-box selects resources before NFQUEUE.": "Выбор ресурсов по IP или CIDR внутри nfqws2 не поддерживается здесь; sing-box выбирает ресурсы до NFQUEUE.", + "Resource selection by hostname inside nfqws is not supported here; sing-box selects resources before NFQUEUE.": "Выбор ресурсов по имени хоста внутри nfqws не поддерживается здесь; sing-box выбирает ресурсы до NFQUEUE.", + "Resource selection by hostname inside nfqws2 is not supported here; sing-box selects resources before NFQUEUE.": "Выбор ресурсов по имени хоста внутри nfqws2 не поддерживается здесь; sing-box выбирает ресурсы до NFQUEUE.", + "Optional values must be attached with '=' here; a separate token would be ignored by nfqws.": "Опциональные значения должны быть присоединены через '=' здесь; отдельный токен будет игнорироваться nfqws.", + "Optional values must be attached with '=' here; a separate token would be ignored by nfqws2.": "Опциональные значения должны быть присоединены через '=' здесь; отдельный токен будет игнорироваться nfqws2.", + "Unexpected standalone token. Use explicit flags such as --name or --name=value.": "Неожиданный отдельный токен. Используйте явные флаги, такие как --name или --name=value.", + "Unknown NFQWS flag.": "Неизвестный флаг NFQWS.", + "Unknown NFQWS2 flag.": "Неизвестный флаг NFQWS2.", + "Invalid ByeDPI strategy": "Неверная стратегия ByeDPI", + "ByeDPI Strategy": "Стратегия ByeDPI", + "NFQWS Strategy": "Стратегия NFQWS", + "NFQWS2 Strategy": "Стратегия NFQWS2", + "Obfuscation": "Обфускация", + "Obfuscation password": "Пароль обфускации", + "P2P Leak Protection": "Защита от утечек P2P", + "WebRTC Leak Protection": "Защита от утечек WebRTC", + "Disable QUIC": "Отключить QUIC", + "Persistent Smart Detect": "Постоянное умное определение", + "Enable Smart Cooldowns": "Включить умные cooldown'ы", + "Enable Graceful Degradation": "Включить мягкое деградирование", + "Records proxy/DNS latency and health status in hourly buckets for analysis.": "Записывает задержку прокси/DNS и состояние здоровья в почасовые блоки для анализа.", + "If one health check fails with an error, continue running other checks instead of stopping.": "Если одна проверка завершается ошибкой, продолжать другие проверки, а не останавливаться.", + "Faster DNS health monitoring than the default cycle. Switches bootstrap DNS on failure.": "Более быстрый мониторинг состояния DNS, чем стандартный цикл. Переключает bootstrap DNS при сбое.", + "Default address for checking server availability and latency. URLTest uses its own address.": "Адрес по умолчанию для проверки доступности и задержки сервера. URLTest использует свой собственный адрес.", + "Auto update": "Автообновление", + "Component update check interval": "Интервал проверки обновлений компонентов", + "Automatically check installed components for new versions": "Автоматически проверять установленные компоненты на наличие новых версий", + "Select a predefined domain list": "Выберите предустановленный список доменов", + "Choose whether to route traffic to all destinations except selected countries (Exclude) or only to selected countries (Include).": "Выберите, маршрутизировать ли трафик ко всем назначениям кроме выбранных стран (Исключить) или только в выбранные страны (Включить).", + "Additionally filter servers by protocol, transport, and security. Add only servers matching the specified parameters.": "Дополнительно фильтровать серверы по протоколу, транспорту и безопасности. Добавлять только серверы, соответствующие указанным параметрам.", + "Additionally exclude servers by protocol, transport, and security. Exclude only servers matching the specified parameters.": "Дополнительно исключать серверы по протоколу, транспорту и безопасности. Исключать только серверы, соответствующие указанным параметрам.", + "Additionally hide servers by protocol, transport, and security. Hide servers matching the specified parameters.": "Дополнительно скрывать серверы по протоколу, транспорту и безопасности. Скрывать серверы, соответствующие указанным параметрам.", + "Additionally show servers by protocol, transport, and security. Add only servers matching the specified parameters.": "Дополнительно показывать серверы по протоколу, транспорту и безопасности. Показывать только серверы, соответствующие указанным параметрам.", + "Show servers from selected groups without repeating their filtering criteria.": "Показывать серверы из выбранных групп без повторения критериев фильтрации.", + "Hide servers from selected groups without repeating their filtering criteria.": "Скрывать серверы из выбранных групп без повторения критериев фильтрации.", + "Hide individual nodes that are already included in imported subscription URLTest groups": "Скрывать отдельные узлы, уже включённые в импортированные группы URLTest подписки", + "All remaining servers means every server not already assigned to a higher-priority level.": "Все остальные серверы — это все серверы, не назначенные на уровень с более высоким приоритетом.", + "Top level has the highest priority; lower levels are used as fallback": "Верхний уровень имеет наивысший приоритет; нижние уровни используются как запасные", + "All remaining except selected": "Все остальные кроме выбранных", + "Only selected except exclusions": "Только выбранные кроме исключений", + "Select one or more country ISO codes (e.g. ru, us, de, nl, fr, fi, se, tr, cn, jp, sg, by, kz, ua).": "Выберите один или несколько ISO-кодов стран (напр. ru, us, de, nl, fr, fi, se, tr, cn, jp, sg, by, kz, ua).", + "Select DNS protocol to use": "Выберите протокол DNS", + "DNS protocol used by the resolver": "Протокол DNS, используемый резолвером", + "DNS server used by the resolver": "DNS-сервер, используемый резолвером", + "DNS server used to obtain IP addresses for upstream DNS and proxies. If multiple servers are selected, a timeout switches to a backup.": "DNS-сервер для получения IP-адресов для вышестоящих DNS и прокси. Если выбрано несколько серверов, при таймауте происходит переключение на резервный.", + "Main DNS server. If multiple servers are selected, a timeout switches to a backup.": "Основной DNS-сервер. Если выбрано несколько серверов, при таймауте происходит переключение на резервный.", + "DNS server": "DNS-сервер", + "Prefer IPv4": "Предпочитать IPv4", + "Prefer IPv6": "Предпочитать IPv6", + "IPv4 only": "Только IPv4", + "IPv6 only": "Только IPv6", + "IP Addresses (IP CIDR)": "IP-адреса (IP CIDR)", + "IPs": "IP", + "Use CIDR prefixes like 192.168.1.0/24 or 2001:db8::/32": "Используйте CIDR-префиксы, например 192.168.1.0/24 или 2001:db8::/32", + "Use an IP address": "Используйте IP-адрес", + "Use an IP listen address": "Используйте IP-адрес прослушивания", + "Use a domain name or IP address": "Используйте имя домена или IP-адрес", + "Use an HTTP or HTTPS URL": "Используйте HTTP или HTTPS URL", + "Use letters, digits, dots, underscores, or hyphens": "Используйте буквы, цифры, точки, подчёркивания или дефисы", + "Use a non-negative integer": "Используйте неотрицательное целое число", + "Use a non-zero secret": "Используйте ненулевой секрет", + "Use 32 hex characters": "Используйте 32 шестнадцатеричных символа", + "Use a duration like 30s, 5m, or 1h30m": "Используйте длительность, например 30s, 5m или 1h30m", + "Use sing-box duration format like 10s, 1m or 2m30s": "Используйте формат длительности sing-box, например 10s, 1m или 2m30s", + "Use sing-box duration format like 1d, 12h or 6h": "Используйте формат длительности sing-box, например 1d, 12h или 6h", + "Use sing-box duration format like 1d, 12h or 30m": "Используйте формат длительности sing-box, например 1d, 12h или 30m", + "Must be a number in the range of 0 - 10000": "Должно быть числом в диапазоне 0 - 10000", + "TTL must be a positive number": "TTL должен быть положительным числом", + "TTL value cannot be empty": "Значение TTL не может быть пустым", + "Delay value cannot be empty": "Значение задержки не может быть пустым", + "This flag does not accept a value.": "Этот флаг не принимает значение.", + "This option requires a value.": "Этот параметр требует значение.", + "Value must not contain control characters": "Значение не должно содержать символы управления", + "Add at least one DNS server": "Добавьте как минимум один DNS-сервер", + "At least one valid IP or subnet must be specified.": "Должен быть указан как минимум один действительный IP или подсеть.", + "At least one valid domain must be specified.": "Должен быть указан как минимум один действительный домен.", + "Expecting: %s": "Ожидалось: %s", + "Cannot save server": "Не удалось сохранить сервер", + "Fix the highlighted fields and save again.": "Исправьте выделенные поля и сохраните снова.", + "Must be a comma-separated list of numeric IDs": "Должен быть список числовых ID через запятую", + "Invalid port or range. Use 80 or 1000-2000": "Неверный порт или диапазон. Используйте 80 или 1000-2000", + "Invalid regular expression": "Неверное регулярное выражение", + "QR code is too large": "QR-код слишком большой", + "Read error": "Ошибка чтения", + "New domains:": "Новые домены:", + "Parsed records:": "Обработанные записи:", + "Skipped loopback:": "Пропущены loopback:", + "Skipped comments/invalid:": "Пропущены комментарии/невалидные:", + "Total lines:": "Всего строк:", + "Updated/duplicates:": "Обновлено/дубликаты:", + "Error running trace:": "Ошибка выполнения трассировки:", + "Trace": "Трассировка", + "Tracing routing rules...": "Трассировка правил маршрутизации...", + "No Custom Rules Matched": "Нет совпадений с пользовательскими правилами", + "Hide cascade connection nodes": "Скрыть узлы каскадных подключений", + "Hide URLTest group nodes": "Скрыть узлы групп URLTest", + "Hide intermediate nodes used as detours by other subscription nodes": "Скрыть промежуточные узлы, используемые как detour другими узлами подписки", + "Hide individual nodes that are already included in imported subscription URLTest groups": "Скрыть отдельные узлы, уже включённые в импортированные группы URLTest подписки", + "Import subscription URLTest groups": "Импортировать группы URLTest подписки", + "Import URLTest groups returned by this subscription provider": "Импортировать группы URLTest, возвращённые этим провайдером подписки", + "Import subscription URLTest groups": "Импортировать группы URLTest подписки", + "URLTest settings": "Настройки URLTest", + "Check timeout after which the server is considered dead": "Таймаут проверки, после которого сервер считается недоступным", + "How often the currently selected server is checked": "Как часто проверяется текущий сервер", + "URL used to test server latency": "URL для теста задержки сервера", + "URL used to check whether a server is alive": "URL для проверки доступности сервера", + "Latency test URL": "URL для теста задержки", + "Check URL": "URL проверки", + "Hide selected servers.": "Скрыть выбранные серверы.", + "Show only selected servers.": "Показать только выбранные серверы.", + "Show servers only from the specified countries.": "Показывать серверы только из указанных стран.", + "Show servers whose names match the expression.": "Показывать серверы, чьи имена соответствуют выражению.", + "Show only servers with one of the selected protocols.": "Показывать только серверы с одним из выбранных протоколов.", + "Show only servers with one of the selected security types.": "Показывать только серверы с одним из выбранных типов безопасности.", + "Show only servers with one of the selected transports.": "Показывать только серверы с одним из выбранных транспортов.", + "Hide servers from the specified countries.": "Скрыть серверы из указанных стран.", + "Hide servers whose names match the expression.": "Скрыть серверы, чьи имена соответствуют выражению.", + "Hide servers with one of the selected protocols.": "Скрыть серверы с одним из выбранных протоколов.", + "Hide servers with one of the selected security types.": "Скрыть серверы с одним из выбранных типов безопасности.", + "Hide servers with one of the selected transports.": "Скрыть серверы с одним из выбранных транспортов.", + "Do not test servers from these countries.": "Не тестировать серверы из этих стран.", + "Do not test servers whose names match the expression.": "Не тестировать серверы, чьи имена соответствуют выражению.", + "Do not test servers with one of the selected protocols.": "Не тестировать серверы с одним из выбранных протоколов.", + "Do not test servers with one of the selected security types.": "Не тестировать серверы с одним из выбранных типов безопасности.", + "Do not test servers with one of the selected transports.": "Не тестировать серверы с одним из выбранных транспортов.", + "Do not test specified servers.": "Не тестировать указанные серверы.", + "Test only selected servers.": "Тестировать только выбранные серверы.", + "Test servers only from the specified countries.": "Тестировать серверы только из указанных стран.", + "Test servers whose names match the expression.": "Тестировать серверы, чьи имена соответствуют выражению.", + "Test only servers with one of the selected protocols.": "Тестировать только серверы с одним из выбранных протоколов.", + "Test only servers with one of the selected security types.": "Тестировать только серверы с одним из выбранных типов безопасности.", + "Test only servers with one of the selected transports.": "Тестировать только серверы с одним из выбранных транспортов.", + "Only servers whose names match the expression.": "Только серверы, чьи имена соответствуют выражению.", + "Only servers with one of the selected protocols.": "Только серверы с одним из выбранных протоколов.", + "Only servers with one of the selected security types.": "Только серверы с одним из выбранных типов безопасности.", + "Only servers with one of the selected transports.": "Только серверы с одним из выбранных транспортов.", + "Only from the specified countries.": "Только из указанных стран.", + "Remove servers from the specified countries from this level.": "Удалить серверы из указанных стран с этого уровня.", + "Remove servers whose names match the expression from this level.": "Удалить серверы, чьи имена соответствуют выражению, с этого уровня.", + "Remove the specified servers from this level.": "Удалить указанные серверы с этого уровня.", + "Exclude servers with one of the selected protocols from this level.": "Исключить серверы с одним из выбранных протоколов с этого уровня.", + "Exclude servers with one of the selected security types from this level.": "Исключить серверы с одним из выбранных типов безопасности с этого уровня.", + "Exclude servers with one of the selected transports from this level.": "Исключить серверы с одним из выбранных транспортов с этого уровня.", + "Hide servers from selected groups without repeating their filtering criteria.": "Скрыть серверы из выбранных групп без повторения критериев фильтрации.", + "Show servers from selected groups without repeating their filtering criteria.": "Показать серверы из выбранных групп без повторения критериев фильтрации.", + "Traffic for this level goes directly.": "Трафик этого уровня идёт напрямую.", + "Traffic will go through the default route (Direct/Default).": "Трафик пойдёт через маршрут по умолчанию (Direct/Default).", + "When switching to another level, test every server and select the fastest instead of the first working one.": "При переключении на другой уровень тестировать каждый сервер и выбирать самый быстрый вместо первого рабочего.", + "Periodically check the current level and switch to a faster server even when the current one works.": "Периодически проверять текущий уровень и переключаться на более быстрый сервер, даже если текущий работает.", + "Stop checking when URLTest group is not used. Use sing-box duration format like 1d, 12h or 30m.": "Остановить проверку, когда группа URLTest не используется. Используйте формат длительности sing-box, например 1d, 12h или 30m.", + "How often higher priority levels are checked while a lower level is active": "Как часто проверяются уровни с более высоким приоритетом, когда активен нижний уровень", + "Filter the servers that will be displayed on the dashboard.": "Фильтровать серверы, отображаемые на дашборде.", + "Display name": "Отображаемое имя", + "Name displayed on the dashboard": "Имя, отображаемое на дашборде", + "Pin on dashboard": "Закрепить на дашборде", + "Show metadata on dashboard": "Показывать метаданные на дашборде", + "Show subscription metadata for this source on the dashboard": "Показывать метаданные подписки для этого источника на дашборде", + "Server filtering": "Фильтрация серверов", + "Sort Alphabetically": "Сортировать по алфавиту", + "Sort by latency": "Сортировать по задержке", + "Sorts servers in this section by lowest latency in the dashboard.": "Сортировать серверы в этой секции по наименьшей задержке на дашборде.", + "Keep URLTest before latency-sorted servers": "Сохранять URLTest перед серверами, отсортированными по задержке", + "Keep Priority before latency-sorted servers": "Сохранять приоритет перед серверами, отсортированными по задержке", + "Hide URLTest group nodes": "Скрыть узлы групп URLTest", + "Hide cascade connection nodes": "Скрыть узлы каскадных подключений", + "Hide intermediate nodes used as detours by other subscription nodes": "Скрыть промежуточные узлы, используемые как detour другими узлами подписки", + "Hide individual nodes that are already included in imported subscription URLTest groups": "Скрыть отдельные узлы, уже включённые в импортированные группы URLTest подписки", + "Interrupt connections when URLTest switches the selected server": "Разрывать соединения при переключении URLTest на другой сервер", + "Interrupt connections when priority failover switches server": "Разрывать соединения при переключении приоритетного failover", + "Automatically select the fastest node in the current level": "Автовыбор самого быстрого узла уровня", + "Server group for automatic lowest-latency selection": "Группа серверов для автоматического выбора с наименьшей задержкой", + "Server group for priority failover": "Группа серверов для приоритетного переключения", + "Allows limiting the list of servers for URLTest": "Позволяет ограничить список серверов для URLTest", + "URLTest": "URLTest", + "URLTest settings": "Настройки URLTest", + "Check interval": "Интервал проверки", + "Check timeout after which the server is considered dead": "Таймаут проверки, после которого сервер считается недоступным", + "How often the currently selected server is checked": "Как часто проверяется текущий сервер", + "URL used to test server latency": "URL для теста задержки сервера", + "URL used to check whether a server is alive": "URL для проверки доступности сервера", + "Latency test URL": "URL для теста задержки", + "Check URL": "URL проверки", + "Hide selected servers.": "Скрыть выбранные серверы.", + "Show only selected servers.": "Показать только выбранные серверы.", + "Show servers only from the specified countries.": "Показывать серверы только из указанных стран.", + "Show servers whose names match the expression.": "Показывать серверы, чьи имена соответствуют выражению.", + "Show only servers with one of the selected protocols.": "Показывать только серверы с одним из выбранных протоколов.", + "Show only servers with one of the selected security types.": "Показывать только серверы с одним из выбранных типов безопасности.", + "Show only servers with one of the selected transports.": "Показывать только серверы с одним из выбранных транспортов.", + "Hide servers from the specified countries.": "Скрыть серверы из указанных стран.", + "Hide servers whose names match the expression.": "Скрыть серверы, чьи имена соответствуют выражению.", + "Hide servers with one of the selected protocols.": "Скрыть серверы с одним из выбранных протоколов.", + "Hide servers with one of the selected security types.": "Скрыть серверы с одним из выбранных типов безопасности.", + "Hide servers with one of the selected transports.": "Скрыть серверы с одним из выбранных транспортов.", + "Do not test servers from these countries.": "Не тестировать серверы из этих стран.", + "Do not test servers whose names match the expression.": "Не тестировать серверы, чьи имена соответствуют выражению.", + "Do not test servers with one of the selected protocols.": "Не тестировать серверы с одним из выбранных протоколов.", + "Do not test servers with one of the selected security types.": "Не тестировать серверы с одним из выбранных типов безопасности.", + "Do not test servers with one of the selected transports.": "Не тестировать серверы с одним из выбранных транспортов.", + "Do not test specified servers.": "Не тестировать указанные серверы.", + "Test only selected servers.": "Тестировать только выбранные серверы.", + "Test servers only from the specified countries.": "Тестировать серверы только из указанных стран.", + "Test servers whose names match the expression.": "Тестировать серверы, чьи имена соответствуют выражению.", + "Test only servers with one of the selected protocols.": "Тестировать только серверы с одним из выбранных протоколов.", + "Test only servers with one of the selected security types.": "Тестировать только серверы с одним из выбранных типов безопасности.", + "Test only servers with one of the selected transports.": "Тестировать только серверы с одним из выбранных транспортов.", + "Only servers whose names match the expression.": "Только серверы, чьи имена соответствуют выражению.", + "Only servers with one of the selected protocols.": "Только серверы с одним из выбранных протоколов.", + "Only servers with one of the selected security types.": "Только серверы с одним из выбранных типов безопасности.", + "Only servers with one of the selected transports.": "Только серверы с одним из выбранных транспортов.", + "Only from the specified countries.": "Только из указанных стран.", + "Remove servers from the specified countries from this level.": "Удалить серверы из указанных стран с этого уровня.", + "Remove servers whose names match the expression from this level.": "Удалить серверы, чьи имена соответствуют выражению, с этого уровня.", + "Remove the specified servers from this level.": "Удалить указанные серверы с этого уровня.", + "Exclude servers with one of the selected protocols from this level.": "Исключить серверы с одним из выбранных протоколов с этого уровня.", + "Exclude servers with one of the selected security types from this level.": "Исключить серверы с одним из выбранных типов безопасности с этого уровня.", + "Exclude servers with one of the selected transports from this level.": "Исключить серверы с одним из выбранных транспортов с этого уровня.", + "Hide servers from selected groups without repeating their filtering criteria.": "Скрыть серверы из выбранных групп без повторения критериев фильтрации.", + "Show servers from selected groups without repeating their filtering criteria.": "Показать серверы из выбранных групп без повторения критериев фильтрации.", + "Traffic for this level goes directly.": "Трафик этого уровня идёт напрямую.", + "Traffic will go through the default route (Direct/Default).": "Трафик пойдёт через маршрут по умолчанию (Direct/Default).", + "When switching to another level, test every server and select the fastest instead of the first working one.": "При переключении на другой уровень тестировать каждый сервер и выбирать самый быстрый вместо первого рабочего.", + "Periodically check the current level and switch to a faster server even when the current one works.": "Периодически проверять текущий уровень и переключаться на более быстрый сервер, даже если текущий работает.", + "Stop checking when URLTest group is not used. Use sing-box duration format like 1d, 12h or 30m.": "Остановить проверку, когда группа URLTest не используется. Используйте формат длительности sing-box, например 1d, 12h или 30m.", + "How often higher priority levels are checked while a lower level is active": "Как часто проверяются уровни с более высоким приоритетом, когда активен нижний уровень", + "Filter the servers that will be displayed on the dashboard.": "Фильтровать серверы, отображаемые на дашборде.", + "Display name": "Отображаемое имя", + "Name displayed on the dashboard": "Имя, отображаемое на дашборде", + "Pin on dashboard": "Закрепить на дашборде", + "Show metadata on dashboard": "Показывать метаданные на дашборде", + "Show subscription metadata for this source on the dashboard": "Показывать метаданные подписки для этого источника на дашборде", + "Server filtering": "Фильтрация серверов", + "Sort Alphabetically": "Сортировать по алфавиту", + "Sort by latency": "Сортировать по задержке", + "Sorts servers in this section by lowest latency in the dashboard.": "Сортировать серверы в этой секции по наименьшей задержке на дашборде.", + "Keep URLTest before latency-sorted servers": "Сохранять URLTest перед серверами, отсортированными по задержке", + "Keep Priority before latency-sorted servers": "Сохранять приоритет перед серверами, отсортированными по задержке", + "Hide URLTest group nodes": "Скрыть узлы групп URLTest", + "Hide cascade connection nodes": "Скрыть узлы каскадных подключений", + "Hide intermediate nodes used as detours by other subscription nodes": "Скрыть промежуточные узлы, используемые как detour другими узлами подписки", + "Hide individual nodes that are already included in imported subscription URLTest groups": "Скрыть отдельные узлы, уже включённые в импортированные группы URLTest подписки", + "Interrupt connections when URLTest switches the selected server": "Разрывать соединения при переключении URLTest на другой сервер", + "Interrupt connections when priority failover switches server": "Разрывать соединения при переключении приоритетного failover", + "Automatically select the fastest node in the current level": "Автовыбор самого быстрого узла уровня", + "Server group for automatic lowest-latency selection": "Группа серверов для автоматического выбора с наименьшей задержкой", + "Server group for priority failover": "Группа серверов для приоритетного переключения", + "Allows limiting the list of servers for URLTest": "Позволяет ограничить список серверов для URLTest", + "URLTest": "URLTest", + "URLTest settings": "Настройки URLTest", + "Check interval": "Интервал проверки", + "Check timeout after which the server is considered dead": "Таймаут проверки, после которого сервер считается недоступным", + "How often the currently selected server is checked": "Как часто проверяется текущий сервер", + "URL used to test server latency": "URL для теста задержки сервера", + "URL used to check whether a server is alive": "URL для проверки доступности сервера", + "Latency test URL": "URL для теста задержки", + "Check URL": "URL проверки", + + // === Оставшиеся 81 ключ === + "-- Select --": "-- Выбрать --", + ".lst Lists": "Списки .lst", + "(provider default)": "(по умолчанию провайдера)", + "+ Add JSON outbound": "+ Добавить JSON outbound", + "+ Add level": "+ Добавить уровень", + "+ Add priority": "+ Добавить приоритет", + "+ Add URLTest": "+ Добавить URLTest", + "\u26A0\uFE0F If all Bootstrap DNS fail 3 times, queries will be sent to your ISP's DNS in plaintext. Only use as a last resort to prevent complete internet loss.": "\u26A0\uFE0F Если все Bootstrap DNS завершатся с ошибкой 3 раза, запросы будут отправлены в DNS вашего провайдера в открытом виде. Используйте только в крайнем случае для предотвращения полной потери интернета.", + "\u26A0\uFE0F If all Main DNS fail 3 times, queries will be sent to your ISP's DNS in plaintext. Only use as a last resort to prevent complete internet loss.": "\u26A0\uFE0F Если все основные DNS завершатся с ошибкой 3 раза, запросы будут отправлены в DNS вашего провайдера в открытом виде. Используйте только в крайнем случае для предотвращения полной потери интернета.", + "Add URLTest / Priority group": "Добавить группу URLTest / Приоритет", + "AEAD Method": "Метод AEAD", + "AI Agent REST API Bearer Token": "Токен Bearer для REST API ИИ-агента", + "Automatic component update checks": "Автоматическая проверка обновлений компонентов", + "Clean Comments": "Очистить комментарии", + "Conditions": "Условия", + "Configure User-Agent in the item settings": "Настройте User-Agent в параметрах элемента", + "Delay in milliseconds before reloading Tachyon after interface UP": "Задержка в миллисекундах перед перезагрузкой Tachyon после поднятия интерфейса", + "DNS protocol": "Протокол DNS", + "Domains": "Домены", + "e.g. AES-256-GCM \u2014 leave empty for default": "напр. AES-256-GCM \u2014 оставьте пустым для значения по умолчанию", + "e.g. google.com, 1.1.1.1, 443": "напр. google.com, 1.1.1.1, 443", + "e.g. SHA256 \u2014 leave empty for default": "напр. SHA256 \u2014 оставьте пустым для значения по умолчанию", + "Enable Firewall Reload Dedup": "Включить дедупликацию перезагрузки файрвола", + "Enables the background daemon that polls Telegram for commands and sends notifications.": "Включает фоновый демон, который опрашивает Telegram на наличие команд и отправляет уведомления.", + "Enables the background watchdog process to monitor services and auto-recover on failures.": "Включает фоновый процесс watchdog для мониторинга сервисов и автоматического восстановления при сбоях.", + "Exclude by proxy parameters": "Исключить по параметрам прокси", + "Exclude by regular expression": "Исключить по регулярному выражению", + "Exclude countries": "Исключить страны", + "Exclude selected countries": "Исключить выбранные страны", + "Exclude traffic types": "Исключить типы трафика", + "Exclude URLTest / Priority group": "Исключить группу URLTest / Приоритет", + "Failed to parse file:": "Ошибка разбора файла:", + "Forces sing-box to tunnel DNS requests via DoQ with Encrypted Client Hello (ECH) for SNI hiding.": "Принудительно направлять DNS-запросы через DoQ с Encrypted Client Hello (ECH) для скрытия SNI.", + "Generating\u2026": "Генерация\u2026", + "Include by proxy parameters": "Включить по параметрам прокси", + "Include by regular expression": "Включить по регулярному выражению", + "Include countries": "Включить страны", + "Include selected countries": "Включить выбранные страны", + "Init Packet Magic Header (S1)": "Magic-заголовок пакета инициализации (S1)", + "Init Packet Magic Header (S3)": "Magic-заголовок пакета инициализации (S3)", + "Init Packet Payload (I1)": "Полезная нагрузка пакета инициализации (I1)", + "Init Packet Payload (I2)": "Полезная нагрузка пакета инициализации (I2)", + "Init Packet Payload (I3)": "Полезная нагрузка пакета инициализации (I3)", + "Init Packet Payload (I4)": "Полезная нагрузка пакета инициализации (I4)", + "Init Packet Payload (I5)": "Полезная нагрузка пакета инициализации (I5)", + "Invalid line: \"%s\". Use: domain ip or ip domain": "Неверная строка: \"%s\". Используйте: domain ip или ip domain", + "Junk Max Size (Jmax)": "Макс. размер мусора (Jmax)", + "Junk Min Size (Jmin)": "Мин. размер мусора (Jmin)", + "Junk Packet Count (Jc)": "Количество мусорных пакетов (Jc)", + "Leave empty to omit this header": "Оставьте пустым, чтобы пропустить этот заголовок", + "Match destination IPs or subnets": "Сопоставлять IP-адреса или подсети назначения", + "Match destination ports. Use a single port or a range": "Сопоставлять порты назначения. Используйте один порт или диапазон", + "Match Found": "Совпадение найдено", + "Match traffic by packet DSCP mark (assigned in Windows via Policy-Based QoS). Examples: 46 (EF), 0x2e, 34 (AF41)": "Сопоставлять трафик по DSCP-метке пакета (назначается в Windows через Policy-Based QoS). Примеры: 46 (EF), 0x2e, 34 (AF41)", + "Only the specified servers.": "Только указанные серверы.", + "Open priority settings and enter a display name": "Откройте настройки приоритета и введите отображаемое имя", + "Option \"%s\" contains an invalid input value.": "Параметр \"%s\" содержит недопустимое значение.", + "Optional \u2014 leave empty for default": "Опционально \u2014 оставьте пустым для значения по умолчанию", + "Path must contain at least one directory (like /tmp/cache.db)": "Путь должен содержать как минимум одну директорию (например /tmp/cache.db)", + "Port range start must be less than or equal to end": "Начало диапазона портов должно быть меньше или равно концу", + "Ports": "Порты", + "Prevents multiple reload_firewall calls within 120 seconds to avoid connection drops.": "Предотвращает множественные вызовы reload_firewall в течение 120 секунд для избежания разрыва соединений.", + "Proxy Fail Threshold": "Порог ошибок прокси", + "Reconnect Threshold": "Порог переподключений", + "Registration Detour": "Маршрут регистрации", + "Response Packet Magic Header (S2)": "Magic-заголовок ответного пакета (S2)", + "Response Packet Magic Header (S4)": "Magic-заголовок ответного пакета (S4)", + "Route main DNS requests through the selected section.": "Маршрутизировать основные DNS-запросы через выбранную секцию.", + "Route requests to this DNS server through another section.": "Маршрутизировать запросы к этому DNS-серверу через другую секцию.", + "Secret token for authorizing WRITE operations (POST/PUT) on /cgi-bin/tachyon-agent/. Leave empty if auth is not required.": "Секретный токен для авторизации операций записи (POST/PUT) на /cgi-bin/tachyon-agent/. Оставьте пустым, если аутентификация не требуется.", + "Select an existing URLTest or Priority group": "Выберите существующую группу URLTest или Приоритет", + "Service list": "Список сервисов", + "Services & Access": "Сервисы и доступ", + "Underload Packet Magic Header (H1)": "Magic-заголовок пакета недогрузки (H1)", + "Underload Packet Magic Header (H2)": "Magic-заголовок пакета недогрузки (H2)", + "Underload Packet Magic Header (H3)": "Magic-заголовок пакета недогрузки (H3)", + "Underload Packet Magic Header (H4)": "Magic-заголовок пакета недогрузки (H4)", + "URLs of remote hosts files to download and apply. Supports standard hosts format: IP domain.": "URL удалённых файлов hosts для загрузки и применения. Поддерживается стандартный формат hosts: IP domain.", + "You can select Output Network Interface, by default autodetect": "Вы можете выбрать выходной сетевой интерфейс, по умолчанию автоопределение", + "Zapret hostlist templates are not supported here because Tachyon does not expand them for per-rule NFQWS strategies.": "Шаблоны hostlist Zapret не поддерживаются здесь, потому что Tachyon не расширяет их для стратегий NFQWS по правилам.", + "Zapret2 hostlist templates are not supported here because Tachyon does not expand them for per-rule NFQWS2 strategies.": "Шаблоны hostlist Zapret2 не поддерживаются здесь, потому что Tachyon не расширяет их для стратегий NFQWS2 по правилам." }; +function escapePoString(str) { + return str.replace(/\\/g, '\\\\').replace(/"/g, '\\"'); +} + async function run() { const poPaths = [ 'locales/tachyon.ru.po', @@ -88,15 +1134,17 @@ async function run() { for (const p of poPaths) { let content = await fs.readFile(p, 'utf8'); for (const [key, val] of Object.entries(dictionary)) { - const searchTarget = `msgid "${key}"\nmsgstr ""`; - const searchTargetCRLF = `msgid "${key}"\r\nmsgstr ""`; - const replaceWith = `msgid "${key}"\nmsgstr "${val}"`; + const escapedKey = escapePoString(key); + const escapedVal = escapePoString(val); + const searchTarget = `msgid "${escapedKey}"\nmsgstr ""`; + const searchTargetCRLF = `msgid "${escapedKey}"\r\nmsgstr ""`; + const replaceWith = `msgid "${escapedKey}"\nmsgstr "${escapedVal}"`; - if (content.includes(`msgid "${key}"`)) { + if (content.includes(`msgid "${escapedKey}"`)) { content = content.replace(searchTarget, replaceWith); content = content.replace(searchTargetCRLF, replaceWith); } else { - content += `\nmsgid "${key}"\nmsgstr "${val}"\n`; + content += `\nmsgid "${escapedKey}"\nmsgstr "${escapedVal}"\n`; } } await fs.writeFile(p, content, 'utf8'); diff --git a/fe-app-tachyon/generate-po.js b/fe-app-tachyon/generate-po.js index 54fd2437..6a50216a 100644 --- a/fe-app-tachyon/generate-po.js +++ b/fe-app-tachyon/generate-po.js @@ -60,15 +60,13 @@ function parsePo(content) { try { msgid = JSON.parse(line.slice(6)); } catch (e) { - console.error('Failed to parse msgid on line:', line); - throw e; + msgid = parseUnquotedPoValue(line, 'msgid'); } } else if (line.startsWith('msgstr ') && msgid !== null) { try { msgstr = JSON.parse(line.slice(7)); } catch (e) { - console.error('Failed to parse msgstr on line:', line); - throw e; + msgstr = parseUnquotedPoValue(line, 'msgstr'); } translations.set(msgid, msgstr); msgid = null; @@ -78,6 +76,19 @@ function parsePo(content) { return translations; } +function parseUnquotedPoValue(line, prefix) { + const match = line.match(new RegExp(`^${prefix} "(.+)"$`)); + if (!match) { + console.error('Failed to parse line:', line); + throw new Error('Failed to parse PO line'); + } + return match[1] + .replace(/\\n/g, '\n') + .replace(/\\t/g, '\t') + .replace(/\\"/g, '"') + .replace(/\\\\/g, '\\'); +} + function escapePoString(str) { return str.replace(/\\/g, '\\\\').replace(/"/g, '\\"'); } diff --git a/fe-app-tachyon/locales/calls.json b/fe-app-tachyon/locales/calls.json index 11f205c0..86e6cd04 100644 --- a/fe-app-tachyon/locales/calls.json +++ b/fe-app-tachyon/locales/calls.json @@ -1,4 +1,61 @@ [ + { + "call": "-- Select --", + "key": "-- Select --", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2062", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2439", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2818", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2833", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3031", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3046", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3282", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3434", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3444" + ] + }, + { + "call": ".lst Lists", + "key": ".lst Lists", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10205" + ] + }, + { + "call": "(provider default)", + "key": "(provider default)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1375" + ] + }, + { + "call": "+ Add JSON outbound", + "key": "+ Add JSON outbound", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8865" + ] + }, + { + "call": "+ Add level", + "key": "+ Add level", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3198" + ] + }, + { + "call": "+ Add priority", + "key": "+ Add priority", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8951" + ] + }, + { + "call": "+ Add URLTest", + "key": "+ Add URLTest", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8892" + ] + }, { "call": "⏹ Stop", "key": "⏹ Stop", @@ -20,6 +77,20 @@ "src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:1196" ] }, + { + "call": "⚠️ If all Bootstrap DNS fail 3 times, queries will be sent to your ISP's DNS in plaintext. Only use as a last resort to prevent complete internet loss.", + "key": "⚠️ If all Bootstrap DNS fail 3 times, queries will be sent to your ISP's DNS in plaintext. Only use as a last resort to prevent complete internet loss.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:668" + ] + }, + { + "call": "⚠️ If all Main DNS fail 3 times, queries will be sent to your ISP's DNS in plaintext. Only use as a last resort to prevent complete internet loss.", + "key": "⚠️ If all Main DNS fail 3 times, queries will be sent to your ISP's DNS in plaintext. Only use as a last resort to prevent complete internet loss.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:659" + ] + }, { "call": "✔ Running", "key": "✔ Running", @@ -45,6 +116,14 @@ "src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:722" ] }, + { + "call": "Action", + "key": "Action", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7236", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7266" + ] + }, { "call": "Active", "key": "Active", @@ -83,10 +162,54 @@ ] }, { - "call": "Active Routes", - "key": "Active Routes", + "call": "Add at least one DNS server", + "key": "Add at least one DNS server", "places": [ - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:223" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:122", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:166", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1843" + ] + }, + { + "call": "Add prefix to nodes", + "key": "Add prefix to nodes", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2529" + ] + }, + { + "call": "Add URLs or local paths to .lst lists containing domains and subnets.", + "key": "Add URLs or local paths to .lst lists containing domains and subnets.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9429" + ] + }, + { + "call": "Add URLs or local paths to .lst lists containing domains. IP entries are ignored.", + "key": "Add URLs or local paths to .lst lists containing domains. IP entries are ignored.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9455" + ] + }, + { + "call": "Add URLs or local paths to .srs / .json lists. Only domain rules are supported.", + "key": "Add URLs or local paths to .srs / .json lists. Only domain rules are supported.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9404" + ] + }, + { + "call": "Add URLs or local paths to .srs / .json lists. Subnets are ignored by default.", + "key": "Add URLs or local paths to .srs / .json lists. Subnets are ignored by default.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9375" + ] + }, + { + "call": "Add URLTest / Priority group", + "key": "Add URLTest / Priority group", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3456" ] }, { @@ -96,6 +219,43 @@ "src/tachyon/tabs/diagnostic/checks/runNftCheck.ts:106" ] }, + { + "call": "Additionally exclude servers by protocol, transport, and security. Exclude only servers matching the specified parameters.", + "key": "Additionally exclude servers by protocol, transport, and security. Exclude only servers matching the specified parameters.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2748", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2958" + ] + }, + { + "call": "Additionally filter servers by protocol, transport, and security. Add only servers matching the specified parameters.", + "key": "Additionally filter servers by protocol, transport, and security. Add only servers matching the specified parameters.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2731", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2940" + ] + }, + { + "call": "Additionally hide servers by protocol, transport, and security. Hide servers matching the specified parameters.", + "key": "Additionally hide servers by protocol, transport, and security. Hide servers matching the specified parameters.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3356" + ] + }, + { + "call": "Additionally show servers by protocol, transport, and security. Add only servers matching the specified parameters.", + "key": "Additionally show servers by protocol, transport, and security. Add only servers matching the specified parameters.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3336" + ] + }, + { + "call": "Administrator Chat IDs", + "key": "Administrator Chat IDs", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1781" + ] + }, { "call": "Advanced self-healing features. Requires Watchdog to be enabled.", "key": "Advanced self-healing features. Requires Watchdog to be enabled.", @@ -103,6 +263,27 @@ "src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:579" ] }, + { + "call": "Advanced System", + "key": "Advanced System", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:584" + ] + }, + { + "call": "AEAD Method", + "key": "AEAD Method", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8603" + ] + }, + { + "call": "AI & Watchdog", + "key": "AI & Watchdog", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:583" + ] + }, { "call": "AI Agent REST API (12 Endpoints)", "key": "AI Agent REST API (12 Endpoints)", @@ -110,10 +291,18 @@ "src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:684" ] }, + { + "call": "AI Agent REST API Bearer Token", + "key": "AI Agent REST API Bearer Token", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1327" + ] + }, { "call": "AI API Key", "key": "AI API Key", "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1394", "src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:893" ] }, @@ -158,6 +347,7 @@ "call": "AI Doctor Language", "key": "AI Doctor Language", "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1381", "src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:860" ] }, @@ -165,6 +355,7 @@ "call": "AI Model", "key": "AI Model", "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1368", "src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:836" ] }, @@ -172,6 +363,7 @@ "call": "AI Provider", "key": "AI Provider", "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1352", "src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:766" ] }, @@ -204,6 +396,34 @@ "src/tachyon/tabs/monitoring/render.ts:40" ] }, + { + "call": "All except selected", + "key": "All except selected", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1959" + ] + }, + { + "call": "All remaining except selected", + "key": "All remaining except selected", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1969" + ] + }, + { + "call": "All remaining servers", + "key": "All remaining servers", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1967" + ] + }, + { + "call": "All remaining servers means every server not already assigned to a higher-priority level.", + "key": "All remaining servers means every server not already assigned to a higher-priority level.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2914" + ] + }, { "call": "All Routes", "key": "All Routes", @@ -213,11 +433,66 @@ ] }, { - "call": "All Services", - "key": "All Services", + "call": "All servers", + "key": "All servers", "places": [ - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:235", - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:358" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1958" + ] + }, + { + "call": "All traffic from these IP addresses will be routed through the section unconditionally, ignoring all other conditions.", + "key": "All traffic from these IP addresses will be routed through the section unconditionally, ignoring all other conditions.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9487" + ] + }, + { + "call": "Allow Insecure TLS", + "key": "Allow Insecure TLS", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8505" + ] + }, + { + "call": "Allowed domain prefixes are full:, keyword:, and regex:", + "key": "Allowed domain prefixes are full:, keyword:, and regex:", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5323" + ] + }, + { + "call": "Allows access to YACD from the WAN. Make sure to open the appropriate port in your firewall.", + "key": "Allows access to YACD from the WAN. Make sure to open the appropriate port in your firewall.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:959" + ] + }, + { + "call": "Allows limiting the list of servers for URLTest", + "key": "Allows limiting the list of servers for URLTest", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2708" + ] + }, + { + "call": "Allows Tachyon to send diagnostic snapshots to ChatGPT or DeepSeek API for intelligent root-cause analysis and auto-repair recommendations.", + "key": "Allows Tachyon to send diagnostic snapshots to ChatGPT or DeepSeek API for intelligent root-cause analysis and auto-repair recommendations.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1341" + ] + }, + { + "call": "AmneziaWG config loaded successfully!", + "key": "AmneziaWG config loaded successfully!", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8292" + ] + }, + { + "call": "AmneziaWG Generator", + "key": "AmneziaWG Generator", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8005" ] }, { @@ -227,6 +502,27 @@ "src/tachyon/tabs/updates/initController.ts:835" ] }, + { + "call": "API Key for OpenAI (sk-...) or DeepSeek (optional for Ollama / LM Studio)", + "key": "API Key for OpenAI (sk-...) or DeepSeek (optional for Ollama / LM Studio)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1395" + ] + }, + { + "call": "Apply rules of this section only to selected protocols.", + "key": "Apply rules of this section only to selected protocols.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9543" + ] + }, + { + "call": "Apply section rules only to the specified local IP addresses", + "key": "Apply section rules only to the specified local IP addresses", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9478" + ] + }, { "call": "Applying changes & reloading services...", "key": "Applying changes & reloading services...", @@ -249,10 +545,31 @@ ] }, { - "call": "Auto", - "key": "Auto", + "call": "At least one Admin Chat ID is required", + "key": "At least one Admin Chat ID is required", "places": [ - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:35" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1792" + ] + }, + { + "call": "At least one valid domain must be specified.", + "key": "At least one valid domain must be specified.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5354" + ] + }, + { + "call": "At least one valid IP or subnet must be specified.", + "key": "At least one valid IP or subnet must be specified.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5436" + ] + }, + { + "call": "Auth Digest", + "key": "Auth Digest", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8686" ] }, { @@ -262,26 +579,97 @@ "src/partials/modal/renderModal.ts:286" ] }, + { + "call": "Auto-detected domains", + "key": "Auto-detected domains", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1584" + ] + }, + { + "call": "Auto-detected Domains", + "key": "Auto-detected Domains", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9300" + ] + }, { "call": "Auto-detects blocked domains from logs and adds them to the first section where they work via proxy.", "key": "Auto-detects blocked domains from logs and adds them to the first section where they work via proxy.", "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1544", "src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:1053" ] }, + { + "call": "Auto-generate HWID", + "key": "Auto-generate HWID", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2455" + ] + }, + { + "call": "Auto-update Hosts Lists", + "key": "Auto-update Hosts Lists", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7978" + ] + }, + { + "call": "Automatic component update checks", + "key": "Automatic component update checks", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1094" + ] + }, + { + "call": "Automatic User-Agent selection", + "key": "Automatic User-Agent selection", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2424" + ] + }, + { + "call": "Automatically add text to the name of each server from this subscription for convenient filtering.", + "key": "Automatically add text to the name of each server from this subscription for convenient filtering.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2530" + ] + }, + { + "call": "Automatically check installed components for new versions", + "key": "Automatically check installed components for new versions", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1095" + ] + }, + { + "call": "Automatically generate a Cloudflare WARP account and configure all AmneziaWG settings.", + "key": "Automatically generate a Cloudflare WARP account and configure all AmneziaWG settings.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8006" + ] + }, + { + "call": "Automatically increase check intervals when healthy (to 5 min) and decrease on problems (to 120s).", + "key": "Automatically increase check intervals when healthy (to 5 min) and decrease on problems (to 120s).", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1518" + ] + }, { "call": "Automatically select the fastest node in the current level", "key": "Automatically select the fastest node in the current level", "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3148", "src/tachyon/tabs/dashboard/initController.ts:1243" ] }, { - "call": "Available", - "key": "Available", + "call": "Automatically update remote hosts lists on schedule", + "key": "Automatically update remote hosts lists on schedule", "places": [ - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:102", - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:326" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7979" ] }, { @@ -292,10 +680,12 @@ ] }, { - "call": "Avg Latency", - "key": "Avg Latency", + "call": "Backend validation failed: %s", + "key": "Backend validation failed: %s", "places": [ - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:328" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5569", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6014", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6426" ] }, { @@ -305,6 +695,21 @@ "src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:694" ] }, + { + "call": "Belarus (by)", + "key": "Belarus (by)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9249" + ] + }, + { + "call": "BitTorrent / P2P", + "key": "BitTorrent / P2P", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9526", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9545" + ] + }, { "call": "Bootstrap DNS", "key": "Bootstrap DNS", @@ -312,6 +717,20 @@ "src/tachyon/tabs/diagnostic/checks/runDnsCheck.ts:57" ] }, + { + "call": "Bootstrap DNS Servers", + "key": "Bootstrap DNS Servers", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:622" + ] + }, + { + "call": "Bot Status", + "key": "Bot Status", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1743" + ] + }, { "call": "Browser FakeIP check could not be completed", "key": "Browser FakeIP check could not be completed", @@ -341,6 +760,51 @@ "src/tachyon/tabs/diagnostic/initController.ts:1258" ] }, + { + "call": "Built-in rule sets", + "key": "Built-in rule sets", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9321" + ] + }, + { + "call": "By flag emoji from name", + "key": "By flag emoji from name", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1976" + ] + }, + { + "call": "ByeDPI listen address and port are assigned by Tachyon and must not be set in the strategy.", + "key": "ByeDPI listen address and port are assigned by Tachyon and must not be set in the strategy.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6495" + ] + }, + { + "call": "ByeDPI option does not accept a compact value: %s", + "key": "ByeDPI option does not accept a compact value: %s", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6672" + ] + }, + { + "call": "ByeDPI option does not accept a value: %s", + "key": "ByeDPI option does not accept a value: %s", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6601" + ] + }, + { + "call": "ByeDPI option requires a value: %s", + "key": "ByeDPI option requires a value: %s", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6593", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6619", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6653", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6662" + ] + }, { "call": "ByeDPI package is installed", "key": "ByeDPI package is installed", @@ -383,6 +847,63 @@ "src/tachyon/tabs/diagnostic/checks/runByedpiCheck.ts:108" ] }, + { + "call": "ByeDPI Strategy", + "key": "ByeDPI Strategy", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7435" + ] + }, + { + "call": "ByeDPI strategy cannot be empty", + "key": "ByeDPI strategy cannot be empty", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6698" + ] + }, + { + "call": "Bypasses UDP traffic for selected game consoles (PS5/Xbox) to achieve NAT Type 1 / 2 (Full Cone NAT) for P2P matchmaking, while keeping TCP (PSN/Auth) routed through the proxy.", + "key": "Bypasses UDP traffic for selected game consoles (PS5/Xbox) to achieve NAT Type 1 / 2 (Full Cone NAT) for P2P matchmaking, while keeping TCP (PSN/Auth) routed through the proxy.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1008" + ] + }, + { + "call": "CA Certificate", + "key": "CA Certificate", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8697" + ] + }, + { + "call": "Cache all built-in lists and databases even if they are not currently selected in any section. Recommended if you have plenty of storage space or USB drive.", + "key": "Cache all built-in lists and databases even if they are not currently selected in any section. Recommended if you have plenty of storage space or USB drive.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1082" + ] + }, + { + "call": "Cache File Path", + "key": "Cache File Path", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1225" + ] + }, + { + "call": "Cache file path cannot be empty", + "key": "Cache file path cannot be empty", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1239" + ] + }, + { + "call": "Cancel", + "key": "Cancel", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:434", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7712" + ] + }, { "call": "Cannot receive checks result", "key": "Cannot receive checks result", @@ -398,17 +919,17 @@ ] }, { - "call": "Check Again", - "key": "Check Again", + "call": "Cannot save settings", + "key": "Cannot save settings", "places": [ - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:796" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3584" ] }, { - "call": "Check All", - "key": "Check All", + "call": "Cascade connection", + "key": "Cascade connection", "places": [ - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:724" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8984" ] }, { @@ -427,35 +948,15 @@ "src/tachyon/tabs/dashboard/partials/renderSections.ts:859" ] }, - { - "call": "Check Domain", - "key": "Check Domain", - "places": [ - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:612", - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:709" - ] - }, - { - "call": "Check domain or IP (e.g. example.com)...", - "key": "Check domain or IP (e.g. example.com)...", - "places": [ - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:606" - ] - }, { "call": "Check interval", "key": "Check interval", "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2636", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3099", "src/tachyon/tabs/dashboard/initController.ts:1230" ] }, - { - "call": "Check Mode:", - "key": "Check Mode:", - "places": [ - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:254" - ] - }, { "call": "Check Services", "key": "Check Services", @@ -463,6 +964,13 @@ "src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:148" ] }, + { + "call": "Check timeout after which the server is considered dead", + "key": "Check timeout after which the server is considered dead", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3112" + ] + }, { "call": "Check update", "key": "Check update", @@ -474,6 +982,8 @@ "call": "Check URL", "key": "Check URL", "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2662", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3086", "src/tachyon/tabs/dashboard/initController.ts:1228" ] }, @@ -521,8 +1031,15 @@ "src/tachyon/tabs/dashboard/partials/renderSections.ts:322", "src/tachyon/tabs/dashboard/partials/renderSections.ts:420", "src/tachyon/tabs/dashboard/partials/renderSections.ts:775", - "src/tachyon/tabs/dashboard/partials/renderSections.ts:849", - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:728" + "src/tachyon/tabs/dashboard/partials/renderSections.ts:849" + ] + }, + { + "call": "Checking…", + "key": "Checking…", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:275", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1635" ] }, { @@ -556,6 +1073,27 @@ "src/tachyon/tabs/diagnostic/checks/getDnsCheckPresentation.ts:27" ] }, + { + "call": "China (cn)", + "key": "China (cn)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9246" + ] + }, + { + "call": "Choose Hosts File...", + "key": "Choose Hosts File...", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7531" + ] + }, + { + "call": "Choose whether to route traffic to all destinations except selected countries (Exclude) or only to selected countries (Include).", + "key": "Choose whether to route traffic to all destinations except selected countries (Exclude) or only to selected countries (Include).", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9215" + ] + }, { "call": "CIDR must be between 0 and 32 for IPv4 or 0 and 128 for IPv6", "key": "CIDR must be between 0 and 32 for IPv4 or 0 and 128 for IPv6", @@ -563,6 +1101,20 @@ "src/validators/validateSubnet.ts:35" ] }, + { + "call": "Cipher", + "key": "Cipher", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8675" + ] + }, + { + "call": "Clean Comments", + "key": "Clean Comments", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7815" + ] + }, { "call": "Cleaning configuration & reloading...", "key": "Cleaning configuration & reloading...", @@ -570,18 +1122,39 @@ "src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:126" ] }, + { + "call": "Clear", + "key": "Clear", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10013" + ] + }, + { + "call": "Client Certificate", + "key": "Client Certificate", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8709" + ] + }, + { + "call": "Client Key", + "key": "Client Key", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8721" + ] + }, { "call": "Close", "key": "Close", "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3651", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10221", "src/partials/modal/renderModal.ts:263", "src/tachyon/tabs/dashboard/initController.ts:1085", "src/tachyon/tabs/monitoring/initController.ts:884", "src/tachyon/tabs/monitoring/initController.ts:934", "src/tachyon/tabs/diagnostic/initController.ts:1144", "src/tachyon/tabs/diagnostic/partials/renderAiChatModal.ts:212", - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:155", - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:802", "src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:416", "src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:461" ] @@ -610,6 +1183,48 @@ "src/tachyon/tabs/monitoring/render.ts:29" ] }, + { + "call": "Cloudflare account / device ID", + "key": "Cloudflare account / device ID", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8629" + ] + }, + { + "call": "Cloudflare API access token", + "key": "Cloudflare API access token", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8641" + ] + }, + { + "call": "Cloudflare WARP account / device ID", + "key": "Cloudflare WARP account / device ID", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8434" + ] + }, + { + "call": "Cloudflare WARP API access token", + "key": "Cloudflare WARP API access token", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8446" + ] + }, + { + "call": "Comma-separated list of Telegram user IDs authorized to control the bot.", + "key": "Comma-separated list of Telegram user IDs authorized to control the bot.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1782" + ] + }, + { + "call": "Community Lists", + "key": "Community Lists", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10201" + ] + }, { "call": "Comparing versions & fingerprint check...", "key": "Comparing versions & fingerprint check...", @@ -624,6 +1239,13 @@ "src/tachyon/services/core.service.ts:43" ] }, + { + "call": "Component update check interval", + "key": "Component update check interval", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1104" + ] + }, { "call": "compressed", "key": "compressed", @@ -631,6 +1253,27 @@ "src/tachyon/helpers/singBoxVariant.ts:60" ] }, + { + "call": "Conditions", + "key": "Conditions", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7224" + ] + }, + { + "call": "Config File Path", + "key": "Config File Path", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1211" + ] + }, + { + "call": "Configure User-Agent in the item settings", + "key": "Configure User-Agent in the item settings", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4749" + ] + }, { "call": "Conflict", "key": "Conflict", @@ -647,6 +1290,13 @@ "src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:745" ] }, + { + "call": "Connect through", + "key": "Connect through", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9022" + ] + }, { "call": "Connected", "key": "Connected", @@ -661,6 +1311,13 @@ "src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:118" ] }, + { + "call": "Connection URL", + "key": "Connection URL", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8745" + ] + }, { "call": "Connections are unavailable", "key": "Connections are unavailable", @@ -705,6 +1362,13 @@ "src/tachyon/tabs/diagnostic/checks/runFakeIPCheck.ts:89" ] }, + { + "call": "Country code (e.g. ru, us, de)", + "key": "Country code (e.g. ru, us, de)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9252" + ] + }, { "call": "Current Diagnosis", "key": "Current Diagnosis", @@ -712,6 +1376,20 @@ "src/tachyon/tabs/diagnostic/initController.ts:1110" ] }, + { + "call": "Current section cannot be used as its own transit section", + "key": "Current section cannot be used as its own transit section", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9039" + ] + }, + { + "call": "Current section cannot download its own subscription", + "key": "Current section cannot download its own subscription", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2416" + ] + }, { "call": "Currently unavailable", "key": "Currently unavailable", @@ -723,14 +1401,43 @@ "call": "Custom API Endpoint URL", "key": "Custom API Endpoint URL", "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1405", "src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:915" ] }, { - "call": "Custom Domains", - "key": "Custom Domains", + "call": "Custom device headers", + "key": "Custom device headers", "places": [ - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:55" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2492" + ] + }, + { + "call": "Custom DNS Records (Hosts)", + "key": "Custom DNS Records (Hosts)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7720" + ] + }, + { + "call": "Custom OpenAI-Compatible API (OpenRouter)", + "key": "Custom OpenAI-Compatible API (OpenRouter)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1361" + ] + }, + { + "call": "Custom OpenAI-compatible API endpoint URL (e.g. http://192.168.1.100:11434/v1/chat/completions)", + "key": "Custom OpenAI-compatible API endpoint URL (e.g. http://192.168.1.100:11434/v1/chat/completions)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1406" + ] + }, + { + "call": "Custom outbound configurations in JSON format", + "key": "Custom outbound configurations in JSON format", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8860" ] }, { @@ -740,6 +1447,50 @@ "src/tachyon/tabs/dashboard/partials/renderSections.ts:44" ] }, + { + "call": "Default (auto)", + "key": "Default (auto)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1908" + ] + }, + { + "call": "Default address for checking server availability and latency. URLTest uses its own address.", + "key": "Default address for checking server availability and latency. URLTest uses its own address.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1141" + ] + }, + { + "call": "Delay in milliseconds before reloading Tachyon after interface UP", + "key": "Delay in milliseconds before reloading Tachyon after interface UP", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:932" + ] + }, + { + "call": "Delay value cannot be empty", + "key": "Delay value cannot be empty", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:939" + ] + }, + { + "call": "Detect server country", + "key": "Detect server country", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2718", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2927", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3323" + ] + }, + { + "call": "Detects and drops STUN/TURN packets in nftables to prevent real IP leaks via WebRTC.", + "key": "Detects and drops STUN/TURN packets in nftables to prevent real IP leaks via WebRTC.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1281" + ] + }, { "call": "detour must be a non-empty string", "key": "detour must be a non-empty string", @@ -747,6 +1498,13 @@ "src/validators/validateOutboundJson.ts:115" ] }, + { + "call": "Device filter", + "key": "Device filter", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9477" + ] + }, { "call": "Device IPs (one per line):", "key": "Device IPs (one per line):", @@ -761,6 +1519,13 @@ "src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:265" ] }, + { + "call": "Device or IP", + "key": "Device or IP", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6961" + ] + }, { "call": "Devices listed here are always routed through the assigned section, regardless of global rules.", "key": "Devices listed here are always routed through the assigned section, regardless of global rules.", @@ -783,11 +1548,17 @@ ] }, { - "call": "Direct", - "key": "Direct", + "call": "Direct (Default)", + "key": "Direct (Default)", "places": [ - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:25", - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:32" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8464" + ] + }, + { + "call": "Direct connection", + "key": "Direct connection", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2904" ] }, { @@ -797,6 +1568,64 @@ "src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:90" ] }, + { + "call": "Disable QUIC", + "key": "Disable QUIC", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:983" + ] + }, + { + "call": "Disable the QUIC protocol to improve compatibility or fix issues with video streaming", + "key": "Disable the QUIC protocol to improve compatibility or fix issues with video streaming", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:984" + ] + }, + { + "call": "Disabling interception is incompatible with action=zapret2 because Tachyon sends matched traffic through NFQUEUE.", + "key": "Disabling interception is incompatible with action=zapret2 because Tachyon sends matched traffic through NFQUEUE.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6096" + ] + }, + { + "call": "Display name", + "key": "Display name", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2618", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3075" + ] + }, + { + "call": "DNS", + "key": "DNS", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9529", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9548" + ] + }, + { + "call": "DNS Check Interval", + "key": "DNS Check Interval", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:677" + ] + }, + { + "call": "DNS Check Interval (s)", + "key": "DNS Check Interval (s)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1462" + ] + }, + { + "call": "DNS Failures Before Switching", + "key": "DNS Failures Before Switching", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:706" + ] + }, { "call": "DNS on router", "key": "DNS on router", @@ -804,6 +1633,76 @@ "src/tachyon/tabs/diagnostic/checks/runDnsCheck.ts:75" ] }, + { + "call": "DNS over HTTPS (DoH)", + "key": "DNS over HTTPS (DoH)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:595", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1814" + ] + }, + { + "call": "DNS over QUIC (DoQ)", + "key": "DNS over QUIC (DoQ)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:597", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1816" + ] + }, + { + "call": "DNS over TLS (DoT)", + "key": "DNS over TLS (DoT)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:596", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1815" + ] + }, + { + "call": "DNS protocol", + "key": "DNS protocol", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2585", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7294" + ] + }, + { + "call": "DNS Protocol Type", + "key": "DNS Protocol Type", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:592" + ] + }, + { + "call": "DNS protocol used by the resolver", + "key": "DNS protocol used by the resolver", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2586", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7295" + ] + }, + { + "call": "DNS requests through section", + "key": "DNS requests through section", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:787", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7357" + ] + }, + { + "call": "DNS Rewrite TTL", + "key": "DNS Rewrite TTL", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:734" + ] + }, + { + "call": "DNS server", + "key": "DNS server", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2595", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7308" + ] + }, { "call": "DNS server address cannot be empty", "key": "DNS server address cannot be empty", @@ -811,10 +1710,68 @@ "src/validators/validateDns.ts:8" ] }, + { + "call": "DNS server used by the resolver", + "key": "DNS server used by the resolver", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2596", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7309" + ] + }, + { + "call": "DNS server used to obtain IP addresses for upstream DNS and proxies. If multiple servers are selected, a timeout switches to a backup.", + "key": "DNS server used to obtain IP addresses for upstream DNS and proxies. If multiple servers are selected, a timeout switches to a backup.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:623" + ] + }, + { + "call": "DNS Servers", + "key": "DNS Servers", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:608" + ] + }, + { + "call": "DNS Settings", + "key": "DNS Settings", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:579" + ] + }, + { + "call": "DNS Strategy", + "key": "DNS Strategy", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:766" + ] + }, + { + "call": "DNS Successful Checks Before Recovery", + "key": "DNS Successful Checks Before Recovery", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:720" + ] + }, + { + "call": "DNS through proxy", + "key": "DNS through proxy", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:778" + ] + }, + { + "call": "DNS through section", + "key": "DNS through section", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7345" + ] + }, { "call": "DNS Turbo Cache", "key": "DNS Turbo Cache", "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:756", "src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:479" ] }, @@ -825,6 +1782,13 @@ "src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:289" ] }, + { + "call": "DNS Unavailability Timeout", + "key": "DNS Unavailability Timeout", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:695" + ] + }, { "call": "Do not panic, everything can be fixed, just...", "key": "Do not panic, everything can be fixed, just...", @@ -832,6 +1796,48 @@ "src/tachyon/tabs/diagnostic/partials/renderWikiDisclaimer.ts:26" ] }, + { + "call": "Do not test servers from these countries.", + "key": "Do not test servers from these countries.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2791" + ] + }, + { + "call": "Do not test servers whose names match the expression.", + "key": "Do not test servers whose names match the expression.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2807" + ] + }, + { + "call": "Do not test servers with one of the selected protocols.", + "key": "Do not test servers with one of the selected protocols.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2752" + ] + }, + { + "call": "Do not test servers with one of the selected security types.", + "key": "Do not test servers with one of the selected security types.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2758" + ] + }, + { + "call": "Do not test servers with one of the selected transports.", + "key": "Do not test servers with one of the selected transports.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2755" + ] + }, + { + "call": "Do not test specified servers.", + "key": "Do not test specified servers.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2799" + ] + }, { "call": "Doctor failed", "key": "Doctor failed", @@ -856,6 +1862,63 @@ "src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:54" ] }, + { + "call": "Domain and IP lists", + "key": "Domain and IP lists", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9428" + ] + }, + { + "call": "Domain lists", + "key": "Domain lists", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9454" + ] + }, + { + "call": "Domain Resolver", + "key": "Domain Resolver", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2576" + ] + }, + { + "call": "Domain test sections", + "key": "Domain test sections", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1556" + ] + }, + { + "call": "Domains", + "key": "Domains", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9271", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10202" + ] + }, + { + "call": "Domains automatically detected by Smart Detect or added via Telegram bot. You can manually edit or remove them here.", + "key": "Domains automatically detected by Smart Detect or added via Telegram bot. You can manually edit or remove them here.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9301" + ] + }, + { + "call": "Done", + "key": "Done", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8292" + ] + }, + { + "call": "Dont Touch My DHCP!", + "key": "Dont Touch My DHCP!", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1201" + ] + }, { "call": "Downlink", "key": "Downlink", @@ -871,6 +1934,69 @@ "src/partials/modal/renderModal.ts:253" ] }, + { + "call": "Download component packages via the selected section", + "key": "Download component packages via the selected section", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1180" + ] + }, + { + "call": "Download components through", + "key": "Download components through", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1188" + ] + }, + { + "call": "Download components through a section", + "key": "Download components through a section", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1179" + ] + }, + { + "call": "Download lists through", + "key": "Download lists through", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1166" + ] + }, + { + "call": "Download lists through a section", + "key": "Download lists through a section", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1157" + ] + }, + { + "call": "Download remote lists and rule sets via the selected section", + "key": "Download remote lists and rule sets via the selected section", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1158" + ] + }, + { + "call": "Download subscription through a section", + "key": "Download subscription through a section", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2390" + ] + }, + { + "call": "Download subscriptions via the selected section", + "key": "Download subscriptions via the selected section", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2391" + ] + }, + { + "call": "Download through", + "key": "Download through", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2399" + ] + }, { "call": "Downloaded", "key": "Downloaded", @@ -886,6 +2012,14 @@ "src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:130" ] }, + { + "call": "DSCP marks (QoS)", + "key": "DSCP marks (QoS)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9514", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10209" + ] + }, { "call": "Duplicate JSON outbound tag", "key": "Duplicate JSON outbound tag", @@ -893,6 +2027,55 @@ "src/validators/validateOutboundJson.ts:75" ] }, + { + "call": "Duplicate value", + "key": "Duplicate value", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4795" + ] + }, + { + "call": "e.g. AES-256-GCM — leave empty for default", + "key": "e.g. AES-256-GCM — leave empty for default", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8676" + ] + }, + { + "call": "e.g. google.com, 1.1.1.1, 443", + "key": "e.g. google.com, 1.1.1.1, 443", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10011" + ] + }, + { + "call": "e.g. SHA256 — leave empty for default", + "key": "e.g. SHA256 — leave empty for default", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8687" + ] + }, + { + "call": "Enable", + "key": "Enable", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7226" + ] + }, + { + "call": "Enable Adaptive Intervals", + "key": "Enable Adaptive Intervals", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1517" + ] + }, + { + "call": "Enable AI Doctor (ChatGPT / LLM Analysis)", + "key": "Enable AI Doctor (ChatGPT / LLM Analysis)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1340" + ] + }, { "call": "Enable AI Doctor (LLM Integration)", "key": "Enable AI Doctor (LLM Integration)", @@ -900,6 +2083,20 @@ "src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:760" ] }, + { + "call": "Enable Anomaly Detection", + "key": "Enable Anomaly Detection", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1524" + ] + }, + { + "call": "Enable automatic updates for remote lists and rule sets", + "key": "Enable automatic updates for remote lists and rule sets", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1035" + ] + }, { "call": "Enable autostart", "key": "Enable autostart", @@ -907,6 +2104,27 @@ "src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:100" ] }, + { + "call": "Enable built-in DNS resolver for domains handled by this section", + "key": "Enable built-in DNS resolver for domains handled by this section", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2577" + ] + }, + { + "call": "Enable Config Validation", + "key": "Enable Config Validation", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1496" + ] + }, + { + "call": "Enable DNS Continuous Check", + "key": "Enable DNS Continuous Check", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1456" + ] + }, { "call": "Enable DNS Turbo Cache", "key": "Enable DNS Turbo Cache", @@ -914,13 +2132,186 @@ "src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:498" ] }, + { + "call": "Enable Firewall Reload Dedup", + "key": "Enable Firewall Reload Dedup", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1469" + ] + }, + { + "call": "Enable Graceful Degradation", + "key": "Enable Graceful Degradation", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1503" + ] + }, + { + "call": "Enable Health Metrics", + "key": "Enable Health Metrics", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1476" + ] + }, + { + "call": "Enable list updates", + "key": "Enable list updates", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1034" + ] + }, + { + "call": "Enable Mixed Proxy", + "key": "Enable Mixed Proxy", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9060" + ] + }, + { + "call": "Enable Mixed Proxy Authentication", + "key": "Enable Mixed Proxy Authentication", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9101" + ] + }, + { + "call": "Enable Output Network Interface", + "key": "Enable Output Network Interface", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:834" + ] + }, + { + "call": "Enable Proxy Health Monitor", + "key": "Enable Proxy Health Monitor", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1432" + ] + }, + { + "call": "Enable Smart Cooldowns", + "key": "Enable Smart Cooldowns", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1489" + ] + }, { "call": "Enable Smart Detect", "key": "Enable Smart Detect", "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1543", "src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:1070" ] }, + { + "call": "Enable Telegram Bot", + "key": "Enable Telegram Bot", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1753" + ] + }, + { + "call": "Enable WAN DNS Fallback for Bootstrap DNS", + "key": "Enable WAN DNS Fallback for Bootstrap DNS", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:667" + ] + }, + { + "call": "Enable WAN DNS Fallback for Main DNS", + "key": "Enable WAN DNS Fallback for Main DNS", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:658" + ] + }, + { + "call": "Enable Watchdog", + "key": "Enable Watchdog", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1314" + ] + }, + { + "call": "Enable YACD", + "key": "Enable YACD", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:948" + ] + }, + { + "call": "Enable YACD WAN Access", + "key": "Enable YACD WAN Access", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:958" + ] + }, + { + "call": "Enables the background daemon that polls Telegram for commands and sends notifications.", + "key": "Enables the background daemon that polls Telegram for commands and sends notifications.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1754" + ] + }, + { + "call": "Enables the background watchdog process to monitor services and auto-recover on failures.", + "key": "Enables the background watchdog process to monitor services and auto-recover on failures.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1315" + ] + }, + { + "call": "Enter a complete sing-box outbound object", + "key": "Enter a complete sing-box outbound object", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4001" + ] + }, + { + "call": "Enter a display name", + "key": "Enter a display name", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2630", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3080", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3956", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3972" + ] + }, + { + "call": "Enter a level name", + "key": "Enter a level name", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2877", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2898" + ] + }, + { + "call": "Enter HWID", + "key": "Enter HWID", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2473" + ] + }, + { + "call": "Enter the API token obtained from @BotFather.", + "key": "Enter the API token obtained from @BotFather.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1765" + ] + }, + { + "call": "Enter the HWID sent with subscription requests", + "key": "Enter the HWID sent with subscription requests", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2465" + ] + }, + { + "call": "Enter the subscription URL", + "key": "Enter the subscription URL", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8771" + ] + }, { "call": "Environment preparation & dependency check...", "key": "Environment preparation & dependency check...", @@ -928,6 +2319,122 @@ "src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:129" ] }, + { + "call": "Error", + "key": "Error", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8083", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8085", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8092", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8094", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8146", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8148", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8152", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8154", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8233", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8244", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8246" + ] + }, + { + "call": "Error running generator:", + "key": "Error running generator:", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8154" + ] + }, + { + "call": "Error running trace:", + "key": "Error running trace:", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10124" + ] + }, + { + "call": "Exclude by proxy parameters", + "key": "Exclude by proxy parameters", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2747", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2957", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3355" + ] + }, + { + "call": "Exclude by regular expression", + "key": "Exclude by regular expression", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2806", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3019", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3415" + ] + }, + { + "call": "Exclude countries", + "key": "Exclude countries", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2790", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3003", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3399" + ] + }, + { + "call": "Exclude selected countries", + "key": "Exclude selected countries", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9219" + ] + }, + { + "call": "Exclude servers", + "key": "Exclude servers", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2798", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3011", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3407" + ] + }, + { + "call": "Exclude servers with one of the selected protocols from this level.", + "key": "Exclude servers with one of the selected protocols from this level.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2965" + ] + }, + { + "call": "Exclude servers with one of the selected security types from this level.", + "key": "Exclude servers with one of the selected security types from this level.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2971" + ] + }, + { + "call": "Exclude servers with one of the selected transports from this level.", + "key": "Exclude servers with one of the selected transports from this level.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2968" + ] + }, + { + "call": "Exclude traffic types", + "key": "Exclude traffic types", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9523" + ] + }, + { + "call": "Exclude URLTest / Priority group", + "key": "Exclude URLTest / Priority group", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3470" + ] + }, + { + "call": "Excluded devices", + "key": "Excluded devices", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9497" + ] + }, { "call": "Expires", "key": "Expires", @@ -935,6 +2442,27 @@ "src/tachyon/tabs/dashboard/partials/renderSections.ts:131" ] }, + { + "call": "Expose this section as a local HTTP+SOCKS proxy", + "key": "Expose this section as a local HTTP+SOCKS proxy", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9061" + ] + }, + { + "call": "External nfqws config files bypass Tachyon queue management and explicit validation.", + "key": "External nfqws config files bypass Tachyon queue management and explicit validation.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5630" + ] + }, + { + "call": "External nfqws2 config files bypass Tachyon queue management and explicit validation.", + "key": "External nfqws2 config files bypass Tachyon queue management and explicit validation.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6075" + ] + }, { "call": "Failed to apply fix", "key": "Failed to apply fix", @@ -985,10 +2513,25 @@ ] }, { - "call": "Failed to parse target list.", - "key": "Failed to parse target list.", + "call": "Failed to generate WARP config:", + "key": "Failed to generate WARP config:", "places": [ - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:208" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8085", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8094" + ] + }, + { + "call": "Failed to parse file:", + "key": "Failed to parse file:", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8246" + ] + }, + { + "call": "Failed to parse WARP config:", + "key": "Failed to parse WARP config:", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8148" ] }, { @@ -999,11 +2542,10 @@ ] }, { - "call": "Failed to run service check.", - "key": "Failed to run service check.", + "call": "Failed to reset settings", + "key": "Failed to reset settings", "places": [ - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:190", - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:821" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:417" ] }, { @@ -1034,6 +2576,34 @@ "src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:239" ] }, + { + "call": "Failed to start bot", + "key": "Failed to start bot", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1699" + ] + }, + { + "call": "Failed to start watchdog", + "key": "Failed to start watchdog", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:341" + ] + }, + { + "call": "Failed to stop bot", + "key": "Failed to stop bot", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1713" + ] + }, + { + "call": "Failed to stop watchdog", + "key": "Failed to stop watchdog", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:355" + ] + }, { "call": "Failed to update subscriptions", "key": "Failed to update subscriptions", @@ -1068,10 +2638,18 @@ "src/tachyon/tabs/diagnostic/checks/runFakeIPCheck.ts:46" ] }, + { + "call": "Faster DNS health monitoring than the default cycle. Switches bootstrap DNS on failure.", + "key": "Faster DNS health monitoring than the default cycle. Switches bootstrap DNS on failure.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1457" + ] + }, { "call": "Faster server search interval", "key": "Faster server search interval", "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3159", "src/tachyon/tabs/dashboard/initController.ts:1249" ] }, @@ -1090,18 +2668,17 @@ ] }, { - "call": "Fetching service targets...", - "key": "Fetching service targets...", + "call": "Filter the servers that will be displayed on the dashboard.", + "key": "Filter the servers that will be displayed on the dashboard.", "places": [ - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:127", - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:171" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3312" ] }, { - "call": "Filter by service:", - "key": "Filter by service:", + "call": "Finland (fi)", + "key": "Finland (fi)", "places": [ - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:407" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9243" ] }, { @@ -1118,6 +2695,13 @@ "src/tachyon/tabs/diagnostic/initController.ts:1010" ] }, + { + "call": "Fix the highlighted fields and save again.", + "key": "Fix the highlighted fields and save again.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3585" + ] + }, { "call": "Fixed", "key": "Fixed", @@ -1126,6 +2710,27 @@ "src/tachyon/tabs/diagnostic/initController.ts:1006" ] }, + { + "call": "Forced device routing", + "key": "Forced device routing", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9486" + ] + }, + { + "call": "Forces sing-box to tunnel DNS requests via DoQ with Encrypted Client Hello (ECH) for SNI hiding.", + "key": "Forces sing-box to tunnel DNS requests via DoQ with Encrypted Client Hello (ECH) for SNI hiding.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1291" + ] + }, + { + "call": "France (fr)", + "key": "France (fr)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9242" + ] + }, { "call": "Full System Diagnostic", "key": "Full System Diagnostic", @@ -1133,6 +2738,34 @@ "src/tachyon/tabs/diagnostic/partials/renderAiChatModal.ts:158" ] }, + { + "call": "Fuzzing is not supported here because Tachyon needs deterministic runtime validation.", + "key": "Fuzzing is not supported here because Tachyon needs deterministic runtime validation.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6093" + ] + }, + { + "call": "Game Console IPs", + "key": "Game Console IPs", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1017" + ] + }, + { + "call": "Game Console Optimizer (NAT Type 1)", + "key": "Game Console Optimizer (NAT Type 1)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1007" + ] + }, + { + "call": "Generate a random 16-character hexadecimal HWID", + "key": "Generate a random 16-character hexadecimal HWID", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2480" + ] + }, { "call": "Generate bug report", "key": "Generate bug report", @@ -1140,6 +2773,30 @@ "src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:175" ] }, + { + "call": "Generate HWID", + "key": "Generate HWID", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2479", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2484" + ] + }, + { + "call": "Generate HWID from router hardware information for this subscription", + "key": "Generate HWID from router hardware information for this subscription", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2456" + ] + }, + { + "call": "Generate WARP Config", + "key": "Generate WARP Config", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8009", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8047", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8063" + ] + }, { "call": "Generated inbound", "key": "Generated inbound", @@ -1147,6 +2804,48 @@ "src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:89" ] }, + { + "call": "Generated!", + "key": "Generated!", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8142" + ] + }, + { + "call": "Generating…", + "key": "Generating…", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8078" + ] + }, + { + "call": "GeoIP Countries", + "key": "GeoIP Countries", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9232" + ] + }, + { + "call": "GeoIP Mode", + "key": "GeoIP Mode", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9214" + ] + }, + { + "call": "GeoSite / GeoIP", + "key": "GeoSite / GeoIP", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10206" + ] + }, + { + "call": "Germany (de)", + "key": "Germany (de)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9239" + ] + }, { "call": "GET endpoints are open on LAN. POST endpoints require Authorization: Bearer .", "key": "GET endpoints are open on LAN. POST endpoints require Authorization: Bearer .", @@ -1182,6 +2881,83 @@ "src/tachyon/tabs/diagnostic/partials/renderAiChatModal.ts:14" ] }, + { + "call": "Hide cascade connection nodes", + "key": "Hide cascade connection nodes", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2565" + ] + }, + { + "call": "Hide individual nodes that are already included in imported subscription URLTest groups", + "key": "Hide individual nodes that are already included in imported subscription URLTest groups", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2554" + ] + }, + { + "call": "Hide intermediate nodes used as detours by other subscription nodes", + "key": "Hide intermediate nodes used as detours by other subscription nodes", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2566" + ] + }, + { + "call": "Hide selected servers.", + "key": "Hide selected servers.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3408" + ] + }, + { + "call": "Hide servers from selected groups without repeating their filtering criteria.", + "key": "Hide servers from selected groups without repeating their filtering criteria.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3471" + ] + }, + { + "call": "Hide servers from the specified countries.", + "key": "Hide servers from the specified countries.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3400" + ] + }, + { + "call": "Hide servers whose names match the expression.", + "key": "Hide servers whose names match the expression.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3416" + ] + }, + { + "call": "Hide servers with one of the selected protocols.", + "key": "Hide servers with one of the selected protocols.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3363" + ] + }, + { + "call": "Hide servers with one of the selected security types.", + "key": "Hide servers with one of the selected security types.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3367" + ] + }, + { + "call": "Hide servers with one of the selected transports.", + "key": "Hide servers with one of the selected transports.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3364" + ] + }, + { + "call": "Hide URLTest group nodes", + "key": "Hide URLTest group nodes", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2553" + ] + }, { "call": "Hide values", "key": "Hide values", @@ -1193,9 +2969,17 @@ "call": "Higher-level check interval", "key": "Higher-level check interval", "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3123", "src/tachyon/tabs/dashboard/initController.ts:1235" ] }, + { + "call": "Higher-priority DNS Check", + "key": "Higher-priority DNS Check", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:686" + ] + }, { "call": "History", "key": "History", @@ -1211,11 +2995,82 @@ "src/tachyon/tabs/monitoring/initController.ts:927" ] }, + { + "call": "Hosts", + "key": "Hosts", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4264" + ] + }, + { + "call": "Hosts Lists Update Interval", + "key": "Hosts Lists Update Interval", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7985" + ] + }, + { + "call": "How many hours of metrics to keep (default 24).", + "key": "How many hours of metrics to keep (default 24).", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1483" + ] + }, + { + "call": "How often higher priority levels are checked while a lower level is active", + "key": "How often higher priority levels are checked while a lower level is active", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3124" + ] + }, + { + "call": "How often the currently selected server is checked", + "key": "How often the currently selected server is checked", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3100" + ] + }, + { + "call": "How often to check DNS health in seconds (default 60).", + "key": "How often to check DNS health in seconds (default 60).", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1463" + ] + }, + { + "call": "How often to check proxy health in seconds (fast tier, default 30).", + "key": "How often to check proxy health in seconds (fast tier, default 30).", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1439" + ] + }, + { + "call": "How often to check Telegram for new messages (default: 5).", + "key": "How often to check Telegram for new messages (default: 5).", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1805" + ] + }, + { + "call": "How often to check the active DNS servers.", + "key": "How often to check the active DNS servers.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:678" + ] + }, + { + "call": "How often to check whether a higher-priority DNS server has recovered.", + "key": "How often to check whether a higher-priority DNS server has recovered.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:687" + ] + }, { "call": "HTTP", "key": "HTTP", "places": [ - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:455" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9530", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9549" ] }, { @@ -1232,13 +3087,172 @@ "src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:689" ] }, + { + "call": "HWID", + "key": "HWID", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2464" + ] + }, { "call": "Idle timeout", "key": "Idle timeout", "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2675", "src/tachyon/tabs/dashboard/initController.ts:1110" ] }, + { + "call": "If one health check fails with an error, continue running other checks instead of stopping.", + "key": "If one health check fails with an error, continue running other checks instead of stopping.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1504" + ] + }, + { + "call": "Import", + "key": "Import", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7577", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7590", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7640" + ] + }, + { + "call": "Import (%d records)", + "key": "Import (%d records)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7637" + ] + }, + { + "call": "Import AmneziaWG settings from .conf file", + "key": "Import AmneziaWG settings from .conf file", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8164" + ] + }, + { + "call": "Import Hosts File", + "key": "Import Hosts File", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7691", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7824" + ] + }, + { + "call": "Import subscription URLTest groups", + "key": "Import subscription URLTest groups", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2544" + ] + }, + { + "call": "Import URLTest groups returned by this subscription provider", + "key": "Import URLTest groups returned by this subscription provider", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2545" + ] + }, + { + "call": "Include by proxy parameters", + "key": "Include by proxy parameters", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2730", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2939", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3335" + ] + }, + { + "call": "Include by regular expression", + "key": "Include by regular expression", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2782", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2995", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3391" + ] + }, + { + "call": "Include countries", + "key": "Include countries", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2766", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2979", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3375" + ] + }, + { + "call": "Include IP addresses and subnets", + "key": "Include IP addresses and subnets", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4076" + ] + }, + { + "call": "Include selected countries", + "key": "Include selected countries", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9220" + ] + }, + { + "call": "Include servers", + "key": "Include servers", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2774", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2987", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3383" + ] + }, + { + "call": "Init Packet Magic Header (S1)", + "key": "Init Packet Magic Header (S1)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8401" + ] + }, + { + "call": "Init Packet Magic Header (S3)", + "key": "Init Packet Magic Header (S3)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8403" + ] + }, + { + "call": "Init Packet Payload (I1)", + "key": "Init Packet Payload (I1)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8409" + ] + }, + { + "call": "Init Packet Payload (I2)", + "key": "Init Packet Payload (I2)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8410" + ] + }, + { + "call": "Init Packet Payload (I3)", + "key": "Init Packet Payload (I3)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8411" + ] + }, + { + "call": "Init Packet Payload (I4)", + "key": "Init Packet Payload (I4)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8412" + ] + }, + { + "call": "Init Packet Payload (I5)", + "key": "Init Packet Payload (I5)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8413" + ] + }, { "call": "Install", "key": "Install", @@ -1269,14 +3283,51 @@ "src/tachyon/tabs/updates/initController.ts:1277" ] }, + { + "call": "Interface Monitoring", + "key": "Interface Monitoring", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:897" + ] + }, + { + "call": "Interface Monitoring Delay", + "key": "Interface Monitoring Delay", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:931" + ] + }, + { + "call": "Interface monitoring for Bad WAN", + "key": "Interface monitoring for Bad WAN", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:898" + ] + }, { "call": "Interrupt connections", "key": "Interrupt connections", "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2689", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3175", "src/tachyon/tabs/dashboard/initController.ts:1112", "src/tachyon/tabs/dashboard/initController.ts:1255" ] }, + { + "call": "Interrupt connections when priority failover switches server", + "key": "Interrupt connections when priority failover switches server", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3176" + ] + }, + { + "call": "Interrupt connections when URLTest switches the selected server", + "key": "Interrupt connections when URLTest switches the selected server", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2690" + ] + }, { "call": "Interval", "key": "Interval", @@ -1284,6 +3335,13 @@ "src/tachyon/tabs/dashboard/initController.ts:1108" ] }, + { + "call": "Invalid ByeDPI strategy", + "key": "Invalid ByeDPI strategy", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7456" + ] + }, { "call": "Invalid CIDR prefix", "key": "Invalid CIDR prefix", @@ -1309,6 +3367,7 @@ "call": "Invalid domain address", "key": "Invalid domain address", "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5303", "src/validators/validateDomain.ts:67", "src/validators/validateDomain.ts:73" ] @@ -1433,6 +3492,13 @@ "src/validators/validateOutboundJson.ts:58" ] }, + { + "call": "Invalid line: \"%s\". Use: domain ip or ip domain", + "key": "Invalid line: \"%s\". Use: domain ip or ip domain", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7754" + ] + }, { "call": "Invalid path format. Path must start with \"/\" and contain valid characters", "key": "Invalid path format. Path must start with \"/\" and contain valid characters", @@ -1444,9 +3510,24 @@ "call": "Invalid port number. Must be between 1 and 65535", "key": "Invalid port number. Must be between 1 and 65535", "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9094", "src/validators/validateShadowsocksUrl.ts:91" ] }, + { + "call": "Invalid port or range. Use 80 or 1000-2000", + "key": "Invalid port or range. Use 80 or 1000-2000", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5452" + ] + }, + { + "call": "Invalid regular expression", + "key": "Invalid regular expression", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4678" + ] + }, { "call": "Invalid Shadowsocks URL: decoded credentials must contain method:password", "key": "Invalid Shadowsocks URL: decoded credentials must contain method:password", @@ -1737,6 +3818,41 @@ "src/validators/validateVmessUrl.ts:68" ] }, + { + "call": "IP Addresses (IP CIDR)", + "key": "IP Addresses (IP CIDR)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10203" + ] + }, + { + "call": "IPs", + "key": "IPs", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9311" + ] + }, + { + "call": "IPv4 only", + "key": "IPv4 only", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:768" + ] + }, + { + "call": "IPv6 only", + "key": "IPv6 only", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:770" + ] + }, + { + "call": "Isolate BitTorrent traffic and force it direct to prevent VPN bans", + "key": "Isolate BitTorrent traffic and force it direct to prevent VPN bans", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:996" + ] + }, { "call": "Issues", "key": "Issues", @@ -1752,6 +3868,23 @@ "src/tachyon/tabs/diagnostic/helpers/getMeta.ts:20" ] }, + { + "call": "Japan (jp)", + "key": "Japan (jp)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9247" + ] + }, + { + "call": "JSON outbound", + "key": "JSON outbound", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1082", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4000", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4266", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8859" + ] + }, { "call": "JSON outbound cannot be empty", "key": "JSON outbound cannot be empty", @@ -1780,13 +3913,84 @@ "src/validators/validateOutboundJson.ts:66" ] }, + { + "call": "JSON outbound settings", + "key": "JSON outbound settings", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4024" + ] + }, + { + "call": "Junk Max Size (Jmax)", + "key": "Junk Max Size (Jmax)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8400" + ] + }, + { + "call": "Junk Min Size (Jmin)", + "key": "Junk Min Size (Jmin)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8399" + ] + }, + { + "call": "Junk Packet Count (Jc)", + "key": "Junk Packet Count (Jc)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8398" + ] + }, + { + "call": "Kazakhstan (kz)", + "key": "Kazakhstan (kz)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9250" + ] + }, + { + "call": "Keep Priority before latency-sorted servers", + "key": "Keep Priority before latency-sorted servers", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3185" + ] + }, + { + "call": "Keep URLTest before latency-sorted servers", + "key": "Keep URLTest before latency-sorted servers", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2699" + ] + }, { "call": "Keeps FakeIP cache persistent across reboots and pre-resolves popular blocked domains on startup so first-visit latency is 0 ms.", "key": "Keeps FakeIP cache persistent across reboots and pre-resolves popular blocked domains on startup so first-visit latency is 0 ms.", "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:757", "src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:484" ] }, + { + "call": "Key", + "key": "Key", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8592" + ] + }, + { + "call": "Keyword must not contain spaces or commas", + "key": "Keyword must not contain spaces or commas", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4688" + ] + }, + { + "call": "Language for AI Doctor diagnosis responses", + "key": "Language for AI Doctor diagnosis responses", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1382" + ] + }, { "call": "Latency test failed", "key": "Latency test failed", @@ -1795,6 +3999,13 @@ "src/tachyon/methods/shell/index.ts:501" ] }, + { + "call": "Latency test URL", + "key": "Latency test URL", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1140" + ] + }, { "call": "Latest version is installed", "key": "Latest version is installed", @@ -1810,6 +4021,13 @@ "src/tachyon/tabs/updates/initController.ts:1277" ] }, + { + "call": "Leave empty to omit this header", + "key": "Leave empty to omit this header", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2510" + ] + }, { "call": "Level", "key": "Level", @@ -1817,6 +4035,34 @@ "src/tachyon/tabs/dashboard/initController.ts:1191" ] }, + { + "call": "Level name", + "key": "Level name", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2893" + ] + }, + { + "call": "List must be an HTTP(S) URL or a local .lst path", + "key": "List must be an HTTP(S) URL or a local .lst path", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7157" + ] + }, + { + "call": "List of domains automatically detected and the section they were added to. To edit or remove them, open the routing rules of the respective section.", + "key": "List of domains automatically detected and the section they were added to. To edit or remove them, open the routing rules of the respective section.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1585" + ] + }, + { + "call": "List Update Frequency", + "key": "List Update Frequency", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1044" + ] + }, { "call": "Listening port", "key": "Listening port", @@ -1828,9 +4074,46 @@ "call": "LM Studio (Local PC / Server)", "key": "LM Studio (Local PC / Server)", "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1360", "src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:821" ] }, + { + "call": "Load .conf", + "key": "Load .conf", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8215", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8224" + ] + }, + { + "call": "Load .conf config", + "key": "Load .conf config", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8163" + ] + }, + { + "call": "Load Current Records", + "key": "Load Current Records", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7550" + ] + }, + { + "call": "Loaded %d current record(s)", + "key": "Loaded %d current record(s)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7547" + ] + }, + { + "call": "Loaded!", + "key": "Loaded!", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8290" + ] + }, { "call": "Loading connections", "key": "Loading connections", @@ -1857,6 +4140,20 @@ "src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:1174" ] }, + { + "call": "Local Address", + "key": "Local Address", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8312" + ] + }, + { + "call": "Log Level", + "key": "Log Level", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1262" + ] + }, { "call": "lx", "key": "lx", @@ -1871,6 +4168,76 @@ "src/tachyon/tabs/diagnostic/checks/runDnsCheck.ts:67" ] }, + { + "call": "Main DNS server. If multiple servers are selected, a timeout switches to a backup.", + "key": "Main DNS server. If multiple servers are selected, a timeout switches to a backup.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:609" + ] + }, + { + "call": "MASQUE Access Token", + "key": "MASQUE Access Token", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8640" + ] + }, + { + "call": "MASQUE Account ID", + "key": "MASQUE Account ID", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8628" + ] + }, + { + "call": "MASQUE Private Key", + "key": "MASQUE Private Key", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8616" + ] + }, + { + "call": "Match destination IPs or subnets", + "key": "Match destination IPs or subnets", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9312" + ] + }, + { + "call": "Match destination ports. Use a single port or a range", + "key": "Match destination ports. Use a single port or a range", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9507" + ] + }, + { + "call": "Match Found", + "key": "Match Found", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10064" + ] + }, + { + "call": "Match traffic by packet DSCP mark (assigned in Windows via Policy-Based QoS). Examples: 46 (EF), 0x2e, 34 (AF41)", + "key": "Match traffic by packet DSCP mark (assigned in Windows via Policy-Based QoS). Examples: 46 (EF), 0x2e, 34 (AF41)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9515" + ] + }, + { + "call": "Max reconnects per hour before alert (default 10).", + "key": "Max reconnects per hour before alert (default 10).", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1531" + ] + }, + { + "call": "Maximum time to wait for example.com to resolve during a DNS health check.", + "key": "Maximum time to wait for example.com to resolve during a DNS health check.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:696" + ] + }, { "call": "Memory Usage", "key": "Memory Usage", @@ -1878,6 +4245,55 @@ "src/tachyon/tabs/dashboard/initController.ts:1656" ] }, + { + "call": "Metrics Retention (hours)", + "key": "Metrics Retention (hours)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1482" + ] + }, + { + "call": "Minimum latency difference in milliseconds that triggers switching to a faster server.", + "key": "Minimum latency difference in milliseconds that triggers switching to a faster server.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2649" + ] + }, + { + "call": "Mixed Proxy Password", + "key": "Mixed Proxy Password", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9152" + ] + }, + { + "call": "Mixed Proxy Port", + "key": "Mixed Proxy Port", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9075" + ] + }, + { + "call": "Mixed Proxy Username", + "key": "Mixed Proxy Username", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9116" + ] + }, + { + "call": "Model name to use. Leave empty to use default (gpt-4o-mini / claude-3-5-haiku / deepseek-chat / llama3:latest).", + "key": "Model name to use. Leave empty to use default (gpt-4o-mini / claude-3-5-haiku / deepseek-chat / llama3:latest).", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1369" + ] + }, + { + "call": "Monitored Interfaces", + "key": "Monitored Interfaces", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:907" + ] + }, { "call": "Monitoring & Analytics", "key": "Monitoring & Analytics", @@ -1885,6 +4301,13 @@ "src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:633" ] }, + { + "call": "Monitors sing-box reconnect frequency. Alerts if too many reconnects per hour.", + "key": "Monitors sing-box reconnect frequency. Alerts if too many reconnects per hour.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1525" + ] + }, { "call": "Move down", "key": "Move down", @@ -1899,6 +4322,79 @@ "src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:993" ] }, + { + "call": "MTU", + "key": "MTU", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8375" + ] + }, + { + "call": "Must be a comma-separated list of numeric IDs", + "key": "Must be a comma-separated list of numeric IDs", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1795" + ] + }, + { + "call": "Must be a number in the range of 0 - 10000", + "key": "Must be a number in the range of 0 - 10000", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2074", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2089" + ] + }, + { + "call": "Name displayed on the dashboard", + "key": "Name displayed on the dashboard", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2619", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3076" + ] + }, + { + "call": "Name shown in the priority level list", + "key": "Name shown in the priority level list", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2894" + ] + }, + { + "call": "Netherlands (nl)", + "key": "Netherlands (nl)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9240" + ] + }, + { + "call": "Network & Interfaces", + "key": "Network & Interfaces", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:580" + ] + }, + { + "call": "Network Interface", + "key": "Network Interface", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1889", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8818" + ] + }, + { + "call": "Network interface settings", + "key": "Network interface settings", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3775" + ] + }, + { + "call": "New domains:", + "key": "New domains:", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7631" + ] + }, { "call": "New version %s is available for %s", "key": "New version %s is available for %s", @@ -1922,6 +4418,34 @@ "src/tachyon/tabs/diagnostic/checks/runZapretCheck.ts:96" ] }, + { + "call": "NFQWS Strategy", + "key": "NFQWS Strategy", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7374" + ] + }, + { + "call": "NFQWS strategy cannot be empty", + "key": "NFQWS strategy cannot be empty", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5760" + ] + }, + { + "call": "NFQWS2 Strategy", + "key": "NFQWS2 Strategy", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7407" + ] + }, + { + "call": "NFQWS2 strategy cannot be empty", + "key": "NFQWS2 strategy cannot be empty", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6234" + ] + }, { "call": "No", "key": "No", @@ -1950,6 +4474,7 @@ "call": "No active routing sections found.", "key": "No active routing sections found.", "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:465", "src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:1112" ] }, @@ -1967,6 +4492,13 @@ "src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:32" ] }, + { + "call": "No Custom Rules Matched", + "key": "No Custom Rules Matched", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10113" + ] + }, { "call": "No diagnostic history available yet.", "key": "No diagnostic history available yet.", @@ -1974,6 +4506,13 @@ "src/tachyon/tabs/diagnostic/initController.ts:1042" ] }, + { + "call": "No domains detected yet", + "key": "No domains detected yet", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1600" + ] + }, { "call": "No enabled server inbounds configured", "key": "No enabled server inbounds configured", @@ -1981,6 +4520,13 @@ "src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:187" ] }, + { + "call": "No file selected", + "key": "No file selected", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7554" + ] + }, { "call": "No issues found", "key": "No issues found", @@ -2030,13 +4576,6 @@ "src/tachyon/tabs/diagnostic/checks/runZapret2Check.ts:82" ] }, - { - "call": "No targets found in section configs.", - "key": "No targets found in section configs.", - "places": [ - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:216" - ] - }, { "call": "Node list is empty", "key": "Node list is empty", @@ -2129,13 +4668,149 @@ "src/tachyon/tabs/diagnostic/initController.ts:498" ] }, + { + "call": "Not set", + "key": "Not set", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10179" + ] + }, + { + "call": "Notify on Certificate Warnings", + "key": "Notify on Certificate Warnings", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1877" + ] + }, + { + "call": "Notify on Core Crashes", + "key": "Notify on Core Crashes", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1825" + ] + }, + { + "call": "Notify on DNS Leaks", + "key": "Notify on DNS Leaks", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1890" + ] + }, + { + "call": "Notify on Server Switches", + "key": "Notify on Server Switches", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1851" + ] + }, + { + "call": "Notify on Service Restarts", + "key": "Notify on Service Restarts", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1838" + ] + }, + { + "call": "Notify on Subscription Updates", + "key": "Notify on Subscription Updates", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1864" + ] + }, + { + "call": "Number of consecutive failed checks required before switching DNS servers.", + "key": "Number of consecutive failed checks required before switching DNS servers.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:707" + ] + }, + { + "call": "Number of consecutive failures before restarting (default 3).", + "key": "Number of consecutive failures before restarting (default 3).", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1445" + ] + }, + { + "call": "Number of consecutive successful checks required before returning to a higher-priority DNS server.", + "key": "Number of consecutive successful checks required before returning to a higher-priority DNS server.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:721" + ] + }, { "call": "Ollama (Local PC / Server)", "key": "Ollama (Local PC / Server)", "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1359", "src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:813" ] }, + { + "call": "One record per line: example.com 192.168.1.100 or 192.168.1.100 example.com. Lines starting with # are ignored.", + "key": "One record per line: example.com 192.168.1.100 or 192.168.1.100 example.com. Lines starting with # are ignored.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7721" + ] + }, + { + "call": "Only from the specified countries.", + "key": "Only from the specified countries.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2980" + ] + }, + { + "call": "Only selected", + "key": "Only selected", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1960", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1968" + ] + }, + { + "call": "Only selected except exclusions", + "key": "Only selected except exclusions", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1961", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1970" + ] + }, + { + "call": "Only servers whose names match the expression.", + "key": "Only servers whose names match the expression.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2996" + ] + }, + { + "call": "Only servers with one of the selected protocols.", + "key": "Only servers with one of the selected protocols.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2947" + ] + }, + { + "call": "Only servers with one of the selected security types.", + "key": "Only servers with one of the selected security types.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2951" + ] + }, + { + "call": "Only servers with one of the selected transports.", + "key": "Only servers with one of the selected transports.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2948" + ] + }, + { + "call": "Only the specified servers.", + "key": "Only the specified servers.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2988" + ] + }, { "call": "Open", "key": "Open", @@ -2144,6 +4819,13 @@ "src/tachyon/tabs/updates/initController.ts:1290" ] }, + { + "call": "Open priority settings and enter a display name", + "key": "Open priority settings and enter a display name", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3968" + ] + }, { "call": "Open Project Page", "key": "Open Project Page", @@ -2182,6 +4864,21 @@ "src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:664" ] }, + { + "call": "Option \"%s\" contains an invalid input value.", + "key": "Option \"%s\" contains an invalid input value.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1399", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6836" + ] + }, + { + "call": "Optional — leave empty for default", + "key": "Optional — leave empty for default", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8604" + ] + }, { "call": "Optional for local LLM", "key": "Optional for local LLM", @@ -2189,6 +4886,34 @@ "src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:901" ] }, + { + "call": "Optional tls-auth or tls-crypt key", + "key": "Optional tls-auth or tls-crypt key", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8734" + ] + }, + { + "call": "Optional values must be attached with '=' here; a separate token would be ignored by nfqws.", + "key": "Optional values must be attached with '=' here; a separate token would be ignored by nfqws.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5838" + ] + }, + { + "call": "Optional values must be attached with '=' here; a separate token would be ignored by nfqws2.", + "key": "Optional values must be attached with '=' here; a separate token would be ignored by nfqws2.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6312" + ] + }, + { + "call": "Or paste hosts file content:", + "key": "Or paste hosts file content:", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7696" + ] + }, { "call": "outbounds must be a non-empty array of strings", "key": "outbounds must be a non-empty array of strings", @@ -2196,6 +4921,64 @@ "src/validators/validateOutboundJson.ts:111" ] }, + { + "call": "Output Network Interface", + "key": "Output Network Interface", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:844" + ] + }, + { + "call": "Override the default OpenWrt device headers for this subscription", + "key": "Override the default OpenWrt device headers for this subscription", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2493" + ] + }, + { + "call": "Overwrite existing records (if unchecked, merge with existing records)", + "key": "Overwrite existing records (if unchecked, merge with existing records)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7705" + ] + }, + { + "call": "P2P Leak Protection", + "key": "P2P Leak Protection", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:995" + ] + }, + { + "call": "Parsed records:", + "key": "Parsed records:", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7628" + ] + }, + { + "call": "Password", + "key": "Password", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8483", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8571" + ] + }, + { + "call": "Password cannot be empty", + "key": "Password cannot be empty", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9178" + ] + }, + { + "call": "Paste content or upload a file to preview imported DNS records.", + "key": "Paste content or upload a file to preview imported DNS records.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7573", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7588" + ] + }, { "call": "Path cannot be empty", "key": "Path cannot be empty", @@ -2203,6 +4986,27 @@ "src/validators/validatePath.ts:7" ] }, + { + "call": "Path must be absolute (start with /)", + "key": "Path must be absolute (start with /)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1243" + ] + }, + { + "call": "Path must contain at least one directory (like /tmp/cache.db)", + "key": "Path must contain at least one directory (like /tmp/cache.db)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1252" + ] + }, + { + "call": "Path must end with cache.db", + "key": "Path must end with cache.db", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1247" + ] + }, { "call": "Pause updates", "key": "Pause updates", @@ -2212,12 +5016,39 @@ "src/tachyon/tabs/monitoring/render.ts:81" ] }, + { + "call": "Peer Public Key", + "key": "Peer Public Key", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8335" + ] + }, + { + "call": "PEM-encoded CA certificate", + "key": "PEM-encoded CA certificate", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8698" + ] + }, + { + "call": "PEM-encoded client certificate", + "key": "PEM-encoded client certificate", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8710" + ] + }, + { + "call": "PEM-encoded client private key", + "key": "PEM-encoded client private key", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8722" + ] + }, { "call": "Pending", "key": "Pending", "places": [ - "src/tachyon/tabs/diagnostic/diagnostic.store.ts:63", - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:75" + "src/tachyon/tabs/diagnostic/diagnostic.store.ts:63" ] }, { @@ -2228,6 +5059,42 @@ "src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:1159" ] }, + { + "call": "Periodically check the current level and switch to a faster server even when the current one works.", + "key": "Periodically check the current level and switch to a faster server even when the current one works.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3149" + ] + }, + { + "call": "Periodically checks if the proxy is responding. Restarts Tachyon after consecutive failures.", + "key": "Periodically checks if the proxy is responding. Restarts Tachyon after consecutive failures.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1433" + ] + }, + { + "call": "Persistent Keepalive", + "key": "Persistent Keepalive", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8382" + ] + }, + { + "call": "Persistent Smart Detect", + "key": "Persistent Smart Detect", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1510" + ] + }, + { + "call": "Pin on dashboard", + "key": "Pin on dashboard", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2698", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3184" + ] + }, { "call": "Please wait, operation is running...", "key": "Please wait, operation is running...", @@ -2235,6 +5102,27 @@ "src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:212" ] }, + { + "call": "Polling Interval (seconds)", + "key": "Polling Interval (seconds)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1804" + ] + }, + { + "call": "Polling interval must be at least 1 second", + "key": "Polling interval must be at least 1 second", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1817" + ] + }, + { + "call": "Port cannot be empty", + "key": "Port cannot be empty", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9086" + ] + }, { "call": "Port conflict", "key": "Port conflict", @@ -2242,6 +5130,92 @@ "src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:19" ] }, + { + "call": "Port for the local mixed proxy of this section", + "key": "Port for the local mixed proxy of this section", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9076" + ] + }, + { + "call": "Port must be between 1 and 65535", + "key": "Port must be between 1 and 65535", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5459" + ] + }, + { + "call": "Port range start must be less than or equal to end", + "key": "Port range start must be less than or equal to end", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5463" + ] + }, + { + "call": "Ports", + "key": "Ports", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9506", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10208" + ] + }, + { + "call": "Pre-download all preset lists", + "key": "Pre-download all preset lists", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1081" + ] + }, + { + "call": "Pre-shared key", + "key": "Pre-shared key", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8526" + ] + }, + { + "call": "Prefer IPv4", + "key": "Prefer IPv4", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:767" + ] + }, + { + "call": "Prefer IPv6", + "key": "Prefer IPv6", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:769" + ] + }, + { + "call": "Prefix text", + "key": "Prefix text", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2537" + ] + }, + { + "call": "Preshared Key", + "key": "Preshared Key", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8369" + ] + }, + { + "call": "Prevents multiple reload_firewall calls within 120 seconds to avoid connection drops.", + "key": "Prevents multiple reload_firewall calls within 120 seconds to avoid connection drops.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1470" + ] + }, + { + "call": "Priority", + "key": "Priority", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8945", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10103" + ] + }, { "call": "Priority details", "key": "Priority details", @@ -2258,6 +5232,37 @@ "src/tachyon/tabs/dashboard/initController.ts:1216" ] }, + { + "call": "Priority level settings", + "key": "Priority level settings", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3853", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3854" + ] + }, + { + "call": "Priority levels", + "key": "Priority levels", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3193" + ] + }, + { + "call": "Priority settings", + "key": "Priority settings", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3913", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3918", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3919" + ] + }, + { + "call": "Private Key", + "key": "Private Key", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8324" + ] + }, { "call": "Protection", "key": "Protection", @@ -2266,10 +5271,32 @@ ] }, { - "call": "Proxy", - "key": "Proxy", + "call": "Protocol", + "key": "Protocol", "places": [ - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:29" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2030", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8663" + ] + }, + { + "call": "Proxy Fail Threshold", + "key": "Proxy Fail Threshold", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1444" + ] + }, + { + "call": "Proxy Health Check Interval (s)", + "key": "Proxy Health Check Interval (s)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1438" + ] + }, + { + "call": "Proxy Health Check URL", + "key": "Proxy Health Check URL", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1450" ] }, { @@ -2279,6 +5306,27 @@ "src/tachyon/tabs/dashboard/initController.ts:807" ] }, + { + "call": "Proxy Section for Bot", + "key": "Proxy Section for Bot", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1901" + ] + }, + { + "call": "Proxy to use for WARP API registration (api.cloudflareclient.com)", + "key": "Proxy to use for WARP API registration (api.cloudflareclient.com)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8457" + ] + }, + { + "call": "PSK", + "key": "PSK", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8526" + ] + }, { "call": "Public host", "key": "Public host", @@ -2286,6 +5334,29 @@ "src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:40" ] }, + { + "call": "QUIC (HTTP/3)", + "key": "QUIC (HTTP/3)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9527", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9546" + ] + }, + { + "call": "RDP", + "key": "RDP", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9533", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9552" + ] + }, + { + "call": "Read error", + "key": "Read error", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8296" + ] + }, { "call": "Rebuilt release", "key": "Rebuilt release", @@ -2300,6 +5371,27 @@ "src/tachyon/tabs/diagnostic/initController.ts:979" ] }, + { + "call": "Reconnect Threshold", + "key": "Reconnect Threshold", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1530" + ] + }, + { + "call": "Records proxy/DNS latency and health status in hourly buckets for analysis.", + "key": "Records proxy/DNS latency and health status in hourly buckets for analysis.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1477" + ] + }, + { + "call": "Records: %d", + "key": "Records: %d", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7779" + ] + }, { "call": "Refill", "key": "Refill", @@ -2307,6 +5399,20 @@ "src/tachyon/tabs/dashboard/partials/renderSections.ts:132" ] }, + { + "call": "Registration Detour", + "key": "Registration Detour", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8456" + ] + }, + { + "call": "Regular expression must not contain spaces or commas", + "key": "Regular expression must not contain spaces or commas", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5345" + ] + }, { "call": "Reinstall", "key": "Reinstall", @@ -2321,6 +5427,13 @@ "src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:378" ] }, + { + "call": "Remote Hosts Lists", + "key": "Remote Hosts Lists", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7838" + ] + }, { "call": "Removal completed successfully!", "key": "Removal completed successfully!", @@ -2332,9 +5445,31 @@ "call": "Remove", "key": "Remove", "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7918", "src/tachyon/tabs/updates/initController.ts:987" ] }, + { + "call": "Remove servers from the specified countries from this level.", + "key": "Remove servers from the specified countries from this level.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3004" + ] + }, + { + "call": "Remove servers whose names match the expression from this level.", + "key": "Remove servers whose names match the expression from this level.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3020" + ] + }, + { + "call": "Remove the specified servers from this level.", + "key": "Remove the specified servers from this level.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3012" + ] + }, { "call": "Removing", "key": "Removing", @@ -2350,10 +5485,89 @@ ] }, { - "call": "Resolved IP / DNS", - "key": "Resolved IP / DNS", + "call": "Require a username and password for the local mixed proxy", + "key": "Require a username and password for the local mixed proxy", "places": [ - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:431" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9102" + ] + }, + { + "call": "Reset", + "key": "Reset", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:442" + ] + }, + { + "call": "Reset Settings", + "key": "Reset Settings", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:389", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:424", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1300" + ] + }, + { + "call": "Resetting…", + "key": "Resetting…", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:399" + ] + }, + { + "call": "Resolve domain names before routing so sing-box can use real destination IPs.", + "key": "Resolve domain names before routing so sing-box can use real destination IPs.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9189" + ] + }, + { + "call": "Resolve real IP for routing", + "key": "Resolve real IP for routing", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9188" + ] + }, + { + "call": "Resource selection by hostname inside nfqws is not supported here; sing-box selects resources before NFQUEUE.", + "key": "Resource selection by hostname inside nfqws is not supported here; sing-box selects resources before NFQUEUE.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5633" + ] + }, + { + "call": "Resource selection by hostname inside nfqws2 is not supported here; sing-box selects resources before NFQUEUE.", + "key": "Resource selection by hostname inside nfqws2 is not supported here; sing-box selects resources before NFQUEUE.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6078" + ] + }, + { + "call": "Resource selection by IP or CIDR inside nfqws is not supported here; sing-box selects resources before NFQUEUE.", + "key": "Resource selection by IP or CIDR inside nfqws is not supported here; sing-box selects resources before NFQUEUE.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5636" + ] + }, + { + "call": "Resource selection by IP or CIDR inside nfqws2 is not supported here; sing-box selects resources before NFQUEUE.", + "key": "Resource selection by IP or CIDR inside nfqws2 is not supported here; sing-box selects resources before NFQUEUE.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6081" + ] + }, + { + "call": "Response Packet Magic Header (S2)", + "key": "Response Packet Magic Header (S2)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8402" + ] + }, + { + "call": "Response Packet Magic Header (S4)", + "key": "Response Packet Magic Header (S4)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8404" ] }, { @@ -2370,6 +5584,13 @@ "src/tachyon/tabs/dashboard/partials/renderSections.ts:651" ] }, + { + "call": "Restores the Tachyon factory defaults: all rules, subscriptions, custom DNS servers and other options will be lost.", + "key": "Restores the Tachyon factory defaults: all rules, subscriptions, custom DNS servers and other options will be lost.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1301" + ] + }, { "call": "Resume updates", "key": "Resume updates", @@ -2386,10 +5607,31 @@ ] }, { - "call": "Route Type", - "key": "Route Type", + "call": "Route bot API requests through this section. Leave empty to use the default mixed proxy.", + "key": "Route bot API requests through this section. Leave empty to use the default mixed proxy.", "places": [ - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:426" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1902" + ] + }, + { + "call": "Route main DNS requests through the selected section.", + "key": "Route main DNS requests through the selected section.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:779" + ] + }, + { + "call": "Route requests to this DNS server through another section.", + "key": "Route requests to this DNS server through another section.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7346" + ] + }, + { + "call": "Routing Rule Tracer", + "key": "Routing Rule Tracer", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10008" ] }, { @@ -2401,6 +5643,42 @@ "src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:144" ] }, + { + "call": "Rule", + "key": "Rule", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10074" + ] + }, + { + "call": "Rule set must be an HTTP(S) URL or a local .srs / .json path", + "key": "Rule set must be an HTTP(S) URL or a local .srs / .json path", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7148" + ] + }, + { + "call": "Rule set settings", + "key": "Rule set settings", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4083" + ] + }, + { + "call": "Rule sets", + "key": "Rule sets", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9374", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9403" + ] + }, + { + "call": "Rule Sets (.srs / .json)", + "key": "Rule Sets (.srs / .json)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10204" + ] + }, { "call": "Rules mangle counters", "key": "Rules mangle counters", @@ -2468,15 +5746,26 @@ "call": "Running", "key": "Running", "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:301", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1663", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1664", "src/tachyon/methods/custom/getDashboardSections.ts:1567", "src/tachyon/tabs/dashboard/partials/renderSections.ts:581", "src/tachyon/tabs/diagnostic/checks/runSectionsCheck.ts:135" ] }, + { + "call": "Russia (ru)", + "key": "Russia (ru)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9237" + ] + }, { "call": "Save", "key": "Save", "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3660", "src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:1151" ] }, @@ -2512,10 +5801,17 @@ ] }, { - "call": "Search domain or service...", - "key": "Search domain or service...", + "call": "Secret key for authenticating remote access to YACD when WAN access is enabled.", + "key": "Secret key for authenticating remote access to YACD when WAN access is enabled.", "places": [ - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:379" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:972" + ] + }, + { + "call": "Secret token for authorizing WRITE operations (POST/PUT) on /cgi-bin/tachyon-agent/. Leave empty if auth is not required.", + "key": "Secret token for authorizing WRITE operations (POST/PUT) on /cgi-bin/tachyon-agent/. Leave empty if auth is not required.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1328" ] }, { @@ -2525,6 +5821,27 @@ "src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:700" ] }, + { + "call": "Section action", + "key": "Section action", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10198" + ] + }, + { + "call": "Section name", + "key": "Section name", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7253" + ] + }, + { + "call": "Section Rules Content", + "key": "Section Rules Content", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10213" + ] + }, { "call": "Section test order (checked = active, drag rows with △▽):", "key": "Section test order (checked = active, drag rows with △▽):", @@ -2532,13 +5849,183 @@ "src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:1078" ] }, + { + "call": "Security", + "key": "Security", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2042" + ] + }, + { + "call": "Select a common client profile or enter a custom User-Agent", + "key": "Select a common client profile or enter a custom User-Agent", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2436" + ] + }, + { + "call": "Select a file with .conf extension", + "key": "Select a file with .conf extension", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8233" + ] + }, + { + "call": "Select a network interface", + "key": "Select a network interface", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8824" + ] + }, + { + "call": "Select a predefined domain list", + "key": "Select a predefined domain list", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9322" + ] + }, + { + "call": "Select a section", + "key": "Select a section", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:87", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7367" + ] + }, + { + "call": "Select a section for downloading this subscription", + "key": "Select a section for downloading this subscription", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2413" + ] + }, + { + "call": "Select a transit section", + "key": "Select a transit section", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9023" + ] + }, + { + "call": "Select AI LLM provider for diagnostics", + "key": "Select AI LLM provider for diagnostics", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1353" + ] + }, + { + "call": "Select an existing network interface", + "key": "Select an existing network interface", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1940" + ] + }, + { + "call": "Select an existing URLTest or Priority group", + "key": "Select an existing URLTest or Priority group", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3295" + ] + }, + { + "call": "Select an intermediate section", + "key": "Select an intermediate section", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9036" + ] + }, + { + "call": "Select and order the sections through which blocked domains are tested. Checked sections are tried top-to-bottom.", + "key": "Select and order the sections through which blocked domains are tested. Checked sections are tried top-to-bottom.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1557" + ] + }, + { + "call": "Select DNS protocol to use", + "key": "Select DNS protocol to use", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:593" + ] + }, + { + "call": "Select network interface for VPN connection", + "key": "Select network interface for VPN connection", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8819" + ] + }, + { + "call": "Select one or more country ISO codes (e.g. ru, us, de, nl, fr, fi, se, tr, cn, jp, sg, by, kz, ua).", + "key": "Select one or more country ISO codes (e.g. ru, us, de, nl, fr, fi, se, tr, cn, jp, sg, by, kz, ua).", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9233" + ] + }, + { + "call": "Select or enter a User-Agent", + "key": "Select or enter a User-Agent", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2449" + ] + }, + { + "call": "Select or enter path for sing-box cache file. Change this ONLY if you know what you are doing", + "key": "Select or enter path for sing-box cache file. Change this ONLY if you know what you are doing", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1226" + ] + }, + { + "call": "Select or enter the IP addresses of your game consoles.", + "key": "Select or enter the IP addresses of your game consoles.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1018" + ] + }, + { + "call": "Select path for sing-box config file. Change this ONLY if you know what you are doing", + "key": "Select path for sing-box config file. Change this ONLY if you know what you are doing", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1212" + ] + }, { "call": "Select the fastest node", "key": "Select the fastest node", "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3137", "src/tachyon/tabs/dashboard/initController.ts:1239" ] }, + { + "call": "Select the log level for sing-box", + "key": "Select the log level for sing-box", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1263" + ] + }, + { + "call": "Select the network interface from which the traffic will originate", + "key": "Select the network interface from which the traffic will originate", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:797" + ] + }, + { + "call": "Select the network interface to which the traffic will originate", + "key": "Select the network interface to which the traffic will originate", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:845" + ] + }, + { + "call": "Select the WAN interfaces to be monitored", + "key": "Select the WAN interfaces to be monitored", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:908" + ] + }, { "call": "Selected", "key": "Selected", @@ -2561,6 +6048,89 @@ "src/tachyon/tabs/diagnostic/partials/renderAiChatModal.ts:67" ] }, + { + "call": "Send a Telegram notification if a potential DNS leak is detected.", + "key": "Send a Telegram notification if a potential DNS leak is detected.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1891" + ] + }, + { + "call": "Send a Telegram notification if sing-box or nftables rules crash and get auto-restored.", + "key": "Send a Telegram notification if sing-box or nftables rules crash and get auto-restored.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1826" + ] + }, + { + "call": "Send a Telegram notification if SSL/TLS certificates are close to expiration.", + "key": "Send a Telegram notification if SSL/TLS certificates are close to expiration.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1878" + ] + }, + { + "call": "Send a Telegram notification if the Tachyon service is restarted by the watchdog.", + "key": "Send a Telegram notification if the Tachyon service is restarted by the watchdog.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1839" + ] + }, + { + "call": "Send a Telegram notification when a URLTest group switches to a new server.", + "key": "Send a Telegram notification when a URLTest group switches to a new server.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1852" + ] + }, + { + "call": "Send a Telegram notification when proxy subscriptions are successfully updated.", + "key": "Send a Telegram notification when proxy subscriptions are successfully updated.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1865" + ] + }, + { + "call": "Server Address", + "key": "Server Address", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8346", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8471", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8514", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8545", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8580", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8650" + ] + }, + { + "call": "Server filtering", + "key": "Server filtering", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2707", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2913" + ] + }, + { + "call": "Server group for automatic lowest-latency selection", + "key": "Server group for automatic lowest-latency selection", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8887" + ] + }, + { + "call": "Server group for priority failover", + "key": "Server group for priority failover", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8946" + ] + }, + { + "call": "Server Name Indication — leave empty to use server address", + "key": "Server Name Indication — leave empty to use server address", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8495" + ] + }, { "call": "Server outbound must contain a non-empty server field", "key": "Server outbound must contain a non-empty server field", @@ -2575,6 +6145,18 @@ "src/validators/validateOutboundJson.ts:100" ] }, + { + "call": "Server Port", + "key": "Server Port", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8357", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8477", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8520", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8551", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8586", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8656" + ] + }, { "call": "Server unavailable", "key": "Server unavailable", @@ -2590,10 +6172,10 @@ ] }, { - "call": "Service / Target", - "key": "Service / Target", + "call": "Servers on dashboard", + "key": "Servers on dashboard", "places": [ - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:421" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3311" ] }, { @@ -2606,10 +6188,17 @@ ] }, { - "call": "Service Availability Check", - "key": "Service Availability Check", + "call": "Service list", + "key": "Service list", "places": [ - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:163" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9325" + ] + }, + { + "call": "Services & Access", + "key": "Services & Access", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:581" ] }, { @@ -2619,6 +6208,77 @@ "src/tachyon/tabs/dashboard/initController.ts:1666" ] }, + { + "call": "Settings", + "key": "Settings", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1143", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7223" + ] + }, + { + "call": "Settings have been reset to defaults. The page will reload.", + "key": "Settings have been reset to defaults. The page will reload.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:411" + ] + }, + { + "call": "Show metadata on dashboard", + "key": "Show metadata on dashboard", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2520" + ] + }, + { + "call": "Show only selected servers.", + "key": "Show only selected servers.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3384" + ] + }, + { + "call": "Show only servers with one of the selected protocols.", + "key": "Show only servers with one of the selected protocols.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3343" + ] + }, + { + "call": "Show only servers with one of the selected security types.", + "key": "Show only servers with one of the selected security types.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3349" + ] + }, + { + "call": "Show only servers with one of the selected transports.", + "key": "Show only servers with one of the selected transports.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3346" + ] + }, + { + "call": "Show servers from selected groups without repeating their filtering criteria.", + "key": "Show servers from selected groups without repeating their filtering criteria.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3457" + ] + }, + { + "call": "Show servers only from the specified countries.", + "key": "Show servers only from the specified countries.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3376" + ] + }, + { + "call": "Show servers whose names match the expression.", + "key": "Show servers whose names match the expression.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3392" + ] + }, { "call": "Show sing-box config", "key": "Show sing-box config", @@ -2627,6 +6287,13 @@ "src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:166" ] }, + { + "call": "Show subscription metadata for this source on the dashboard", + "key": "Show subscription metadata for this source on the dashboard", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2521" + ] + }, { "call": "Sing-box autostart disabled", "key": "Sing-box autostart disabled", @@ -2683,6 +6350,41 @@ "src/tachyon/tabs/diagnostic/checks/runSingBoxCheck.ts:67" ] }, + { + "call": "Singapore (sg)", + "key": "Singapore (sg)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9248" + ] + }, + { + "call": "Skip loopback & local entries (127.0.0.1, ::1, 0.0.0.0, localhost)", + "key": "Skip loopback & local entries (127.0.0.1, ::1, 0.0.0.0, localhost)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7701" + ] + }, + { + "call": "Skip TLS certificate verification (not recommended)", + "key": "Skip TLS certificate verification (not recommended)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8506" + ] + }, + { + "call": "Skipped comments/invalid:", + "key": "Skipped comments/invalid:", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7630" + ] + }, + { + "call": "Skipped loopback:", + "key": "Skipped loopback:", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7629" + ] + }, { "call": "Smart Detect", "key": "Smart Detect", @@ -2697,14 +6399,65 @@ "src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:237" ] }, + { + "call": "Snell Version", + "key": "Snell Version", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8533" + ] + }, + { + "call": "Sort Alphabetically", + "key": "Sort Alphabetically", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7801" + ] + }, + { + "call": "Sort by latency", + "key": "Sort by latency", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9048" + ] + }, + { + "call": "Sorts servers in this section by lowest latency in the dashboard.", + "key": "Sorts servers in this section by lowest latency in the dashboard.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9049" + ] + }, { "call": "Source", "key": "Source", "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10081", "src/tachyon/tabs/monitoring/initController.ts:883", "src/tachyon/tabs/monitoring/initController.ts:933" ] }, + { + "call": "Source Devices", + "key": "Source Devices", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10207" + ] + }, + { + "call": "Source Network Interface", + "key": "Source Network Interface", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:796" + ] + }, + { + "call": "SSH", + "key": "SSH", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9532", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9551" + ] + }, { "call": "Standalone ByeDPI autostart is enabled", "key": "Standalone ByeDPI autostart is enabled", @@ -2782,6 +6535,20 @@ "src/tachyon/tabs/diagnostic/checks/runZapret2Check.ts:124" ] }, + { + "call": "Start", + "key": "Start", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:285" + ] + }, + { + "call": "Start bot", + "key": "Start bot", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1645" + ] + }, { "call": "Start Tachyon", "key": "Start Tachyon", @@ -2796,13 +6563,41 @@ "src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:954" ] }, + { + "call": "Starting…", + "key": "Starting…", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:334", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1692" + ] + }, { "call": "Status", "key": "Status", "places": [ "src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:449", - "src/tachyon/tabs/dashboard/partials/renderSections.ts:633", - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:463" + "src/tachyon/tabs/dashboard/partials/renderSections.ts:633" + ] + }, + { + "call": "Stop", + "key": "Stop", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:292" + ] + }, + { + "call": "Stop bot", + "key": "Stop bot", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1652" + ] + }, + { + "call": "Stop checking when URLTest group is not used. Use sing-box duration format like 1d, 12h or 30m.", + "key": "Stop checking when URLTest group is not used. Use sing-box duration format like 1d, 12h or 30m.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2676" ] }, { @@ -2816,6 +6611,8 @@ "call": "Stopped", "key": "Stopped", "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:307", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1669", "src/tachyon/methods/custom/getDashboardSections.ts:1571", "src/tachyon/tabs/dashboard/partials/renderSections.ts:585", "src/tachyon/tabs/diagnostic/checks/runSectionsCheck.ts:147" @@ -2828,6 +6625,50 @@ "src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:124" ] }, + { + "call": "Stopping…", + "key": "Stopping…", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:348", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1706" + ] + }, + { + "call": "Store auto-detected domains in /etc instead of /tmp to survive reboots.", + "key": "Store auto-detected domains in /etc instead of /tmp to survive reboots.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1511" + ] + }, + { + "call": "Strict ECH + DoQ DNS Enforcer", + "key": "Strict ECH + DoQ DNS Enforcer", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1290" + ] + }, + { + "call": "STUN (P2P Calls)", + "key": "STUN (P2P Calls)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9528", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9547" + ] + }, + { + "call": "Subnets from the list will be extracted and added to nftables", + "key": "Subnets from the list will be extracted and added to nftables", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4077" + ] + }, + { + "call": "Subscription auto update", + "key": "Subscription auto update", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2367" + ] + }, { "call": "Subscription info:", "key": "Subscription info:", @@ -2843,6 +6684,27 @@ "src/tachyon/methods/shell/index.ts:766" ] }, + { + "call": "Subscription update interval", + "key": "Subscription update interval", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2376" + ] + }, + { + "call": "Subscription URL", + "key": "Subscription URL", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8770" + ] + }, + { + "call": "Subscription URL settings", + "key": "Subscription URL settings", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3764" + ] + }, { "call": "Subscriptions updated", "key": "Subscriptions updated", @@ -2850,6 +6712,27 @@ "src/tachyon/tabs/dashboard/initController.ts:335" ] }, + { + "call": "Success", + "key": "Success", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8144" + ] + }, + { + "call": "Successfully imported %d DNS record(s)", + "key": "Successfully imported %d DNS record(s)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7688" + ] + }, + { + "call": "Sweden (se)", + "key": "Sweden (se)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9244" + ] + }, { "call": "System info", "key": "System info", @@ -2878,6 +6761,34 @@ "src/tachyon/services/core.service.ts:52" ] }, + { + "call": "Tachyon manages ciadpi pid files itself, so pidfile options are not allowed here.", + "key": "Tachyon manages ciadpi pid files itself, so pidfile options are not allowed here.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6504" + ] + }, + { + "call": "Tachyon manages the ciadpi process lifecycle itself, so daemon mode is not allowed here.", + "key": "Tachyon manages the ciadpi process lifecycle itself, so daemon mode is not allowed here.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6501" + ] + }, + { + "call": "Tachyon manages the nfqws process lifecycle itself, so daemon mode is not allowed here.", + "key": "Tachyon manages the nfqws process lifecycle itself, so daemon mode is not allowed here.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5648" + ] + }, + { + "call": "Tachyon manages the nfqws2 process lifecycle itself, so daemon mode is not allowed here.", + "key": "Tachyon manages the nfqws2 process lifecycle itself, so daemon mode is not allowed here.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6099" + ] + }, { "call": "Tachyon service is stopped. Start the service to display connections.", "key": "Tachyon service is stopped. Start the service to display connections.", @@ -2892,6 +6803,13 @@ "src/tachyon/tabs/dashboard/render.ts:17" ] }, + { + "call": "Tachyon will not modify your DHCP configuration", + "key": "Tachyon will not modify your DHCP configuration", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1202" + ] + }, { "call": "Tachyon-managed ciadpi runtime has restarted", "key": "Tachyon-managed ciadpi runtime has restarted", @@ -2970,10 +6888,10 @@ ] }, { - "call": "TCP", - "key": "TCP", + "call": "Telegram Bot Token", + "key": "Telegram Bot Token", "places": [ - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:439" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1764" ] }, { @@ -2985,6 +6903,48 @@ "src/tachyon/tabs/dashboard/partials/renderSections.ts:860" ] }, + { + "call": "Test only selected servers.", + "key": "Test only selected servers.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2775" + ] + }, + { + "call": "Test only servers with one of the selected protocols.", + "key": "Test only servers with one of the selected protocols.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2735" + ] + }, + { + "call": "Test only servers with one of the selected security types.", + "key": "Test only servers with one of the selected security types.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2741" + ] + }, + { + "call": "Test only servers with one of the selected transports.", + "key": "Test only servers with one of the selected transports.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2738" + ] + }, + { + "call": "Test servers only from the specified countries.", + "key": "Test servers only from the specified countries.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2767" + ] + }, + { + "call": "Test servers whose names match the expression.", + "key": "Test servers whose names match the expression.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2783" + ] + }, { "call": "Testing URL", "key": "Testing URL", @@ -2993,10 +6953,26 @@ ] }, { - "call": "Testing...", - "key": "Testing...", + "call": "The desync fwmark is managed by Tachyon for loop prevention and must not be overridden here.", + "key": "The desync fwmark is managed by Tachyon for loop prevention and must not be overridden here.", "places": [ - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:85" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5645", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6090" + ] + }, + { + "call": "The NFQUEUE number is assigned by Tachyon for each rule and must not be overridden here.", + "key": "The NFQUEUE number is assigned by Tachyon for each rule and must not be overridden here.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5642", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6087" + ] + }, + { + "call": "The rule applies to the domain and all its subdomains. Use full:, keyword:, or regex: prefixes for exact match, keyword match, or regular expression.", + "key": "The rule applies to the domain and all its subdomains. Use full:, keyword:, or regex: prefixes for exact match, keyword match, or regular expression.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9272" ] }, { @@ -3027,6 +7003,71 @@ "src/tachyon/tabs/diagnostic/partials/renderAiChatModal.ts:91" ] }, + { + "call": "This field is required", + "key": "This field is required", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10265" + ] + }, + { + "call": "This field must start a working ciadpi strategy; help/version options exit immediately and are not allowed here.", + "key": "This field must start a working ciadpi strategy; help/version options exit immediately and are not allowed here.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6507" + ] + }, + { + "call": "This field must start a working nfqws strategy; --dry-run exits immediately and is not allowed here.", + "key": "This field must start a working nfqws strategy; --dry-run exits immediately and is not allowed here.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5651" + ] + }, + { + "call": "This field must start a working nfqws strategy; --version exits immediately and is not allowed here.", + "key": "This field must start a working nfqws strategy; --version exits immediately and is not allowed here.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5654" + ] + }, + { + "call": "This field must start a working nfqws2 strategy; --dry-run exits immediately and is not allowed here.", + "key": "This field must start a working nfqws2 strategy; --dry-run exits immediately and is not allowed here.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6102" + ] + }, + { + "call": "This field must start a working nfqws2 strategy; --version exits immediately and is not allowed here.", + "key": "This field must start a working nfqws2 strategy; --version exits immediately and is not allowed here.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6105" + ] + }, + { + "call": "This flag does not accept a value.", + "key": "This flag does not accept a value.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5823", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6297" + ] + }, + { + "call": "This option requires a value.", + "key": "This option requires a value.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5854", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6328" + ] + }, + { + "call": "This will erase all Tachyon settings and restore the factory defaults. The service will restart. This action cannot be undone.", + "key": "This will erase all Tachyon settings and restore the factory defaults. The service will restart. This action cannot be undone.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:426" + ] + }, { "call": "Time", "key": "Time", @@ -3035,6 +7076,13 @@ "src/tachyon/tabs/monitoring/initController.ts:930" ] }, + { + "call": "Time in seconds for DNS record caching (default: 60)", + "key": "Time in seconds for DNS record caching (default: 60)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:735" + ] + }, { "call": "tiny", "key": "tiny", @@ -3043,24 +7091,68 @@ ] }, { - "call": "TLS", - "key": "TLS", + "call": "TLS / HTTPS", + "key": "TLS / HTTPS", "places": [ - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:447" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9531", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9550" + ] + }, + { + "call": "TLS Auth/Crypt Key", + "key": "TLS Auth/Crypt Key", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8733" + ] + }, + { + "call": "TLS SNI", + "key": "TLS SNI", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8494" + ] + }, + { + "call": "Token is required when the bot is enabled", + "key": "Token is required when the bot is enabled", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1773" ] }, { "call": "Tolerance", "key": "Tolerance", "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2648", "src/tachyon/tabs/dashboard/initController.ts:1109" ] }, { - "call": "Total Targets", - "key": "Total Targets", + "call": "Top level has the highest priority; lower levels are used as fallback", + "key": "Top level has the highest priority; lower levels are used as fallback", "places": [ - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:325" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3194" + ] + }, + { + "call": "Total lines:", + "key": "Total lines:", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7627" + ] + }, + { + "call": "Trace", + "key": "Trace", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10012" + ] + }, + { + "call": "Tracing routing rules...", + "key": "Tracing routing rules...", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10049" ] }, { @@ -3071,6 +7163,27 @@ "src/tachyon/tabs/dashboard/partials/renderSections.ts:127" ] }, + { + "call": "Traffic for this level goes directly.", + "key": "Traffic for this level goes directly.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2905" + ] + }, + { + "call": "Traffic from these IP addresses will never be routed through this section, even if other conditions match.", + "key": "Traffic from these IP addresses will never be routed through this section, even if other conditions match.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9498" + ] + }, + { + "call": "Traffic of specified protocols (e.g. BitTorrent, QUIC, STUN) will bypass this section.", + "key": "Traffic of specified protocols (e.g. BitTorrent, QUIC, STUN) will bypass this section.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9524" + ] + }, { "call": "Traffic Total", "key": "Traffic Total", @@ -3078,6 +7191,20 @@ "src/tachyon/tabs/dashboard/initController.ts:1640" ] }, + { + "call": "Traffic type filter", + "key": "Traffic type filter", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9542" + ] + }, + { + "call": "Traffic will go through the default route (Direct/Default).", + "key": "Traffic will go through the default route (Direct/Default).", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10114" + ] + }, { "call": "Transient connection error", "key": "Transient connection error", @@ -3085,6 +7212,21 @@ "src/tachyon/tabs/updates/initController.ts:851" ] }, + { + "call": "Transparent proxy mode is incompatible with action=byedpi because Tachyon connects to ciadpi through SOCKS.", + "key": "Transparent proxy mode is incompatible with action=byedpi because Tachyon connects to ciadpi through SOCKS.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6498" + ] + }, + { + "call": "Transport", + "key": "Transport", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2036", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8557" + ] + }, { "call": "Troubleshooting", "key": "Troubleshooting", @@ -3092,6 +7234,34 @@ "src/tachyon/tabs/diagnostic/partials/renderWikiDisclaimer.ts:25" ] }, + { + "call": "Try compatible User-Agent profiles automatically when downloading this subscription", + "key": "Try compatible User-Agent profiles automatically when downloading this subscription", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2425" + ] + }, + { + "call": "TTL must be a positive number", + "key": "TTL must be a positive number", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:746" + ] + }, + { + "call": "TTL value cannot be empty", + "key": "TTL value cannot be empty", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:741" + ] + }, + { + "call": "Turkey (tr)", + "key": "Turkey (tr)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9245" + ] + }, { "call": "Type", "key": "Type", @@ -3100,19 +7270,93 @@ "src/tachyon/tabs/monitoring/initController.ts:928" ] }, + { + "call": "UDP (Unprotected DNS)", + "key": "UDP (Unprotected DNS)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:598" + ] + }, + { + "call": "Ukraine (ua)", + "key": "Ukraine (ua)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9251" + ] + }, + { + "call": "Unable to validate the ByeDPI strategy through the backend parser.", + "key": "Unable to validate the ByeDPI strategy through the backend parser.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6422" + ] + }, + { + "call": "Unable to validate the NFQWS strategy through the backend parser.", + "key": "Unable to validate the NFQWS strategy through the backend parser.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5565", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6900" + ] + }, + { + "call": "Unable to validate the NFQWS2 strategy through the backend parser.", + "key": "Unable to validate the NFQWS2 strategy through the backend parser.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6010", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6909" + ] + }, { "call": "Unavailability timeout", "key": "Unavailability timeout", "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3111", "src/tachyon/tabs/dashboard/initController.ts:1233" ] }, { - "call": "Unavailable", - "key": "Unavailable", + "call": "Underload Packet Magic Header (H1)", + "key": "Underload Packet Magic Header (H1)", "places": [ - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:112", - "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:327" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8405" + ] + }, + { + "call": "Underload Packet Magic Header (H2)", + "key": "Underload Packet Magic Header (H2)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8406" + ] + }, + { + "call": "Underload Packet Magic Header (H3)", + "key": "Underload Packet Magic Header (H3)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8407" + ] + }, + { + "call": "Underload Packet Magic Header (H4)", + "key": "Underload Packet Magic Header (H4)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8408" + ] + }, + { + "call": "Unexpected ByeDPI strategy argument: %s", + "key": "Unexpected ByeDPI strategy argument: %s", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6639", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6688" + ] + }, + { + "call": "Unexpected standalone token. Use explicit flags such as --name or --name=value.", + "key": "Unexpected standalone token. Use explicit flags such as --name or --name=value.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5803", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6277" ] }, { @@ -3136,6 +7380,20 @@ "src/tachyon/tabs/diagnostic/checks/runZapret2Check.ts:92" ] }, + { + "call": "United Kingdom (gb)", + "key": "United Kingdom (gb)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9241" + ] + }, + { + "call": "United States (us)", + "key": "United States (us)", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9238" + ] + }, { "call": "unknown", "key": "unknown", @@ -3158,9 +7416,27 @@ "call": "Unknown", "key": "Unknown", "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:328", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1686", "src/tachyon/methods/custom/getDashboardSections.ts:1573" ] }, + { + "call": "Unknown ByeDPI option: %s", + "key": "Unknown ByeDPI option: %s", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6608", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6630", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6681" + ] + }, + { + "call": "Unknown country", + "key": "Unknown country", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:616" + ] + }, { "call": "Unknown error", "key": "Unknown error", @@ -3172,6 +7448,20 @@ "src/tachyon/tabs/diagnostic/initController.ts:1159" ] }, + { + "call": "Unknown NFQWS flag.", + "key": "Unknown NFQWS flag.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5814" + ] + }, + { + "call": "Unknown NFQWS2 flag.", + "key": "Unknown NFQWS2 flag.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6288" + ] + }, { "call": "Unpacking & installing binaries...", "key": "Unpacking & installing binaries...", @@ -3237,6 +7527,27 @@ "src/tachyon/tabs/dashboard/partials/renderSections.ts:232" ] }, + { + "call": "Update this subscription automatically", + "key": "Update this subscription automatically", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2368" + ] + }, + { + "call": "Updated/duplicates:", + "key": "Updated/duplicates:", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7632" + ] + }, + { + "call": "Updates & Downloads", + "key": "Updates & Downloads", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:582" + ] + }, { "call": "Updating", "key": "Updating", @@ -3281,6 +7592,41 @@ "src/validators/validateUrl.ts:18" ] }, + { + "call": "URL to test through the proxy (default: Cloudflare 204).", + "key": "URL to test through the proxy (default: Cloudflare 204).", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1451" + ] + }, + { + "call": "URL used to check whether a server is alive", + "key": "URL used to check whether a server is alive", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3087" + ] + }, + { + "call": "URL used to test server latency", + "key": "URL used to test server latency", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2663" + ] + }, + { + "call": "URLs of remote hosts files to download and apply. Supports standard hosts format: IP domain.", + "key": "URLs of remote hosts files to download and apply. Supports standard hosts format: IP domain.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7839" + ] + }, + { + "call": "URLTest", + "key": "URLTest", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8886" + ] + }, { "call": "URLTest details", "key": "URLTest details", @@ -3297,6 +7643,60 @@ "src/tachyon/tabs/dashboard/initController.ts:1095" ] }, + { + "call": "URLTest settings", + "key": "URLTest settings", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3803", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3804" + ] + }, + { + "call": "Use 3-tier check intervals: fast (15s), normal (120s), slow (300s) instead of a single interval.", + "key": "Use 3-tier check intervals: fast (15s), normal (120s), slow (300s) instead of a single interval.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1490" + ] + }, + { + "call": "Use another section as an intermediate hop to connect to servers in this section. Does not apply to network interfaces or JSON outbounds.", + "key": "Use another section as an intermediate hop to connect to servers in this section. Does not apply to network interfaces or JSON outbounds.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8985" + ] + }, + { + "call": "Use sing-box duration format like 10s, 1m or 2m30s", + "key": "Use sing-box duration format like 10s, 1m or 2m30s", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:252" + ] + }, + { + "call": "Use sing-box duration format like 1d, 12h or 30m", + "key": "Use sing-box duration format like 1d, 12h or 30m", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1045", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1067", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1074", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1105", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1133", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2377", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2637", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3160", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4722", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4729", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4736" + ] + }, + { + "call": "Use sing-box duration format like 1d, 12h or 6h", + "key": "Use sing-box duration format like 1d, 12h or 6h", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7986", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7997" + ] + }, { "call": "Used by", "key": "Used by", @@ -3304,10 +7704,33 @@ "src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:25" ] }, + { + "call": "User-Agent", + "key": "User-Agent", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2435" + ] + }, + { + "call": "Username", + "key": "Username", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8565" + ] + }, + { + "call": "Username cannot be empty", + "key": "Username cannot be empty", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9142" + ] + }, { "call": "Valid", "key": "Valid", "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5338", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5351", "src/validators/validateDns.ts:25", "src/validators/validateDns.ts:29", "src/validators/validateDomain.ts:57", @@ -3326,6 +7749,41 @@ "src/validators/validateVmessUrl.ts:66" ] }, + { + "call": "Validates sing-box config before restart to prevent boot loops on broken configs.", + "key": "Validates sing-box config before restart to prevent boot loops on broken configs.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1497" + ] + }, + { + "call": "Validation errors:", + "key": "Validation errors:", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4791" + ] + }, + { + "call": "Value cannot be empty", + "key": "Value cannot be empty", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5328" + ] + }, + { + "call": "Value must not contain control characters", + "key": "Value must not contain control characters", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10268" + ] + }, + { + "call": "Via country.is", + "key": "Via country.is", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1977" + ] + }, { "call": "View logs", "key": "View logs", @@ -3334,6 +7792,20 @@ "src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:157" ] }, + { + "call": "Visible name of this section", + "key": "Visible name of this section", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7254" + ] + }, + { + "call": "vless://, vmess://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links", + "key": "vless://, vmess://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8746" + ] + }, { "call": "WAN", "key": "WAN", @@ -3348,6 +7820,34 @@ "src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:198" ] }, + { + "call": "WARP Access Token", + "key": "WARP Access Token", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8445" + ] + }, + { + "call": "WARP Account ID", + "key": "WARP Account ID", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8433" + ] + }, + { + "call": "WARP Configuration generated and loaded successfully!", + "key": "WARP Configuration generated and loaded successfully!", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8144" + ] + }, + { + "call": "WARP Private Key", + "key": "WARP Private Key", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8421" + ] + }, { "call": "Watchdog", "key": "Watchdog", @@ -3355,6 +7855,34 @@ "src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:446" ] }, + { + "call": "Watchdog Status", + "key": "Watchdog Status", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1421" + ] + }, + { + "call": "WebRTC Leak Protection", + "key": "WebRTC Leak Protection", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1280" + ] + }, + { + "call": "What Tachyon should do when this section matches", + "key": "What Tachyon should do when this section matches", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7267" + ] + }, + { + "call": "When switching to another level, test every server and select the fastest instead of the first working one.", + "key": "When switching to another level, test every server and select the fastest instead of the first working one.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3138" + ] + }, { "call": "Why Discord fails?", "key": "Why Discord fails?", @@ -3362,6 +7890,27 @@ "src/tachyon/tabs/diagnostic/partials/renderAiChatModal.ts:156" ] }, + { + "call": "WireGuard private key from your Cloudflare account", + "key": "WireGuard private key from your Cloudflare account", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8617" + ] + }, + { + "call": "WireGuard private key from your Cloudflare WARP account", + "key": "WireGuard private key from your Cloudflare WARP account", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8422" + ] + }, + { + "call": "YACD Secret Key", + "key": "YACD Secret Key", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:971" + ] + }, { "call": "Yes", "key": "Yes", @@ -3369,6 +7918,20 @@ "src/tachyon/tabs/dashboard/initController.ts:812" ] }, + { + "call": "You can select Output Network Interface, by default autodetect", + "key": "You can select Output Network Interface, by default autodetect", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:835" + ] + }, + { + "call": "Zapret hostlist templates are not supported here because Tachyon does not expand them for per-rule NFQWS strategies.", + "key": "Zapret hostlist templates are not supported here because Tachyon does not expand them for per-rule NFQWS strategies.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5639" + ] + }, { "call": "Zapret package is installed", "key": "Zapret package is installed", @@ -3411,6 +7974,13 @@ "src/tachyon/tabs/diagnostic/checks/runZapretCheck.ts:104" ] }, + { + "call": "Zapret2 hostlist templates are not supported here because Tachyon does not expand them for per-rule NFQWS2 strategies.", + "key": "Zapret2 hostlist templates are not supported here because Tachyon does not expand them for per-rule NFQWS2 strategies.", + "places": [ + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6084" + ] + }, { "call": "Zapret2 package is installed", "key": "Zapret2 package is installed", diff --git a/fe-app-tachyon/locales/tachyon.pot b/fe-app-tachyon/locales/tachyon.pot index 515047b9..6b7ba73c 100644 --- a/fe-app-tachyon/locales/tachyon.pot +++ b/fe-app-tachyon/locales/tachyon.pot @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: TACHYON\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-13 05:37+0300\n" -"PO-Revision-Date: 2026-08-13 05:37+0300\n" +"POT-Creation-Date: 2026-08-13 17:10+0300\n" +"PO-Revision-Date: 2026-08-13 17:10+0300\n" "Last-Translator: Dushnilin \n" "Language-Team: LANGUAGE \n" "Language: \n" @@ -16,6 +16,42 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2062 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2439 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2818 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2833 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3031 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3046 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3282 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3434 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3444 +msgid "-- Select --" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10205 +msgid ".lst Lists" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1375 +msgid "(provider default)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8865 +msgid "+ Add JSON outbound" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3198 +msgid "+ Add level" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8951 +msgid "+ Add priority" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8892 +msgid "+ Add URLTest" +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:467 msgid "⏹ Stop" msgstr "" @@ -28,6 +64,14 @@ msgstr "" msgid "⚙ Advanced Settings" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:668 +msgid "⚠️ If all Bootstrap DNS fail 3 times, queries will be sent to your ISP's DNS in plaintext. Only use as a last resort to prevent complete internet loss." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:659 +msgid "⚠️ If all Main DNS fail 3 times, queries will be sent to your ISP's DNS in plaintext. Only use as a last resort to prevent complete internet loss." +msgstr "" + #: src/tachyon/tabs/dashboard/initController.ts:1670 #: src/tachyon/tabs/dashboard/initController.ts:1679 #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:457 @@ -44,6 +88,11 @@ msgstr "" msgid "🔑 Generate" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7236 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7266 +msgid "Action" +msgstr "" + #: src/tachyon/tabs/monitoring/initController.ts:713 #: src/tachyon/tabs/monitoring/render.ts:20 msgid "Active" @@ -66,22 +115,87 @@ msgstr "" msgid "Active Main DNS" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:223 -msgid "Active Routes" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:122 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:166 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1843 +msgid "Add at least one DNS server" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2529 +msgid "Add prefix to nodes" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9429 +msgid "Add URLs or local paths to .lst lists containing domains and subnets." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9455 +msgid "Add URLs or local paths to .lst lists containing domains. IP entries are ignored." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9404 +msgid "Add URLs or local paths to .srs / .json lists. Only domain rules are supported." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9375 +msgid "Add URLs or local paths to .srs / .json lists. Subnets are ignored by default." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3456 +msgid "Add URLTest / Priority group" msgstr "" #: src/tachyon/tabs/diagnostic/checks/runNftCheck.ts:106 msgid "Additional marking rules found" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2748 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2958 +msgid "Additionally exclude servers by protocol, transport, and security. Exclude only servers matching the specified parameters." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2731 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2940 +msgid "Additionally filter servers by protocol, transport, and security. Add only servers matching the specified parameters." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3356 +msgid "Additionally hide servers by protocol, transport, and security. Hide servers matching the specified parameters." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3336 +msgid "Additionally show servers by protocol, transport, and security. Add only servers matching the specified parameters." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1781 +msgid "Administrator Chat IDs" +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:579 msgid "Advanced self-healing features. Requires Watchdog to be enabled." msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:584 +msgid "Advanced System" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8603 +msgid "AEAD Method" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:583 +msgid "AI & Watchdog" +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:684 msgid "AI Agent REST API (12 Endpoints)" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1327 +msgid "AI Agent REST API Bearer Token" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1394 #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:893 msgid "AI API Key" msgstr "" @@ -108,14 +222,17 @@ msgstr "" msgid "AI Doctor failed" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1381 #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:860 msgid "AI Doctor Language" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1368 #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:836 msgid "AI Model" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1352 #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:766 msgid "AI Provider" msgstr "" @@ -137,20 +254,79 @@ msgstr "" msgid "All" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1959 +msgid "All except selected" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1969 +msgid "All remaining except selected" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1967 +msgid "All remaining servers" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2914 +msgid "All remaining servers means every server not already assigned to a higher-priority level." +msgstr "" + #: src/tachyon/tabs/monitoring/initController.ts:635 #: src/tachyon/tabs/monitoring/render.ts:49 msgid "All Routes" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:235 -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:358 -msgid "All Services" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1958 +msgid "All servers" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9487 +msgid "All traffic from these IP addresses will be routed through the section unconditionally, ignoring all other conditions." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8505 +msgid "Allow Insecure TLS" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5323 +msgid "Allowed domain prefixes are full:, keyword:, and regex:" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:959 +msgid "Allows access to YACD from the WAN. Make sure to open the appropriate port in your firewall." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2708 +msgid "Allows limiting the list of servers for URLTest" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1341 +msgid "Allows Tachyon to send diagnostic snapshots to ChatGPT or DeepSeek API for intelligent root-cause analysis and auto-repair recommendations." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8292 +msgid "AmneziaWG config loaded successfully!" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8005 +msgid "AmneziaWG Generator" msgstr "" #: src/tachyon/tabs/updates/initController.ts:835 msgid "Another component action is already running" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1395 +msgid "API Key for OpenAI (sk-...) or DeepSeek (optional for Ollama / LM Studio)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9543 +msgid "Apply rules of this section only to selected protocols." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9478 +msgid "Apply section rules only to the specified local IP addresses" +msgstr "" + #: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:133 msgid "Applying changes & reloading services..." msgstr "" @@ -163,43 +339,115 @@ msgstr "" msgid "Ask Tachyon AI Assistant a question..." msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:35 -msgid "Auto" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1792 +msgid "At least one Admin Chat ID is required" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5354 +msgid "At least one valid domain must be specified." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5436 +msgid "At least one valid IP or subnet must be specified." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8686 +msgid "Auth Digest" msgstr "" #: src/partials/modal/renderModal.ts:286 msgid "Auto refresh" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1584 +msgid "Auto-detected domains" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9300 +msgid "Auto-detected Domains" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1544 #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:1053 msgid "Auto-detects blocked domains from logs and adds them to the first section where they work via proxy." msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2455 +msgid "Auto-generate HWID" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7978 +msgid "Auto-update Hosts Lists" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1094 +msgid "Automatic component update checks" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2424 +msgid "Automatic User-Agent selection" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2530 +msgid "Automatically add text to the name of each server from this subscription for convenient filtering." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1095 +msgid "Automatically check installed components for new versions" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8006 +msgid "Automatically generate a Cloudflare WARP account and configure all AmneziaWG settings." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1518 +msgid "Automatically increase check intervals when healthy (to 5 min) and decrease on problems (to 120s)." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3148 #: src/tachyon/tabs/dashboard/initController.ts:1243 msgid "Automatically select the fastest node in the current level" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:102 -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:326 -msgid "Available" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7979 +msgid "Automatically update remote hosts lists on schedule" msgstr "" #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:54 msgid "Available actions" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:328 -msgid "Avg Latency" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5569 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6014 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6426 +msgid "Backend validation failed: %s" msgstr "" #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:694 msgid "Bearer Auth Token" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9249 +msgid "Belarus (by)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9526 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9545 +msgid "BitTorrent / P2P" +msgstr "" + #: src/tachyon/tabs/diagnostic/checks/runDnsCheck.ts:57 msgid "Bootstrap DNS" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:622 +msgid "Bootstrap DNS Servers" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1743 +msgid "Bot Status" +msgstr "" + #: src/tachyon/tabs/diagnostic/checks/runFakeIPCheck.ts:51 #: src/tachyon/tabs/diagnostic/checks/runFakeIPCheck.ts:79 msgid "Browser FakeIP check could not be completed" @@ -217,6 +465,33 @@ msgstr "" msgid "Bug report downloaded" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9321 +msgid "Built-in rule sets" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1976 +msgid "By flag emoji from name" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6495 +msgid "ByeDPI listen address and port are assigned by Tachyon and must not be set in the strategy." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6672 +msgid "ByeDPI option does not accept a compact value: %s" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6601 +msgid "ByeDPI option does not accept a value: %s" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6593 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6619 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6653 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6662 +msgid "ByeDPI option requires a value: %s" +msgstr "" + #: src/tachyon/tabs/diagnostic/checks/runByedpiCheck.ts:71 msgid "ByeDPI package is installed" msgstr "" @@ -241,6 +516,39 @@ msgstr "" msgid "ByeDPI sing-box outbound is not configured" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7435 +msgid "ByeDPI Strategy" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6698 +msgid "ByeDPI strategy cannot be empty" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1008 +msgid "Bypasses UDP traffic for selected game consoles (PS5/Xbox) to achieve NAT Type 1 / 2 (Full Cone NAT) for P2P matchmaking, while keeping TCP (PSN/Auth) routed through the proxy." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8697 +msgid "CA Certificate" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1082 +msgid "Cache all built-in lists and databases even if they are not currently selected in any section. Recommended if you have plenty of storage space or USB drive." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1225 +msgid "Cache File Path" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1239 +msgid "Cache file path cannot be empty" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:434 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7712 +msgid "Cancel" +msgstr "" + #: src/tachyon/tabs/diagnostic/checks/runByedpiCheck.ts:26 #: src/tachyon/tabs/diagnostic/checks/runDnsCheck.ts:27 #: src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:172 @@ -252,12 +560,12 @@ msgstr "" msgid "Cannot receive checks result" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:796 -msgid "Check Again" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3584 +msgid "Cannot save settings" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:724 -msgid "Check All" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8984 +msgid "Cascade connection" msgstr "" #: src/tachyon/tabs/updates/initController.ts:498 @@ -270,31 +578,26 @@ msgstr "" msgid "Check Connection" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:612 -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:709 -msgid "Check Domain" -msgstr "" - -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:606 -msgid "Check domain or IP (e.g. example.com)..." -msgstr "" - +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2636 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3099 #: src/tachyon/tabs/dashboard/initController.ts:1230 msgid "Check interval" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:254 -msgid "Check Mode:" -msgstr "" - #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:148 msgid "Check Services" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3112 +msgid "Check timeout after which the server is considered dead" +msgstr "" + #: src/tachyon/tabs/updates/initController.ts:903 msgid "Check update" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2662 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3086 #: src/tachyon/tabs/dashboard/initController.ts:1228 msgid "Check URL" msgstr "" @@ -328,10 +631,14 @@ msgstr "" #: src/tachyon/tabs/dashboard/partials/renderSections.ts:420 #: src/tachyon/tabs/dashboard/partials/renderSections.ts:775 #: src/tachyon/tabs/dashboard/partials/renderSections.ts:849 -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:728 msgid "Checking..." msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:275 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1635 +msgid "Checking…" +msgstr "" + #: src/tachyon/tabs/diagnostic/helpers/getCheckTitle.ts:2 msgid "checks" msgstr "" @@ -351,22 +658,54 @@ msgstr "" msgid "Checks passed with manual DHCP" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9246 +msgid "China (cn)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7531 +msgid "Choose Hosts File..." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9215 +msgid "Choose whether to route traffic to all destinations except selected countries (Exclude) or only to selected countries (Include)." +msgstr "" + #: src/validators/validateSubnet.ts:35 msgid "CIDR must be between 0 and 32 for IPv4 or 0 and 128 for IPv6" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8675 +msgid "Cipher" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7815 +msgid "Clean Comments" +msgstr "" + #: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:126 msgid "Cleaning configuration & reloading..." msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10013 +msgid "Clear" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8709 +msgid "Client Certificate" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8721 +msgid "Client Key" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3651 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10221 #: src/partials/modal/renderModal.ts:263 #: src/tachyon/tabs/dashboard/initController.ts:1085 #: src/tachyon/tabs/monitoring/initController.ts:884 #: src/tachyon/tabs/monitoring/initController.ts:934 #: src/tachyon/tabs/diagnostic/initController.ts:1144 #: src/tachyon/tabs/diagnostic/partials/renderAiChatModal.ts:212 -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:155 -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:802 #: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:416 #: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:461 msgid "Close" @@ -387,6 +726,30 @@ msgstr "" msgid "Closed" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8629 +msgid "Cloudflare account / device ID" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8641 +msgid "Cloudflare API access token" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8434 +msgid "Cloudflare WARP account / device ID" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8446 +msgid "Cloudflare WARP API access token" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1782 +msgid "Comma-separated list of Telegram user IDs authorized to control the bot." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10201 +msgid "Community Lists" +msgstr "" + #: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:120 msgid "Comparing versions & fingerprint check..." msgstr "" @@ -395,10 +758,26 @@ msgstr "" msgid "Component update available" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1104 +msgid "Component update check interval" +msgstr "" + #: src/tachyon/helpers/singBoxVariant.ts:60 msgid "compressed" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7224 +msgid "Conditions" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1211 +msgid "Config File Path" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4749 +msgid "Configure User-Agent in the item settings" +msgstr "" + #: src/tachyon/methods/custom/getDashboardSections.ts:1569 #: src/tachyon/tabs/dashboard/partials/renderSections.ts:583 #: src/tachyon/tabs/diagnostic/checks/runSectionsCheck.ts:141 @@ -409,6 +788,10 @@ msgstr "" msgid "Connect ChatGPT, DeepSeek or local LLM to get automated diagnostic reports and intelligent root-cause analysis." msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9022 +msgid "Connect through" +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderSections.ts:782 msgid "Connected" msgstr "" @@ -417,6 +800,10 @@ msgstr "" msgid "Connecting to update server..." msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8745 +msgid "Connection URL" +msgstr "" + #: src/tachyon/tabs/monitoring/initController.ts:998 msgid "Connections are unavailable" msgstr "" @@ -443,30 +830,89 @@ msgstr "" msgid "Could not compare FakeIP and control public IPs" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9252 +msgid "Country code (e.g. ru, us, de)" +msgstr "" + #: src/tachyon/tabs/diagnostic/initController.ts:1110 msgid "Current Diagnosis" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9039 +msgid "Current section cannot be used as its own transit section" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2416 +msgid "Current section cannot download its own subscription" +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderWidget.ts:22 msgid "Currently unavailable" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1405 #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:915 msgid "Custom API Endpoint URL" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:55 -msgid "Custom Domains" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2492 +msgid "Custom device headers" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7720 +msgid "Custom DNS Records (Hosts)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1361 +msgid "Custom OpenAI-Compatible API (OpenRouter)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1406 +msgid "Custom OpenAI-compatible API endpoint URL (e.g. http://192.168.1.100:11434/v1/chat/completions)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8860 +msgid "Custom outbound configurations in JSON format" msgstr "" #: src/tachyon/tabs/dashboard/partials/renderSections.ts:44 msgid "Dashboard currently unavailable" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1908 +msgid "Default (auto)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1141 +msgid "Default address for checking server availability and latency. URLTest uses its own address." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:932 +msgid "Delay in milliseconds before reloading Tachyon after interface UP" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:939 +msgid "Delay value cannot be empty" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2718 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2927 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3323 +msgid "Detect server country" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1281 +msgid "Detects and drops STUN/TURN packets in nftables to prevent real IP leaks via WebRTC." +msgstr "" + #: src/validators/validateOutboundJson.ts:115 msgid "detour must be a non-empty string" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9477 +msgid "Device filter" +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:1126 msgid "Device IPs (one per line):" msgstr "" @@ -475,6 +921,10 @@ msgstr "" msgid "Device IPs saved" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6961 +msgid "Device or IP" +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:1164 msgid "Devices listed here are always routed through the assigned section, regardless of global rules." msgstr "" @@ -487,23 +937,137 @@ msgstr "" msgid "DHCP is managed manually" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:25 -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:32 -msgid "Direct" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8464 +msgid "Direct (Default)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2904 +msgid "Direct connection" msgstr "" #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:90 msgid "Disable autostart" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:983 +msgid "Disable QUIC" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:984 +msgid "Disable the QUIC protocol to improve compatibility or fix issues with video streaming" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6096 +msgid "Disabling interception is incompatible with action=zapret2 because Tachyon sends matched traffic through NFQUEUE." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2618 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3075 +msgid "Display name" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9529 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9548 +msgid "DNS" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:677 +msgid "DNS Check Interval" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1462 +msgid "DNS Check Interval (s)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:706 +msgid "DNS Failures Before Switching" +msgstr "" + #: src/tachyon/tabs/diagnostic/checks/runDnsCheck.ts:75 msgid "DNS on router" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:595 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1814 +msgid "DNS over HTTPS (DoH)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:597 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1816 +msgid "DNS over QUIC (DoQ)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:596 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1815 +msgid "DNS over TLS (DoT)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2585 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7294 +msgid "DNS protocol" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:592 +msgid "DNS Protocol Type" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2586 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7295 +msgid "DNS protocol used by the resolver" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:787 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7357 +msgid "DNS requests through section" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:734 +msgid "DNS Rewrite TTL" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2595 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7308 +msgid "DNS server" +msgstr "" + #: src/validators/validateDns.ts:8 msgid "DNS server address cannot be empty" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2596 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7309 +msgid "DNS server used by the resolver" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:623 +msgid "DNS server used to obtain IP addresses for upstream DNS and proxies. If multiple servers are selected, a timeout switches to a backup." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:608 +msgid "DNS Servers" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:579 +msgid "DNS Settings" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:766 +msgid "DNS Strategy" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:720 +msgid "DNS Successful Checks Before Recovery" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:778 +msgid "DNS through proxy" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7345 +msgid "DNS through section" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:756 #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:479 msgid "DNS Turbo Cache" msgstr "" @@ -512,10 +1076,38 @@ msgstr "" msgid "DNS Turbo Cache saved" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:695 +msgid "DNS Unavailability Timeout" +msgstr "" + #: src/tachyon/tabs/diagnostic/partials/renderWikiDisclaimer.ts:26 msgid "Do not panic, everything can be fixed, just..." msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2791 +msgid "Do not test servers from these countries." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2807 +msgid "Do not test servers whose names match the expression." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2752 +msgid "Do not test servers with one of the selected protocols." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2758 +msgid "Do not test servers with one of the selected security types." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2755 +msgid "Do not test servers with one of the selected transports." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2799 +msgid "Do not test specified servers." +msgstr "" + #: src/tachyon/tabs/diagnostic/initController.ts:721 #: src/tachyon/tabs/diagnostic/initController.ts:759 #: src/tachyon/tabs/diagnostic/initController.ts:767 @@ -531,6 +1123,39 @@ msgstr "" msgid "Does not resolve" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9428 +msgid "Domain and IP lists" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9454 +msgid "Domain lists" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2576 +msgid "Domain Resolver" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1556 +msgid "Domain test sections" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9271 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10202 +msgid "Domains" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9301 +msgid "Domains automatically detected by Smart Detect or added via Telegram bot. You can manually edit or remove them here." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8292 +msgid "Done" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1201 +msgid "Dont Touch My DHCP!" +msgstr "" + #: src/tachyon/tabs/dashboard/initController.ts:1630 #: src/tachyon/tabs/dashboard/initController.ts:1643 msgid "Downlink" @@ -540,6 +1165,42 @@ msgstr "" msgid "Download" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1180 +msgid "Download component packages via the selected section" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1188 +msgid "Download components through" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1179 +msgid "Download components through a section" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1166 +msgid "Download lists through" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1157 +msgid "Download lists through a section" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1158 +msgid "Download remote lists and rule sets via the selected section" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2390 +msgid "Download subscription through a section" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2391 +msgid "Download subscriptions via the selected section" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2399 +msgid "Download through" +msgstr "" + #: src/tachyon/tabs/monitoring/initController.ts:877 #: src/tachyon/tabs/monitoring/initController.ts:931 msgid "Downloaded" @@ -549,34 +1210,274 @@ msgstr "" msgid "Downloading package from repository..." msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9514 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10209 +msgid "DSCP marks (QoS)" +msgstr "" + #: src/validators/validateOutboundJson.ts:75 msgid "Duplicate JSON outbound tag" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4795 +msgid "Duplicate value" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8676 +msgid "e.g. AES-256-GCM — leave empty for default" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10011 +msgid "e.g. google.com, 1.1.1.1, 443" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8687 +msgid "e.g. SHA256 — leave empty for default" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7226 +msgid "Enable" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1517 +msgid "Enable Adaptive Intervals" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1340 +msgid "Enable AI Doctor (ChatGPT / LLM Analysis)" +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:760 msgid "Enable AI Doctor (LLM Integration)" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1524 +msgid "Enable Anomaly Detection" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1035 +msgid "Enable automatic updates for remote lists and rule sets" +msgstr "" + #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:100 msgid "Enable autostart" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2577 +msgid "Enable built-in DNS resolver for domains handled by this section" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1496 +msgid "Enable Config Validation" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1456 +msgid "Enable DNS Continuous Check" +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:498 msgid "Enable DNS Turbo Cache" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1469 +msgid "Enable Firewall Reload Dedup" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1503 +msgid "Enable Graceful Degradation" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1476 +msgid "Enable Health Metrics" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1034 +msgid "Enable list updates" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9060 +msgid "Enable Mixed Proxy" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9101 +msgid "Enable Mixed Proxy Authentication" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:834 +msgid "Enable Output Network Interface" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1432 +msgid "Enable Proxy Health Monitor" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1489 +msgid "Enable Smart Cooldowns" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1543 #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:1070 msgid "Enable Smart Detect" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1753 +msgid "Enable Telegram Bot" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:667 +msgid "Enable WAN DNS Fallback for Bootstrap DNS" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:658 +msgid "Enable WAN DNS Fallback for Main DNS" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1314 +msgid "Enable Watchdog" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:948 +msgid "Enable YACD" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:958 +msgid "Enable YACD WAN Access" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1754 +msgid "Enables the background daemon that polls Telegram for commands and sends notifications." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1315 +msgid "Enables the background watchdog process to monitor services and auto-recover on failures." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4001 +msgid "Enter a complete sing-box outbound object" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2630 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3080 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3956 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3972 +msgid "Enter a display name" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2877 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2898 +msgid "Enter a level name" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2473 +msgid "Enter HWID" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1765 +msgid "Enter the API token obtained from @BotFather." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2465 +msgid "Enter the HWID sent with subscription requests" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8771 +msgid "Enter the subscription URL" +msgstr "" + #: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:129 msgid "Environment preparation & dependency check..." msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8083 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8085 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8092 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8094 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8146 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8148 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8152 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8154 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8233 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8244 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8246 +msgid "Error" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8154 +msgid "Error running generator:" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10124 +msgid "Error running trace:" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2747 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2957 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3355 +msgid "Exclude by proxy parameters" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2806 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3019 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3415 +msgid "Exclude by regular expression" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2790 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3003 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3399 +msgid "Exclude countries" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9219 +msgid "Exclude selected countries" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2798 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3011 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3407 +msgid "Exclude servers" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2965 +msgid "Exclude servers with one of the selected protocols from this level." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2971 +msgid "Exclude servers with one of the selected security types from this level." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2968 +msgid "Exclude servers with one of the selected transports from this level." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9523 +msgid "Exclude traffic types" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3470 +msgid "Exclude URLTest / Priority group" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9497 +msgid "Excluded devices" +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderSections.ts:131 msgid "Expires" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9061 +msgid "Expose this section as a local HTTP+SOCKS proxy" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5630 +msgid "External nfqws config files bypass Tachyon queue management and explicit validation." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6075 +msgid "External nfqws2 config files bypass Tachyon queue management and explicit validation." +msgstr "" + #: src/tachyon/tabs/diagnostic/initController.ts:1015 msgid "Failed to apply fix" msgstr "" @@ -608,17 +1509,25 @@ msgstr "" msgid "Failed to generate bug report" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:208 -msgid "Failed to parse target list." +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8085 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8094 +msgid "Failed to generate WARP config:" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8246 +msgid "Failed to parse file:" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8148 +msgid "Failed to parse WARP config:" msgstr "" #: src/tachyon/tabs/diagnostic/partials/renderAiChatModal.ts:106 msgid "Failed to receive response from AI service." msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:190 -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:821 -msgid "Failed to run service check." +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:417 +msgid "Failed to reset settings" msgstr "" #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:405 @@ -637,6 +1546,22 @@ msgstr "" msgid "Failed to save Smart Detect settings" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1699 +msgid "Failed to start bot" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:341 +msgid "Failed to start watchdog" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1713 +msgid "Failed to stop bot" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:355 +msgid "Failed to stop watchdog" +msgstr "" + #: src/tachyon/tabs/dashboard/initController.ts:309 #: src/tachyon/tabs/dashboard/initController.ts:310 #: src/tachyon/tabs/dashboard/initController.ts:329 @@ -659,6 +1584,11 @@ msgstr "" msgid "FakeIP works; public IP comparison is inconclusive" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1457 +msgid "Faster DNS health monitoring than the default cycle. Switches bootstrap DNS on failure." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3159 #: src/tachyon/tabs/dashboard/initController.ts:1249 msgid "Faster server search interval" msgstr "" @@ -671,13 +1601,12 @@ msgstr "" msgid "Fetching release & commit metadata..." msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:127 -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:171 -msgid "Fetching service targets..." +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3312 +msgid "Filter the servers that will be displayed on the dashboard." msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:407 -msgid "Filter by service:" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9243 +msgid "Finland (fi)" msgstr "" #: src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:136 @@ -688,23 +1617,94 @@ msgstr "" msgid "Fix applied" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3585 +msgid "Fix the highlighted fields and save again." +msgstr "" + #: src/tachyon/tabs/diagnostic/initController.ts:743 #: src/tachyon/tabs/diagnostic/initController.ts:1006 msgid "Fixed" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9486 +msgid "Forced device routing" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1291 +msgid "Forces sing-box to tunnel DNS requests via DoQ with Encrypted Client Hello (ECH) for SNI hiding." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9242 +msgid "France (fr)" +msgstr "" + #: src/tachyon/tabs/diagnostic/partials/renderAiChatModal.ts:158 msgid "Full System Diagnostic" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6093 +msgid "Fuzzing is not supported here because Tachyon needs deterministic runtime validation." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1017 +msgid "Game Console IPs" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1007 +msgid "Game Console Optimizer (NAT Type 1)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2480 +msgid "Generate a random 16-character hexadecimal HWID" +msgstr "" + #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:175 msgid "Generate bug report" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2479 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2484 +msgid "Generate HWID" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2456 +msgid "Generate HWID from router hardware information for this subscription" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8009 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8047 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8063 +msgid "Generate WARP Config" +msgstr "" + #: src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:89 msgid "Generated inbound" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8142 +msgid "Generated!" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8078 +msgid "Generating…" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9232 +msgid "GeoIP Countries" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9214 +msgid "GeoIP Mode" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10206 +msgid "GeoSite / GeoIP" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9239 +msgid "Germany (de)" +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:729 msgid "GET endpoints are open on LAN. POST endpoints require Authorization: Bearer ." msgstr "" @@ -725,14 +1725,63 @@ msgstr "" msgid "Hello! I am Tachyon AI Assistant. How can I help you today? Ask me about domain blocks, diagnostics, or router settings." msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2565 +msgid "Hide cascade connection nodes" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2554 +msgid "Hide individual nodes that are already included in imported subscription URLTest groups" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2566 +msgid "Hide intermediate nodes used as detours by other subscription nodes" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3408 +msgid "Hide selected servers." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3471 +msgid "Hide servers from selected groups without repeating their filtering criteria." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3400 +msgid "Hide servers from the specified countries." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3416 +msgid "Hide servers whose names match the expression." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3363 +msgid "Hide servers with one of the selected protocols." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3367 +msgid "Hide servers with one of the selected security types." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3364 +msgid "Hide servers with one of the selected transports." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2553 +msgid "Hide URLTest group nodes" +msgstr "" + #: src/partials/modal/renderModal.ts:310 msgid "Hide values" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3123 #: src/tachyon/tabs/dashboard/initController.ts:1235 msgid "Higher-level check interval" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:686 +msgid "Higher-priority DNS Check" +msgstr "" + #: src/tachyon/tabs/diagnostic/initController.ts:1122 msgid "History" msgstr "" @@ -742,7 +1791,48 @@ msgstr "" msgid "Host" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:455 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4264 +msgid "Hosts" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7985 +msgid "Hosts Lists Update Interval" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1483 +msgid "How many hours of metrics to keep (default 24)." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3124 +msgid "How often higher priority levels are checked while a lower level is active" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3100 +msgid "How often the currently selected server is checked" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1463 +msgid "How often to check DNS health in seconds (default 60)." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1439 +msgid "How often to check proxy health in seconds (fast tier, default 30)." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1805 +msgid "How often to check Telegram for new messages (default: 5)." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:678 +msgid "How often to check the active DNS servers." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:687 +msgid "How often to check whether a higher-priority DNS server has recovered." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9530 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9549 msgid "HTTP" msgstr "" @@ -754,10 +1844,106 @@ msgstr "" msgid "HTTP REST API for external AI agents (Claude, GPT, Open-WebUI) served at /cgi-bin/tachyon-agent/" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2464 +msgid "HWID" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2675 #: src/tachyon/tabs/dashboard/initController.ts:1110 msgid "Idle timeout" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1504 +msgid "If one health check fails with an error, continue running other checks instead of stopping." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7577 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7590 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7640 +msgid "Import" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7637 +msgid "Import (%d records)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8164 +msgid "Import AmneziaWG settings from .conf file" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7691 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7824 +msgid "Import Hosts File" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2544 +msgid "Import subscription URLTest groups" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2545 +msgid "Import URLTest groups returned by this subscription provider" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2730 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2939 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3335 +msgid "Include by proxy parameters" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2782 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2995 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3391 +msgid "Include by regular expression" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2766 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2979 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3375 +msgid "Include countries" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4076 +msgid "Include IP addresses and subnets" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9220 +msgid "Include selected countries" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2774 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2987 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3383 +msgid "Include servers" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8401 +msgid "Init Packet Magic Header (S1)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8403 +msgid "Init Packet Magic Header (S3)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8409 +msgid "Init Packet Payload (I1)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8410 +msgid "Init Packet Payload (I2)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8411 +msgid "Init Packet Payload (I3)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8412 +msgid "Init Packet Payload (I4)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8413 +msgid "Init Packet Payload (I5)" +msgstr "" + #: src/tachyon/tabs/updates/initController.ts:917 #: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:405 msgid "Install" @@ -776,15 +1962,41 @@ msgstr "" msgid "Installed version is newer than release" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:897 +msgid "Interface Monitoring" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:931 +msgid "Interface Monitoring Delay" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:898 +msgid "Interface monitoring for Bad WAN" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2689 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3175 #: src/tachyon/tabs/dashboard/initController.ts:1112 #: src/tachyon/tabs/dashboard/initController.ts:1255 msgid "Interrupt connections" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3176 +msgid "Interrupt connections when priority failover switches server" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2690 +msgid "Interrupt connections when URLTest switches the selected server" +msgstr "" + #: src/tachyon/tabs/dashboard/initController.ts:1108 msgid "Interval" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7456 +msgid "Invalid ByeDPI strategy" +msgstr "" + #: src/validators/validateSubnet.ts:25 msgid "Invalid CIDR prefix" msgstr "" @@ -797,6 +2009,7 @@ msgstr "" msgid "Invalid DNS server port" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5303 #: src/validators/validateDomain.ts:67 #: src/validators/validateDomain.ts:73 msgid "Invalid domain address" @@ -871,14 +2084,27 @@ msgstr "" msgid "Invalid JSON format" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7754 +msgid "Invalid line: \"%s\". Use: domain ip or ip domain" +msgstr "" + #: src/validators/validatePath.ts:22 msgid "Invalid path format. Path must start with \"/\" and contain valid characters" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9094 #: src/validators/validateShadowsocksUrl.ts:91 msgid "Invalid port number. Must be between 1 and 65535" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5452 +msgid "Invalid port or range. Use 80 or 1000-2000" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4678 +msgid "Invalid regular expression" +msgstr "" + #: src/validators/validateShadowsocksUrl.ts:38 msgid "Invalid Shadowsocks URL: decoded credentials must contain method:password" msgstr "" @@ -1046,6 +2272,26 @@ msgstr "" msgid "Invalid VMess URL: parsing failed" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10203 +msgid "IP Addresses (IP CIDR)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9311 +msgid "IPs" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:768 +msgid "IPv4 only" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:770 +msgid "IPv6 only" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:996 +msgid "Isolate BitTorrent traffic and force it direct to prevent VPN bans" +msgstr "" + #: src/tachyon/tabs/diagnostic/initController.ts:739 msgid "Issues" msgstr "" @@ -1055,6 +2301,17 @@ msgstr "" msgid "Issues detected" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9247 +msgid "Japan (jp)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1082 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4000 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4266 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8859 +msgid "JSON outbound" +msgstr "" + #: src/validators/validateOutboundJson.ts:50 msgid "JSON outbound cannot be empty" msgstr "" @@ -1071,15 +2328,60 @@ msgstr "" msgid "JSON outbound must contain a non-empty type field" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4024 +msgid "JSON outbound settings" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8400 +msgid "Junk Max Size (Jmax)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8399 +msgid "Junk Min Size (Jmin)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8398 +msgid "Junk Packet Count (Jc)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9250 +msgid "Kazakhstan (kz)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3185 +msgid "Keep Priority before latency-sorted servers" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2699 +msgid "Keep URLTest before latency-sorted servers" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:757 #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:484 msgid "Keeps FakeIP cache persistent across reboots and pre-resolves popular blocked domains on startup so first-visit latency is 0 ms." msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8592 +msgid "Key" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4688 +msgid "Keyword must not contain spaces or commas" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1382 +msgid "Language for AI Doctor diagnosis responses" +msgstr "" + #: src/tachyon/methods/shell/index.ts:480 #: src/tachyon/methods/shell/index.ts:501 msgid "Latency test failed" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1140 +msgid "Latency test URL" +msgstr "" + #: src/tachyon/tabs/updates/initController.ts:344 #: src/tachyon/tabs/updates/initController.ts:1275 msgid "Latest version is installed" @@ -1089,18 +2391,60 @@ msgstr "" msgid "Latest version:" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2510 +msgid "Leave empty to omit this header" +msgstr "" + #: src/tachyon/tabs/dashboard/initController.ts:1191 msgid "Level" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2893 +msgid "Level name" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7157 +msgid "List must be an HTTP(S) URL or a local .lst path" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1585 +msgid "List of domains automatically detected and the section they were added to. To edit or remove them, open the routing rules of the respective section." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1044 +msgid "List Update Frequency" +msgstr "" + #: src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:125 msgid "Listening port" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1360 #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:821 msgid "LM Studio (Local PC / Server)" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8215 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8224 +msgid "Load .conf" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8163 +msgid "Load .conf config" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7550 +msgid "Load Current Records" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7547 +msgid "Loaded %d current record(s)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8290 +msgid "Loaded!" +msgstr "" + #: src/tachyon/tabs/monitoring/initController.ts:988 #: src/tachyon/tabs/monitoring/render.ts:101 msgid "Loading connections" @@ -1118,6 +2462,14 @@ msgstr "" msgid "Loading…" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8312 +msgid "Local Address" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1262 +msgid "Log Level" +msgstr "" + #: src/tachyon/helpers/singBoxVariant.ts:62 msgid "lx" msgstr "" @@ -1126,14 +2478,86 @@ msgstr "" msgid "Main DNS" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:609 +msgid "Main DNS server. If multiple servers are selected, a timeout switches to a backup." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8640 +msgid "MASQUE Access Token" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8628 +msgid "MASQUE Account ID" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8616 +msgid "MASQUE Private Key" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9312 +msgid "Match destination IPs or subnets" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9507 +msgid "Match destination ports. Use a single port or a range" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10064 +msgid "Match Found" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9515 +msgid "Match traffic by packet DSCP mark (assigned in Windows via Policy-Based QoS). Examples: 46 (EF), 0x2e, 34 (AF41)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1531 +msgid "Max reconnects per hour before alert (default 10)." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:696 +msgid "Maximum time to wait for example.com to resolve during a DNS health check." +msgstr "" + #: src/tachyon/tabs/dashboard/initController.ts:1656 msgid "Memory Usage" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1482 +msgid "Metrics Retention (hours)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2649 +msgid "Minimum latency difference in milliseconds that triggers switching to a faster server." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9152 +msgid "Mixed Proxy Password" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9075 +msgid "Mixed Proxy Port" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9116 +msgid "Mixed Proxy Username" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1369 +msgid "Model name to use. Leave empty to use default (gpt-4o-mini / claude-3-5-haiku / deepseek-chat / llama3:latest)." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:907 +msgid "Monitored Interfaces" +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:633 msgid "Monitoring & Analytics" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1525 +msgid "Monitors sing-box reconnect frequency. Alerts if too many reconnects per hour." +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:1004 msgid "Move down" msgstr "" @@ -1142,6 +2566,49 @@ msgstr "" msgid "Move up" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8375 +msgid "MTU" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1795 +msgid "Must be a comma-separated list of numeric IDs" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2074 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2089 +msgid "Must be a number in the range of 0 - 10000" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2619 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3076 +msgid "Name displayed on the dashboard" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2894 +msgid "Name shown in the priority level list" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9240 +msgid "Netherlands (nl)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:580 +msgid "Network & Interfaces" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1889 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8818 +msgid "Network Interface" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3775 +msgid "Network interface settings" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7631 +msgid "New domains:" +msgstr "" + #: src/tachyon/services/core.service.ts:38 msgid "New version %s is available for %s" msgstr "" @@ -1156,6 +2623,22 @@ msgstr "" msgid "NFQUEUE range overlaps with another rule" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7374 +msgid "NFQWS Strategy" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5760 +msgid "NFQWS strategy cannot be empty" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7407 +msgid "NFQWS2 Strategy" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6234 +msgid "NFQWS2 strategy cannot be empty" +msgstr "" + #: src/tachyon/tabs/dashboard/initController.ts:812 #: src/tachyon/tabs/dashboard/initController.ts:816 #: src/tachyon/tabs/dashboard/initController.ts:892 @@ -1171,6 +2654,7 @@ msgstr "" msgid "No active connections" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:465 #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:1112 msgid "No active routing sections found." msgstr "" @@ -1183,14 +2667,26 @@ msgstr "" msgid "No conflict detected" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10113 +msgid "No Custom Rules Matched" +msgstr "" + #: src/tachyon/tabs/diagnostic/initController.ts:1042 msgid "No diagnostic history available yet." msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1600 +msgid "No domains detected yet" +msgstr "" + #: src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:187 msgid "No enabled server inbounds configured" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7554 +msgid "No file selected" +msgstr "" + #: src/tachyon/tabs/diagnostic/initController.ts:746 msgid "No issues found" msgstr "" @@ -1219,10 +2715,6 @@ msgstr "" msgid "No rules use Zapret2" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:216 -msgid "No targets found in section configs." -msgstr "" - #: src/tachyon/tabs/dashboard/initController.ts:1070 msgid "Node list is empty" msgstr "" @@ -1282,15 +2774,98 @@ msgstr "" msgid "Not running" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10179 +msgid "Not set" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1877 +msgid "Notify on Certificate Warnings" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1825 +msgid "Notify on Core Crashes" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1890 +msgid "Notify on DNS Leaks" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1851 +msgid "Notify on Server Switches" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1838 +msgid "Notify on Service Restarts" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1864 +msgid "Notify on Subscription Updates" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:707 +msgid "Number of consecutive failed checks required before switching DNS servers." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1445 +msgid "Number of consecutive failures before restarting (default 3)." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:721 +msgid "Number of consecutive successful checks required before returning to a higher-priority DNS server." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1359 #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:813 msgid "Ollama (Local PC / Server)" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7721 +msgid "One record per line: example.com 192.168.1.100 or 192.168.1.100 example.com. Lines starting with # are ignored." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2980 +msgid "Only from the specified countries." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1960 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1968 +msgid "Only selected" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1961 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1970 +msgid "Only selected except exclusions" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2996 +msgid "Only servers whose names match the expression." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2947 +msgid "Only servers with one of the selected protocols." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2951 +msgid "Only servers with one of the selected security types." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2948 +msgid "Only servers with one of the selected transports." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2988 +msgid "Only the specified servers." +msgstr "" + #: src/tachyon/tabs/updates/initController.ts:1251 #: src/tachyon/tabs/updates/initController.ts:1290 msgid "Open" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3968 +msgid "Open priority settings and enter a display name" +msgstr "" + #: src/tachyon/tabs/diagnostic/partials/renderWikiDisclaimer.ts:31 msgid "Open Project Page" msgstr "" @@ -1314,26 +2889,112 @@ msgstr "" msgid "Optimization" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1399 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6836 +msgid "Option \"%s\" contains an invalid input value." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8604 +msgid "Optional — leave empty for default" +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:901 msgid "Optional for local LLM" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8734 +msgid "Optional tls-auth or tls-crypt key" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5838 +msgid "Optional values must be attached with '=' here; a separate token would be ignored by nfqws." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6312 +msgid "Optional values must be attached with '=' here; a separate token would be ignored by nfqws2." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7696 +msgid "Or paste hosts file content:" +msgstr "" + #: src/validators/validateOutboundJson.ts:111 msgid "outbounds must be a non-empty array of strings" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:844 +msgid "Output Network Interface" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2493 +msgid "Override the default OpenWrt device headers for this subscription" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7705 +msgid "Overwrite existing records (if unchecked, merge with existing records)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:995 +msgid "P2P Leak Protection" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7628 +msgid "Parsed records:" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8483 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8571 +msgid "Password" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9178 +msgid "Password cannot be empty" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7573 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7588 +msgid "Paste content or upload a file to preview imported DNS records." +msgstr "" + #: src/validators/validatePath.ts:7 msgid "Path cannot be empty" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1243 +msgid "Path must be absolute (start with /)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1252 +msgid "Path must contain at least one directory (like /tmp/cache.db)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1247 +msgid "Path must end with cache.db" +msgstr "" + #: src/tachyon/tabs/monitoring/initController.ts:737 #: src/tachyon/tabs/monitoring/render.ts:80 #: src/tachyon/tabs/monitoring/render.ts:81 msgid "Pause updates" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8335 +msgid "Peer Public Key" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8698 +msgid "PEM-encoded CA certificate" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8710 +msgid "PEM-encoded client certificate" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8722 +msgid "PEM-encoded client private key" +msgstr "" + #: src/tachyon/tabs/diagnostic/diagnostic.store.ts:63 -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:75 msgid "Pending" msgstr "" @@ -1342,14 +3003,97 @@ msgstr "" msgid "Per-Device Routing" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3149 +msgid "Periodically check the current level and switch to a faster server even when the current one works." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1433 +msgid "Periodically checks if the proxy is responding. Restarts Tachyon after consecutive failures." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8382 +msgid "Persistent Keepalive" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1510 +msgid "Persistent Smart Detect" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2698 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3184 +msgid "Pin on dashboard" +msgstr "" + #: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:212 msgid "Please wait, operation is running..." msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1804 +msgid "Polling Interval (seconds)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1817 +msgid "Polling interval must be at least 1 second" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9086 +msgid "Port cannot be empty" +msgstr "" + #: src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:19 msgid "Port conflict" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9076 +msgid "Port for the local mixed proxy of this section" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5459 +msgid "Port must be between 1 and 65535" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5463 +msgid "Port range start must be less than or equal to end" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9506 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10208 +msgid "Ports" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1081 +msgid "Pre-download all preset lists" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8526 +msgid "Pre-shared key" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:767 +msgid "Prefer IPv4" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:769 +msgid "Prefer IPv6" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2537 +msgid "Prefix text" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8369 +msgid "Preshared Key" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1470 +msgid "Prevents multiple reload_firewall calls within 120 seconds to avoid connection drops." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8945 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10103 +msgid "Priority" +msgstr "" + #: src/tachyon/tabs/dashboard/initController.ts:1274 #: src/tachyon/tabs/dashboard/partials/renderSections.ts:514 #: src/tachyon/tabs/dashboard/partials/renderSections.ts:515 @@ -1360,22 +3104,80 @@ msgstr "" msgid "Priority details are unavailable" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3853 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3854 +msgid "Priority level settings" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3193 +msgid "Priority levels" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3913 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3918 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3919 +msgid "Priority settings" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8324 +msgid "Private Key" +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:613 msgid "Protection" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:29 -msgid "Proxy" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2030 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8663 +msgid "Protocol" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1444 +msgid "Proxy Fail Threshold" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1438 +msgid "Proxy Health Check Interval (s)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1450 +msgid "Proxy Health Check URL" msgstr "" #: src/tachyon/tabs/dashboard/initController.ts:807 msgid "Proxy link is unavailable" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1901 +msgid "Proxy Section for Bot" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8457 +msgid "Proxy to use for WARP API registration (api.cloudflareclient.com)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8526 +msgid "PSK" +msgstr "" + #: src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:40 msgid "Public host" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9527 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9546 +msgid "QUIC (HTTP/3)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9533 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9552 +msgid "RDP" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8296 +msgid "Read error" +msgstr "" + #: src/tachyon/tabs/updates/initController.ts:1271 msgid "Rebuilt release" msgstr "" @@ -1384,10 +3186,30 @@ msgstr "" msgid "Recommended Quick Fixes:" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1530 +msgid "Reconnect Threshold" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1477 +msgid "Records proxy/DNS latency and health status in hourly buckets for analysis." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7779 +msgid "Records: %d" +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderSections.ts:132 msgid "Refill" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8456 +msgid "Registration Detour" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5345 +msgid "Regular expression must not contain spaces or commas" +msgstr "" + #: src/tachyon/tabs/updates/initController.ts:1031 msgid "Reinstall" msgstr "" @@ -1396,14 +3218,31 @@ msgstr "" msgid "Reloading page in" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7838 +msgid "Remote Hosts Lists" +msgstr "" + #: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:365 msgid "Removal completed successfully!" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7918 #: src/tachyon/tabs/updates/initController.ts:987 msgid "Remove" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3004 +msgid "Remove servers from the specified countries from this level." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3020 +msgid "Remove servers whose names match the expression from this level." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3012 +msgid "Remove the specified servers from this level." +msgstr "" + #: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:111 msgid "Removing" msgstr "" @@ -1412,8 +3251,54 @@ msgstr "" msgid "Removing binaries & package files..." msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:431 -msgid "Resolved IP / DNS" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9102 +msgid "Require a username and password for the local mixed proxy" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:442 +msgid "Reset" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:389 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:424 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1300 +msgid "Reset Settings" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:399 +msgid "Resetting…" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9189 +msgid "Resolve domain names before routing so sing-box can use real destination IPs." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9188 +msgid "Resolve real IP for routing" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5633 +msgid "Resource selection by hostname inside nfqws is not supported here; sing-box selects resources before NFQUEUE." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6078 +msgid "Resource selection by hostname inside nfqws2 is not supported here; sing-box selects resources before NFQUEUE." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5636 +msgid "Resource selection by IP or CIDR inside nfqws is not supported here; sing-box selects resources before NFQUEUE." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6081 +msgid "Resource selection by IP or CIDR inside nfqws2 is not supported here; sing-box selects resources before NFQUEUE." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8402 +msgid "Response Packet Magic Header (S2)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8404 +msgid "Response Packet Magic Header (S4)" msgstr "" #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:60 @@ -1424,6 +3309,10 @@ msgstr "" msgid "Restarts" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1301 +msgid "Restores the Tachyon factory defaults: all rules, subscriptions, custom DNS servers and other options will be lost." +msgstr "" + #: src/tachyon/tabs/monitoring/initController.ts:737 msgid "Resume updates" msgstr "" @@ -1433,8 +3322,20 @@ msgstr "" msgid "Route" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:426 -msgid "Route Type" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1902 +msgid "Route bot API requests through this section. Leave empty to use the default mixed proxy." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:779 +msgid "Route main DNS requests through the selected section." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7346 +msgid "Route requests to this DNS server through another section." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10008 +msgid "Routing Rule Tracer" msgstr "" #: src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:103 @@ -1443,6 +3344,27 @@ msgstr "" msgid "Routing rules" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10074 +msgid "Rule" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7148 +msgid "Rule set must be an HTTP(S) URL or a local .srs / .json path" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4083 +msgid "Rule set settings" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9374 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9403 +msgid "Rule sets" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10204 +msgid "Rule Sets (.srs / .json)" +msgstr "" + #: src/tachyon/tabs/diagnostic/checks/runNftCheck.ts:79 msgid "Rules mangle counters" msgstr "" @@ -1479,12 +3401,20 @@ msgstr "" msgid "Run doctor repair" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:301 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1663 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1664 #: src/tachyon/methods/custom/getDashboardSections.ts:1567 #: src/tachyon/tabs/dashboard/partials/renderSections.ts:581 #: src/tachyon/tabs/diagnostic/checks/runSectionsCheck.ts:135 msgid "Running" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9237 +msgid "Russia (ru)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3660 #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:1151 msgid "Save" msgstr "" @@ -1508,22 +3438,136 @@ msgstr "" msgid "Search" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:379 -msgid "Search domain or service..." +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:972 +msgid "Secret key for authenticating remote access to YACD when WAN access is enabled." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1328 +msgid "Secret token for authorizing WRITE operations (POST/PUT) on /cgi-bin/tachyon-agent/. Leave empty if auth is not required." msgstr "" #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:700 msgid "Secret token for WRITE requests" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10198 +msgid "Section action" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7253 +msgid "Section name" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10213 +msgid "Section Rules Content" +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:1078 msgid "Section test order (checked = active, drag rows with △▽):" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2042 +msgid "Security" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2436 +msgid "Select a common client profile or enter a custom User-Agent" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8233 +msgid "Select a file with .conf extension" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8824 +msgid "Select a network interface" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9322 +msgid "Select a predefined domain list" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:87 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7367 +msgid "Select a section" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2413 +msgid "Select a section for downloading this subscription" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9023 +msgid "Select a transit section" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1353 +msgid "Select AI LLM provider for diagnostics" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1940 +msgid "Select an existing network interface" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3295 +msgid "Select an existing URLTest or Priority group" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9036 +msgid "Select an intermediate section" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1557 +msgid "Select and order the sections through which blocked domains are tested. Checked sections are tried top-to-bottom." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:593 +msgid "Select DNS protocol to use" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8819 +msgid "Select network interface for VPN connection" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9233 +msgid "Select one or more country ISO codes (e.g. ru, us, de, nl, fr, fi, se, tr, cn, jp, sg, by, kz, ua)." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2449 +msgid "Select or enter a User-Agent" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1226 +msgid "Select or enter path for sing-box cache file. Change this ONLY if you know what you are doing" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1018 +msgid "Select or enter the IP addresses of your game consoles." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1212 +msgid "Select path for sing-box config file. Change this ONLY if you know what you are doing" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3137 #: src/tachyon/tabs/dashboard/initController.ts:1239 msgid "Select the fastest node" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1263 +msgid "Select the log level for sing-box" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:797 +msgid "Select the network interface from which the traffic will originate" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:845 +msgid "Select the network interface to which the traffic will originate" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:908 +msgid "Select the WAN interfaces to be monitored" +msgstr "" + #: src/tachyon/tabs/dashboard/initController.ts:1104 #: src/tachyon/tabs/dashboard/initController.ts:1225 msgid "Selected" @@ -1537,6 +3581,56 @@ msgstr "" msgid "Send" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1891 +msgid "Send a Telegram notification if a potential DNS leak is detected." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1826 +msgid "Send a Telegram notification if sing-box or nftables rules crash and get auto-restored." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1878 +msgid "Send a Telegram notification if SSL/TLS certificates are close to expiration." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1839 +msgid "Send a Telegram notification if the Tachyon service is restarted by the watchdog." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1852 +msgid "Send a Telegram notification when a URLTest group switches to a new server." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1865 +msgid "Send a Telegram notification when proxy subscriptions are successfully updated." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8346 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8471 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8514 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8545 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8580 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8650 +msgid "Server Address" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2707 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2913 +msgid "Server filtering" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8887 +msgid "Server group for automatic lowest-latency selection" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8946 +msgid "Server group for priority failover" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8495 +msgid "Server Name Indication — leave empty to use server address" +msgstr "" + #: src/validators/validateOutboundJson.ts:94 msgid "Server outbound must contain a non-empty server field" msgstr "" @@ -1545,6 +3639,15 @@ msgstr "" msgid "Server outbound must contain a numeric server_port from 1 to 65535" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8357 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8477 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8520 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8551 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8586 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8656 +msgid "Server Port" +msgstr "" + #: src/tachyon/tabs/diagnostic/partials/renderAiChatModal.ts:135 msgid "Server unavailable" msgstr "" @@ -1553,8 +3656,8 @@ msgstr "" msgid "server_port must be a number from 1 to 65535" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:421 -msgid "Service / Target" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3311 +msgid "Servers on dashboard" msgstr "" #: src/tachyon/methods/shell/index.ts:401 @@ -1563,19 +3666,68 @@ msgstr "" msgid "Service action failed" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:163 -msgid "Service Availability Check" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9325 +msgid "Service list" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:581 +msgid "Services & Access" msgstr "" #: src/tachyon/tabs/dashboard/initController.ts:1666 msgid "Services info" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1143 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7223 +msgid "Settings" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:411 +msgid "Settings have been reset to defaults. The page will reload." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2520 +msgid "Show metadata on dashboard" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3384 +msgid "Show only selected servers." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3343 +msgid "Show only servers with one of the selected protocols." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3349 +msgid "Show only servers with one of the selected security types." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3346 +msgid "Show only servers with one of the selected transports." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3457 +msgid "Show servers from selected groups without repeating their filtering criteria." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3376 +msgid "Show servers only from the specified countries." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3392 +msgid "Show servers whose names match the expression." +msgstr "" + #: src/tachyon/tabs/diagnostic/initController.ts:1194 #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:166 msgid "Show sing-box config" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2521 +msgid "Show subscription metadata for this source on the dashboard" +msgstr "" + #: src/tachyon/tabs/diagnostic/checks/runSingBoxCheck.ts:77 msgid "Sing-box autostart disabled" msgstr "" @@ -1608,6 +3760,26 @@ msgstr "" msgid "Sing-box version is compatible (newer than 1.12.4)" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9248 +msgid "Singapore (sg)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7701 +msgid "Skip loopback & local entries (127.0.0.1, ::1, 0.0.0.0, localhost)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8506 +msgid "Skip TLS certificate verification (not recommended)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7630 +msgid "Skipped comments/invalid:" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7629 +msgid "Skipped loopback:" +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:1048 msgid "Smart Detect" msgstr "" @@ -1616,11 +3788,41 @@ msgstr "" msgid "Smart Detect settings saved" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8533 +msgid "Snell Version" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7801 +msgid "Sort Alphabetically" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9048 +msgid "Sort by latency" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9049 +msgid "Sorts servers in this section by lowest latency in the dashboard." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10081 #: src/tachyon/tabs/monitoring/initController.ts:883 #: src/tachyon/tabs/monitoring/initController.ts:933 msgid "Source" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10207 +msgid "Source Devices" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:796 +msgid "Source Network Interface" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9532 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9551 +msgid "SSH" +msgstr "" + #: src/tachyon/tabs/diagnostic/checks/runByedpiCheck.ts:122 msgid "Standalone ByeDPI autostart is enabled" msgstr "" @@ -1665,6 +3867,14 @@ msgstr "" msgid "Standalone Zapret2 service is inactive" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:285 +msgid "Start" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1645 +msgid "Start bot" +msgstr "" + #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:80 msgid "Start Tachyon" msgstr "" @@ -1673,16 +3883,34 @@ msgstr "" msgid "Start Watchdog first" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:334 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1692 +msgid "Starting…" +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:449 #: src/tachyon/tabs/dashboard/partials/renderSections.ts:633 -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:463 msgid "Status" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:292 +msgid "Stop" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1652 +msgid "Stop bot" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2676 +msgid "Stop checking when URLTest group is not used. Use sing-box duration format like 1d, 12h or 30m." +msgstr "" + #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:70 msgid "Stop Tachyon" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:307 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1669 #: src/tachyon/methods/custom/getDashboardSections.ts:1571 #: src/tachyon/tabs/dashboard/partials/renderSections.ts:585 #: src/tachyon/tabs/diagnostic/checks/runSectionsCheck.ts:147 @@ -1693,6 +3921,32 @@ msgstr "" msgid "Stopping active services..." msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:348 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1706 +msgid "Stopping…" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1511 +msgid "Store auto-detected domains in /etc instead of /tmp to survive reboots." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1290 +msgid "Strict ECH + DoQ DNS Enforcer" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9528 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9547 +msgid "STUN (P2P Calls)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4077 +msgid "Subnets from the list will be extracted and added to nftables" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2367 +msgid "Subscription auto update" +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderSections.ts:146 msgid "Subscription info:" msgstr "" @@ -1702,10 +3956,34 @@ msgstr "" msgid "Subscription update failed" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2376 +msgid "Subscription update interval" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8770 +msgid "Subscription URL" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3764 +msgid "Subscription URL settings" +msgstr "" + #: src/tachyon/tabs/dashboard/initController.ts:335 msgid "Subscriptions updated" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8144 +msgid "Success" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7688 +msgid "Successfully imported %d DNS record(s)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9244 +msgid "Sweden (se)" +msgstr "" + #: src/tachyon/tabs/dashboard/initController.ts:1653 msgid "System info" msgstr "" @@ -1722,6 +4000,22 @@ msgstr "" msgid "Tachyon Error" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6504 +msgid "Tachyon manages ciadpi pid files itself, so pidfile options are not allowed here." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6501 +msgid "Tachyon manages the ciadpi process lifecycle itself, so daemon mode is not allowed here." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5648 +msgid "Tachyon manages the nfqws process lifecycle itself, so daemon mode is not allowed here." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6099 +msgid "Tachyon manages the nfqws2 process lifecycle itself, so daemon mode is not allowed here." +msgstr "" + #: src/tachyon/tabs/monitoring/initController.ts:977 msgid "Tachyon service is stopped. Start the service to display connections." msgstr "" @@ -1730,6 +4024,10 @@ msgstr "" msgid "Tachyon service is stopped. Start the service to display the dashboard." msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1202 +msgid "Tachyon will not modify your DHCP configuration" +msgstr "" + #: src/tachyon/tabs/diagnostic/checks/runByedpiCheck.ts:91 msgid "Tachyon-managed ciadpi runtime has restarted" msgstr "" @@ -1774,8 +4072,8 @@ msgstr "" msgid "Tailscale endpoint" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:439 -msgid "TCP" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1764 +msgid "Telegram Bot Token" msgstr "" #: src/tachyon/tabs/dashboard/partials/renderSections.ts:241 @@ -1784,12 +4082,46 @@ msgstr "" msgid "Test latency" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2775 +msgid "Test only selected servers." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2735 +msgid "Test only servers with one of the selected protocols." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2741 +msgid "Test only servers with one of the selected security types." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2738 +msgid "Test only servers with one of the selected transports." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2767 +msgid "Test servers only from the specified countries." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2783 +msgid "Test servers whose names match the expression." +msgstr "" + #: src/tachyon/tabs/dashboard/initController.ts:1107 msgid "Testing URL" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:85 -msgid "Testing..." +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5645 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6090 +msgid "The desync fwmark is managed by Tachyon for loop prevention and must not be overridden here." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5642 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6087 +msgid "The NFQUEUE number is assigned by Tachyon for each rule and must not be overridden here." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9272 +msgid "The rule applies to the domain and all its subdomains. Use full:, keyword:, or regex: prefixes for exact match, keyword match, or regular expression." msgstr "" #: src/tachyon/tabs/diagnostic/checks/runByedpiCheck.ts:78 @@ -1808,25 +4140,93 @@ msgstr "" msgid "Thinking..." msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10265 +msgid "This field is required" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6507 +msgid "This field must start a working ciadpi strategy; help/version options exit immediately and are not allowed here." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5651 +msgid "This field must start a working nfqws strategy; --dry-run exits immediately and is not allowed here." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5654 +msgid "This field must start a working nfqws strategy; --version exits immediately and is not allowed here." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6102 +msgid "This field must start a working nfqws2 strategy; --dry-run exits immediately and is not allowed here." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6105 +msgid "This field must start a working nfqws2 strategy; --version exits immediately and is not allowed here." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5823 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6297 +msgid "This flag does not accept a value." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5854 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6328 +msgid "This option requires a value." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:426 +msgid "This will erase all Tachyon settings and restore the factory defaults. The service will restart. This action cannot be undone." +msgstr "" + #: src/tachyon/tabs/monitoring/initController.ts:874 #: src/tachyon/tabs/monitoring/initController.ts:930 msgid "Time" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:735 +msgid "Time in seconds for DNS record caching (default: 60)" +msgstr "" + #: src/tachyon/helpers/singBoxVariant.ts:64 msgid "tiny" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:447 -msgid "TLS" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9531 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9550 +msgid "TLS / HTTPS" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8733 +msgid "TLS Auth/Crypt Key" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8494 +msgid "TLS SNI" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1773 +msgid "Token is required when the bot is enabled" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2648 #: src/tachyon/tabs/dashboard/initController.ts:1109 msgid "Tolerance" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:325 -msgid "Total Targets" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3194 +msgid "Top level has the highest priority; lower levels are used as fallback" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7627 +msgid "Total lines:" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10012 +msgid "Trace" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10049 +msgid "Tracing routing rules..." msgstr "" #: src/tachyon/tabs/dashboard/initController.ts:1627 @@ -1834,30 +4234,119 @@ msgstr "" msgid "Traffic" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2905 +msgid "Traffic for this level goes directly." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9498 +msgid "Traffic from these IP addresses will never be routed through this section, even if other conditions match." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9524 +msgid "Traffic of specified protocols (e.g. BitTorrent, QUIC, STUN) will bypass this section." +msgstr "" + #: src/tachyon/tabs/dashboard/initController.ts:1640 msgid "Traffic Total" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9542 +msgid "Traffic type filter" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10114 +msgid "Traffic will go through the default route (Direct/Default)." +msgstr "" + #: src/tachyon/tabs/updates/initController.ts:851 msgid "Transient connection error" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6498 +msgid "Transparent proxy mode is incompatible with action=byedpi because Tachyon connects to ciadpi through SOCKS." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2036 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8557 +msgid "Transport" +msgstr "" + #: src/tachyon/tabs/diagnostic/partials/renderWikiDisclaimer.ts:25 msgid "Troubleshooting" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2425 +msgid "Try compatible User-Agent profiles automatically when downloading this subscription" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:746 +msgid "TTL must be a positive number" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:741 +msgid "TTL value cannot be empty" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9245 +msgid "Turkey (tr)" +msgstr "" + #: src/tachyon/tabs/monitoring/initController.ts:868 #: src/tachyon/tabs/monitoring/initController.ts:928 msgid "Type" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:598 +msgid "UDP (Unprotected DNS)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9251 +msgid "Ukraine (ua)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6422 +msgid "Unable to validate the ByeDPI strategy through the backend parser." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5565 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6900 +msgid "Unable to validate the NFQWS strategy through the backend parser." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6010 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6909 +msgid "Unable to validate the NFQWS2 strategy through the backend parser." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3111 #: src/tachyon/tabs/dashboard/initController.ts:1233 msgid "Unavailability timeout" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:112 -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:327 -msgid "Unavailable" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8405 +msgid "Underload Packet Magic Header (H1)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8406 +msgid "Underload Packet Magic Header (H2)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8407 +msgid "Underload Packet Magic Header (H3)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8408 +msgid "Underload Packet Magic Header (H4)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6639 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6688 +msgid "Unexpected ByeDPI strategy argument: %s" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5803 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6277 +msgid "Unexpected standalone token. Use explicit flags such as --name or --name=value." msgstr "" #: src/tachyon/tabs/diagnostic/checks/runByedpiCheck.ts:96 @@ -1872,6 +4361,14 @@ msgstr "" msgid "Unexpected Tachyon-managed nfqws2 runtime is running" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9241 +msgid "United Kingdom (gb)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9238 +msgid "United States (us)" +msgstr "" + #: src/tachyon/helpers/singBoxVariant.ts:37 #: src/tachyon/services/systemInfo.service.ts:10 #: src/tachyon/services/systemInfo.service.ts:12 @@ -1887,10 +4384,22 @@ msgstr "" msgid "unknown" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:328 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1686 #: src/tachyon/methods/custom/getDashboardSections.ts:1573 msgid "Unknown" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6608 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6630 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6681 +msgid "Unknown ByeDPI option: %s" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:616 +msgid "Unknown country" +msgstr "" + #: src/tachyon/api.ts:40 #: src/tachyon/tabs/diagnostic/initController.ts:721 #: src/tachyon/tabs/diagnostic/initController.ts:758 @@ -1899,6 +4408,14 @@ msgstr "" msgid "Unknown error" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5814 +msgid "Unknown NFQWS flag." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6288 +msgid "Unknown NFQWS2 flag." +msgstr "" + #: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:131 msgid "Unpacking & installing binaries..." msgstr "" @@ -1937,6 +4454,18 @@ msgstr "" msgid "Update subscriptions" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2368 +msgid "Update this subscription automatically" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7632 +msgid "Updated/duplicates:" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:582 +msgid "Updates & Downloads" +msgstr "" + #: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:113 msgid "Updating" msgstr "" @@ -1963,6 +4492,26 @@ msgstr "" msgid "URL must use one of the following protocols:" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1451 +msgid "URL to test through the proxy (default: Cloudflare 204)." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3087 +msgid "URL used to check whether a server is alive" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2663 +msgid "URL used to test server latency" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7839 +msgid "URLs of remote hosts files to download and apply. Supports standard hosts format: IP domain." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8886 +msgid "URLTest" +msgstr "" + #: src/tachyon/tabs/dashboard/initController.ts:1131 #: src/tachyon/tabs/dashboard/partials/renderSections.ts:495 #: src/tachyon/tabs/dashboard/partials/renderSections.ts:496 @@ -1973,10 +4522,60 @@ msgstr "" msgid "URLTest details are unavailable" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3803 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3804 +msgid "URLTest settings" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1490 +msgid "Use 3-tier check intervals: fast (15s), normal (120s), slow (300s) instead of a single interval." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8985 +msgid "Use another section as an intermediate hop to connect to servers in this section. Does not apply to network interfaces or JSON outbounds." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:252 +msgid "Use sing-box duration format like 10s, 1m or 2m30s" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1045 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1067 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1074 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1105 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1133 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2377 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2637 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3160 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4722 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4729 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4736 +msgid "Use sing-box duration format like 1d, 12h or 30m" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7986 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7997 +msgid "Use sing-box duration format like 1d, 12h or 6h" +msgstr "" + #: src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:25 msgid "Used by" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2435 +msgid "User-Agent" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8565 +msgid "Username" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9142 +msgid "Username cannot be empty" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5338 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5351 #: src/validators/validateDns.ts:25 #: src/validators/validateDns.ts:29 #: src/validators/validateDomain.ts:57 @@ -1996,11 +4595,39 @@ msgstr "" msgid "Valid" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1497 +msgid "Validates sing-box config before restart to prevent boot loops on broken configs." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4791 +msgid "Validation errors:" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5328 +msgid "Value cannot be empty" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10268 +msgid "Value must not contain control characters" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1977 +msgid "Via country.is" +msgstr "" + #: src/tachyon/tabs/diagnostic/initController.ts:817 #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:157 msgid "View logs" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7254 +msgid "Visible name of this section" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8746 +msgid "vless://, vmess://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links" +msgstr "" + #: src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:70 msgid "WAN" msgstr "" @@ -2009,18 +4636,70 @@ msgstr "" msgid "WAN public IP" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8445 +msgid "WARP Access Token" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8433 +msgid "WARP Account ID" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8144 +msgid "WARP Configuration generated and loaded successfully!" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8421 +msgid "WARP Private Key" +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:446 msgid "Watchdog" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1421 +msgid "Watchdog Status" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1280 +msgid "WebRTC Leak Protection" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7267 +msgid "What Tachyon should do when this section matches" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3138 +msgid "When switching to another level, test every server and select the fastest instead of the first working one." +msgstr "" + #: src/tachyon/tabs/diagnostic/partials/renderAiChatModal.ts:156 msgid "Why Discord fails?" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8617 +msgid "WireGuard private key from your Cloudflare account" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8422 +msgid "WireGuard private key from your Cloudflare WARP account" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:971 +msgid "YACD Secret Key" +msgstr "" + #: src/tachyon/tabs/dashboard/initController.ts:812 msgid "Yes" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:835 +msgid "You can select Output Network Interface, by default autodetect" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5639 +msgid "Zapret hostlist templates are not supported here because Tachyon does not expand them for per-rule NFQWS strategies." +msgstr "" + #: src/tachyon/tabs/diagnostic/checks/runZapretCheck.ts:71 msgid "Zapret package is installed" msgstr "" @@ -2045,6 +4724,10 @@ msgstr "" msgid "Zapret sing-box outbound is not configured" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6084 +msgid "Zapret2 hostlist templates are not supported here because Tachyon does not expand them for per-rule NFQWS2 strategies." +msgstr "" + #: src/tachyon/tabs/diagnostic/checks/runZapret2Check.ts:74 msgid "Zapret2 package is installed" msgstr "" diff --git a/fe-app-tachyon/locales/tachyon.ru.po b/fe-app-tachyon/locales/tachyon.ru.po index e7f25f13..1d0fafff 100644 --- a/fe-app-tachyon/locales/tachyon.ru.po +++ b/fe-app-tachyon/locales/tachyon.ru.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: TACHYON\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-13 08:37+0300\n" -"PO-Revision-Date: 2026-08-13 08:37+0300\n" +"POT-Creation-Date: 2026-08-13 20:17+0300\n" +"PO-Revision-Date: 2026-08-13 20:17+0300\n" "Last-Translator: Dushnilin\n" "Language-Team: none\n" "Language: ru\n" @@ -17,6 +17,27 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +msgid "-- Select --" +msgstr "-- Выбрать --" + +msgid ".lst Lists" +msgstr "Списки .lst" + +msgid "(provider default)" +msgstr "(по умолчанию провайдера)" + +msgid "+ Add JSON outbound" +msgstr "+ Добавить JSON outbound" + +msgid "+ Add level" +msgstr "+ Добавить уровень" + +msgid "+ Add priority" +msgstr "+ Добавить приоритет" + +msgid "+ Add URLTest" +msgstr "+ Добавить URLTest" + msgid "⏹ Stop" msgstr "⏹ Стоп" @@ -26,6 +47,12 @@ msgstr "▶ Старт" msgid "⚙ Advanced Settings" msgstr "⚙ Настройки" +msgid "⚠️ If all Bootstrap DNS fail 3 times, queries will be sent to your ISP's DNS in plaintext. Only use as a last resort to prevent complete internet loss." +msgstr "⚠️ Если все Bootstrap DNS завершатся с ошибкой 3 раза, запросы будут отправлены в DNS вашего провайдера в открытом виде. Используйте только в крайнем случае для предотвращения полной потери интернета." + +msgid "⚠️ If all Main DNS fail 3 times, queries will be sent to your ISP's DNS in plaintext. Only use as a last resort to prevent complete internet loss." +msgstr "⚠️ Если все основные DNS завершатся с ошибкой 3 раза, запросы будут отправлены в DNS вашего провайдера в открытом виде. Используйте только в крайнем случае для предотвращения полной потери интернета." + msgid "✔ Running" msgstr "✔ Работает" @@ -35,6 +62,9 @@ msgstr "✘ Остановлено" msgid "🔑 Generate" msgstr "🔑 Сгенерировать" +msgid "Action" +msgstr "Действие" + msgid "Active" msgstr "Активные" @@ -50,18 +80,63 @@ msgstr "Активные соединения" msgid "Active Main DNS" msgstr "Активный основной DNS" -msgid "Active Routes" -msgstr "" +msgid "Add at least one DNS server" +msgstr "Добавьте как минимум один DNS-сервер" + +msgid "Add prefix to nodes" +msgstr "Добавить префикс к узлам" + +msgid "Add URLs or local paths to .lst lists containing domains and subnets." +msgstr "Добавьте URL или локальные пути к спискам .lst, содержащим домены и подсети." + +msgid "Add URLs or local paths to .lst lists containing domains. IP entries are ignored." +msgstr "Добавьте URL или локальные пути к спискам .lst, содержащим домены. IP-записи игнорируются." + +msgid "Add URLs or local paths to .srs / .json lists. Only domain rules are supported." +msgstr "Добавьте URL или локальные пути к спискам .srs / .json. Поддерживаются только правила доменов." + +msgid "Add URLs or local paths to .srs / .json lists. Subnets are ignored by default." +msgstr "Добавьте URL или локальные пути к спискам .srs / .json. Подсети игнорируются по умолчанию." + +msgid "Add URLTest / Priority group" +msgstr "Добавить группу URLTest / Приоритет" msgid "Additional marking rules found" msgstr "Найдены дополнительные правила маркировки" +msgid "Additionally exclude servers by protocol, transport, and security. Exclude only servers matching the specified parameters." +msgstr "Дополнительно исключать серверы по протоколу, транспорту и безопасности. Исключать только серверы, соответствующие указанным параметрам." + +msgid "Additionally filter servers by protocol, transport, and security. Add only servers matching the specified parameters." +msgstr "Дополнительно фильтровать серверы по протоколу, транспорту и безопасности. Добавлять только серверы, соответствующие указанным параметрам." + +msgid "Additionally hide servers by protocol, transport, and security. Hide servers matching the specified parameters." +msgstr "Дополнительно скрывать серверы по протоколу, транспорту и безопасности. Скрывать серверы, соответствующие указанным параметрам." + +msgid "Additionally show servers by protocol, transport, and security. Add only servers matching the specified parameters." +msgstr "Дополнительно показывать серверы по протоколу, транспорту и безопасности. Показывать только серверы, соответствующие указанным параметрам." + +msgid "Administrator Chat IDs" +msgstr "Chat ID администраторов" + msgid "Advanced self-healing features. Requires Watchdog to be enabled." msgstr "Расширенные функции самовосстановления. Требуется включённый Watchdog." +msgid "Advanced System" +msgstr "Расширенные настройки" + +msgid "AEAD Method" +msgstr "Метод AEAD" + +msgid "AI & Watchdog" +msgstr "ИИ и Watchdog" + msgid "AI Agent REST API (12 Endpoints)" msgstr "HTTP REST API ИИ-агента (12 эндпоинтов)" +msgid "AI Agent REST API Bearer Token" +msgstr "Токен Bearer для REST API ИИ-агента" + msgid "AI API Key" msgstr "API-ключ ИИ" @@ -69,22 +144,22 @@ msgid "AI Chat & Tachyon Assistant" msgstr "ИИ Чат & Ассистент Tachyon" msgid "AI Chat Assistant" -msgstr "" +msgstr "ИИ Чат-ассистент" msgid "AI Doctor (ChatGPT / DeepSeek API)" msgstr "AI Doctor (ChatGPT / DeepSeek API)" msgid "AI Doctor Diagnosis" -msgstr "" +msgstr "Диагностика ИИ-доктора" msgid "AI Doctor failed" -msgstr "" +msgstr "Ошибка ИИ-доктора" msgid "AI Doctor Language" -msgstr "" +msgstr "Язык ИИ-доктора" msgid "AI Model" -msgstr "" +msgstr "Модель ИИ" msgid "AI Provider" msgstr "Провайдер ИИ" @@ -101,54 +176,147 @@ msgstr "Настройки AI Watchdog сохранены. Перезапуст msgid "All" msgstr "Все" +msgid "All except selected" +msgstr "Все кроме выбранных" + +msgid "All remaining except selected" +msgstr "Все остальные кроме выбранных" + +msgid "All remaining servers" +msgstr "Все остальные серверы" + +msgid "All remaining servers means every server not already assigned to a higher-priority level." +msgstr "Все остальные серверы — это все серверы, не назначенные на уровень с более высоким приоритетом." + msgid "All Routes" msgstr "Все маршруты" -msgid "All Services" -msgstr "" +msgid "All servers" +msgstr "Все серверы" + +msgid "All traffic from these IP addresses will be routed through the section unconditionally, ignoring all other conditions." +msgstr "Весь трафик от этих IP-адресов будет маршрутизирован через секцию безусловно, игнорируя все остальные условия." + +msgid "Allow Insecure TLS" +msgstr "Разрешить небезопасный TLS" + +msgid "Allowed domain prefixes are full:, keyword:, and regex:" +msgstr "Допустимые префиксы доменов: full:, keyword:, и regex:" + +msgid "Allows access to YACD from the WAN. Make sure to open the appropriate port in your firewall." +msgstr "Позволяет доступ к YACD из WAN. Убедитесь, что соответствующий порт открыт в файрволе." + +msgid "Allows limiting the list of servers for URLTest" +msgstr "Позволяет ограничить список серверов для URLTest" + +msgid "Allows Tachyon to send diagnostic snapshots to ChatGPT or DeepSeek API for intelligent root-cause analysis and auto-repair recommendations." +msgstr "Позволяет Tachyon отправлять диагностические снимки в ChatGPT или DeepSeek API для умного анализа причин проблем и рекомендаций по исправлению." + +msgid "AmneziaWG config loaded successfully!" +msgstr "Конфигурация AmneziaWG успешно загружена!" + +msgid "AmneziaWG Generator" +msgstr "Генератор AmneziaWG" msgid "Another component action is already running" -msgstr "" +msgstr "Другое действие уже выполняется" + +msgid "API Key for OpenAI (sk-...) or DeepSeek (optional for Ollama / LM Studio)" +msgstr "API-ключ для OpenAI (sk-...) или DeepSeek (опционально для Ollama / LM Studio)" + +msgid "Apply rules of this section only to selected protocols." +msgstr "Применять правила этой секции только к выбранным протоколам." + +msgid "Apply section rules only to the specified local IP addresses" +msgstr "Применять правила секции только к указанным локальным IP-адресам" msgid "Applying changes & reloading services..." msgstr "Применение изменений и перезапуск служб..." -msgid "Cannot save settings" -msgstr "Не удалось сохранить настройки" - msgid "Applying fix" -msgstr "" +msgstr "Применение исправления" msgid "Ask Tachyon AI Assistant a question..." msgstr "Задайте вопрос ИИ-ассистенту..." -msgid "Auto" -msgstr "" +msgid "At least one Admin Chat ID is required" +msgstr "Требуется как минимум один Chat ID администратора" + +msgid "At least one valid domain must be specified." +msgstr "Должен быть указан как минимум один действительный домен." + +msgid "At least one valid IP or subnet must be specified." +msgstr "Должен быть указан как минимум один действительный IP или подсеть." + +msgid "Auth Digest" +msgstr "Auth Digest" msgid "Auto refresh" msgstr "Автообновление" +msgid "Auto-detected domains" +msgstr "Автоопределённые домены" + +msgid "Auto-detected Domains" +msgstr "Автоопределённые домены" + msgid "Auto-detects blocked domains from logs and adds them to the first section where they work via proxy." msgstr "Автоматически определяет заблокированные домены из логов и добавляет их в первую секцию, где они работают через прокси." +msgid "Auto-generate HWID" +msgstr "Авто-генерация HWID" + +msgid "Auto-update Hosts Lists" +msgstr "Автообновление списков Hosts" + +msgid "Automatic component update checks" +msgstr "Автоматическая проверка обновлений компонентов" + +msgid "Automatic User-Agent selection" +msgstr "Автоматический выбор User-Agent" + +msgid "Automatically add text to the name of each server from this subscription for convenient filtering." +msgstr "Автоматически добавлять текст к имени каждого сервера из этой подписки для удобной фильтрации." + +msgid "Automatically check installed components for new versions" +msgstr "Автоматически проверять установленные компоненты на наличие новых версий" + +msgid "Automatically generate a Cloudflare WARP account and configure all AmneziaWG settings." +msgstr "Автоматически создать аккаунт Cloudflare WARP и настроить все параметры AmneziaWG." + +msgid "Automatically increase check intervals when healthy (to 5 min) and decrease on problems (to 120s)." +msgstr "Автоматически увеличивать интервалы проверки при нормальном состоянии (до 5 мин) и уменьшать при проблемах (до 120с)." + msgid "Automatically select the fastest node in the current level" msgstr "Автовыбор самого быстрого узла уровня" -msgid "Available" -msgstr "" +msgid "Automatically update remote hosts lists on schedule" +msgstr "Автоматически обновлять удалённые списки Hosts по расписанию" msgid "Available actions" msgstr "Доступные действия" -msgid "Avg Latency" -msgstr "Ср. задержка" +msgid "Backend validation failed: %s" +msgstr "Ошибка проверки бэкенда: %s" msgid "Bearer Auth Token" msgstr "Токен авторизации (Bearer)" +msgid "Belarus (by)" +msgstr "Беларусь (by)" + +msgid "BitTorrent / P2P" +msgstr "BitTorrent / P2P" + msgid "Bootstrap DNS" msgstr "Bootstrap DNS" +msgid "Bootstrap DNS Servers" +msgstr "Bootstrap DNS-серверы" + +msgid "Bot Status" +msgstr "Статус бота" + msgid "Browser FakeIP check could not be completed" msgstr "Не удалось выполнить проверку FakeIP в браузере" @@ -161,6 +329,24 @@ msgstr "Браузер использует FakeIP" msgid "Bug report downloaded" msgstr "Отчёт об ошибке загружен" +msgid "Built-in rule sets" +msgstr "Встроенные наборы правил" + +msgid "By flag emoji from name" +msgstr "По эмодзи флага из имени" + +msgid "ByeDPI listen address and port are assigned by Tachyon and must not be set in the strategy." +msgstr "Адрес и порт прослушивания ByeDPI назначаются Tachyon и не должны задаваться в стратегии." + +msgid "ByeDPI option does not accept a compact value: %s" +msgstr "Параметр ByeDPI не принимает компактное значение: %s" + +msgid "ByeDPI option does not accept a value: %s" +msgstr "Параметр ByeDPI не принимает значение: %s" + +msgid "ByeDPI option requires a value: %s" +msgstr "Параметр ByeDPI требует значение: %s" + msgid "ByeDPI package is installed" msgstr "Пакет ByeDPI установлен" @@ -179,14 +365,38 @@ msgstr "Outbound ByeDPI в sing-box настроен" msgid "ByeDPI sing-box outbound is not configured" msgstr "Outbound ByeDPI в sing-box не настроен" +msgid "ByeDPI Strategy" +msgstr "Стратегия ByeDPI" + +msgid "ByeDPI strategy cannot be empty" +msgstr "Стратегия ByeDPI не может быть пустой" + +msgid "Bypasses UDP traffic for selected game consoles (PS5/Xbox) to achieve NAT Type 1 / 2 (Full Cone NAT) for P2P matchmaking, while keeping TCP (PSN/Auth) routed through the proxy." +msgstr "Обходит UDP-трафик для выбранных игровых консолей (PS5/Xbox) для достижения NAT Type 1 / 2 (Full Cone NAT) для P2P-матчмейкинга, сохраняя TCP (PSN/Auth) через прокси." + +msgid "CA Certificate" +msgstr "CA-сертификат" + +msgid "Cache all built-in lists and databases even if they are not currently selected in any section. Recommended if you have plenty of storage space or USB drive." +msgstr "Кэшировать все встроенные списки и базы данных, даже если они не выбраны ни в одной секции. Рекомендуется при большом объёме хранилища или USB-накопителе." + +msgid "Cache File Path" +msgstr "Путь к файлу кэша" + +msgid "Cache file path cannot be empty" +msgstr "Путь к файлу кэша не может быть пустым" + +msgid "Cancel" +msgstr "Отмена" + msgid "Cannot receive checks result" msgstr "Не удалось получить результаты проверки" -msgid "Check Again" -msgstr "Проверить снова" +msgid "Cannot save settings" +msgstr "Не удалось сохранить настройки" -msgid "Check All" -msgstr "Проверить все" +msgid "Cascade connection" +msgstr "Каскадное подключение" msgid "Check completed!" msgstr "Проверка завершена!" @@ -194,20 +404,14 @@ msgstr "Проверка завершена!" msgid "Check Connection" msgstr "Проверить подключение" -msgid "Check Domain" -msgstr "" - -msgid "Check domain or IP (e.g. example.com)..." -msgstr "Проверить домен или IP (напр. example.com)..." - msgid "Check interval" msgstr "Интервал проверки" -msgid "Check Mode:" -msgstr "Режим проверки:" - msgid "Check Services" -msgstr "" +msgstr "Проверить сервисы" + +msgid "Check timeout after which the server is considered dead" +msgstr "Таймаут проверки, после которого сервер считается недоступным" msgid "Check update" msgstr "Проверить обновление" @@ -230,6 +434,9 @@ msgstr "Проверяем, пожалуйста подождите" msgid "Checking..." msgstr "Проверка..." +msgid "Checking…" +msgstr "Проверка…" + msgid "checks" msgstr "проверки" @@ -242,12 +449,36 @@ msgstr "Проверки пройдены" msgid "Checks passed with manual DHCP" msgstr "Проверки пройдены с ручным DHCP" +msgid "China (cn)" +msgstr "Китай (cn)" + +msgid "Choose Hosts File..." +msgstr "Выбрать файл Hosts..." + +msgid "Choose whether to route traffic to all destinations except selected countries (Exclude) or only to selected countries (Include)." +msgstr "Выберите, маршрутизировать ли трафик ко всем назначениям кроме выбранных стран (Исключить) или только в выбранные страны (Включить)." + msgid "CIDR must be between 0 and 32 for IPv4 or 0 and 128 for IPv6" msgstr "CIDR должен быть от 0 до 32 для IPv4 или от 0 до 128 для IPv6" +msgid "Cipher" +msgstr "Шифр" + +msgid "Clean Comments" +msgstr "Очистить комментарии" + msgid "Cleaning configuration & reloading..." msgstr "Очистка конфигураций и перезапуск..." +msgid "Clear" +msgstr "Очистить" + +msgid "Client Certificate" +msgstr "Клиентский сертификат" + +msgid "Client Key" +msgstr "Клиентский ключ" + msgid "Close" msgstr "Закрыть" @@ -260,27 +491,63 @@ msgstr "Закрыть подключение" msgid "Closed" msgstr "Закрытые" +msgid "Cloudflare account / device ID" +msgstr "Аккаунт / ID устройства Cloudflare" + +msgid "Cloudflare API access token" +msgstr "Токен доступа Cloudflare API" + +msgid "Cloudflare WARP account / device ID" +msgstr "Аккаунт / ID устройства Cloudflare WARP" + +msgid "Cloudflare WARP API access token" +msgstr "Токен доступа Cloudflare WARP API" + +msgid "Comma-separated list of Telegram user IDs authorized to control the bot." +msgstr "Список Telegram user ID через запятую, авторизованных для управления ботом." + +msgid "Community Lists" +msgstr "Community-списки" + msgid "Comparing versions & fingerprint check..." msgstr "Сравнение версий и проверка целостности..." msgid "Component update available" msgstr "Доступно обновление компонента" +msgid "Component update check interval" +msgstr "Интервал проверки обновлений компонентов" + msgid "compressed" msgstr "compressed" +msgid "Conditions" +msgstr "Условия" + +msgid "Config File Path" +msgstr "Путь к файлу конфигурации" + +msgid "Configure User-Agent in the item settings" +msgstr "Настройте User-Agent в параметрах элемента" + msgid "Conflict" msgstr "Конфликт" msgid "Connect ChatGPT, DeepSeek or local LLM to get automated diagnostic reports and intelligent root-cause analysis." msgstr "Подключите ChatGPT, DeepSeek или локальную модель LLM для получения автоматических диагностических отчётов и умного анализа сетевых проблем." +msgid "Connect through" +msgstr "Подключаться через" + msgid "Connected" msgstr "Подключено" msgid "Connecting to update server..." msgstr "Подключение к серверу обновлений..." +msgid "Connection URL" +msgstr "URL подключения" + msgid "Connections are unavailable" msgstr "Подключения недоступны" @@ -299,8 +566,17 @@ msgstr "Скопировать ссылку прокси" msgid "Could not compare FakeIP and control public IPs" msgstr "Не удалось сравнить публичные IP FakeIP и контрольной проверки" +msgid "Country code (e.g. ru, us, de)" +msgstr "Код страны (напр. ru, us, de)" + msgid "Current Diagnosis" -msgstr "" +msgstr "Текущий диагноз" + +msgid "Current section cannot be used as its own transit section" +msgstr "Текущая секция не может использоваться как собственная транзитная секция" + +msgid "Current section cannot download its own subscription" +msgstr "Текущая секция не может загружать собственную подписку" msgid "Currently unavailable" msgstr "Временно недоступно" @@ -308,21 +584,57 @@ msgstr "Временно недоступно" msgid "Custom API Endpoint URL" msgstr "Пользовательский URL эндпоинта API" -msgid "Custom Domains" -msgstr "" +msgid "Custom device headers" +msgstr "Пользовательские заголовки устройства" + +msgid "Custom DNS Records (Hosts)" +msgstr "Пользовательские DNS-записи (Hosts)" + +msgid "Custom OpenAI-Compatible API (OpenRouter)" +msgstr "Пользовательский OpenAI-совместимый API (OpenRouter)" + +msgid "Custom OpenAI-compatible API endpoint URL (e.g. http://192.168.1.100:11434/v1/chat/completions)" +msgstr "Пользовательский URL эндпоинта OpenAI-совместимого API (напр. http://192.168.1.100:11434/v1/chat/completions)" + +msgid "Custom outbound configurations in JSON format" +msgstr "Пользовательские конфигурации outbound в формате JSON" msgid "Dashboard currently unavailable" msgstr "Дашборд сейчас недоступен" +msgid "Default (auto)" +msgstr "По умолчанию (авто)" + +msgid "Default address for checking server availability and latency. URLTest uses its own address." +msgstr "Адрес по умолчанию для проверки доступности и задержки сервера. URLTest использует свой собственный адрес." + +msgid "Delay in milliseconds before reloading Tachyon after interface UP" +msgstr "Задержка в миллисекундах перед перезагрузкой Tachyon после поднятия интерфейса" + +msgid "Delay value cannot be empty" +msgstr "Значение задержки не может быть пустым" + +msgid "Detect server country" +msgstr "Определять страну сервера" + +msgid "Detects and drops STUN/TURN packets in nftables to prevent real IP leaks via WebRTC." +msgstr "Обнаруживает и отбрасывает пакеты STUN/TURN в nftables для предотвращения утечек реального IP через WebRTC." + msgid "detour must be a non-empty string" msgstr "detour должен быть непустой строкой" +msgid "Device filter" +msgstr "Фильтр устройств" + msgid "Device IPs (one per line):" msgstr "IP устройств (по одному на строку):" msgid "Device IPs saved" msgstr "IP устройств сохранены" +msgid "Device or IP" +msgstr "Устройство или IP" + msgid "Devices listed here are always routed through the assigned section, regardless of global rules." msgstr "Устройства из этого списка всегда маршрутизируются через назначенную секцию, независимо от глобальных правил." @@ -332,27 +644,126 @@ msgstr "DHCP содержит DNS сервер" msgid "DHCP is managed manually" msgstr "DHCP управляется вручную" -msgid "Direct" -msgstr "Напрямую" +msgid "Direct (Default)" +msgstr "Прямое (по умолчанию)" + +msgid "Direct connection" +msgstr "Прямое подключение" msgid "Disable autostart" msgstr "Отключить автостарт" +msgid "Disable QUIC" +msgstr "Отключить QUIC" + +msgid "Disable the QUIC protocol to improve compatibility or fix issues with video streaming" +msgstr "Отключить протокол QUIC для улучшения совместимости или исправления проблем с видео-стримингом" + +msgid "Disabling interception is incompatible with action=zapret2 because Tachyon sends matched traffic through NFQUEUE." +msgstr "Отключение перехвата несовместимо с action=zapret2, потому что Tachyon направляет совпавший трафик через NFQUEUE." + +msgid "Display name" +msgstr "Отображаемое имя" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS Check Interval" +msgstr "Интервал проверки DNS" + +msgid "DNS Check Interval (s)" +msgstr "Интервал проверки DNS (с)" + +msgid "DNS Failures Before Switching" +msgstr "Ошибок DNS до переключения" + msgid "DNS on router" msgstr "DNS на роутере" +msgid "DNS over HTTPS (DoH)" +msgstr "DNS через HTTPS (DoH)" + +msgid "DNS over QUIC (DoQ)" +msgstr "DNS через QUIC (DoQ)" + +msgid "DNS over TLS (DoT)" +msgstr "DNS через TLS (DoT)" + +msgid "DNS protocol" +msgstr "Протокол DNS" + +msgid "DNS Protocol Type" +msgstr "Тип протокола DNS" + +msgid "DNS protocol used by the resolver" +msgstr "Протокол DNS, используемый резолвером" + +msgid "DNS requests through section" +msgstr "DNS-запросы через секцию" + +msgid "DNS Rewrite TTL" +msgstr "TTL DNS-записей" + +msgid "DNS server" +msgstr "DNS-сервер" + msgid "DNS server address cannot be empty" msgstr "Адрес DNS-сервера не может быть пустым" +msgid "DNS server used by the resolver" +msgstr "DNS-сервер, используемый резолвером" + +msgid "DNS server used to obtain IP addresses for upstream DNS and proxies. If multiple servers are selected, a timeout switches to a backup." +msgstr "DNS-сервер для получения IP-адресов для вышестоящих DNS и прокси. Если выбрано несколько серверов, при таймауте происходит переключение на резервный." + +msgid "DNS Servers" +msgstr "DNS-серверы" + +msgid "DNS Settings" +msgstr "Настройки DNS" + +msgid "DNS Strategy" +msgstr "Стратегия DNS" + +msgid "DNS Successful Checks Before Recovery" +msgstr "Успешных проверок DNS до восстановления" + +msgid "DNS through proxy" +msgstr "DNS через прокси" + +msgid "DNS through section" +msgstr "DNS через секцию" + msgid "DNS Turbo Cache" msgstr "Быстрый DNS-кэш" msgid "DNS Turbo Cache saved" msgstr "DNS Turbo Cache сохранён" +msgid "DNS Unavailability Timeout" +msgstr "Таймаут недоступности DNS" + msgid "Do not panic, everything can be fixed, just..." msgstr "Не паникуйте, всё можно исправить, просто..." +msgid "Do not test servers from these countries." +msgstr "Не тестировать серверы из этих стран." + +msgid "Do not test servers whose names match the expression." +msgstr "Не тестировать серверы, чьи имена соответствуют выражению." + +msgid "Do not test servers with one of the selected protocols." +msgstr "Не тестировать серверы с одним из выбранных протоколов." + +msgid "Do not test servers with one of the selected security types." +msgstr "Не тестировать серверы с одним из выбранных типов безопасности." + +msgid "Do not test servers with one of the selected transports." +msgstr "Не тестировать серверы с одним из выбранных транспортов." + +msgid "Do not test specified servers." +msgstr "Не тестировать указанные серверы." + msgid "Doctor failed" msgstr "Доктор завершился с ошибкой" @@ -362,41 +773,254 @@ msgstr "Исправление доктором" msgid "Does not resolve" msgstr "Не резолвится" +msgid "Domain and IP lists" +msgstr "Списки доменов и IP" + +msgid "Domain lists" +msgstr "Списки доменов" + +msgid "Domain Resolver" +msgstr "Резолвер доменов" + +msgid "Domain test sections" +msgstr "Секции тестирования доменов" + +msgid "Domains" +msgstr "Домены" + +msgid "Domains automatically detected by Smart Detect or added via Telegram bot. You can manually edit or remove them here." +msgstr "Домены, автоматически определённые Smart Detect или добавленные через Telegram-бота. Вы можете вручную отредактировать или удалить их здесь." + +msgid "Done" +msgstr "Готово" + +msgid "Dont Touch My DHCP!" +msgstr "Не трогайте мой DHCP!" + msgid "Downlink" msgstr "Входящий" msgid "Download" msgstr "Скачать" +msgid "Download component packages via the selected section" +msgstr "Загружать пакеты компонентов через выбранную секцию" + +msgid "Download components through" +msgstr "Загружать компоненты через" + +msgid "Download components through a section" +msgstr "Загружать компоненты через секцию" + +msgid "Download lists through" +msgstr "Загружать списки через" + +msgid "Download lists through a section" +msgstr "Загружать списки через секцию" + +msgid "Download remote lists and rule sets via the selected section" +msgstr "Загружать удалённые списки и наборы правил через выбранную секцию" + +msgid "Download subscription through a section" +msgstr "Загружать подписку через секцию" + +msgid "Download subscriptions via the selected section" +msgstr "Загружать подписки через выбранную секцию" + +msgid "Download through" +msgstr "Загружать через" + msgid "Downloaded" msgstr "Загружено" msgid "Downloading package from repository..." msgstr "Загрузка пакета из репозитория..." +msgid "DSCP marks (QoS)" +msgstr "DSCP-метки (QoS)" + msgid "Duplicate JSON outbound tag" msgstr "Такой тег JSON outbound уже используется" +msgid "Duplicate value" +msgstr "Дублирующееся значение" + +msgid "e.g. AES-256-GCM — leave empty for default" +msgstr "напр. AES-256-GCM — оставьте пустым для значения по умолчанию" + +msgid "e.g. google.com, 1.1.1.1, 443" +msgstr "напр. google.com, 1.1.1.1, 443" + +msgid "e.g. SHA256 — leave empty for default" +msgstr "напр. SHA256 — оставьте пустым для значения по умолчанию" + +msgid "Enable" +msgstr "Включить" + +msgid "Enable Adaptive Intervals" +msgstr "Включить адаптивные интервалы" + +msgid "Enable AI Doctor (ChatGPT / LLM Analysis)" +msgstr "Включить ИИ-доктора (анализ ChatGPT / LLM)" + msgid "Enable AI Doctor (LLM Integration)" msgstr "Включить AI Doctor (интеграция с LLM)" +msgid "Enable Anomaly Detection" +msgstr "Включить обнаружение аномалий" + +msgid "Enable automatic updates for remote lists and rule sets" +msgstr "Включить автообновление удалённых списков и наборов правил" + msgid "Enable autostart" msgstr "Включить автостарт" +msgid "Enable built-in DNS resolver for domains handled by this section" +msgstr "Включить встроенный DNS-резолвер для доменов, обрабатываемых этой секцией" + +msgid "Enable Config Validation" +msgstr "Включить проверку конфигурации" + +msgid "Enable DNS Continuous Check" +msgstr "Непрерывная проверка DNS" + msgid "Enable DNS Turbo Cache" msgstr "Включить быстрый DNS-кэш" +msgid "Enable Firewall Reload Dedup" +msgstr "Включить дедупликацию перезагрузки файрвола" + +msgid "Enable Graceful Degradation" +msgstr "Включить мягкое деградирование" + +msgid "Enable Health Metrics" +msgstr "Включить метрики здоровья" + +msgid "Enable list updates" +msgstr "Включить обновление списков" + +msgid "Enable Mixed Proxy" +msgstr "Включить смешанный прокси" + +msgid "Enable Mixed Proxy Authentication" +msgstr "Включить аутентификацию смешанного прокси" + +msgid "Enable Output Network Interface" +msgstr "Включить выходной сетевой интерфейс" + +msgid "Enable Proxy Health Monitor" +msgstr "Включить мониторинг здоровья прокси" + +msgid "Enable Smart Cooldowns" +msgstr "Включить умные cooldown'ы" + msgid "Enable Smart Detect" msgstr "Включить Smart Detect" +msgid "Enable Telegram Bot" +msgstr "Включить Telegram-бота" + +msgid "Enable WAN DNS Fallback for Bootstrap DNS" +msgstr "Резервный WAN DNS для Bootstrap DNS" + +msgid "Enable WAN DNS Fallback for Main DNS" +msgstr "Резервный WAN DNS для основного DNS" + +msgid "Enable Watchdog" +msgstr "Включить Watchdog" + +msgid "Enable YACD" +msgstr "Включить YACD" + +msgid "Enable YACD WAN Access" +msgstr "Включить WAN-доступ к YACD" + +msgid "Enables the background daemon that polls Telegram for commands and sends notifications." +msgstr "Включает фоновый демон, который опрашивает Telegram на наличие команд и отправляет уведомления." + +msgid "Enables the background watchdog process to monitor services and auto-recover on failures." +msgstr "Включает фоновый процесс watchdog для мониторинга сервисов и автоматического восстановления при сбоях." + +msgid "Enter a complete sing-box outbound object" +msgstr "Введите полный объект outbound sing-box" + +msgid "Enter a display name" +msgstr "Введите отображаемое имя" + +msgid "Enter a level name" +msgstr "Введите имя уровня" + +msgid "Enter HWID" +msgstr "Введите HWID" + +msgid "Enter the API token obtained from @BotFather." +msgstr "Введите токен API, полученный от @BotFather." + +msgid "Enter the HWID sent with subscription requests" +msgstr "Введите HWID, отправляемый с запросами подписки" + +msgid "Enter the subscription URL" +msgstr "Введите URL подписки" + msgid "Environment preparation & dependency check..." msgstr "Подготовка окружения и проверка зависимостей..." +msgid "Error" +msgstr "Ошибка" + +msgid "Error running generator:" +msgstr "Ошибка запуска генератора:" + +msgid "Error running trace:" +msgstr "Ошибка выполнения трассировки:" + +msgid "Exclude by proxy parameters" +msgstr "Исключить по параметрам прокси" + +msgid "Exclude by regular expression" +msgstr "Исключить по регулярному выражению" + +msgid "Exclude countries" +msgstr "Исключить страны" + +msgid "Exclude selected countries" +msgstr "Исключить выбранные страны" + +msgid "Exclude servers" +msgstr "Исключить серверы" + +msgid "Exclude servers with one of the selected protocols from this level." +msgstr "Исключить серверы с одним из выбранных протоколов с этого уровня." + +msgid "Exclude servers with one of the selected security types from this level." +msgstr "Исключить серверы с одним из выбранных типов безопасности с этого уровня." + +msgid "Exclude servers with one of the selected transports from this level." +msgstr "Исключить серверы с одним из выбранных транспортов с этого уровня." + +msgid "Exclude traffic types" +msgstr "Исключить типы трафика" + +msgid "Exclude URLTest / Priority group" +msgstr "Исключить группу URLTest / Приоритет" + +msgid "Excluded devices" +msgstr "Исключённые устройства" + msgid "Expires" msgstr "Истекает" +msgid "Expose this section as a local HTTP+SOCKS proxy" +msgstr "Предоставить эту секцию как локальный HTTP+SOCKS прокси" + +msgid "External nfqws config files bypass Tachyon queue management and explicit validation." +msgstr "Внешние файлы конфигурации nfqws обходят управление очередями Tachyon и явную проверку." + +msgid "External nfqws2 config files bypass Tachyon queue management and explicit validation." +msgstr "Внешние файлы конфигурации nfqws2 обходят управление очередями Tachyon и явную проверку." + msgid "Failed to apply fix" -msgstr "" +msgstr "Не удалось применить исправление" msgid "Failed to close connection" msgstr "Не удалось закрыть подключение" @@ -413,14 +1037,20 @@ msgstr "Не удалось выполнить" msgid "Failed to generate bug report" msgstr "Не удалось создать отчёт об ошибке" -msgid "Failed to parse target list." -msgstr "Ошибка обработки списка целей." +msgid "Failed to generate WARP config:" +msgstr "Не удалось сгенерировать конфигурацию WARP:" + +msgid "Failed to parse file:" +msgstr "Ошибка разбора файла:" + +msgid "Failed to parse WARP config:" +msgstr "Не удалось разобрать конфигурацию WARP:" msgid "Failed to receive response from AI service." msgstr "Не удалось получить ответ от ИИ-сервиса." -msgid "Failed to run service check." -msgstr "Не удалось выполнить проверку сервисов." +msgid "Failed to reset settings" +msgstr "Не удалось сбросить настройки" msgid "Failed to save AI Watchdog settings" msgstr "Ошибка сохранения настроек AI Watchdog" @@ -434,6 +1064,18 @@ msgstr "Не удалось сохранить DNS Turbo Cache" msgid "Failed to save Smart Detect settings" msgstr "Ошибка сохранения настроек Smart Detect" +msgid "Failed to start bot" +msgstr "Не удалось запустить бота" + +msgid "Failed to start watchdog" +msgstr "Не удалось запустить watchdog" + +msgid "Failed to stop bot" +msgstr "Не удалось остановить бота" + +msgid "Failed to stop watchdog" +msgstr "Не удалось остановить watchdog" + msgid "Failed to update subscriptions" msgstr "Не удалось обновить подписки" @@ -446,6 +1088,9 @@ msgstr "FakeIP и контрольная проверка используют msgid "FakeIP works; public IP comparison is inconclusive" msgstr "FakeIP работает; сравнение публичных IP не дает однозначного результата" +msgid "Faster DNS health monitoring than the default cycle. Switches bootstrap DNS on failure." +msgstr "Более быстрый мониторинг состояния DNS, чем стандартный цикл. Переключает bootstrap DNS при сбое." + msgid "Faster server search interval" msgstr "Интервал поиска более быстрого сервера" @@ -455,30 +1100,81 @@ msgstr "Самый быстрый" msgid "Fetching release & commit metadata..." msgstr "Запрос метаданных релизов и коммитов..." -msgid "Fetching service targets..." -msgstr "Получение списка сервисов..." +msgid "Filter the servers that will be displayed on the dashboard." +msgstr "Фильтровать серверы, отображаемые на дашборде." -msgid "Filter by service:" -msgstr "" +msgid "Finland (fi)" +msgstr "Финляндия (fi)" msgid "Firewall WAN port" msgstr "Порт в firewall для WAN" msgid "Fix applied" -msgstr "" +msgstr "Исправление применено" + +msgid "Fix the highlighted fields and save again." +msgstr "Исправьте выделенные поля и сохраните снова." msgid "Fixed" msgstr "Исправлено" +msgid "Forced device routing" +msgstr "Принудительная маршрутизация устройств" + +msgid "Forces sing-box to tunnel DNS requests via DoQ with Encrypted Client Hello (ECH) for SNI hiding." +msgstr "Принудительно направлять DNS-запросы через DoQ с Encrypted Client Hello (ECH) для скрытия SNI." + +msgid "France (fr)" +msgstr "Франция (fr)" + msgid "Full System Diagnostic" -msgstr "" +msgstr "Полная диагностика системы" + +msgid "Fuzzing is not supported here because Tachyon needs deterministic runtime validation." +msgstr "Fuzzing не поддерживается здесь, потому что Tachyon нуждается в детерминированной проверке во время выполнения." + +msgid "Game Console IPs" +msgstr "IP игровых консолей" + +msgid "Game Console Optimizer (NAT Type 1)" +msgstr "Оптимизатор игровых консолей (NAT Type 1)" + +msgid "Generate a random 16-character hexadecimal HWID" +msgstr "Сгенерировать случайный 16-символьный шестнадцатеричный HWID" msgid "Generate bug report" msgstr "Сгенерировать баг-репорт" +msgid "Generate HWID" +msgstr "Сгенерировать HWID" + +msgid "Generate HWID from router hardware information for this subscription" +msgstr "Сгенерировать HWID из аппаратной информации роутера для этой подписки" + +msgid "Generate WARP Config" +msgstr "Сгенерировать конфигурацию WARP" + msgid "Generated inbound" msgstr "Созданный inbound" +msgid "Generated!" +msgstr "Сгенерировано!" + +msgid "Generating…" +msgstr "Генерация…" + +msgid "GeoIP Countries" +msgstr "Страны GeoIP" + +msgid "GeoIP Mode" +msgstr "Режим GeoIP" + +msgid "GeoSite / GeoIP" +msgstr "GeoSite / GeoIP" + +msgid "Germany (de)" +msgstr "Германия (de)" + msgid "GET endpoints are open on LAN. POST endpoints require Authorization: Bearer ." msgstr "GET-эндпоинты открыты в локальной сети. POST-эндпоинты требуют Authorization: Bearer ." @@ -494,18 +1190,84 @@ msgstr "Проверки здоровья" msgid "Hello! I am Tachyon AI Assistant. How can I help you today? Ask me about domain blocks, diagnostics, or router settings." msgstr "Привет! Я ИИ-ассистент Tachyon. Чем могу помочь? Задайте вопрос о блокировках, диагностике или настройках роутера." +msgid "Hide cascade connection nodes" +msgstr "Скрыть узлы каскадных подключений" + +msgid "Hide individual nodes that are already included in imported subscription URLTest groups" +msgstr "Скрыть отдельные узлы, уже включённые в импортированные группы URLTest подписки" + +msgid "Hide intermediate nodes used as detours by other subscription nodes" +msgstr "Скрыть промежуточные узлы, используемые как detour другими узлами подписки" + +msgid "Hide selected servers." +msgstr "Скрыть выбранные серверы." + +msgid "Hide servers from selected groups without repeating their filtering criteria." +msgstr "Скрыть серверы из выбранных групп без повторения критериев фильтрации." + +msgid "Hide servers from the specified countries." +msgstr "Скрыть серверы из указанных стран." + +msgid "Hide servers whose names match the expression." +msgstr "Скрыть серверы, чьи имена соответствуют выражению." + +msgid "Hide servers with one of the selected protocols." +msgstr "Скрыть серверы с одним из выбранных протоколов." + +msgid "Hide servers with one of the selected security types." +msgstr "Скрыть серверы с одним из выбранных типов безопасности." + +msgid "Hide servers with one of the selected transports." +msgstr "Скрыть серверы с одним из выбранных транспортов." + +msgid "Hide URLTest group nodes" +msgstr "Скрыть узлы групп URLTest" + msgid "Hide values" msgstr "Скрывать значения" msgid "Higher-level check interval" msgstr "Интервал проверки высших уровней" +msgid "Higher-priority DNS Check" +msgstr "Проверка DNS с более высоким приоритетом" + msgid "History" -msgstr "" +msgstr "История" msgid "Host" msgstr "Хост" +msgid "Hosts" +msgstr "Hosts" + +msgid "Hosts Lists Update Interval" +msgstr "Интервал обновления списков Hosts" + +msgid "How many hours of metrics to keep (default 24)." +msgstr "Сколько часов хранить метрики (по умолчанию 24)." + +msgid "How often higher priority levels are checked while a lower level is active" +msgstr "Как часто проверяются уровни с более высоким приоритетом, когда активен нижний уровень" + +msgid "How often the currently selected server is checked" +msgstr "Как часто проверяется текущий сервер" + +msgid "How often to check DNS health in seconds (default 60)." +msgstr "Как часто проверять здоровье DNS в секундах (по умолчанию 60)." + +msgid "How often to check proxy health in seconds (fast tier, default 30)." +msgstr "Как часто проверять здоровье прокси в секундах (быстрый уровень, по умолчанию 30)." + +msgid "How often to check Telegram for new messages (default: 5)." +msgstr "Как часто проверять Telegram на новые сообщения (по умолчанию: 5)." + +msgid "How often to check the active DNS servers." +msgstr "Как часто проверять активные DNS-серверы." + +msgid "How often to check whether a higher-priority DNS server has recovered." +msgstr "Как часто проверять, восстановился ли DNS-сервер с более высоким приоритетом." + msgid "HTTP" msgstr "HTTP" @@ -515,9 +1277,72 @@ msgstr "Ошибка HTTP" msgid "HTTP REST API for external AI agents (Claude, GPT, Open-WebUI) served at /cgi-bin/tachyon-agent/" msgstr "HTTP REST API для внешних ИИ-агентов (Claude, GPT, Open-WebUI), доступен по адресу /cgi-bin/tachyon-agent/" +msgid "HWID" +msgstr "HWID" + msgid "Idle timeout" msgstr "Таймаут простоя" +msgid "If one health check fails with an error, continue running other checks instead of stopping." +msgstr "Если одна проверка завершается ошибкой, продолжать другие проверки, а не останавливаться." + +msgid "Import" +msgstr "Импорт" + +msgid "Import (%d records)" +msgstr "Импорт (%d записей)" + +msgid "Import AmneziaWG settings from .conf file" +msgstr "Импортировать настройки AmneziaWG из файла .conf" + +msgid "Import Hosts File" +msgstr "Импортировать файл Hosts" + +msgid "Import subscription URLTest groups" +msgstr "Импортировать группы URLTest подписки" + +msgid "Import URLTest groups returned by this subscription provider" +msgstr "Импортировать группы URLTest, возвращённые этим провайдером подписки" + +msgid "Include by proxy parameters" +msgstr "Включить по параметрам прокси" + +msgid "Include by regular expression" +msgstr "Включить по регулярному выражению" + +msgid "Include countries" +msgstr "Включить страны" + +msgid "Include IP addresses and subnets" +msgstr "Включить IP-адреса и подсети" + +msgid "Include selected countries" +msgstr "Включить выбранные страны" + +msgid "Include servers" +msgstr "Включить серверы" + +msgid "Init Packet Magic Header (S1)" +msgstr "Magic-заголовок пакета инициализации (S1)" + +msgid "Init Packet Magic Header (S3)" +msgstr "Magic-заголовок пакета инициализации (S3)" + +msgid "Init Packet Payload (I1)" +msgstr "Полезная нагрузка пакета инициализации (I1)" + +msgid "Init Packet Payload (I2)" +msgstr "Полезная нагрузка пакета инициализации (I2)" + +msgid "Init Packet Payload (I3)" +msgstr "Полезная нагрузка пакета инициализации (I3)" + +msgid "Init Packet Payload (I4)" +msgstr "Полезная нагрузка пакета инициализации (I4)" + +msgid "Init Packet Payload (I5)" +msgstr "Полезная нагрузка пакета инициализации (I5)" + msgid "Install" msgstr "Установить" @@ -530,12 +1355,30 @@ msgstr "Установленная сборка → Доступная сбор msgid "Installed version is newer than release" msgstr "Установлена версия новее релиза" +msgid "Interface Monitoring" +msgstr "Мониторинг интерфейсов" + +msgid "Interface Monitoring Delay" +msgstr "Задержка мониторинга интерфейсов" + +msgid "Interface monitoring for Bad WAN" +msgstr "Мониторинг интерфейсов для坏 WAN" + msgid "Interrupt connections" msgstr "Прерывать соединения" +msgid "Interrupt connections when priority failover switches server" +msgstr "Разрывать соединения при переключении приоритетного failover" + +msgid "Interrupt connections when URLTest switches the selected server" +msgstr "Разрывать соединения при переключении URLTest на другой сервер" + msgid "Interval" msgstr "Интервал" +msgid "Invalid ByeDPI strategy" +msgstr "Неверная стратегия ByeDPI" + msgid "Invalid CIDR prefix" msgstr "Неверный префикс CIDR" @@ -599,12 +1442,21 @@ msgstr "Неверный IP-адрес" msgid "Invalid JSON format" msgstr "Неверный формат JSON" +msgid "Invalid line: \"%s\". Use: domain ip or ip domain" +msgstr "Неверная строка: \"%s\". Используйте: domain ip или ip domain" + msgid "Invalid path format. Path must start with \"/\" and contain valid characters" -msgstr "Неверный формат пути. Должен начинаться с \"/\" и содержать допустимые символы" +msgstr "Неверный формат пути. Путь должен начинаться с \"/\" и содержать допустимые символы" msgid "Invalid port number. Must be between 1 and 65535" msgstr "Неверный номер порта. Допустимо от 1 до 65535" +msgid "Invalid port or range. Use 80 or 1000-2000" +msgstr "Неверный порт или диапазон. Используйте 80 или 1000-2000" + +msgid "Invalid regular expression" +msgstr "Неверное регулярное выражение" + msgid "Invalid Shadowsocks URL: decoded credentials must contain method:password" msgstr "Неверный URL Shadowsocks: декодированные данные должны содержать method:password" @@ -615,7 +1467,7 @@ msgid "Invalid Shadowsocks URL: missing credentials" msgstr "Неверный URL Shadowsocks: отсутствуют учетные данные" msgid "Invalid Shadowsocks URL: missing method and password separator \":\"" -msgstr "Недопустимый Shadowsocks URL: отсутствует разделитель метода и пароля \":\"" +msgstr "Неверный Shadowsocks URL: отсутствует разделитель метода и пароля \":\"" msgid "Invalid Shadowsocks URL: missing port" msgstr "Неверный URL Shadowsocks: отсутствует порт" @@ -728,12 +1580,33 @@ msgstr "Неверный URL VLESS: ошибка разбора" msgid "Invalid VMess URL: parsing failed" msgstr "Некорректный VMess URL: ошибка разбора" +msgid "IP Addresses (IP CIDR)" +msgstr "IP-адреса (IP CIDR)" + +msgid "IPs" +msgstr "IP" + +msgid "IPv4 only" +msgstr "Только IPv4" + +msgid "IPv6 only" +msgstr "Только IPv6" + +msgid "Isolate BitTorrent traffic and force it direct to prevent VPN bans" +msgstr "Изолировать трафик BitTorrent и направить его напрямую для предотвращения блокировок VPN" + msgid "Issues" msgstr "Проблемы" msgid "Issues detected" msgstr "Обнаружены проблемы" +msgid "Japan (jp)" +msgstr "Япония (jp)" + +msgid "JSON outbound" +msgstr "JSON outbound" + msgid "JSON outbound cannot be empty" msgstr "JSON outbound не может быть пустым" @@ -746,26 +1619,89 @@ msgstr "JSON outbound должен содержать непустое поле msgid "JSON outbound must contain a non-empty type field" msgstr "JSON outbound должен содержать непустое поле type" +msgid "JSON outbound settings" +msgstr "Настройки JSON outbound" + +msgid "Junk Max Size (Jmax)" +msgstr "Макс. размер мусора (Jmax)" + +msgid "Junk Min Size (Jmin)" +msgstr "Мин. размер мусора (Jmin)" + +msgid "Junk Packet Count (Jc)" +msgstr "Количество мусорных пакетов (Jc)" + +msgid "Kazakhstan (kz)" +msgstr "Казахстан (kz)" + +msgid "Keep Priority before latency-sorted servers" +msgstr "Сохранять приоритет перед серверами, отсортированными по задержке" + +msgid "Keep URLTest before latency-sorted servers" +msgstr "Сохранять URLTest перед серверами, отсортированными по задержке" + msgid "Keeps FakeIP cache persistent across reboots and pre-resolves popular blocked domains on startup so first-visit latency is 0 ms." msgstr "Сохраняет FakeIP-кэш между перезагрузками и заранее резолвит популярные заблокированные домены при старте — задержка при первом визите 0 мс." +msgid "Key" +msgstr "Ключ" + +msgid "Keyword must not contain spaces or commas" +msgstr "Ключевое слово не должно содержать пробелов или запятых" + +msgid "Language for AI Doctor diagnosis responses" +msgstr "Язык ответов диагностики ИИ-доктора" + msgid "Latency test failed" msgstr "Проверка задержки не удалась" +msgid "Latency test URL" +msgstr "URL для теста задержки" + msgid "Latest version is installed" msgstr "Установлена последняя версия" msgid "Latest version:" msgstr "Последняя версия:" +msgid "Leave empty to omit this header" +msgstr "Оставьте пустым, чтобы пропустить этот заголовок" + msgid "Level" msgstr "Уровень" +msgid "Level name" +msgstr "Имя уровня" + +msgid "List must be an HTTP(S) URL or a local .lst path" +msgstr "Список должен быть HTTP(S) URL или локальным путём .lst" + +msgid "List of domains automatically detected and the section they were added to. To edit or remove them, open the routing rules of the respective section." +msgstr "Список автоматически определённых доменов и секций, в которые они были добавлены. Для редактирования или удаления откройте правила маршрутизации соответствующей секции." + +msgid "List Update Frequency" +msgstr "Частота обновления списков" + msgid "Listening port" msgstr "Слушающий порт" msgid "LM Studio (Local PC / Server)" -msgstr "" +msgstr "LM Studio (локальный ПК / сервер)" + +msgid "Load .conf" +msgstr "Загрузить .conf" + +msgid "Load .conf config" +msgstr "Загрузить конфигурацию .conf" + +msgid "Load Current Records" +msgstr "Загрузить текущие записи" + +msgid "Loaded %d current record(s)" +msgstr "Загружено %d текущих записей" + +msgid "Loaded!" +msgstr "Загружено!" msgid "Loading connections" msgstr "Загрузка подключений" @@ -776,24 +1712,114 @@ msgstr "Загрузка..." msgid "Loading…" msgstr "Загрузка…" +msgid "Local Address" +msgstr "Локальный адрес" + +msgid "Log Level" +msgstr "Уровень логирования" + msgid "lx" msgstr "lx" msgid "Main DNS" msgstr "Основной DNS" +msgid "Main DNS server. If multiple servers are selected, a timeout switches to a backup." +msgstr "Основной DNS-сервер. Если выбрано несколько серверов, при таймауте происходит переключение на резервный." + +msgid "MASQUE Access Token" +msgstr "Токен доступа MASQUE" + +msgid "MASQUE Account ID" +msgstr "ID аккаунта MASQUE" + +msgid "MASQUE Private Key" +msgstr "Приватный ключ MASQUE" + +msgid "Match destination IPs or subnets" +msgstr "Сопоставлять IP-адреса или подсети назначения" + +msgid "Match destination ports. Use a single port or a range" +msgstr "Сопоставлять порты назначения. Используйте один порт или диапазон" + +msgid "Match Found" +msgstr "Совпадение найдено" + +msgid "Match traffic by packet DSCP mark (assigned in Windows via Policy-Based QoS). Examples: 46 (EF), 0x2e, 34 (AF41)" +msgstr "Сопоставлять трафик по DSCP-метке пакета (назначается в Windows через Policy-Based QoS). Примеры: 46 (EF), 0x2e, 34 (AF41)" + +msgid "Max reconnects per hour before alert (default 10)." +msgstr "Макс. переподключений в час до оповещения (по умолчанию 10)." + +msgid "Maximum time to wait for example.com to resolve during a DNS health check." +msgstr "Максимальное время ожидания разрешения example.com при проверке DNS." + msgid "Memory Usage" msgstr "Использование памяти" +msgid "Metrics Retention (hours)" +msgstr "Хранение метрик (часы)" + +msgid "Minimum latency difference in milliseconds that triggers switching to a faster server." +msgstr "Минимальная разница задержки в миллисекундах, при которой происходит переключение на более быстрый сервер." + +msgid "Mixed Proxy Password" +msgstr "Пароль смешанного прокси" + +msgid "Mixed Proxy Port" +msgstr "Порт смешанного прокси" + +msgid "Mixed Proxy Username" +msgstr "Имя пользователя смешанного прокси" + +msgid "Model name to use. Leave empty to use default (gpt-4o-mini / claude-3-5-haiku / deepseek-chat / llama3:latest)." +msgstr "Имя модели. Оставьте пустым для использования по умолчанию (gpt-4o-mini / claude-3-5-haiku / deepseek-chat / llama3:latest)." + +msgid "Monitored Interfaces" +msgstr "Отслеживаемые интерфейсы" + msgid "Monitoring & Analytics" msgstr "Мониторинг и аналитика" +msgid "Monitors sing-box reconnect frequency. Alerts if too many reconnects per hour." +msgstr "Отслеживает частоту переподключений sing-box. Оповещает при слишком частых переподключениях." + msgid "Move down" msgstr "Вниз" msgid "Move up" msgstr "Вверх" +msgid "MTU" +msgstr "MTU" + +msgid "Must be a comma-separated list of numeric IDs" +msgstr "Должен быть список числовых ID через запятую" + +msgid "Must be a number in the range of 0 - 10000" +msgstr "Должно быть числом в диапазоне 0 - 10000" + +msgid "Name displayed on the dashboard" +msgstr "Имя, отображаемое на дашборде" + +msgid "Name shown in the priority level list" +msgstr "Имя в списке уровней приоритета" + +msgid "Netherlands (nl)" +msgstr "Нидерланды (nl)" + +msgid "Network & Interfaces" +msgstr "Сеть и интерфейсы" + +msgid "Network Interface" +msgstr "Сетевой интерейс" + +msgid "Network interface settings" +msgstr "Настройки сетевого интерфейса" + +msgid "New domains:" +msgstr "Новые домены:" + msgid "New version %s is available for %s" msgstr "Доступна новая версия %s для %s" @@ -803,6 +1829,18 @@ msgstr "Диапазон NFQUEUE свободен" msgid "NFQUEUE range overlaps with another rule" msgstr "Диапазон NFQUEUE пересекается с другим правилом" +msgid "NFQWS Strategy" +msgstr "Стратегия NFQWS" + +msgid "NFQWS strategy cannot be empty" +msgstr "Стратегия NFQWS не может быть пустой" + +msgid "NFQWS2 Strategy" +msgstr "Стратегия NFQWS2" + +msgid "NFQWS2 strategy cannot be empty" +msgstr "Стратегия NFQWS2 не может быть пустой" + msgid "No" msgstr "Нет" @@ -821,12 +1859,21 @@ msgstr "Нет закрытых подключений" msgid "No conflict detected" msgstr "Конфликт не обнаружен" +msgid "No Custom Rules Matched" +msgstr "Нет совпадений с пользовательскими правилами" + msgid "No diagnostic history available yet." -msgstr "" +msgstr "История проверок пока пуста." + +msgid "No domains detected yet" +msgstr "Домены пока не обнаружены" msgid "No enabled server inbounds configured" msgstr "Включённые серверные inbounds не настроены" +msgid "No file selected" +msgstr "Файл не выбран" + msgid "No issues found" msgstr "Проблем не обнаружено" @@ -837,7 +1884,7 @@ msgid "No public firewall port required" msgstr "Публичный порт в firewall не требуется" msgid "No quick fix required" -msgstr "" +msgstr "Быстрая починка не требуется" msgid "No rules use ByeDPI" msgstr "Нет правил, использующих ByeDPI" @@ -848,9 +1895,6 @@ msgstr "Нет правил, использующих Zapret" msgid "No rules use Zapret2" msgstr "Нет правил, использующих Zapret2" -msgid "No targets found in section configs." -msgstr "Цели в конфигурациях секций не найдены." - msgid "Node list is empty" msgstr "Список узлов пуст" @@ -884,12 +1928,72 @@ msgstr "Не отвечает" msgid "Not running" msgstr "Не запущено" +msgid "Not set" +msgstr "Не задано" + +msgid "Notify on Certificate Warnings" +msgstr "Уведомлять о предупреждениях сертификатов" + +msgid "Notify on Core Crashes" +msgstr "Уведомлять о падениях ядра" + +msgid "Notify on DNS Leaks" +msgstr "Уведомлять об утечках DNS" + +msgid "Notify on Server Switches" +msgstr "Уведомлять о переключениях серверов" + +msgid "Notify on Service Restarts" +msgstr "Уведомлять о перезапусках сервиса" + +msgid "Notify on Subscription Updates" +msgstr "Уведомлять об обновлениях подписок" + +msgid "Number of consecutive failed checks required before switching DNS servers." +msgstr "Количество последовательных неудачных проверок до переключения DNS-серверов." + +msgid "Number of consecutive failures before restarting (default 3)." +msgstr "Количество последовательных ошибок до перезапуска (по умолчанию 3)." + +msgid "Number of consecutive successful checks required before returning to a higher-priority DNS server." +msgstr "Количество последовательных успешных проверок до возврата на DNS-сервер с более высоким приоритетом." + msgid "Ollama (Local PC / Server)" -msgstr "" +msgstr "Ollama (локальный ПК / сервер)" + +msgid "One record per line: example.com 192.168.1.100 or 192.168.1.100 example.com. Lines starting with # are ignored." +msgstr "Одна запись на строку: example.com 192.168.1.100 или 192.168.1.100 example.com. Строки, начинающиеся с #, игнорируются." + +msgid "Only from the specified countries." +msgstr "Только из указанных стран." + +msgid "Only selected" +msgstr "Только выбранные" + +msgid "Only selected except exclusions" +msgstr "Только выбранные кроме исключений" + +msgid "Only servers whose names match the expression." +msgstr "Только серверы, чьи имена соответствуют выражению." + +msgid "Only servers with one of the selected protocols." +msgstr "Только серверы с одним из выбранных протоколов." + +msgid "Only servers with one of the selected security types." +msgstr "Только серверы с одним из выбранных типов безопасности." + +msgid "Only servers with one of the selected transports." +msgstr "Только серверы с одним из выбранных транспортов." + +msgid "Only the specified servers." +msgstr "Только указанные серверы." msgid "Open" msgstr "Открыть" +msgid "Open priority settings and enter a display name" +msgstr "Откройте настройки приоритета и введите отображаемое имя" + msgid "Open Project Page" msgstr "Открыть страницу проекта" @@ -905,77 +2009,299 @@ msgstr "Время ожидания истекло" msgid "Optimization" msgstr "Оптимизация" +msgid "Option \"%s\" contains an invalid input value." +msgstr "Параметр \"%s\" содержит недопустимое значение." + +msgid "Optional — leave empty for default" +msgstr "Опционально — оставьте пустым для значения по умолчанию" + msgid "Optional for local LLM" -msgstr "" +msgstr "Опционально для локальных LLM" + +msgid "Optional tls-auth or tls-crypt key" +msgstr "Опциональный ключ tls-auth или tls-crypt" + +msgid "Optional values must be attached with '=' here; a separate token would be ignored by nfqws." +msgstr "Опциональные значения должны быть присоединены через '=' здесь; отдельный токен будет игнорироваться nfqws." + +msgid "Optional values must be attached with '=' here; a separate token would be ignored by nfqws2." +msgstr "Опциональные значения должны быть присоединены через '=' здесь; отдельный токен будет игнорироваться nfqws2." + +msgid "Or paste hosts file content:" +msgstr "Или вставьте содержимое файла hosts:" msgid "outbounds must be a non-empty array of strings" msgstr "outbounds должен быть непустым массивом строк" +msgid "Output Network Interface" +msgstr "Выходной сетевой интерфейс" + +msgid "Override the default OpenWrt device headers for this subscription" +msgstr "Переопределить стандартные заголовки устройства OpenWrt для этой подписки" + +msgid "Overwrite existing records (if unchecked, merge with existing records)" +msgstr "Перезаписать существующие записи (если снято — объединить с существующими)" + +msgid "P2P Leak Protection" +msgstr "Защита от утечек P2P" + +msgid "Parsed records:" +msgstr "Обработанные записи:" + +msgid "Password" +msgstr "Пароль" + +msgid "Password cannot be empty" +msgstr "Пароль не может быть пустым" + +msgid "Paste content or upload a file to preview imported DNS records." +msgstr "Вставьте содержимое или загрузите файл для предварительного просмотра импортируемых DNS-записей." + msgid "Path cannot be empty" msgstr "Путь не может быть пустым" +msgid "Path must be absolute (start with /)" +msgstr "Путь должен быть абсолютным (начинаться с /)" + +msgid "Path must contain at least one directory (like /tmp/cache.db)" +msgstr "Путь должен содержать как минимум одну директорию (например /tmp/cache.db)" + +msgid "Path must end with cache.db" +msgstr "Путь должен заканчиваться на cache.db" + msgid "Pause updates" msgstr "Приостановить обновление" +msgid "Peer Public Key" +msgstr "Публичный ключ пира" + +msgid "PEM-encoded CA certificate" +msgstr "CA-сертификат в формате PEM" + +msgid "PEM-encoded client certificate" +msgstr "Клиентский сертификат в формате PEM" + +msgid "PEM-encoded client private key" +msgstr "Приватный ключ клиента в формате PEM" + msgid "Pending" msgstr "Ожидает запуска" msgid "Per-Device Routing" msgstr "Маршрутизация по устройствам" +msgid "Periodically check the current level and switch to a faster server even when the current one works." +msgstr "Периодически проверять текущий уровень и переключаться на более быстрый сервер, даже если текущий работает." + +msgid "Periodically checks if the proxy is responding. Restarts Tachyon after consecutive failures." +msgstr "Периодически проверяет, отвечает ли прокси. Перезапускает Tachyon после последовательных ошибок." + +msgid "Persistent Keepalive" +msgstr "Постоянный Keepalive" + +msgid "Persistent Smart Detect" +msgstr "Постоянное умное определение" + +msgid "Pin on dashboard" +msgstr "Закрепить на дашборде" + msgid "Please wait, operation is running..." msgstr "Пожалуйста, подождите, выполняется операция..." +msgid "Polling Interval (seconds)" +msgstr "Интервал опроса (секунды)" + +msgid "Polling interval must be at least 1 second" +msgstr "Интервал опроса должен быть не менее 1 секунды" + +msgid "Port cannot be empty" +msgstr "Порт не может быть пустым" + msgid "Port conflict" msgstr "Конфликт порта" +msgid "Port for the local mixed proxy of this section" +msgstr "Порт локального смешанного прокси для этой секции" + +msgid "Port must be between 1 and 65535" +msgstr "Порт должен быть от 1 до 65535" + +msgid "Port range start must be less than or equal to end" +msgstr "Начало диапазона портов должно быть меньше или равно концу" + +msgid "Ports" +msgstr "Порты" + +msgid "Pre-download all preset lists" +msgstr "Предзагрузить все предустановленные списки" + +msgid "Pre-shared key" +msgstr "Предварительный общий ключ" + +msgid "Prefer IPv4" +msgstr "Предпочитать IPv4" + +msgid "Prefer IPv6" +msgstr "Предпочитать IPv6" + +msgid "Prefix text" +msgstr "Текст префикса" + +msgid "Preshared Key" +msgstr "Предварительный общий ключ" + +msgid "Prevents multiple reload_firewall calls within 120 seconds to avoid connection drops." +msgstr "Предотвращает множественные вызовы reload_firewall в течение 120 секунд для избежания разрыва соединений." + +msgid "Priority" +msgstr "Приоритет" + msgid "Priority details" msgstr "Детали Priority" msgid "Priority details are unavailable" msgstr "Детали Priority недоступны" +msgid "Priority level settings" +msgstr "Настройки уровня приоритета" + +msgid "Priority levels" +msgstr "Уровни приоритета" + +msgid "Priority settings" +msgstr "Настройки приоритета" + +msgid "Private Key" +msgstr "Приватный ключ" + msgid "Protection" msgstr "Защита" -msgid "Proxy" -msgstr "" +msgid "Protocol" +msgstr "Протокол" + +msgid "Proxy Fail Threshold" +msgstr "Порог ошибок прокси" + +msgid "Proxy Health Check Interval (s)" +msgstr "Интервал проверки здоровья прокси (с)" + +msgid "Proxy Health Check URL" +msgstr "URL проверки здоровья прокси" msgid "Proxy link is unavailable" msgstr "Ссылка прокси недоступна" +msgid "Proxy Section for Bot" +msgstr "Секция прокси для бота" + +msgid "Proxy to use for WARP API registration (api.cloudflareclient.com)" +msgstr "Прокси для регистрации WARP API (api.cloudflareclient.com)" + +msgid "PSK" +msgstr "PSK" + msgid "Public host" msgstr "Публичный хост" +msgid "QUIC (HTTP/3)" +msgstr "QUIC (HTTP/3)" + +msgid "RDP" +msgstr "RDP" + +msgid "Read error" +msgstr "Ошибка чтения" + msgid "Rebuilt release" msgstr "Пересобранный релиз" msgid "Recommended Quick Fixes:" -msgstr "" +msgstr "Рекомендуемые исправления:" + +msgid "Reconnect Threshold" +msgstr "Порог переподключений" + +msgid "Records proxy/DNS latency and health status in hourly buckets for analysis." +msgstr "Записывает задержку прокси/DNS и состояние здоровья в почасовые блоки для анализа." + +msgid "Records: %d" +msgstr "Записей: %d" msgid "Refill" msgstr "Сброс" +msgid "Registration Detour" +msgstr "Маршрут регистрации" + +msgid "Regular expression must not contain spaces or commas" +msgstr "Регулярное выражение не должно содержать пробелов или запятых" + msgid "Reinstall" msgstr "Переустановить" msgid "Reloading page in" msgstr "Перезагрузка страницы через" +msgid "Remote Hosts Lists" +msgstr "Удалённые списки Hosts" + msgid "Removal completed successfully!" msgstr "Удаление успешно завершено!" msgid "Remove" msgstr "Удалить" +msgid "Remove servers from the specified countries from this level." +msgstr "Удалить серверы из указанных стран с этого уровня." + +msgid "Remove servers whose names match the expression from this level." +msgstr "Удалить серверы, чьи имена соответствуют выражению, с этого уровня." + +msgid "Remove the specified servers from this level." +msgstr "Удалить указанные серверы с этого уровня." + msgid "Removing" msgstr "Удаление" msgid "Removing binaries & package files..." msgstr "Удаление бинарных файлов и пакетов..." -msgid "Resolved IP / DNS" -msgstr "IP / DNS" +msgid "Require a username and password for the local mixed proxy" +msgstr "Требовать имя пользователя и пароль для локального смешанного прокси" + +msgid "Reset" +msgstr "Сбросить" + +msgid "Reset Settings" +msgstr "Сбросить настройки" + +msgid "Resetting…" +msgstr "Сброс…" + +msgid "Resolve domain names before routing so sing-box can use real destination IPs." +msgstr "Разрешать имена доменов перед маршрутизацией, чтобы sing-box мог использовать реальные IP назначения." + +msgid "Resolve real IP for routing" +msgstr "Разрешать реальный IP для маршрутизации" + +msgid "Resource selection by hostname inside nfqws is not supported here; sing-box selects resources before NFQUEUE." +msgstr "Выбор ресурсов по имени хоста внутри nfqws не поддерживается здесь; sing-box выбирает ресурсы до NFQUEUE." + +msgid "Resource selection by hostname inside nfqws2 is not supported here; sing-box selects resources before NFQUEUE." +msgstr "Выбор ресурсов по имени хоста внутри nfqws2 не поддерживается здесь; sing-box выбирает ресурсы до NFQUEUE." + +msgid "Resource selection by IP or CIDR inside nfqws is not supported here; sing-box selects resources before NFQUEUE." +msgstr "Выбор ресурсов по IP или CIDR внутри nfqws не поддерживается здесь; sing-box выбирает ресурсы до NFQUEUE." + +msgid "Resource selection by IP or CIDR inside nfqws2 is not supported here; sing-box selects resources before NFQUEUE." +msgstr "Выбор ресурсов по IP или CIDR внутри nfqws2 не поддерживается здесь; sing-box выбирает ресурсы до NFQUEUE." + +msgid "Response Packet Magic Header (S2)" +msgstr "Magic-заголовок ответного пакета (S2)" + +msgid "Response Packet Magic Header (S4)" +msgstr "Magic-заголовок ответного пакета (S4)" msgid "Restart Tachyon" msgstr "Перезапустить Tachyon" @@ -983,18 +2309,45 @@ msgstr "Перезапустить Tachyon" msgid "Restarts" msgstr "Перезапуски" +msgid "Restores the Tachyon factory defaults: all rules, subscriptions, custom DNS servers and other options will be lost." +msgstr "Восстанавливает заводские настройки Tachyon: все правила, подписки, пользовательские DNS-серверы и другие параметры будут удалены." + msgid "Resume updates" msgstr "Продолжить обновление" msgid "Route" msgstr "Маршрут" -msgid "Route Type" -msgstr "" +msgid "Route bot API requests through this section. Leave empty to use the default mixed proxy." +msgstr "Маршрутизировать запросы API бота через эту секцию. Оставьте пустым для использования смешанного прокси по умолчанию." + +msgid "Route main DNS requests through the selected section." +msgstr "Маршрутизировать основные DNS-запросы через выбранную секцию." + +msgid "Route requests to this DNS server through another section." +msgstr "Маршрутизировать запросы к этому DNS-серверу через другую секцию." + +msgid "Routing Rule Tracer" +msgstr "Трассировщик правил маршрутизации" msgid "Routing rules" msgstr "Правила маршрутизации" +msgid "Rule" +msgstr "Правило" + +msgid "Rule set must be an HTTP(S) URL or a local .srs / .json path" +msgstr "Набор правил должен быть HTTP(S) URL или локальным путём .srs / .json" + +msgid "Rule set settings" +msgstr "Настройки набора правил" + +msgid "Rule sets" +msgstr "Наборы правил" + +msgid "Rule Sets (.srs / .json)" +msgstr "Наборы правил (.srs / .json)" + msgid "Rules mangle counters" msgstr "Счётчики правил mangle" @@ -1014,7 +2367,7 @@ msgid "Rules proxy exist" msgstr "Правила прокси существуют" msgid "Run AI Doctor" -msgstr "" +msgstr "Запустить ИИ-доктора" msgid "Run Diagnostic" msgstr "Запустить диагностику" @@ -1025,6 +2378,9 @@ msgstr "Запустить восстановление" msgid "Running" msgstr "Запущен" +msgid "Russia (ru)" +msgstr "Россия (ru)" + msgid "Save" msgstr "Сохранить" @@ -1040,18 +2396,102 @@ msgstr "Сохранение…" msgid "Search" msgstr "Поиск" -msgid "Search domain or service..." -msgstr "" +msgid "Secret key for authenticating remote access to YACD when WAN access is enabled." +msgstr "Секретный ключ для аутентификации удалённого доступа к YACD при включённом WAN-доступе." + +msgid "Secret token for authorizing WRITE operations (POST/PUT) on /cgi-bin/tachyon-agent/. Leave empty if auth is not required." +msgstr "Секретный токен для авторизации операций записи (POST/PUT) на /cgi-bin/tachyon-agent/. Оставьте пустым, если аутентификация не требуется." msgid "Secret token for WRITE requests" msgstr "Секретный токен для POST/PUT запросов" +msgid "Section action" +msgstr "Действие секции" + +msgid "Section name" +msgstr "Имя секции" + +msgid "Section Rules Content" +msgstr "Содержимое правил секции" + msgid "Section test order (checked = active, drag rows with △▽):" msgstr "Порядок проверки секций (галочка = активна, перетаскивайте △▽):" +msgid "Security" +msgstr "Безопасность" + +msgid "Select a common client profile or enter a custom User-Agent" +msgstr "Выберите общий профиль клиента или введите пользовательский User-Agent" + +msgid "Select a file with .conf extension" +msgstr "Выберите файл с расширением .conf" + +msgid "Select a network interface" +msgstr "Выберите сетевой интерфейс" + +msgid "Select a predefined domain list" +msgstr "Выберите предустановленный список доменов" + +msgid "Select a section" +msgstr "Выберите секцию" + +msgid "Select a section for downloading this subscription" +msgstr "Выберите секцию для загрузки этой подписки" + +msgid "Select a transit section" +msgstr "Выберите транзитную секцию" + +msgid "Select AI LLM provider for diagnostics" +msgstr "Выберите провайдер ИИ LLM для диагностики" + +msgid "Select an existing network interface" +msgstr "Выберите существующий сетевой интерфейс" + +msgid "Select an existing URLTest or Priority group" +msgstr "Выберите существующую группу URLTest или Приоритет" + +msgid "Select an intermediate section" +msgstr "Выберите промежуточную секцию" + +msgid "Select and order the sections through which blocked domains are tested. Checked sections are tried top-to-bottom." +msgstr "Выберите и упорядочите секции, через которые тестируются заблокированные домены. Отмеченные секции проверяются сверху вниз." + +msgid "Select DNS protocol to use" +msgstr "Выберите протокол DNS" + +msgid "Select network interface for VPN connection" +msgstr "Выберите интерфейс для VPN-подключения" + +msgid "Select one or more country ISO codes (e.g. ru, us, de, nl, fr, fi, se, tr, cn, jp, sg, by, kz, ua)." +msgstr "Выберите один или несколько ISO-кодов стран (напр. ru, us, de, nl, fr, fi, se, tr, cn, jp, sg, by, kz, ua)." + +msgid "Select or enter a User-Agent" +msgstr "Выберите или введите User-Agent" + +msgid "Select or enter path for sing-box cache file. Change this ONLY if you know what you are doing" +msgstr "Выберите или введите путь к файлу кэша sing-box. Изменяйте ТОЛЬКО если точно знаете, что делаете" + +msgid "Select or enter the IP addresses of your game consoles." +msgstr "Выберите или введите IP-адреса ваших игровых консолей." + +msgid "Select path for sing-box config file. Change this ONLY if you know what you are doing" +msgstr "Выберите путь к файлу конфигурации sing-box. Изменяйте ТОЛЬКО если точно знаете, что делаете" + msgid "Select the fastest node" msgstr "Выбирать самый быстрый узел" +msgid "Select the log level for sing-box" +msgstr "Выберите уровень логирования для sing-box" + +msgid "Select the network interface from which the traffic will originate" +msgstr "Выберите интерфейс, с которого будет идти трафик" + +msgid "Select the network interface to which the traffic will originate" +msgstr "Выберите интерфейс, на который будет идти трафик" + +msgid "Select the WAN interfaces to be monitored" +msgstr "Выберите WAN-интерфейсы для отслеживания" + msgid "Selected" msgstr "Выбран" @@ -1061,33 +2501,105 @@ msgstr "Selector и URLTest outbound должны содержать непус msgid "Send" msgstr "Отправить" +msgid "Send a Telegram notification if a potential DNS leak is detected." +msgstr "Отправлять уведомление в Telegram при обнаружении потенциальной утечки DNS." + +msgid "Send a Telegram notification if sing-box or nftables rules crash and get auto-restored." +msgstr "Отправлять уведомление в Telegram, если правила sing-box или nftables упали и были автоматически восстановлены." + +msgid "Send a Telegram notification if SSL/TLS certificates are close to expiration." +msgstr "Отправлять уведомление в Telegram, если SSL/TLS-сертификаты скоро истекут." + +msgid "Send a Telegram notification if the Tachyon service is restarted by the watchdog." +msgstr "Отправлять уведомление в Telegram, если сервис Tachyon перезапущен watchdog." + +msgid "Send a Telegram notification when a URLTest group switches to a new server." +msgstr "Отправлять уведомление в Telegram при переключении группы URLTest на новый сервер." + +msgid "Send a Telegram notification when proxy subscriptions are successfully updated." +msgstr "Отправлять уведомление в Telegram при успешном обновлении подписок прокси." + +msgid "Server Address" +msgstr "Адрес сервера" + +msgid "Server filtering" +msgstr "Фильтрация серверов" + +msgid "Server group for automatic lowest-latency selection" +msgstr "Группа серверов для автоматического выбора с наименьшей задержкой" + +msgid "Server group for priority failover" +msgstr "Группа серверов для приоритетного переключения" + +msgid "Server Name Indication — leave empty to use server address" +msgstr "Server Name Indication — оставьте пустым для использования адреса сервера" + msgid "Server outbound must contain a non-empty server field" msgstr "Серверный outbound должен содержать непустое поле server" msgid "Server outbound must contain a numeric server_port from 1 to 65535" msgstr "Серверный outbound должен содержать числовой server_port от 1 до 65535" +msgid "Server Port" +msgstr "Порт сервера" + msgid "Server unavailable" msgstr "Сервер недоступен" msgid "server_port must be a number from 1 to 65535" msgstr "server_port должен быть числом от 1 до 65535" -msgid "Service / Target" -msgstr "" +msgid "Servers on dashboard" +msgstr "Серверы на дашборде" msgid "Service action failed" msgstr "Действие сервиса не выполнено" -msgid "Service Availability Check" -msgstr "" +msgid "Service list" +msgstr "Список сервисов" + +msgid "Services & Access" +msgstr "Сервисы и доступ" msgid "Services info" msgstr "Информация о сервисах" +msgid "Settings" +msgstr "Настройки" + +msgid "Settings have been reset to defaults. The page will reload." +msgstr "Настройки сброшены к значениям по умолчанию. Страница будет перезагружена." + +msgid "Show metadata on dashboard" +msgstr "Показывать метаданные на дашборде" + +msgid "Show only selected servers." +msgstr "Показать только выбранные серверы." + +msgid "Show only servers with one of the selected protocols." +msgstr "Показывать только серверы с одним из выбранных протоколов." + +msgid "Show only servers with one of the selected security types." +msgstr "Показывать только серверы с одним из выбранных типов безопасности." + +msgid "Show only servers with one of the selected transports." +msgstr "Показывать только серверы с одним из выбранных транспортов." + +msgid "Show servers from selected groups without repeating their filtering criteria." +msgstr "Показать серверы из выбранных групп без повторения критериев фильтрации." + +msgid "Show servers only from the specified countries." +msgstr "Показывать серверы только из указанных стран." + +msgid "Show servers whose names match the expression." +msgstr "Показывать серверы, чьи имена соответствуют выражению." + msgid "Show sing-box config" msgstr "Показать sing-box конфигурацию" +msgid "Show subscription metadata for this source on the dashboard" +msgstr "Показывать метаданные подписки для этого источника на дашборде" + msgid "Sing-box autostart disabled" msgstr "Автостарт sing-box отключен" @@ -1112,15 +2624,51 @@ msgstr "Сервис sing-box существует" msgid "Sing-box version is compatible (newer than 1.12.4)" msgstr "Версия Sing-box совместима (новее 1.12.4)" +msgid "Singapore (sg)" +msgstr "Сингапур (sg)" + +msgid "Skip loopback & local entries (127.0.0.1, ::1, 0.0.0.0, localhost)" +msgstr "Пропустить loopback и локальные записи (127.0.0.1, ::1, 0.0.0.0, localhost)" + +msgid "Skip TLS certificate verification (not recommended)" +msgstr "Пропустить проверку TLS-сертификатов (не рекомендуется)" + +msgid "Skipped comments/invalid:" +msgstr "Пропущены комментарии/невалидные:" + +msgid "Skipped loopback:" +msgstr "Пропущены loopback:" + msgid "Smart Detect" msgstr "Smart Detect" msgid "Smart Detect settings saved" msgstr "Настройки Smart Detect сохранены" +msgid "Snell Version" +msgstr "Версия Snell" + +msgid "Sort Alphabetically" +msgstr "Сортировать по алфавиту" + +msgid "Sort by latency" +msgstr "Сортировать по задержке" + +msgid "Sorts servers in this section by lowest latency in the dashboard." +msgstr "Сортировать серверы в этой секции по наименьшей задержке на дашборде." + msgid "Source" msgstr "Источник" +msgid "Source Devices" +msgstr "Устройства-источники" + +msgid "Source Network Interface" +msgstr "Исходный сетевой интерфейс" + +msgid "SSH" +msgstr "SSH" + msgid "Standalone ByeDPI autostart is enabled" msgstr "Автозапуск отдельной службы ByeDPI включен" @@ -1154,15 +2702,33 @@ msgstr "Отдельная служба Zapret2 активна" msgid "Standalone Zapret2 service is inactive" msgstr "Отдельная служба Zapret2 неактивна" +msgid "Start" +msgstr "Старт" + +msgid "Start bot" +msgstr "Запустить бота" + msgid "Start Tachyon" msgstr "Запустить Tachyon" msgid "Start Watchdog first" msgstr "Сначала запустите Watchdog" +msgid "Starting…" +msgstr "Запуск…" + msgid "Status" msgstr "Статус" +msgid "Stop" +msgstr "Стоп" + +msgid "Stop bot" +msgstr "Остановить бота" + +msgid "Stop checking when URLTest group is not used. Use sing-box duration format like 1d, 12h or 30m." +msgstr "Остановить проверку, когда группа URLTest не используется. Используйте формат длительности sing-box, например 1d, 12h или 30m." + msgid "Stop Tachyon" msgstr "Остановить Tachyon" @@ -1172,15 +2738,51 @@ msgstr "Остановлен" msgid "Stopping active services..." msgstr "Остановка активных служб..." +msgid "Stopping…" +msgstr "Остановка…" + +msgid "Store auto-detected domains in /etc instead of /tmp to survive reboots." +msgstr "Хранить автоопределённые домены в /etc вместо /tmp для сохранения после перезагрузки." + +msgid "Strict ECH + DoQ DNS Enforcer" +msgstr "Строгий ECH + DoQ DNS Enforcer" + +msgid "STUN (P2P Calls)" +msgstr "STUN (P2P-звонки)" + +msgid "Subnets from the list will be extracted and added to nftables" +msgstr "Подсети из списка будут извлечены и добавлены в nftables" + +msgid "Subscription auto update" +msgstr "Автообновление подписки" + msgid "Subscription info:" msgstr "Информация о подписке:" msgid "Subscription update failed" msgstr "Обновление подписки завершилось ошибкой" +msgid "Subscription update interval" +msgstr "Интервал обновления подписки" + +msgid "Subscription URL" +msgstr "URL подписки" + +msgid "Subscription URL settings" +msgstr "Настройки URL подписки" + msgid "Subscriptions updated" msgstr "Подписки обновлены" +msgid "Success" +msgstr "Успех" + +msgid "Successfully imported %d DNS record(s)" +msgstr "Успешно импортировано %d DNS-записей" + +msgid "Sweden (se)" +msgstr "Швеция (se)" + msgid "System info" msgstr "Системная информация" @@ -1193,12 +2795,27 @@ msgstr "Таблица существует" msgid "Tachyon Error" msgstr "Ошибка Tachyon" +msgid "Tachyon manages ciadpi pid files itself, so pidfile options are not allowed here." +msgstr "Tachyon управляет файлами pid ciadpi самостоятельно, поэтому параметры pidfile здесь не допускаются." + +msgid "Tachyon manages the ciadpi process lifecycle itself, so daemon mode is not allowed here." +msgstr "Tachyon управляет жизненным циклом процесса ciadpi самостоятельно, поэтому режим daemon здесь не допускается." + +msgid "Tachyon manages the nfqws process lifecycle itself, so daemon mode is not allowed here." +msgstr "Tachyon управляет жизненным циклом процесса nfqws самостоятельно, поэтому режим daemon здесь не допускается." + +msgid "Tachyon manages the nfqws2 process lifecycle itself, so daemon mode is not allowed here." +msgstr "Tachyon управляет жизненным циклом процесса nfqws2 самостоятельно, поэтому режим daemon здесь не допускается." + msgid "Tachyon service is stopped. Start the service to display connections." msgstr "Служба Tachyon остановлена. Запустите сервис для отображения подключений." msgid "Tachyon service is stopped. Start the service to display the dashboard." msgstr "Служба Tachyon остановлена. Запустите сервис для отображения дашборда." +msgid "Tachyon will not modify your DHCP configuration" +msgstr "Tachyon не будет изменять вашу конфигурацию DHCP" + msgid "Tachyon-managed ciadpi runtime has restarted" msgstr "ciadpi Tachyon перезапускался" @@ -1232,17 +2849,41 @@ msgstr "NFQWS2 Tachyon готов" msgid "Tailscale endpoint" msgstr "Tailscale endpoint" -msgid "TCP" -msgstr "" +msgid "Telegram Bot Token" +msgstr "Токен Telegram-бота" msgid "Test latency" msgstr "Тестирование задержки" +msgid "Test only selected servers." +msgstr "Тестировать только выбранные серверы." + +msgid "Test only servers with one of the selected protocols." +msgstr "Тестировать только серверы с одним из выбранных протоколов." + +msgid "Test only servers with one of the selected security types." +msgstr "Тестировать только серверы с одним из выбранных типов безопасности." + +msgid "Test only servers with one of the selected transports." +msgstr "Тестировать только серверы с одним из выбранных транспортов." + +msgid "Test servers only from the specified countries." +msgstr "Тестировать серверы только из указанных стран." + +msgid "Test servers whose names match the expression." +msgstr "Тестировать серверы, чьи имена соответствуют выражению." + msgid "Testing URL" msgstr "URL проверки" -msgid "Testing..." -msgstr "Тестирование..." +msgid "The desync fwmark is managed by Tachyon for loop prevention and must not be overridden here." +msgstr "fwmark desync управляется Tachyon для предотвращения циклов и не может быть переопределён здесь." + +msgid "The NFQUEUE number is assigned by Tachyon for each rule and must not be overridden here." +msgstr "Номер NFQUEUE назначается Tachyon для каждого правила и не может быть переопределён здесь." + +msgid "The rule applies to the domain and all its subdomains. Use full:, keyword:, or regex: prefixes for exact match, keyword match, or regular expression." +msgstr "Правило применяется к домену и всем его поддоменам. Используйте префиксы full:, keyword: или regex: для точного совпадения, совпадения по ключевому слову или регулярного выражения." msgid "There are rules using ByeDPI" msgstr "Есть правила, использующие ByeDPI" @@ -1256,41 +2897,152 @@ msgstr "Есть правила, использующие Zapret2" msgid "Thinking..." msgstr "Думаю..." +msgid "This field is required" +msgstr "Это поле обязательно" + +msgid "This field must start a working ciadpi strategy; help/version options exit immediately and are not allowed here." +msgstr "Это поле должно запускать рабочую стратегию ciadpi; опции help/version завершаются немедленно и здесь не допускаются." + +msgid "This field must start a working nfqws strategy; --dry-run exits immediately and is not allowed here." +msgstr "Это поле должно запускать рабочую стратегию nfqws; --dry-run завершается немедленно и здесь не допускается." + +msgid "This field must start a working nfqws strategy; --version exits immediately and is not allowed here." +msgstr "Это поле должно запускать рабочую стратегию nfqws; --version завершается немедленно и здесь не допускается." + +msgid "This field must start a working nfqws2 strategy; --dry-run exits immediately and is not allowed here." +msgstr "Это поле должно запускать рабочую стратегию nfqws2; --dry-run завершается немедленно и здесь не допускается." + +msgid "This field must start a working nfqws2 strategy; --version exits immediately and is not allowed here." +msgstr "Это поле должно запускать рабочую стратегию nfqws2; --version завершается немедленно и здесь не допускается." + +msgid "This flag does not accept a value." +msgstr "Этот флаг не принимает значение." + +msgid "This option requires a value." +msgstr "Этот параметр требует значение." + +msgid "This will erase all Tachyon settings and restore the factory defaults. The service will restart. This action cannot be undone." +msgstr "Все настройки Tachyon будут удалены и восстановлены заводские значения. Сервис будет перезапущен. Это действие нельзя отменить." + msgid "Time" msgstr "Время" +msgid "Time in seconds for DNS record caching (default: 60)" +msgstr "Время кэширования DNS-записей в секундах (по умолчанию: 60)" + msgid "tiny" msgstr "tiny" -msgid "TLS" -msgstr "" +msgid "TLS / HTTPS" +msgstr "TLS / HTTPS" + +msgid "TLS Auth/Crypt Key" +msgstr "Ключ TLS Auth/Crypt" + +msgid "TLS SNI" +msgstr "TLS SNI" + +msgid "Token is required when the bot is enabled" +msgstr "Токен обязателен, когда бот включён" msgid "Tolerance" msgstr "Допуск" -msgid "Total Targets" -msgstr "Всего целей" +msgid "Top level has the highest priority; lower levels are used as fallback" +msgstr "Верхний уровень имеет наивысший приоритет; нижние уровни используются как запасные" + +msgid "Total lines:" +msgstr "Всего строк:" + +msgid "Trace" +msgstr "Трассировка" + +msgid "Tracing routing rules..." +msgstr "Трассировка правил маршрутизации..." msgid "Traffic" msgstr "Трафик" +msgid "Traffic for this level goes directly." +msgstr "Трафик этого уровня идёт напрямую." + +msgid "Traffic from these IP addresses will never be routed through this section, even if other conditions match." +msgstr "Трафик от этих IP-адресов никогда не будет маршрутизирован через эту секцию, даже если другие условия совпадают." + +msgid "Traffic of specified protocols (e.g. BitTorrent, QUIC, STUN) will bypass this section." +msgstr "Трафик указанных протоколов (например BitTorrent, QUIC, STUN) будет обходить эту секцию." + msgid "Traffic Total" msgstr "Всего трафика" +msgid "Traffic type filter" +msgstr "Фильтр типа трафика" + +msgid "Traffic will go through the default route (Direct/Default)." +msgstr "Трафик пойдёт через маршрут по умолчанию (Direct/Default)." + msgid "Transient connection error" -msgstr "" +msgstr "Временная ошибка соединения" + +msgid "Transparent proxy mode is incompatible with action=byedpi because Tachyon connects to ciadpi through SOCKS." +msgstr "Режим прозрачного прокси несовместим с action=byedpi, потому что Tachyon подключается к ciadpi через SOCKS." + +msgid "Transport" +msgstr "Транспорт" msgid "Troubleshooting" msgstr "Устранение неполадок" +msgid "Try compatible User-Agent profiles automatically when downloading this subscription" +msgstr "Пробовать совместимые профили User-Agent автоматически при загрузке этой подписки" + +msgid "TTL must be a positive number" +msgstr "TTL должен быть положительным числом" + +msgid "TTL value cannot be empty" +msgstr "Значение TTL не может быть пустым" + +msgid "Turkey (tr)" +msgstr "Турция (tr)" + msgid "Type" msgstr "Тип" +msgid "UDP (Unprotected DNS)" +msgstr "UDP (незащищённый DNS)" + +msgid "Ukraine (ua)" +msgstr "Украина (ua)" + +msgid "Unable to validate the ByeDPI strategy through the backend parser." +msgstr "Не удалось проверить стратегию ByeDPI через парсер бэкенда." + +msgid "Unable to validate the NFQWS strategy through the backend parser." +msgstr "Не удалось проверить стратегию NFQWS через парсер бэкенда." + +msgid "Unable to validate the NFQWS2 strategy through the backend parser." +msgstr "Не удалось проверить стратегию NFQWS2 через парсер бэкенда." + msgid "Unavailability timeout" msgstr "Таймаут недоступности" -msgid "Unavailable" -msgstr "" +msgid "Underload Packet Magic Header (H1)" +msgstr "Magic-заголовок пакета недогрузки (H1)" + +msgid "Underload Packet Magic Header (H2)" +msgstr "Magic-заголовок пакета недогрузки (H2)" + +msgid "Underload Packet Magic Header (H3)" +msgstr "Magic-заголовок пакета недогрузки (H3)" + +msgid "Underload Packet Magic Header (H4)" +msgstr "Magic-заголовок пакета недогрузки (H4)" + +msgid "Unexpected ByeDPI strategy argument: %s" +msgstr "Неожиданный аргумент стратегии ByeDPI: %s" + +msgid "Unexpected standalone token. Use explicit flags such as --name or --name=value." +msgstr "Неожиданный отдельный токен. Используйте явные флаги, такие как --name или --name=value." msgid "Unexpected Tachyon-managed ciadpi runtime is running" msgstr "Обнаружен лишний ciadpi Tachyon" @@ -1301,15 +3053,33 @@ msgstr "Обнаружен лишний NFQWS Tachyon" msgid "Unexpected Tachyon-managed nfqws2 runtime is running" msgstr "Обнаружен лишний NFQWS2 Tachyon" +msgid "United Kingdom (gb)" +msgstr "Великобритания (gb)" + +msgid "United States (us)" +msgstr "США (us)" + msgid "unknown" msgstr "неизвестно" msgid "Unknown" msgstr "Неизвестно" +msgid "Unknown ByeDPI option: %s" +msgstr "Неизвестный параметр ByeDPI: %s" + +msgid "Unknown country" +msgstr "Неизвестная страна" + msgid "Unknown error" msgstr "Неизвестная ошибка" +msgid "Unknown NFQWS flag." +msgstr "Неизвестный флаг NFQWS." + +msgid "Unknown NFQWS2 flag." +msgstr "Неизвестный флаг NFQWS2." + msgid "Unpacking & installing binaries..." msgstr "Распаковка и установка компонентов..." @@ -1337,6 +3107,15 @@ msgstr "Доступна новая версия:" msgid "Update subscriptions" msgstr "Обновить подписки" +msgid "Update this subscription automatically" +msgstr "Обновлять эту подписку автоматически" + +msgid "Updated/duplicates:" +msgstr "Обновлено/дубликаты:" + +msgid "Updates & Downloads" +msgstr "Обновления и загрузки" + msgid "Updating" msgstr "Обновление" @@ -1355,36 +3134,138 @@ msgstr "URL должен начинаться с vless://, vmess://, ss://, troj msgid "URL must use one of the following protocols:" msgstr "URL должен использовать один из следующих протоколов:" +msgid "URL to test through the proxy (default: Cloudflare 204)." +msgstr "URL для теста через прокси (по умолчанию: Cloudflare 204)." + +msgid "URL used to check whether a server is alive" +msgstr "URL для проверки доступности сервера" + +msgid "URL used to test server latency" +msgstr "URL для теста задержки сервера" + +msgid "URLs of remote hosts files to download and apply. Supports standard hosts format: IP domain." +msgstr "URL удалённых файлов hosts для загрузки и применения. Поддерживается стандартный формат hosts: IP domain." + +msgid "URLTest" +msgstr "URLTest" + msgid "URLTest details" msgstr "Детали URLTest" msgid "URLTest details are unavailable" msgstr "Детали URLTest недоступны" +msgid "URLTest settings" +msgstr "Настройки URLTest" + +msgid "Use 3-tier check intervals: fast (15s), normal (120s), slow (300s) instead of a single interval." +msgstr "Использовать 3-уровневые интервалы проверки: быстрый (15с), нормальный (120с), медленный (300с)." + +msgid "Use another section as an intermediate hop to connect to servers in this section. Does not apply to network interfaces or JSON outbounds." +msgstr "Использовать другую секцию в качестве промежуточного узла для подключения к серверам в этой секции. Не применяется к сетевым интерфейсам и JSON-выходам." + +msgid "Use sing-box duration format like 10s, 1m or 2m30s" +msgstr "Используйте формат длительности sing-box, например 10s, 1m или 2m30s" + +msgid "Use sing-box duration format like 1d, 12h or 30m" +msgstr "Используйте формат длительности sing-box, например 1d, 12h или 30m" + +msgid "Use sing-box duration format like 1d, 12h or 6h" +msgstr "Используйте формат длительности sing-box, например 1d, 12h или 6h" + msgid "Used by" msgstr "Используется" +msgid "User-Agent" +msgstr "User-Agent" + +msgid "Username" +msgstr "Имя пользователя" + +msgid "Username cannot be empty" +msgstr "Имя пользователя не может быть пустым" + msgid "Valid" msgstr "Валидно" +msgid "Validates sing-box config before restart to prevent boot loops on broken configs." +msgstr "Проверять конфигурацию sing-box перед перезапуском, чтобы предотвратить циклические перезагрузки." + +msgid "Validation errors:" +msgstr "Ошибки валидации:" + +msgid "Value cannot be empty" +msgstr "Значение не может быть пустым" + +msgid "Value must not contain control characters" +msgstr "Значение не должно содержать символы управления" + +msgid "Via country.is" +msgstr "Через country.is" + msgid "View logs" msgstr "Посмотреть логи" +msgid "Visible name of this section" +msgstr "Видимое имя этой секции" + +msgid "vless://, vmess://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links" +msgstr "Ссылки vless://, vmess://, ss://, trojan://, socks4/5://, hy2/hysteria2://" + msgid "WAN" msgstr "WAN" msgid "WAN public IP" msgstr "Публичный WAN IP" +msgid "WARP Access Token" +msgstr "Токен доступа WARP" + +msgid "WARP Account ID" +msgstr "ID аккаунта WARP" + +msgid "WARP Configuration generated and loaded successfully!" +msgstr "Конфигурация WARP успешно сгенерирована и загружена!" + +msgid "WARP Private Key" +msgstr "Приватный ключ WARP" + msgid "Watchdog" msgstr "Сторожевой таймер" +msgid "Watchdog Status" +msgstr "Статус Watchdog" + +msgid "WebRTC Leak Protection" +msgstr "Защита от утечек WebRTC" + +msgid "What Tachyon should do when this section matches" +msgstr "Что должен делать Tachyon при совпадении этой секции" + +msgid "When switching to another level, test every server and select the fastest instead of the first working one." +msgstr "При переключении на другой уровень тестировать каждый сервер и выбирать самый быстрый вместо первого рабочего." + msgid "Why Discord fails?" msgstr "Почему не работает Discord?" +msgid "WireGuard private key from your Cloudflare account" +msgstr "Приватный ключ WireGuard из вашего аккаунта Cloudflare" + +msgid "WireGuard private key from your Cloudflare WARP account" +msgstr "Приватный ключ WireGuard из вашего аккаунта Cloudflare WARP" + +msgid "YACD Secret Key" +msgstr "Секретный ключ YACD" + msgid "Yes" msgstr "Да" +msgid "You can select Output Network Interface, by default autodetect" +msgstr "Вы можете выбрать выходной сетевой интерфейс, по умолчанию автоопределение" + +msgid "Zapret hostlist templates are not supported here because Tachyon does not expand them for per-rule NFQWS strategies." +msgstr "Шаблоны hostlist Zapret не поддерживаются здесь, потому что Tachyon не расширяет их для стратегий NFQWS по правилам." + msgid "Zapret package is installed" msgstr "Пакет Zapret установлен" @@ -1403,6 +3284,9 @@ msgstr "sing-box outbound для Zapret настроен" msgid "Zapret sing-box outbound is not configured" msgstr "sing-box outbound для Zapret не настроен" +msgid "Zapret2 hostlist templates are not supported here because Tachyon does not expand them for per-rule NFQWS2 strategies." +msgstr "Шаблоны hostlist Zapret2 не поддерживаются здесь, потому что Tachyon не расширяет их для стратегий NFQWS2 по правилам." + msgid "Zapret2 package is installed" msgstr "Пакет Zapret2 установлен" @@ -1420,3 +3304,405 @@ msgstr "sing-box outbound для Zapret2 настроен" msgid "Zapret2 sing-box outbound is not configured" msgstr "sing-box outbound для Zapret2 не настроен" + +msgid "Service Health Check" +msgstr "Проверка доступности сервисов" + +msgid "Total Targets" +msgstr "Всего целей" + +msgid "Passed" +msgstr "Успешно" + +msgid "Failed" +msgstr "Ошибки" + +msgid "Avg Latency" +msgstr "Ср. задержка" + +msgid "Search domain..." +msgstr "Поиск домена..." + +msgid "Section / Target" +msgstr "Секция / Цель" + +msgid "Outbound Route" +msgstr "Маршрут" + +msgid "Resolved IP / DNS" +msgstr "IP / DNS" + +msgid "Verdict" +msgstr "Статус" + +msgid "Check domain or IP (e.g. example.com)..." +msgstr "Проверить домен или IP (напр. example.com)..." + +msgid "Check Custom" +msgstr "Проверить свой" + +msgid "Check All" +msgstr "Проверить все" + +msgid "Check Again" +msgstr "Проверить снова" + +msgid "Testing..." +msgstr "Тестирование..." + +msgid "Fetching service targets..." +msgstr "Получение списка сервисов..." + +msgid "Failed to run service check." +msgstr "Не удалось выполнить проверку сервисов." + +msgid "Failed to parse target list." +msgstr "Ошибка обработки списка целей." + +msgid "No targets found in section configs." +msgstr "Цели в конфигурациях секций не найдены." + +msgid "Check YouTube availability" +msgstr "Проверить доступность YouTube" + +msgid "Check Mode:" +msgstr "Режим проверки:" + +msgid "Active Sections" +msgstr "Активные секции" + +msgid "All Profiles" +msgstr "Все сервисы и профили" + +msgid "Sections" +msgstr "Секции" + +msgid "Servers" +msgstr "Серверы" + +msgid "Monitoring" +msgstr "Мониторинг" + +msgid "Components" +msgstr "Компоненты" + +msgid "Drag rows to change priority. The rule at the top is checked first." +msgstr "Перетащите строки для изменения приоритета. Правило вверху проверяется первым." + +msgid "Rules" +msgstr "Правила" + +msgid "Edit" +msgstr "Редактировать" + +msgid "Connection" +msgstr "Соединение" + +msgid "Add a section" +msgstr "Добавить секцию" + +msgid "Add a server inbound" +msgstr "Добавить серверный инбаунд" + +msgid "Accept external proxy connections and route them with sing-box." +msgstr "Принимать внешние прокси-подключения и маршрутизировать их через sing-box." + +msgid "Section" +msgstr "Секция" + +msgid "Server" +msgstr "Сервер" + +msgid "Installing" +msgstr "Установка" + +msgid "Initializing operation..." +msgstr "Инициализация операции..." + +msgid "Installing package & updating configurations..." +msgstr "Установка пакета и обновление настроек..." + +msgid "Installation completed successfully!" +msgstr "Установка успешно завершена!" + +msgid "Direct" +msgstr "Напрямую" + +msgid "Tachyon Settings" +msgstr "Настройки Tachyon" + +msgid "All Services" +msgstr "Все сервисы" + +msgid "Service Availability Check" +msgstr "Проверка доступности сервисов" + +msgid "Filter by service:" +msgstr "Фильтр по сервису:" + +msgid "Search domain or service..." +msgstr "Поиск домена или сервиса..." + +msgid "Service / Target" +msgstr "Сервис / Цель" + +msgid "Route Type" +msgstr "Тип маршрута" + +msgid "Active Routes" +msgstr "Активные маршруты" + +msgid "Custom Domains" +msgstr "Свои домены" + +msgid "Unavailable" +msgstr "Недоступно" + +msgid "Available" +msgstr "Доступно" + +msgid "Auto" +msgstr "Авто" + +msgid "Proxy" +msgstr "Прокси" + +msgid "TCP" +msgstr "TCP" + +msgid "TLS" +msgstr "TLS" + +msgid "Method" +msgstr "Метод" + +msgid "ALPN" +msgstr "ALPN" + +msgid "VLESS flow" +msgstr "VLESS flow" + +msgid "FakeTLS host" +msgstr "FakeTLS host" + +msgid "Concurrency" +msgstr "Параллелизм" + +msgid "Delete" +msgstr "Удалить" + +msgid "Information" +msgstr "Информация" + +msgid "Saving..." +msgstr "Сохранение..." + +msgid "Generating..." +msgstr "Генерация..." + +msgid "Starting..." +msgstr "Запуск..." + +msgid "Stopping..." +msgstr "Остановка..." + +msgid "None" +msgstr "Нет" + +msgid "Enabled" +msgstr "Включено" + +msgid "Disabled" +msgstr "Отключено" + +msgid "Configuration for Tachyon service" +msgstr "Конфигурация сервиса Tachyon" + +msgid "Only the specified servers" +msgstr "Только указанные серверы" + +msgid "Select all" +msgstr "Выбрать все" + +msgid "Routing mode" +msgstr "Режим маршрутизации" + +msgid "Routing section" +msgstr "Секция маршрутизации" + +msgid "Keeps FakeIP cache persistent across reboots and pre-resolves popular blocked domains on startup so first-visit latency is 0 ms." +msgstr "Сохраняет кэш FakeIP между перезагрузками и предварительно разрешает популярные заблокированные домены при запуске, чтобы задержка первого обращения была 0 мс." + +msgid "Configure User-Agent в the item settings" +msgstr "Настройте User-Agent в параметрах элемента" + +msgid "Client link" +msgstr "Клиентская ссылка" + +msgid "Client link QR code" +msgstr "QR-код клиентской ссылки" + +msgid "Client link is not available yet" +msgstr "Клиентская ссылка пока недоступна" + +msgid "Loading client link..." +msgstr "Загрузка клиентской ссылки..." + +msgid "Secret" +msgstr "Секрет" + +msgid "Public Key" +msgstr "Публичный ключ" + +msgid "Certificate path" +msgstr "Путь к сертификату" + +msgid "Key path" +msgstr "Путь к ключу" + +msgid "Specify a file path" +msgstr "Укажите путь к файлу" + +msgid "Specify different files" +msgstr "Укажите разные файлы" + +msgid "Selected section" +msgstr "Выбранная секция" + +msgid "Inbound JSON" +msgstr "Inbound JSON" + +msgid "Inbound JSON cannot be empty" +msgstr "Inbound JSON не может быть пустым" + +msgid "Inbound JSON must be an object with a type field" +msgstr "Inbound JSON должен быть объектом с полем type" + +msgid "Server information" +msgstr "Информация о сервере" + +msgid "Server name" +msgstr "Имя сервера" + +msgid "Server name / SNI" +msgstr "Имя сервера / SNI" + +msgid "Reality fake site" +msgstr "Фейковый сайт Reality" + +msgid "Reality fake site port" +msgstr "Порт фейкового сайта Reality" + +msgid "Reality max time difference" +msgstr "Макс. разница времени Reality" + +msgid "Reality private key" +msgstr "Приватный ключ Reality" + +msgid "Reality public key" +msgstr "Публичный ключ Reality" + +msgid "Reality short ID" +msgstr "Короткий ID Reality" + +msgid "Reality short ID must contain 1-8 hex digits" +msgstr "Короткий ID Reality должен содержать 1-8 шестнадцатеричных цифр" + +msgid "Fronting IP" +msgstr "Fronting IP" + +msgid "Fronting port" +msgstr "Fronting порт" + +msgid "Fronting proxy protocol" +msgstr "Протокол Fronting прокси" + +msgid "gRPC service" +msgstr "Сервис gRPC" + +msgid "Transport host" +msgstr "Хост транспорта" + +msgid "Transport path" +msgstr "Путь транспорта" + +msgid "Transport path must start with /" +msgstr "Путь транспорта должен начинаться с /" + +msgid "HTTP hosts" +msgstr "HTTP хосты" + +msgid "XHTTP mode" +msgstr "Режим XHTTP" + +msgid "Fallback on unknown DC" +msgstr "Fallback при неизвестном DC" + +msgid "Padding" +msgstr "Padding" + +msgid "Handshake timeout" +msgstr "Таймаут рукопожатия" + +msgid "Time skew tolerance" +msgstr "Допуск отклонения времени" + +msgid "Invalid NFQWS strategy" +msgstr "Неверная стратегия NFQWS" + +msgid "Invalid NFQWS2 strategy" +msgstr "Неверная стратегия NFQWS2" + +msgid "Installed build \\u2192 Available build" +msgstr "Установленная сборка \\u2192 Доступная сборка" + +msgid "Prevent multiple reload_firewall calls within 120 seconds to avoid connection drops." +msgstr "Предотвращать множественные вызовы reload_firewall в течение 120 секунд для избежания разрыва соединений." + +msgid "Obfuscation" +msgstr "Обфускация" + +msgid "Obfuscation password" +msgstr "Пароль обфускации" + +msgid "Auto update" +msgstr "Автообновление" + +msgid "Use CIDR prefixes like 192.168.1.0/24 or 2001:db8::/32" +msgstr "Используйте CIDR-префиксы, например 192.168.1.0/24 или 2001:db8::/32" + +msgid "Use an IP address" +msgstr "Используйте IP-адрес" + +msgid "Use an IP listen address" +msgstr "Используйте IP-адрес прослушивания" + +msgid "Use a domain name or IP address" +msgstr "Используйте имя домена или IP-адрес" + +msgid "Use an HTTP or HTTPS URL" +msgstr "Используйте HTTP или HTTPS URL" + +msgid "Use letters, digits, dots, underscores, or hyphens" +msgstr "Используйте буквы, цифры, точки, подчёркивания или дефисы" + +msgid "Use a non-negative integer" +msgstr "Используйте неотрицательное целое число" + +msgid "Use a non-zero secret" +msgstr "Используйте ненулевой секрет" + +msgid "Use 32 hex characters" +msgstr "Используйте 32 шестнадцатеричных символа" + +msgid "Use a duration like 30s, 5m, or 1h30m" +msgstr "Используйте длительность, например 30s, 5m или 1h30m" + +msgid "Expecting: %s" +msgstr "Ожидалось: %s" + +msgid "Cannot save server" +msgstr "Не удалось сохранить сервер" + +msgid "QR code is too large" +msgstr "QR-код слишком большой" diff --git a/fe-app-tachyon/src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts b/fe-app-tachyon/src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts index 8f8cb73d..88fa027c 100644 --- a/fe-app-tachyon/src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts +++ b/fe-app-tachyon/src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts @@ -58,23 +58,23 @@ function formatSectionName(name: string): string { 'Базовая связность': 'Базовая связность', 'Заблокированные в РФ': 'Заблокированные ресурсы', 'Свои домены': 'Собственные домены', - 'Custom': 'Пользовательский', + Custom: 'Пользовательский', 'ChatGPT / OpenAI': 'ChatGPT / OpenAI', 'Gemini / Google AI': 'Gemini / Google AI', 'X (Twitter)': 'Twitter (X)', 'UDP / QUIC': 'UDP / QUIC протоколы', - 'Telegram': 'Telegram', - 'Instagram': 'Instagram', - 'YouTube': 'YouTube', - 'TikTok': 'TikTok', - 'Discord': 'Discord', - 'Facebook': 'Facebook', - 'WhatsApp': 'WhatsApp', - 'Netflix': 'Netflix', - 'Spotify': 'Spotify', - 'Twitch': 'Twitch', - 'Steam': 'Steam', - 'GitHub': 'GitHub', + Telegram: 'Telegram', + Instagram: 'Instagram', + YouTube: 'YouTube', + TikTok: 'TikTok', + Discord: 'Discord', + Facebook: 'Facebook', + WhatsApp: 'WhatsApp', + Netflix: 'Netflix', + Spotify: 'Spotify', + Twitch: 'Twitch', + Steam: 'Steam', + GitHub: 'GitHub', }; return sectionMap[clean] || clean; @@ -375,11 +375,7 @@ export function renderServiceCheckModal() { 'padding: 4px 8px; font-size: 12px; border-radius: 4px; max-width: 240px;', }, [ - E( - 'option', - { value: 'ALL' }, - `Все сервисы (${targets.length})`, - ), + E('option', { value: 'ALL' }, `Все сервисы (${targets.length})`), ...sectionNames.map((sec) => { const count = targets.filter((t) => t.section === sec).length; return E( @@ -524,19 +520,24 @@ export function renderServiceCheckModal() { }[] = []; targets.forEach((item, index) => { - const rowClass = index % 2 === 0 ? 'cbi-rowstyle-1' : 'cbi-rowstyle-2'; + const rowClass = + index % 2 === 0 ? 'cbi-rowstyle-1' : 'cbi-rowstyle-2'; const badge = renderStatusBadge('', false, true); const tr = E('tr', { class: `tr ${rowClass}` }, [ - E('td', { class: 'td', style: 'word-break: break-all; padding: 8px;' }, [ - E( - 'span', - { style: 'font-weight: 600; font-size: 12px;' }, - formatSectionName(item.section), - ), - E('br'), - E('small', { style: 'opacity: 0.8;' }, item.domain), - ]), + E( + 'td', + { class: 'td', style: 'word-break: break-all; padding: 8px;' }, + [ + E( + 'span', + { style: 'font-weight: 600; font-size: 12px;' }, + formatSectionName(item.section), + ), + E('br'), + E('small', { style: 'opacity: 0.8;' }, item.domain), + ], + ), E('td', { class: 'td', style: 'font-size: 12px; padding: 8px;' }, [ E( 'span', @@ -554,20 +555,33 @@ export function renderServiceCheckModal() { ]), E( 'td', - { class: 'td', style: 'text-align: right; font-size: 12px; padding: 8px 4px;' }, + { + class: 'td', + style: 'text-align: right; font-size: 12px; padding: 8px 4px;', + }, '-', ), E( 'td', - { class: 'td', style: 'text-align: right; font-size: 12px; padding: 8px 4px;' }, + { + class: 'td', + style: 'text-align: right; font-size: 12px; padding: 8px 4px;', + }, '-', ), E( 'td', - { class: 'td', style: 'text-align: right; font-size: 12px; padding: 8px 4px;' }, + { + class: 'td', + style: 'text-align: right; font-size: 12px; padding: 8px 4px;', + }, '-', ), - E('td', { class: 'td', style: 'text-align: center; padding: 8px 6px;' }, badge), + E( + 'td', + { class: 'td', style: 'text-align: center; padding: 8px 6px;' }, + badge, + ), ]); rowMap.push({ target: item, tr }); @@ -582,7 +596,9 @@ export function renderServiceCheckModal() { !searchQuery || target.domain.toLowerCase().includes(searchQuery) || target.section.toLowerCase().includes(searchQuery) || - formatSectionName(target.section).toLowerCase().includes(searchQuery); + formatSectionName(target.section) + .toLowerCase() + .includes(searchQuery); tr.style.display = matchesSection && matchesSearch ? '' : 'none'; }); }; @@ -663,7 +679,10 @@ export function renderServiceCheckModal() { const customTr = E('tr', { class: 'tr cbi-rowstyle-1' }, [ E( 'td', - { class: 'td', style: 'word-break: break-all; padding: 8px;' }, + { + class: 'td', + style: 'word-break: break-all; padding: 8px;', + }, [ E( 'span', @@ -674,39 +693,65 @@ export function renderServiceCheckModal() { E('small', {}, cItem.domain), ], ), - E('td', { class: 'td', style: 'font-size: 12px; padding: 8px;' }, [ - E( - 'span', - { - class: 'badge cbi-value-title', - style: 'font-size: 11px; padding: 2px 6px;', - }, - formatRouteType(cItem.route_type), - ), - ]), - E('td', { class: 'td', style: 'font-size: 12px; padding: 8px;' }, [ - cItem.ip || '?', - E('br'), - E('small', {}, `${cItem.dns_ms}ms`), - ]), E( 'td', - { class: 'td', style: 'text-align: right; padding: 8px 4px;' }, + { + class: 'td', + style: 'font-size: 12px; padding: 8px;', + }, + [ + E( + 'span', + { + class: 'badge cbi-value-title', + style: 'font-size: 11px; padding: 2px 6px;', + }, + formatRouteType(cItem.route_type), + ), + ], + ), + E( + 'td', + { + class: 'td', + style: 'font-size: 12px; padding: 8px;', + }, + [ + cItem.ip || '?', + E('br'), + E('small', {}, `${cItem.dns_ms}ms`), + ], + ), + E( + 'td', + { + class: 'td', + style: 'text-align: right; padding: 8px 4px;', + }, cItem.tcp_ms > 0 ? `${cItem.tcp_ms}` : '-', ), E( 'td', - { class: 'td', style: 'text-align: right; padding: 8px 4px;' }, + { + class: 'td', + style: 'text-align: right; padding: 8px 4px;', + }, cItem.tls_ms > 0 ? `${cItem.tls_ms}` : '-', ), E( 'td', - { class: 'td', style: 'text-align: right; padding: 8px 4px;' }, + { + class: 'td', + style: 'text-align: right; padding: 8px 4px;', + }, cItem.http_ms > 0 ? `${cItem.http_ms}` : '-', ), E( 'td', - { class: 'td', style: 'text-align: center; padding: 8px 6px;' }, + { + class: 'td', + style: 'text-align: center; padding: 8px 6px;', + }, cBadge, ), ]); diff --git a/install.sh b/install.sh index 8adc92c9..1bb14c00 100755 --- a/install.sh +++ b/install.sh @@ -331,6 +331,7 @@ LOG_FILE="/tmp/tachyon-install.log" START_TIME="" TACHYON_WAS_ENABLED=0 TACHYON_WAS_RUNNING=0 +TACHYON_WAS_INSTALLED=0 TACHYON_LEGACY_DETECTED=0 TACHYON_FORKOP_MIGRATION=0 TACHYON_I18N_REQUESTED=0 @@ -1337,6 +1338,7 @@ function installer_cleanup_legacy() { print("TACHYON_WAS_ENABLED=", was_enabled ? "1" : "0", "\n"); print("TACHYON_WAS_RUNNING=", was_running ? "1" : "0", "\n"); + print("TACHYON_WAS_INSTALLED=", tachyon_installed ? "1" : "0", "\n"); print("TACHYON_LEGACY_DETECTED=", legacy_installed ? "1" : "0", "\n"); return true; } @@ -1447,6 +1449,16 @@ function installer_post_install() { warn("Failed to start Tachyon after upgrade.\n"); } + // Fresh installs must end up in a pristine default state: wipe leftover + // caches and runtime state from previous installations and rewrite the + // config from the bundled default. Upgrades and legacy migrations keep + // the user configuration untouched. + if (env("TACHYON_WAS_INSTALLED", "0") != "1" && + env("TACHYON_LEGACY_DETECTED", "0") != "1") { + if (!run_args([ "timeout", "60", INSTALLER_TACHYON_BIN, "reset_settings", "no-start" ])) + warn("Failed to reset Tachyon settings to defaults after a fresh install.\n"); + } + return true; } @@ -2576,6 +2588,7 @@ post_install() { fi TACHYON_WAS_ENABLED="$TACHYON_WAS_ENABLED" TACHYON_WAS_RUNNING="$TACHYON_WAS_RUNNING" \ + TACHYON_WAS_INSTALLED="$TACHYON_WAS_INSTALLED" TACHYON_LEGACY_DETECTED="$TACHYON_LEGACY_DETECTED" \ install_json_ucode installer-post-install || fail "Failed to complete Tachyon post-install actions" } diff --git a/luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js b/luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js index ed3973ed..97710088 100644 --- a/luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js +++ b/luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js @@ -7937,13 +7937,10 @@ var styles = ` .tachyon_dashboard-page__subscription-meta__title { flex: 0 1 auto; - width: max-content; - max-width: min(28ch, 30%); - min-width: min-content; color: var(--text-color-high); font-weight: 700; line-height: 1.25; - overflow-wrap: anywhere; + word-break: break-word; } .tachyon_dashboard-page__subscription-meta__facts { @@ -10066,23 +10063,23 @@ function formatSectionName(name) { "\u0411\u0430\u0437\u043E\u0432\u0430\u044F \u0441\u0432\u044F\u0437\u043D\u043E\u0441\u0442\u044C": "\u0411\u0430\u0437\u043E\u0432\u0430\u044F \u0441\u0432\u044F\u0437\u043D\u043E\u0441\u0442\u044C", "\u0417\u0430\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0435 \u0432 \u0420\u0424": "\u0417\u0430\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044B", "\u0421\u0432\u043E\u0438 \u0434\u043E\u043C\u0435\u043D\u044B": "\u0421\u043E\u0431\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0435 \u0434\u043E\u043C\u0435\u043D\u044B", - "Custom": "\u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0439", + Custom: "\u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0439", "ChatGPT / OpenAI": "ChatGPT / OpenAI", "Gemini / Google AI": "Gemini / Google AI", "X (Twitter)": "Twitter (X)", "UDP / QUIC": "UDP / QUIC \u043F\u0440\u043E\u0442\u043E\u043A\u043E\u043B\u044B", - "Telegram": "Telegram", - "Instagram": "Instagram", - "YouTube": "YouTube", - "TikTok": "TikTok", - "Discord": "Discord", - "Facebook": "Facebook", - "WhatsApp": "WhatsApp", - "Netflix": "Netflix", - "Spotify": "Spotify", - "Twitch": "Twitch", - "Steam": "Steam", - "GitHub": "GitHub" + Telegram: "Telegram", + Instagram: "Instagram", + YouTube: "YouTube", + TikTok: "TikTok", + Discord: "Discord", + Facebook: "Facebook", + WhatsApp: "WhatsApp", + Netflix: "Netflix", + Spotify: "Spotify", + Twitch: "Twitch", + Steam: "Steam", + GitHub: "GitHub" }; return sectionMap[clean] || clean; } @@ -10328,11 +10325,7 @@ function renderServiceCheckModal() { style: "padding: 4px 8px; font-size: 12px; border-radius: 4px; max-width: 240px;" }, [ - E( - "option", - { value: "ALL" }, - `\u0412\u0441\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044B (${targets.length})` - ), + E("option", { value: "ALL" }, `\u0412\u0441\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044B (${targets.length})`), ...sectionNames.map((sec) => { const count = targets.filter((t) => t.section === sec).length; return E( @@ -10460,15 +10453,19 @@ function renderServiceCheckModal() { const rowClass = index % 2 === 0 ? "cbi-rowstyle-1" : "cbi-rowstyle-2"; const badge = renderStatusBadge("", false, true); const tr = E("tr", { class: `tr ${rowClass}` }, [ - E("td", { class: "td", style: "word-break: break-all; padding: 8px;" }, [ - E( - "span", - { style: "font-weight: 600; font-size: 12px;" }, - formatSectionName(item.section) - ), - E("br"), - E("small", { style: "opacity: 0.8;" }, item.domain) - ]), + E( + "td", + { class: "td", style: "word-break: break-all; padding: 8px;" }, + [ + E( + "span", + { style: "font-weight: 600; font-size: 12px;" }, + formatSectionName(item.section) + ), + E("br"), + E("small", { style: "opacity: 0.8;" }, item.domain) + ] + ), E("td", { class: "td", style: "font-size: 12px; padding: 8px;" }, [ E( "span", @@ -10486,20 +10483,33 @@ function renderServiceCheckModal() { ]), E( "td", - { class: "td", style: "text-align: right; font-size: 12px; padding: 8px 4px;" }, + { + class: "td", + style: "text-align: right; font-size: 12px; padding: 8px 4px;" + }, "-" ), E( "td", - { class: "td", style: "text-align: right; font-size: 12px; padding: 8px 4px;" }, + { + class: "td", + style: "text-align: right; font-size: 12px; padding: 8px 4px;" + }, "-" ), E( "td", - { class: "td", style: "text-align: right; font-size: 12px; padding: 8px 4px;" }, + { + class: "td", + style: "text-align: right; font-size: 12px; padding: 8px 4px;" + }, "-" ), - E("td", { class: "td", style: "text-align: center; padding: 8px 6px;" }, badge) + E( + "td", + { class: "td", style: "text-align: center; padding: 8px 6px;" }, + badge + ) ]); rowMap.push({ target: item, tr }); tableBody.appendChild(tr); @@ -10567,7 +10577,10 @@ function renderServiceCheckModal() { const customTr = E("tr", { class: "tr cbi-rowstyle-1" }, [ E( "td", - { class: "td", style: "word-break: break-all; padding: 8px;" }, + { + class: "td", + style: "word-break: break-all; padding: 8px;" + }, [ E( "span", @@ -10578,39 +10591,65 @@ function renderServiceCheckModal() { E("small", {}, cItem.domain) ] ), - E("td", { class: "td", style: "font-size: 12px; padding: 8px;" }, [ - E( - "span", - { - class: "badge cbi-value-title", - style: "font-size: 11px; padding: 2px 6px;" - }, - formatRouteType(cItem.route_type) - ) - ]), - E("td", { class: "td", style: "font-size: 12px; padding: 8px;" }, [ - cItem.ip || "?", - E("br"), - E("small", {}, `${cItem.dns_ms}ms`) - ]), E( "td", - { class: "td", style: "text-align: right; padding: 8px 4px;" }, + { + class: "td", + style: "font-size: 12px; padding: 8px;" + }, + [ + E( + "span", + { + class: "badge cbi-value-title", + style: "font-size: 11px; padding: 2px 6px;" + }, + formatRouteType(cItem.route_type) + ) + ] + ), + E( + "td", + { + class: "td", + style: "font-size: 12px; padding: 8px;" + }, + [ + cItem.ip || "?", + E("br"), + E("small", {}, `${cItem.dns_ms}ms`) + ] + ), + E( + "td", + { + class: "td", + style: "text-align: right; padding: 8px 4px;" + }, cItem.tcp_ms > 0 ? `${cItem.tcp_ms}` : "-" ), E( "td", - { class: "td", style: "text-align: right; padding: 8px 4px;" }, + { + class: "td", + style: "text-align: right; padding: 8px 4px;" + }, cItem.tls_ms > 0 ? `${cItem.tls_ms}` : "-" ), E( "td", - { class: "td", style: "text-align: right; padding: 8px 4px;" }, + { + class: "td", + style: "text-align: right; padding: 8px 4px;" + }, cItem.http_ms > 0 ? `${cItem.http_ms}` : "-" ), E( "td", - { class: "td", style: "text-align: center; padding: 8px 6px;" }, + { + class: "td", + style: "text-align: center; padding: 8px 6px;" + }, cBadge ) ]); diff --git a/luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js b/luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js index f509c1d6..b751c37f 100644 --- a/luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js +++ b/luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js @@ -376,6 +376,82 @@ function createWatchdogStatusWidget() { return wrapper; } +function createResetSettingsWidget() { + const wrapper = E("div", { + id: "tachyon-reset-settings-widget", + style: "display:flex;align-items:center;gap:12px;padding:4px 0;flex-wrap:wrap;", + }); + + const btnReset = E("button", { + class: "btn cbi-button cbi-button-negative", + type: "button", + }); + btnReset.textContent = _("Reset Settings"); + + const msgEl = E("span", { + style: "font-size:12px;color:var(--text-color-medium,#888);", + }); + + function performReset() { + if (btnReset.disabled) + return; + btnReset.disabled = true; + msgEl.textContent = _("Resetting\u2026"); + fs.exec("/usr/bin/tachyon", ["reset_settings"]) + .then(function (res) { + let success = false; + try { + success = JSON.parse((res && res.stdout) || "").success !== false; + } catch (e) { + success = false; + } + if (!success) + throw new Error("reset failed"); + msgEl.textContent = ""; + ui.addNotification(null, E("p", {}, _("Settings have been reset to defaults. The page will reload.")), "info"); + setTimeout(function () { + location.reload(); + }, 1500); + }) + .catch(function () { + msgEl.textContent = _("Failed to reset settings"); + btnReset.disabled = false; + }); + } + + btnReset.addEventListener("click", function () { + ui.showModal( + _("Reset Settings"), + [ + E("p", {}, _("This will erase all Tachyon settings and restore the factory defaults. The service will restart. This action cannot be undone.")), + E("div", { class: "button-row" }, [ + E("button", { + class: "btn cbi-button cbi-button-neutral", + type: "button", + click: function () { + ui.hideModal(); + }, + }, _("Cancel")), + E("button", { + class: "btn cbi-button cbi-button-negative", + type: "button", + click: function () { + ui.hideModal(); + performReset(); + }, + }, _("Reset")), + ]), + ], + "cbi-modal", + ); + }); + + wrapper.appendChild(btnReset); + wrapper.appendChild(msgEl); + + return wrapper; +} + function createSmartDetectSectionsWidget(section_id) { const TESTABLE_ACTIONS = ["connection", "proxy", "outbound", "vpn", "zapret", "zapret2", "byedpi"]; const allSections = (uci.sections(UCI_PACKAGE, "section") || []) @@ -1217,6 +1293,20 @@ function createSettingsContent(section, capabilities) { o.default = "0"; o.rmempty = false; + const resetOpt = section.taboption( + "advanced", + form.DummyValue, + "_reset_settings", + _("Reset Settings"), + _( + "Restores the Tachyon factory defaults: all rules, subscriptions, custom DNS servers and other options will be lost.", + ), + ); + resetOpt.rawhtml = true; + resetOpt.cfgvalue = function () { + return createResetSettingsWidget(); + }; + o = section.taboption( "ai", form.Flag, diff --git a/luci-app-tachyon/po/ru/tachyon.po b/luci-app-tachyon/po/ru/tachyon.po index e7f25f13..1d0fafff 100644 --- a/luci-app-tachyon/po/ru/tachyon.po +++ b/luci-app-tachyon/po/ru/tachyon.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: TACHYON\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-13 08:37+0300\n" -"PO-Revision-Date: 2026-08-13 08:37+0300\n" +"POT-Creation-Date: 2026-08-13 20:17+0300\n" +"PO-Revision-Date: 2026-08-13 20:17+0300\n" "Last-Translator: Dushnilin\n" "Language-Team: none\n" "Language: ru\n" @@ -17,6 +17,27 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +msgid "-- Select --" +msgstr "-- Выбрать --" + +msgid ".lst Lists" +msgstr "Списки .lst" + +msgid "(provider default)" +msgstr "(по умолчанию провайдера)" + +msgid "+ Add JSON outbound" +msgstr "+ Добавить JSON outbound" + +msgid "+ Add level" +msgstr "+ Добавить уровень" + +msgid "+ Add priority" +msgstr "+ Добавить приоритет" + +msgid "+ Add URLTest" +msgstr "+ Добавить URLTest" + msgid "⏹ Stop" msgstr "⏹ Стоп" @@ -26,6 +47,12 @@ msgstr "▶ Старт" msgid "⚙ Advanced Settings" msgstr "⚙ Настройки" +msgid "⚠️ If all Bootstrap DNS fail 3 times, queries will be sent to your ISP's DNS in plaintext. Only use as a last resort to prevent complete internet loss." +msgstr "⚠️ Если все Bootstrap DNS завершатся с ошибкой 3 раза, запросы будут отправлены в DNS вашего провайдера в открытом виде. Используйте только в крайнем случае для предотвращения полной потери интернета." + +msgid "⚠️ If all Main DNS fail 3 times, queries will be sent to your ISP's DNS in plaintext. Only use as a last resort to prevent complete internet loss." +msgstr "⚠️ Если все основные DNS завершатся с ошибкой 3 раза, запросы будут отправлены в DNS вашего провайдера в открытом виде. Используйте только в крайнем случае для предотвращения полной потери интернета." + msgid "✔ Running" msgstr "✔ Работает" @@ -35,6 +62,9 @@ msgstr "✘ Остановлено" msgid "🔑 Generate" msgstr "🔑 Сгенерировать" +msgid "Action" +msgstr "Действие" + msgid "Active" msgstr "Активные" @@ -50,18 +80,63 @@ msgstr "Активные соединения" msgid "Active Main DNS" msgstr "Активный основной DNS" -msgid "Active Routes" -msgstr "" +msgid "Add at least one DNS server" +msgstr "Добавьте как минимум один DNS-сервер" + +msgid "Add prefix to nodes" +msgstr "Добавить префикс к узлам" + +msgid "Add URLs or local paths to .lst lists containing domains and subnets." +msgstr "Добавьте URL или локальные пути к спискам .lst, содержащим домены и подсети." + +msgid "Add URLs or local paths to .lst lists containing domains. IP entries are ignored." +msgstr "Добавьте URL или локальные пути к спискам .lst, содержащим домены. IP-записи игнорируются." + +msgid "Add URLs or local paths to .srs / .json lists. Only domain rules are supported." +msgstr "Добавьте URL или локальные пути к спискам .srs / .json. Поддерживаются только правила доменов." + +msgid "Add URLs or local paths to .srs / .json lists. Subnets are ignored by default." +msgstr "Добавьте URL или локальные пути к спискам .srs / .json. Подсети игнорируются по умолчанию." + +msgid "Add URLTest / Priority group" +msgstr "Добавить группу URLTest / Приоритет" msgid "Additional marking rules found" msgstr "Найдены дополнительные правила маркировки" +msgid "Additionally exclude servers by protocol, transport, and security. Exclude only servers matching the specified parameters." +msgstr "Дополнительно исключать серверы по протоколу, транспорту и безопасности. Исключать только серверы, соответствующие указанным параметрам." + +msgid "Additionally filter servers by protocol, transport, and security. Add only servers matching the specified parameters." +msgstr "Дополнительно фильтровать серверы по протоколу, транспорту и безопасности. Добавлять только серверы, соответствующие указанным параметрам." + +msgid "Additionally hide servers by protocol, transport, and security. Hide servers matching the specified parameters." +msgstr "Дополнительно скрывать серверы по протоколу, транспорту и безопасности. Скрывать серверы, соответствующие указанным параметрам." + +msgid "Additionally show servers by protocol, transport, and security. Add only servers matching the specified parameters." +msgstr "Дополнительно показывать серверы по протоколу, транспорту и безопасности. Показывать только серверы, соответствующие указанным параметрам." + +msgid "Administrator Chat IDs" +msgstr "Chat ID администраторов" + msgid "Advanced self-healing features. Requires Watchdog to be enabled." msgstr "Расширенные функции самовосстановления. Требуется включённый Watchdog." +msgid "Advanced System" +msgstr "Расширенные настройки" + +msgid "AEAD Method" +msgstr "Метод AEAD" + +msgid "AI & Watchdog" +msgstr "ИИ и Watchdog" + msgid "AI Agent REST API (12 Endpoints)" msgstr "HTTP REST API ИИ-агента (12 эндпоинтов)" +msgid "AI Agent REST API Bearer Token" +msgstr "Токен Bearer для REST API ИИ-агента" + msgid "AI API Key" msgstr "API-ключ ИИ" @@ -69,22 +144,22 @@ msgid "AI Chat & Tachyon Assistant" msgstr "ИИ Чат & Ассистент Tachyon" msgid "AI Chat Assistant" -msgstr "" +msgstr "ИИ Чат-ассистент" msgid "AI Doctor (ChatGPT / DeepSeek API)" msgstr "AI Doctor (ChatGPT / DeepSeek API)" msgid "AI Doctor Diagnosis" -msgstr "" +msgstr "Диагностика ИИ-доктора" msgid "AI Doctor failed" -msgstr "" +msgstr "Ошибка ИИ-доктора" msgid "AI Doctor Language" -msgstr "" +msgstr "Язык ИИ-доктора" msgid "AI Model" -msgstr "" +msgstr "Модель ИИ" msgid "AI Provider" msgstr "Провайдер ИИ" @@ -101,54 +176,147 @@ msgstr "Настройки AI Watchdog сохранены. Перезапуст msgid "All" msgstr "Все" +msgid "All except selected" +msgstr "Все кроме выбранных" + +msgid "All remaining except selected" +msgstr "Все остальные кроме выбранных" + +msgid "All remaining servers" +msgstr "Все остальные серверы" + +msgid "All remaining servers means every server not already assigned to a higher-priority level." +msgstr "Все остальные серверы — это все серверы, не назначенные на уровень с более высоким приоритетом." + msgid "All Routes" msgstr "Все маршруты" -msgid "All Services" -msgstr "" +msgid "All servers" +msgstr "Все серверы" + +msgid "All traffic from these IP addresses will be routed through the section unconditionally, ignoring all other conditions." +msgstr "Весь трафик от этих IP-адресов будет маршрутизирован через секцию безусловно, игнорируя все остальные условия." + +msgid "Allow Insecure TLS" +msgstr "Разрешить небезопасный TLS" + +msgid "Allowed domain prefixes are full:, keyword:, and regex:" +msgstr "Допустимые префиксы доменов: full:, keyword:, и regex:" + +msgid "Allows access to YACD from the WAN. Make sure to open the appropriate port in your firewall." +msgstr "Позволяет доступ к YACD из WAN. Убедитесь, что соответствующий порт открыт в файрволе." + +msgid "Allows limiting the list of servers for URLTest" +msgstr "Позволяет ограничить список серверов для URLTest" + +msgid "Allows Tachyon to send diagnostic snapshots to ChatGPT or DeepSeek API for intelligent root-cause analysis and auto-repair recommendations." +msgstr "Позволяет Tachyon отправлять диагностические снимки в ChatGPT или DeepSeek API для умного анализа причин проблем и рекомендаций по исправлению." + +msgid "AmneziaWG config loaded successfully!" +msgstr "Конфигурация AmneziaWG успешно загружена!" + +msgid "AmneziaWG Generator" +msgstr "Генератор AmneziaWG" msgid "Another component action is already running" -msgstr "" +msgstr "Другое действие уже выполняется" + +msgid "API Key for OpenAI (sk-...) or DeepSeek (optional for Ollama / LM Studio)" +msgstr "API-ключ для OpenAI (sk-...) или DeepSeek (опционально для Ollama / LM Studio)" + +msgid "Apply rules of this section only to selected protocols." +msgstr "Применять правила этой секции только к выбранным протоколам." + +msgid "Apply section rules only to the specified local IP addresses" +msgstr "Применять правила секции только к указанным локальным IP-адресам" msgid "Applying changes & reloading services..." msgstr "Применение изменений и перезапуск служб..." -msgid "Cannot save settings" -msgstr "Не удалось сохранить настройки" - msgid "Applying fix" -msgstr "" +msgstr "Применение исправления" msgid "Ask Tachyon AI Assistant a question..." msgstr "Задайте вопрос ИИ-ассистенту..." -msgid "Auto" -msgstr "" +msgid "At least one Admin Chat ID is required" +msgstr "Требуется как минимум один Chat ID администратора" + +msgid "At least one valid domain must be specified." +msgstr "Должен быть указан как минимум один действительный домен." + +msgid "At least one valid IP or subnet must be specified." +msgstr "Должен быть указан как минимум один действительный IP или подсеть." + +msgid "Auth Digest" +msgstr "Auth Digest" msgid "Auto refresh" msgstr "Автообновление" +msgid "Auto-detected domains" +msgstr "Автоопределённые домены" + +msgid "Auto-detected Domains" +msgstr "Автоопределённые домены" + msgid "Auto-detects blocked domains from logs and adds them to the first section where they work via proxy." msgstr "Автоматически определяет заблокированные домены из логов и добавляет их в первую секцию, где они работают через прокси." +msgid "Auto-generate HWID" +msgstr "Авто-генерация HWID" + +msgid "Auto-update Hosts Lists" +msgstr "Автообновление списков Hosts" + +msgid "Automatic component update checks" +msgstr "Автоматическая проверка обновлений компонентов" + +msgid "Automatic User-Agent selection" +msgstr "Автоматический выбор User-Agent" + +msgid "Automatically add text to the name of each server from this subscription for convenient filtering." +msgstr "Автоматически добавлять текст к имени каждого сервера из этой подписки для удобной фильтрации." + +msgid "Automatically check installed components for new versions" +msgstr "Автоматически проверять установленные компоненты на наличие новых версий" + +msgid "Automatically generate a Cloudflare WARP account and configure all AmneziaWG settings." +msgstr "Автоматически создать аккаунт Cloudflare WARP и настроить все параметры AmneziaWG." + +msgid "Automatically increase check intervals when healthy (to 5 min) and decrease on problems (to 120s)." +msgstr "Автоматически увеличивать интервалы проверки при нормальном состоянии (до 5 мин) и уменьшать при проблемах (до 120с)." + msgid "Automatically select the fastest node in the current level" msgstr "Автовыбор самого быстрого узла уровня" -msgid "Available" -msgstr "" +msgid "Automatically update remote hosts lists on schedule" +msgstr "Автоматически обновлять удалённые списки Hosts по расписанию" msgid "Available actions" msgstr "Доступные действия" -msgid "Avg Latency" -msgstr "Ср. задержка" +msgid "Backend validation failed: %s" +msgstr "Ошибка проверки бэкенда: %s" msgid "Bearer Auth Token" msgstr "Токен авторизации (Bearer)" +msgid "Belarus (by)" +msgstr "Беларусь (by)" + +msgid "BitTorrent / P2P" +msgstr "BitTorrent / P2P" + msgid "Bootstrap DNS" msgstr "Bootstrap DNS" +msgid "Bootstrap DNS Servers" +msgstr "Bootstrap DNS-серверы" + +msgid "Bot Status" +msgstr "Статус бота" + msgid "Browser FakeIP check could not be completed" msgstr "Не удалось выполнить проверку FakeIP в браузере" @@ -161,6 +329,24 @@ msgstr "Браузер использует FakeIP" msgid "Bug report downloaded" msgstr "Отчёт об ошибке загружен" +msgid "Built-in rule sets" +msgstr "Встроенные наборы правил" + +msgid "By flag emoji from name" +msgstr "По эмодзи флага из имени" + +msgid "ByeDPI listen address and port are assigned by Tachyon and must not be set in the strategy." +msgstr "Адрес и порт прослушивания ByeDPI назначаются Tachyon и не должны задаваться в стратегии." + +msgid "ByeDPI option does not accept a compact value: %s" +msgstr "Параметр ByeDPI не принимает компактное значение: %s" + +msgid "ByeDPI option does not accept a value: %s" +msgstr "Параметр ByeDPI не принимает значение: %s" + +msgid "ByeDPI option requires a value: %s" +msgstr "Параметр ByeDPI требует значение: %s" + msgid "ByeDPI package is installed" msgstr "Пакет ByeDPI установлен" @@ -179,14 +365,38 @@ msgstr "Outbound ByeDPI в sing-box настроен" msgid "ByeDPI sing-box outbound is not configured" msgstr "Outbound ByeDPI в sing-box не настроен" +msgid "ByeDPI Strategy" +msgstr "Стратегия ByeDPI" + +msgid "ByeDPI strategy cannot be empty" +msgstr "Стратегия ByeDPI не может быть пустой" + +msgid "Bypasses UDP traffic for selected game consoles (PS5/Xbox) to achieve NAT Type 1 / 2 (Full Cone NAT) for P2P matchmaking, while keeping TCP (PSN/Auth) routed through the proxy." +msgstr "Обходит UDP-трафик для выбранных игровых консолей (PS5/Xbox) для достижения NAT Type 1 / 2 (Full Cone NAT) для P2P-матчмейкинга, сохраняя TCP (PSN/Auth) через прокси." + +msgid "CA Certificate" +msgstr "CA-сертификат" + +msgid "Cache all built-in lists and databases even if they are not currently selected in any section. Recommended if you have plenty of storage space or USB drive." +msgstr "Кэшировать все встроенные списки и базы данных, даже если они не выбраны ни в одной секции. Рекомендуется при большом объёме хранилища или USB-накопителе." + +msgid "Cache File Path" +msgstr "Путь к файлу кэша" + +msgid "Cache file path cannot be empty" +msgstr "Путь к файлу кэша не может быть пустым" + +msgid "Cancel" +msgstr "Отмена" + msgid "Cannot receive checks result" msgstr "Не удалось получить результаты проверки" -msgid "Check Again" -msgstr "Проверить снова" +msgid "Cannot save settings" +msgstr "Не удалось сохранить настройки" -msgid "Check All" -msgstr "Проверить все" +msgid "Cascade connection" +msgstr "Каскадное подключение" msgid "Check completed!" msgstr "Проверка завершена!" @@ -194,20 +404,14 @@ msgstr "Проверка завершена!" msgid "Check Connection" msgstr "Проверить подключение" -msgid "Check Domain" -msgstr "" - -msgid "Check domain or IP (e.g. example.com)..." -msgstr "Проверить домен или IP (напр. example.com)..." - msgid "Check interval" msgstr "Интервал проверки" -msgid "Check Mode:" -msgstr "Режим проверки:" - msgid "Check Services" -msgstr "" +msgstr "Проверить сервисы" + +msgid "Check timeout after which the server is considered dead" +msgstr "Таймаут проверки, после которого сервер считается недоступным" msgid "Check update" msgstr "Проверить обновление" @@ -230,6 +434,9 @@ msgstr "Проверяем, пожалуйста подождите" msgid "Checking..." msgstr "Проверка..." +msgid "Checking…" +msgstr "Проверка…" + msgid "checks" msgstr "проверки" @@ -242,12 +449,36 @@ msgstr "Проверки пройдены" msgid "Checks passed with manual DHCP" msgstr "Проверки пройдены с ручным DHCP" +msgid "China (cn)" +msgstr "Китай (cn)" + +msgid "Choose Hosts File..." +msgstr "Выбрать файл Hosts..." + +msgid "Choose whether to route traffic to all destinations except selected countries (Exclude) or only to selected countries (Include)." +msgstr "Выберите, маршрутизировать ли трафик ко всем назначениям кроме выбранных стран (Исключить) или только в выбранные страны (Включить)." + msgid "CIDR must be between 0 and 32 for IPv4 or 0 and 128 for IPv6" msgstr "CIDR должен быть от 0 до 32 для IPv4 или от 0 до 128 для IPv6" +msgid "Cipher" +msgstr "Шифр" + +msgid "Clean Comments" +msgstr "Очистить комментарии" + msgid "Cleaning configuration & reloading..." msgstr "Очистка конфигураций и перезапуск..." +msgid "Clear" +msgstr "Очистить" + +msgid "Client Certificate" +msgstr "Клиентский сертификат" + +msgid "Client Key" +msgstr "Клиентский ключ" + msgid "Close" msgstr "Закрыть" @@ -260,27 +491,63 @@ msgstr "Закрыть подключение" msgid "Closed" msgstr "Закрытые" +msgid "Cloudflare account / device ID" +msgstr "Аккаунт / ID устройства Cloudflare" + +msgid "Cloudflare API access token" +msgstr "Токен доступа Cloudflare API" + +msgid "Cloudflare WARP account / device ID" +msgstr "Аккаунт / ID устройства Cloudflare WARP" + +msgid "Cloudflare WARP API access token" +msgstr "Токен доступа Cloudflare WARP API" + +msgid "Comma-separated list of Telegram user IDs authorized to control the bot." +msgstr "Список Telegram user ID через запятую, авторизованных для управления ботом." + +msgid "Community Lists" +msgstr "Community-списки" + msgid "Comparing versions & fingerprint check..." msgstr "Сравнение версий и проверка целостности..." msgid "Component update available" msgstr "Доступно обновление компонента" +msgid "Component update check interval" +msgstr "Интервал проверки обновлений компонентов" + msgid "compressed" msgstr "compressed" +msgid "Conditions" +msgstr "Условия" + +msgid "Config File Path" +msgstr "Путь к файлу конфигурации" + +msgid "Configure User-Agent in the item settings" +msgstr "Настройте User-Agent в параметрах элемента" + msgid "Conflict" msgstr "Конфликт" msgid "Connect ChatGPT, DeepSeek or local LLM to get automated diagnostic reports and intelligent root-cause analysis." msgstr "Подключите ChatGPT, DeepSeek или локальную модель LLM для получения автоматических диагностических отчётов и умного анализа сетевых проблем." +msgid "Connect through" +msgstr "Подключаться через" + msgid "Connected" msgstr "Подключено" msgid "Connecting to update server..." msgstr "Подключение к серверу обновлений..." +msgid "Connection URL" +msgstr "URL подключения" + msgid "Connections are unavailable" msgstr "Подключения недоступны" @@ -299,8 +566,17 @@ msgstr "Скопировать ссылку прокси" msgid "Could not compare FakeIP and control public IPs" msgstr "Не удалось сравнить публичные IP FakeIP и контрольной проверки" +msgid "Country code (e.g. ru, us, de)" +msgstr "Код страны (напр. ru, us, de)" + msgid "Current Diagnosis" -msgstr "" +msgstr "Текущий диагноз" + +msgid "Current section cannot be used as its own transit section" +msgstr "Текущая секция не может использоваться как собственная транзитная секция" + +msgid "Current section cannot download its own subscription" +msgstr "Текущая секция не может загружать собственную подписку" msgid "Currently unavailable" msgstr "Временно недоступно" @@ -308,21 +584,57 @@ msgstr "Временно недоступно" msgid "Custom API Endpoint URL" msgstr "Пользовательский URL эндпоинта API" -msgid "Custom Domains" -msgstr "" +msgid "Custom device headers" +msgstr "Пользовательские заголовки устройства" + +msgid "Custom DNS Records (Hosts)" +msgstr "Пользовательские DNS-записи (Hosts)" + +msgid "Custom OpenAI-Compatible API (OpenRouter)" +msgstr "Пользовательский OpenAI-совместимый API (OpenRouter)" + +msgid "Custom OpenAI-compatible API endpoint URL (e.g. http://192.168.1.100:11434/v1/chat/completions)" +msgstr "Пользовательский URL эндпоинта OpenAI-совместимого API (напр. http://192.168.1.100:11434/v1/chat/completions)" + +msgid "Custom outbound configurations in JSON format" +msgstr "Пользовательские конфигурации outbound в формате JSON" msgid "Dashboard currently unavailable" msgstr "Дашборд сейчас недоступен" +msgid "Default (auto)" +msgstr "По умолчанию (авто)" + +msgid "Default address for checking server availability and latency. URLTest uses its own address." +msgstr "Адрес по умолчанию для проверки доступности и задержки сервера. URLTest использует свой собственный адрес." + +msgid "Delay in milliseconds before reloading Tachyon after interface UP" +msgstr "Задержка в миллисекундах перед перезагрузкой Tachyon после поднятия интерфейса" + +msgid "Delay value cannot be empty" +msgstr "Значение задержки не может быть пустым" + +msgid "Detect server country" +msgstr "Определять страну сервера" + +msgid "Detects and drops STUN/TURN packets in nftables to prevent real IP leaks via WebRTC." +msgstr "Обнаруживает и отбрасывает пакеты STUN/TURN в nftables для предотвращения утечек реального IP через WebRTC." + msgid "detour must be a non-empty string" msgstr "detour должен быть непустой строкой" +msgid "Device filter" +msgstr "Фильтр устройств" + msgid "Device IPs (one per line):" msgstr "IP устройств (по одному на строку):" msgid "Device IPs saved" msgstr "IP устройств сохранены" +msgid "Device or IP" +msgstr "Устройство или IP" + msgid "Devices listed here are always routed through the assigned section, regardless of global rules." msgstr "Устройства из этого списка всегда маршрутизируются через назначенную секцию, независимо от глобальных правил." @@ -332,27 +644,126 @@ msgstr "DHCP содержит DNS сервер" msgid "DHCP is managed manually" msgstr "DHCP управляется вручную" -msgid "Direct" -msgstr "Напрямую" +msgid "Direct (Default)" +msgstr "Прямое (по умолчанию)" + +msgid "Direct connection" +msgstr "Прямое подключение" msgid "Disable autostart" msgstr "Отключить автостарт" +msgid "Disable QUIC" +msgstr "Отключить QUIC" + +msgid "Disable the QUIC protocol to improve compatibility or fix issues with video streaming" +msgstr "Отключить протокол QUIC для улучшения совместимости или исправления проблем с видео-стримингом" + +msgid "Disabling interception is incompatible with action=zapret2 because Tachyon sends matched traffic through NFQUEUE." +msgstr "Отключение перехвата несовместимо с action=zapret2, потому что Tachyon направляет совпавший трафик через NFQUEUE." + +msgid "Display name" +msgstr "Отображаемое имя" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS Check Interval" +msgstr "Интервал проверки DNS" + +msgid "DNS Check Interval (s)" +msgstr "Интервал проверки DNS (с)" + +msgid "DNS Failures Before Switching" +msgstr "Ошибок DNS до переключения" + msgid "DNS on router" msgstr "DNS на роутере" +msgid "DNS over HTTPS (DoH)" +msgstr "DNS через HTTPS (DoH)" + +msgid "DNS over QUIC (DoQ)" +msgstr "DNS через QUIC (DoQ)" + +msgid "DNS over TLS (DoT)" +msgstr "DNS через TLS (DoT)" + +msgid "DNS protocol" +msgstr "Протокол DNS" + +msgid "DNS Protocol Type" +msgstr "Тип протокола DNS" + +msgid "DNS protocol used by the resolver" +msgstr "Протокол DNS, используемый резолвером" + +msgid "DNS requests through section" +msgstr "DNS-запросы через секцию" + +msgid "DNS Rewrite TTL" +msgstr "TTL DNS-записей" + +msgid "DNS server" +msgstr "DNS-сервер" + msgid "DNS server address cannot be empty" msgstr "Адрес DNS-сервера не может быть пустым" +msgid "DNS server used by the resolver" +msgstr "DNS-сервер, используемый резолвером" + +msgid "DNS server used to obtain IP addresses for upstream DNS and proxies. If multiple servers are selected, a timeout switches to a backup." +msgstr "DNS-сервер для получения IP-адресов для вышестоящих DNS и прокси. Если выбрано несколько серверов, при таймауте происходит переключение на резервный." + +msgid "DNS Servers" +msgstr "DNS-серверы" + +msgid "DNS Settings" +msgstr "Настройки DNS" + +msgid "DNS Strategy" +msgstr "Стратегия DNS" + +msgid "DNS Successful Checks Before Recovery" +msgstr "Успешных проверок DNS до восстановления" + +msgid "DNS through proxy" +msgstr "DNS через прокси" + +msgid "DNS through section" +msgstr "DNS через секцию" + msgid "DNS Turbo Cache" msgstr "Быстрый DNS-кэш" msgid "DNS Turbo Cache saved" msgstr "DNS Turbo Cache сохранён" +msgid "DNS Unavailability Timeout" +msgstr "Таймаут недоступности DNS" + msgid "Do not panic, everything can be fixed, just..." msgstr "Не паникуйте, всё можно исправить, просто..." +msgid "Do not test servers from these countries." +msgstr "Не тестировать серверы из этих стран." + +msgid "Do not test servers whose names match the expression." +msgstr "Не тестировать серверы, чьи имена соответствуют выражению." + +msgid "Do not test servers with one of the selected protocols." +msgstr "Не тестировать серверы с одним из выбранных протоколов." + +msgid "Do not test servers with one of the selected security types." +msgstr "Не тестировать серверы с одним из выбранных типов безопасности." + +msgid "Do not test servers with one of the selected transports." +msgstr "Не тестировать серверы с одним из выбранных транспортов." + +msgid "Do not test specified servers." +msgstr "Не тестировать указанные серверы." + msgid "Doctor failed" msgstr "Доктор завершился с ошибкой" @@ -362,41 +773,254 @@ msgstr "Исправление доктором" msgid "Does not resolve" msgstr "Не резолвится" +msgid "Domain and IP lists" +msgstr "Списки доменов и IP" + +msgid "Domain lists" +msgstr "Списки доменов" + +msgid "Domain Resolver" +msgstr "Резолвер доменов" + +msgid "Domain test sections" +msgstr "Секции тестирования доменов" + +msgid "Domains" +msgstr "Домены" + +msgid "Domains automatically detected by Smart Detect or added via Telegram bot. You can manually edit or remove them here." +msgstr "Домены, автоматически определённые Smart Detect или добавленные через Telegram-бота. Вы можете вручную отредактировать или удалить их здесь." + +msgid "Done" +msgstr "Готово" + +msgid "Dont Touch My DHCP!" +msgstr "Не трогайте мой DHCP!" + msgid "Downlink" msgstr "Входящий" msgid "Download" msgstr "Скачать" +msgid "Download component packages via the selected section" +msgstr "Загружать пакеты компонентов через выбранную секцию" + +msgid "Download components through" +msgstr "Загружать компоненты через" + +msgid "Download components through a section" +msgstr "Загружать компоненты через секцию" + +msgid "Download lists through" +msgstr "Загружать списки через" + +msgid "Download lists through a section" +msgstr "Загружать списки через секцию" + +msgid "Download remote lists and rule sets via the selected section" +msgstr "Загружать удалённые списки и наборы правил через выбранную секцию" + +msgid "Download subscription through a section" +msgstr "Загружать подписку через секцию" + +msgid "Download subscriptions via the selected section" +msgstr "Загружать подписки через выбранную секцию" + +msgid "Download through" +msgstr "Загружать через" + msgid "Downloaded" msgstr "Загружено" msgid "Downloading package from repository..." msgstr "Загрузка пакета из репозитория..." +msgid "DSCP marks (QoS)" +msgstr "DSCP-метки (QoS)" + msgid "Duplicate JSON outbound tag" msgstr "Такой тег JSON outbound уже используется" +msgid "Duplicate value" +msgstr "Дублирующееся значение" + +msgid "e.g. AES-256-GCM — leave empty for default" +msgstr "напр. AES-256-GCM — оставьте пустым для значения по умолчанию" + +msgid "e.g. google.com, 1.1.1.1, 443" +msgstr "напр. google.com, 1.1.1.1, 443" + +msgid "e.g. SHA256 — leave empty for default" +msgstr "напр. SHA256 — оставьте пустым для значения по умолчанию" + +msgid "Enable" +msgstr "Включить" + +msgid "Enable Adaptive Intervals" +msgstr "Включить адаптивные интервалы" + +msgid "Enable AI Doctor (ChatGPT / LLM Analysis)" +msgstr "Включить ИИ-доктора (анализ ChatGPT / LLM)" + msgid "Enable AI Doctor (LLM Integration)" msgstr "Включить AI Doctor (интеграция с LLM)" +msgid "Enable Anomaly Detection" +msgstr "Включить обнаружение аномалий" + +msgid "Enable automatic updates for remote lists and rule sets" +msgstr "Включить автообновление удалённых списков и наборов правил" + msgid "Enable autostart" msgstr "Включить автостарт" +msgid "Enable built-in DNS resolver for domains handled by this section" +msgstr "Включить встроенный DNS-резолвер для доменов, обрабатываемых этой секцией" + +msgid "Enable Config Validation" +msgstr "Включить проверку конфигурации" + +msgid "Enable DNS Continuous Check" +msgstr "Непрерывная проверка DNS" + msgid "Enable DNS Turbo Cache" msgstr "Включить быстрый DNS-кэш" +msgid "Enable Firewall Reload Dedup" +msgstr "Включить дедупликацию перезагрузки файрвола" + +msgid "Enable Graceful Degradation" +msgstr "Включить мягкое деградирование" + +msgid "Enable Health Metrics" +msgstr "Включить метрики здоровья" + +msgid "Enable list updates" +msgstr "Включить обновление списков" + +msgid "Enable Mixed Proxy" +msgstr "Включить смешанный прокси" + +msgid "Enable Mixed Proxy Authentication" +msgstr "Включить аутентификацию смешанного прокси" + +msgid "Enable Output Network Interface" +msgstr "Включить выходной сетевой интерфейс" + +msgid "Enable Proxy Health Monitor" +msgstr "Включить мониторинг здоровья прокси" + +msgid "Enable Smart Cooldowns" +msgstr "Включить умные cooldown'ы" + msgid "Enable Smart Detect" msgstr "Включить Smart Detect" +msgid "Enable Telegram Bot" +msgstr "Включить Telegram-бота" + +msgid "Enable WAN DNS Fallback for Bootstrap DNS" +msgstr "Резервный WAN DNS для Bootstrap DNS" + +msgid "Enable WAN DNS Fallback for Main DNS" +msgstr "Резервный WAN DNS для основного DNS" + +msgid "Enable Watchdog" +msgstr "Включить Watchdog" + +msgid "Enable YACD" +msgstr "Включить YACD" + +msgid "Enable YACD WAN Access" +msgstr "Включить WAN-доступ к YACD" + +msgid "Enables the background daemon that polls Telegram for commands and sends notifications." +msgstr "Включает фоновый демон, который опрашивает Telegram на наличие команд и отправляет уведомления." + +msgid "Enables the background watchdog process to monitor services and auto-recover on failures." +msgstr "Включает фоновый процесс watchdog для мониторинга сервисов и автоматического восстановления при сбоях." + +msgid "Enter a complete sing-box outbound object" +msgstr "Введите полный объект outbound sing-box" + +msgid "Enter a display name" +msgstr "Введите отображаемое имя" + +msgid "Enter a level name" +msgstr "Введите имя уровня" + +msgid "Enter HWID" +msgstr "Введите HWID" + +msgid "Enter the API token obtained from @BotFather." +msgstr "Введите токен API, полученный от @BotFather." + +msgid "Enter the HWID sent with subscription requests" +msgstr "Введите HWID, отправляемый с запросами подписки" + +msgid "Enter the subscription URL" +msgstr "Введите URL подписки" + msgid "Environment preparation & dependency check..." msgstr "Подготовка окружения и проверка зависимостей..." +msgid "Error" +msgstr "Ошибка" + +msgid "Error running generator:" +msgstr "Ошибка запуска генератора:" + +msgid "Error running trace:" +msgstr "Ошибка выполнения трассировки:" + +msgid "Exclude by proxy parameters" +msgstr "Исключить по параметрам прокси" + +msgid "Exclude by regular expression" +msgstr "Исключить по регулярному выражению" + +msgid "Exclude countries" +msgstr "Исключить страны" + +msgid "Exclude selected countries" +msgstr "Исключить выбранные страны" + +msgid "Exclude servers" +msgstr "Исключить серверы" + +msgid "Exclude servers with one of the selected protocols from this level." +msgstr "Исключить серверы с одним из выбранных протоколов с этого уровня." + +msgid "Exclude servers with one of the selected security types from this level." +msgstr "Исключить серверы с одним из выбранных типов безопасности с этого уровня." + +msgid "Exclude servers with one of the selected transports from this level." +msgstr "Исключить серверы с одним из выбранных транспортов с этого уровня." + +msgid "Exclude traffic types" +msgstr "Исключить типы трафика" + +msgid "Exclude URLTest / Priority group" +msgstr "Исключить группу URLTest / Приоритет" + +msgid "Excluded devices" +msgstr "Исключённые устройства" + msgid "Expires" msgstr "Истекает" +msgid "Expose this section as a local HTTP+SOCKS proxy" +msgstr "Предоставить эту секцию как локальный HTTP+SOCKS прокси" + +msgid "External nfqws config files bypass Tachyon queue management and explicit validation." +msgstr "Внешние файлы конфигурации nfqws обходят управление очередями Tachyon и явную проверку." + +msgid "External nfqws2 config files bypass Tachyon queue management and explicit validation." +msgstr "Внешние файлы конфигурации nfqws2 обходят управление очередями Tachyon и явную проверку." + msgid "Failed to apply fix" -msgstr "" +msgstr "Не удалось применить исправление" msgid "Failed to close connection" msgstr "Не удалось закрыть подключение" @@ -413,14 +1037,20 @@ msgstr "Не удалось выполнить" msgid "Failed to generate bug report" msgstr "Не удалось создать отчёт об ошибке" -msgid "Failed to parse target list." -msgstr "Ошибка обработки списка целей." +msgid "Failed to generate WARP config:" +msgstr "Не удалось сгенерировать конфигурацию WARP:" + +msgid "Failed to parse file:" +msgstr "Ошибка разбора файла:" + +msgid "Failed to parse WARP config:" +msgstr "Не удалось разобрать конфигурацию WARP:" msgid "Failed to receive response from AI service." msgstr "Не удалось получить ответ от ИИ-сервиса." -msgid "Failed to run service check." -msgstr "Не удалось выполнить проверку сервисов." +msgid "Failed to reset settings" +msgstr "Не удалось сбросить настройки" msgid "Failed to save AI Watchdog settings" msgstr "Ошибка сохранения настроек AI Watchdog" @@ -434,6 +1064,18 @@ msgstr "Не удалось сохранить DNS Turbo Cache" msgid "Failed to save Smart Detect settings" msgstr "Ошибка сохранения настроек Smart Detect" +msgid "Failed to start bot" +msgstr "Не удалось запустить бота" + +msgid "Failed to start watchdog" +msgstr "Не удалось запустить watchdog" + +msgid "Failed to stop bot" +msgstr "Не удалось остановить бота" + +msgid "Failed to stop watchdog" +msgstr "Не удалось остановить watchdog" + msgid "Failed to update subscriptions" msgstr "Не удалось обновить подписки" @@ -446,6 +1088,9 @@ msgstr "FakeIP и контрольная проверка используют msgid "FakeIP works; public IP comparison is inconclusive" msgstr "FakeIP работает; сравнение публичных IP не дает однозначного результата" +msgid "Faster DNS health monitoring than the default cycle. Switches bootstrap DNS on failure." +msgstr "Более быстрый мониторинг состояния DNS, чем стандартный цикл. Переключает bootstrap DNS при сбое." + msgid "Faster server search interval" msgstr "Интервал поиска более быстрого сервера" @@ -455,30 +1100,81 @@ msgstr "Самый быстрый" msgid "Fetching release & commit metadata..." msgstr "Запрос метаданных релизов и коммитов..." -msgid "Fetching service targets..." -msgstr "Получение списка сервисов..." +msgid "Filter the servers that will be displayed on the dashboard." +msgstr "Фильтровать серверы, отображаемые на дашборде." -msgid "Filter by service:" -msgstr "" +msgid "Finland (fi)" +msgstr "Финляндия (fi)" msgid "Firewall WAN port" msgstr "Порт в firewall для WAN" msgid "Fix applied" -msgstr "" +msgstr "Исправление применено" + +msgid "Fix the highlighted fields and save again." +msgstr "Исправьте выделенные поля и сохраните снова." msgid "Fixed" msgstr "Исправлено" +msgid "Forced device routing" +msgstr "Принудительная маршрутизация устройств" + +msgid "Forces sing-box to tunnel DNS requests via DoQ with Encrypted Client Hello (ECH) for SNI hiding." +msgstr "Принудительно направлять DNS-запросы через DoQ с Encrypted Client Hello (ECH) для скрытия SNI." + +msgid "France (fr)" +msgstr "Франция (fr)" + msgid "Full System Diagnostic" -msgstr "" +msgstr "Полная диагностика системы" + +msgid "Fuzzing is not supported here because Tachyon needs deterministic runtime validation." +msgstr "Fuzzing не поддерживается здесь, потому что Tachyon нуждается в детерминированной проверке во время выполнения." + +msgid "Game Console IPs" +msgstr "IP игровых консолей" + +msgid "Game Console Optimizer (NAT Type 1)" +msgstr "Оптимизатор игровых консолей (NAT Type 1)" + +msgid "Generate a random 16-character hexadecimal HWID" +msgstr "Сгенерировать случайный 16-символьный шестнадцатеричный HWID" msgid "Generate bug report" msgstr "Сгенерировать баг-репорт" +msgid "Generate HWID" +msgstr "Сгенерировать HWID" + +msgid "Generate HWID from router hardware information for this subscription" +msgstr "Сгенерировать HWID из аппаратной информации роутера для этой подписки" + +msgid "Generate WARP Config" +msgstr "Сгенерировать конфигурацию WARP" + msgid "Generated inbound" msgstr "Созданный inbound" +msgid "Generated!" +msgstr "Сгенерировано!" + +msgid "Generating…" +msgstr "Генерация…" + +msgid "GeoIP Countries" +msgstr "Страны GeoIP" + +msgid "GeoIP Mode" +msgstr "Режим GeoIP" + +msgid "GeoSite / GeoIP" +msgstr "GeoSite / GeoIP" + +msgid "Germany (de)" +msgstr "Германия (de)" + msgid "GET endpoints are open on LAN. POST endpoints require Authorization: Bearer ." msgstr "GET-эндпоинты открыты в локальной сети. POST-эндпоинты требуют Authorization: Bearer ." @@ -494,18 +1190,84 @@ msgstr "Проверки здоровья" msgid "Hello! I am Tachyon AI Assistant. How can I help you today? Ask me about domain blocks, diagnostics, or router settings." msgstr "Привет! Я ИИ-ассистент Tachyon. Чем могу помочь? Задайте вопрос о блокировках, диагностике или настройках роутера." +msgid "Hide cascade connection nodes" +msgstr "Скрыть узлы каскадных подключений" + +msgid "Hide individual nodes that are already included in imported subscription URLTest groups" +msgstr "Скрыть отдельные узлы, уже включённые в импортированные группы URLTest подписки" + +msgid "Hide intermediate nodes used as detours by other subscription nodes" +msgstr "Скрыть промежуточные узлы, используемые как detour другими узлами подписки" + +msgid "Hide selected servers." +msgstr "Скрыть выбранные серверы." + +msgid "Hide servers from selected groups without repeating their filtering criteria." +msgstr "Скрыть серверы из выбранных групп без повторения критериев фильтрации." + +msgid "Hide servers from the specified countries." +msgstr "Скрыть серверы из указанных стран." + +msgid "Hide servers whose names match the expression." +msgstr "Скрыть серверы, чьи имена соответствуют выражению." + +msgid "Hide servers with one of the selected protocols." +msgstr "Скрыть серверы с одним из выбранных протоколов." + +msgid "Hide servers with one of the selected security types." +msgstr "Скрыть серверы с одним из выбранных типов безопасности." + +msgid "Hide servers with one of the selected transports." +msgstr "Скрыть серверы с одним из выбранных транспортов." + +msgid "Hide URLTest group nodes" +msgstr "Скрыть узлы групп URLTest" + msgid "Hide values" msgstr "Скрывать значения" msgid "Higher-level check interval" msgstr "Интервал проверки высших уровней" +msgid "Higher-priority DNS Check" +msgstr "Проверка DNS с более высоким приоритетом" + msgid "History" -msgstr "" +msgstr "История" msgid "Host" msgstr "Хост" +msgid "Hosts" +msgstr "Hosts" + +msgid "Hosts Lists Update Interval" +msgstr "Интервал обновления списков Hosts" + +msgid "How many hours of metrics to keep (default 24)." +msgstr "Сколько часов хранить метрики (по умолчанию 24)." + +msgid "How often higher priority levels are checked while a lower level is active" +msgstr "Как часто проверяются уровни с более высоким приоритетом, когда активен нижний уровень" + +msgid "How often the currently selected server is checked" +msgstr "Как часто проверяется текущий сервер" + +msgid "How often to check DNS health in seconds (default 60)." +msgstr "Как часто проверять здоровье DNS в секундах (по умолчанию 60)." + +msgid "How often to check proxy health in seconds (fast tier, default 30)." +msgstr "Как часто проверять здоровье прокси в секундах (быстрый уровень, по умолчанию 30)." + +msgid "How often to check Telegram for new messages (default: 5)." +msgstr "Как часто проверять Telegram на новые сообщения (по умолчанию: 5)." + +msgid "How often to check the active DNS servers." +msgstr "Как часто проверять активные DNS-серверы." + +msgid "How often to check whether a higher-priority DNS server has recovered." +msgstr "Как часто проверять, восстановился ли DNS-сервер с более высоким приоритетом." + msgid "HTTP" msgstr "HTTP" @@ -515,9 +1277,72 @@ msgstr "Ошибка HTTP" msgid "HTTP REST API for external AI agents (Claude, GPT, Open-WebUI) served at /cgi-bin/tachyon-agent/" msgstr "HTTP REST API для внешних ИИ-агентов (Claude, GPT, Open-WebUI), доступен по адресу /cgi-bin/tachyon-agent/" +msgid "HWID" +msgstr "HWID" + msgid "Idle timeout" msgstr "Таймаут простоя" +msgid "If one health check fails with an error, continue running other checks instead of stopping." +msgstr "Если одна проверка завершается ошибкой, продолжать другие проверки, а не останавливаться." + +msgid "Import" +msgstr "Импорт" + +msgid "Import (%d records)" +msgstr "Импорт (%d записей)" + +msgid "Import AmneziaWG settings from .conf file" +msgstr "Импортировать настройки AmneziaWG из файла .conf" + +msgid "Import Hosts File" +msgstr "Импортировать файл Hosts" + +msgid "Import subscription URLTest groups" +msgstr "Импортировать группы URLTest подписки" + +msgid "Import URLTest groups returned by this subscription provider" +msgstr "Импортировать группы URLTest, возвращённые этим провайдером подписки" + +msgid "Include by proxy parameters" +msgstr "Включить по параметрам прокси" + +msgid "Include by regular expression" +msgstr "Включить по регулярному выражению" + +msgid "Include countries" +msgstr "Включить страны" + +msgid "Include IP addresses and subnets" +msgstr "Включить IP-адреса и подсети" + +msgid "Include selected countries" +msgstr "Включить выбранные страны" + +msgid "Include servers" +msgstr "Включить серверы" + +msgid "Init Packet Magic Header (S1)" +msgstr "Magic-заголовок пакета инициализации (S1)" + +msgid "Init Packet Magic Header (S3)" +msgstr "Magic-заголовок пакета инициализации (S3)" + +msgid "Init Packet Payload (I1)" +msgstr "Полезная нагрузка пакета инициализации (I1)" + +msgid "Init Packet Payload (I2)" +msgstr "Полезная нагрузка пакета инициализации (I2)" + +msgid "Init Packet Payload (I3)" +msgstr "Полезная нагрузка пакета инициализации (I3)" + +msgid "Init Packet Payload (I4)" +msgstr "Полезная нагрузка пакета инициализации (I4)" + +msgid "Init Packet Payload (I5)" +msgstr "Полезная нагрузка пакета инициализации (I5)" + msgid "Install" msgstr "Установить" @@ -530,12 +1355,30 @@ msgstr "Установленная сборка → Доступная сбор msgid "Installed version is newer than release" msgstr "Установлена версия новее релиза" +msgid "Interface Monitoring" +msgstr "Мониторинг интерфейсов" + +msgid "Interface Monitoring Delay" +msgstr "Задержка мониторинга интерфейсов" + +msgid "Interface monitoring for Bad WAN" +msgstr "Мониторинг интерфейсов для坏 WAN" + msgid "Interrupt connections" msgstr "Прерывать соединения" +msgid "Interrupt connections when priority failover switches server" +msgstr "Разрывать соединения при переключении приоритетного failover" + +msgid "Interrupt connections when URLTest switches the selected server" +msgstr "Разрывать соединения при переключении URLTest на другой сервер" + msgid "Interval" msgstr "Интервал" +msgid "Invalid ByeDPI strategy" +msgstr "Неверная стратегия ByeDPI" + msgid "Invalid CIDR prefix" msgstr "Неверный префикс CIDR" @@ -599,12 +1442,21 @@ msgstr "Неверный IP-адрес" msgid "Invalid JSON format" msgstr "Неверный формат JSON" +msgid "Invalid line: \"%s\". Use: domain ip or ip domain" +msgstr "Неверная строка: \"%s\". Используйте: domain ip или ip domain" + msgid "Invalid path format. Path must start with \"/\" and contain valid characters" -msgstr "Неверный формат пути. Должен начинаться с \"/\" и содержать допустимые символы" +msgstr "Неверный формат пути. Путь должен начинаться с \"/\" и содержать допустимые символы" msgid "Invalid port number. Must be between 1 and 65535" msgstr "Неверный номер порта. Допустимо от 1 до 65535" +msgid "Invalid port or range. Use 80 or 1000-2000" +msgstr "Неверный порт или диапазон. Используйте 80 или 1000-2000" + +msgid "Invalid regular expression" +msgstr "Неверное регулярное выражение" + msgid "Invalid Shadowsocks URL: decoded credentials must contain method:password" msgstr "Неверный URL Shadowsocks: декодированные данные должны содержать method:password" @@ -615,7 +1467,7 @@ msgid "Invalid Shadowsocks URL: missing credentials" msgstr "Неверный URL Shadowsocks: отсутствуют учетные данные" msgid "Invalid Shadowsocks URL: missing method and password separator \":\"" -msgstr "Недопустимый Shadowsocks URL: отсутствует разделитель метода и пароля \":\"" +msgstr "Неверный Shadowsocks URL: отсутствует разделитель метода и пароля \":\"" msgid "Invalid Shadowsocks URL: missing port" msgstr "Неверный URL Shadowsocks: отсутствует порт" @@ -728,12 +1580,33 @@ msgstr "Неверный URL VLESS: ошибка разбора" msgid "Invalid VMess URL: parsing failed" msgstr "Некорректный VMess URL: ошибка разбора" +msgid "IP Addresses (IP CIDR)" +msgstr "IP-адреса (IP CIDR)" + +msgid "IPs" +msgstr "IP" + +msgid "IPv4 only" +msgstr "Только IPv4" + +msgid "IPv6 only" +msgstr "Только IPv6" + +msgid "Isolate BitTorrent traffic and force it direct to prevent VPN bans" +msgstr "Изолировать трафик BitTorrent и направить его напрямую для предотвращения блокировок VPN" + msgid "Issues" msgstr "Проблемы" msgid "Issues detected" msgstr "Обнаружены проблемы" +msgid "Japan (jp)" +msgstr "Япония (jp)" + +msgid "JSON outbound" +msgstr "JSON outbound" + msgid "JSON outbound cannot be empty" msgstr "JSON outbound не может быть пустым" @@ -746,26 +1619,89 @@ msgstr "JSON outbound должен содержать непустое поле msgid "JSON outbound must contain a non-empty type field" msgstr "JSON outbound должен содержать непустое поле type" +msgid "JSON outbound settings" +msgstr "Настройки JSON outbound" + +msgid "Junk Max Size (Jmax)" +msgstr "Макс. размер мусора (Jmax)" + +msgid "Junk Min Size (Jmin)" +msgstr "Мин. размер мусора (Jmin)" + +msgid "Junk Packet Count (Jc)" +msgstr "Количество мусорных пакетов (Jc)" + +msgid "Kazakhstan (kz)" +msgstr "Казахстан (kz)" + +msgid "Keep Priority before latency-sorted servers" +msgstr "Сохранять приоритет перед серверами, отсортированными по задержке" + +msgid "Keep URLTest before latency-sorted servers" +msgstr "Сохранять URLTest перед серверами, отсортированными по задержке" + msgid "Keeps FakeIP cache persistent across reboots and pre-resolves popular blocked domains on startup so first-visit latency is 0 ms." msgstr "Сохраняет FakeIP-кэш между перезагрузками и заранее резолвит популярные заблокированные домены при старте — задержка при первом визите 0 мс." +msgid "Key" +msgstr "Ключ" + +msgid "Keyword must not contain spaces or commas" +msgstr "Ключевое слово не должно содержать пробелов или запятых" + +msgid "Language for AI Doctor diagnosis responses" +msgstr "Язык ответов диагностики ИИ-доктора" + msgid "Latency test failed" msgstr "Проверка задержки не удалась" +msgid "Latency test URL" +msgstr "URL для теста задержки" + msgid "Latest version is installed" msgstr "Установлена последняя версия" msgid "Latest version:" msgstr "Последняя версия:" +msgid "Leave empty to omit this header" +msgstr "Оставьте пустым, чтобы пропустить этот заголовок" + msgid "Level" msgstr "Уровень" +msgid "Level name" +msgstr "Имя уровня" + +msgid "List must be an HTTP(S) URL or a local .lst path" +msgstr "Список должен быть HTTP(S) URL или локальным путём .lst" + +msgid "List of domains automatically detected and the section they were added to. To edit or remove them, open the routing rules of the respective section." +msgstr "Список автоматически определённых доменов и секций, в которые они были добавлены. Для редактирования или удаления откройте правила маршрутизации соответствующей секции." + +msgid "List Update Frequency" +msgstr "Частота обновления списков" + msgid "Listening port" msgstr "Слушающий порт" msgid "LM Studio (Local PC / Server)" -msgstr "" +msgstr "LM Studio (локальный ПК / сервер)" + +msgid "Load .conf" +msgstr "Загрузить .conf" + +msgid "Load .conf config" +msgstr "Загрузить конфигурацию .conf" + +msgid "Load Current Records" +msgstr "Загрузить текущие записи" + +msgid "Loaded %d current record(s)" +msgstr "Загружено %d текущих записей" + +msgid "Loaded!" +msgstr "Загружено!" msgid "Loading connections" msgstr "Загрузка подключений" @@ -776,24 +1712,114 @@ msgstr "Загрузка..." msgid "Loading…" msgstr "Загрузка…" +msgid "Local Address" +msgstr "Локальный адрес" + +msgid "Log Level" +msgstr "Уровень логирования" + msgid "lx" msgstr "lx" msgid "Main DNS" msgstr "Основной DNS" +msgid "Main DNS server. If multiple servers are selected, a timeout switches to a backup." +msgstr "Основной DNS-сервер. Если выбрано несколько серверов, при таймауте происходит переключение на резервный." + +msgid "MASQUE Access Token" +msgstr "Токен доступа MASQUE" + +msgid "MASQUE Account ID" +msgstr "ID аккаунта MASQUE" + +msgid "MASQUE Private Key" +msgstr "Приватный ключ MASQUE" + +msgid "Match destination IPs or subnets" +msgstr "Сопоставлять IP-адреса или подсети назначения" + +msgid "Match destination ports. Use a single port or a range" +msgstr "Сопоставлять порты назначения. Используйте один порт или диапазон" + +msgid "Match Found" +msgstr "Совпадение найдено" + +msgid "Match traffic by packet DSCP mark (assigned in Windows via Policy-Based QoS). Examples: 46 (EF), 0x2e, 34 (AF41)" +msgstr "Сопоставлять трафик по DSCP-метке пакета (назначается в Windows через Policy-Based QoS). Примеры: 46 (EF), 0x2e, 34 (AF41)" + +msgid "Max reconnects per hour before alert (default 10)." +msgstr "Макс. переподключений в час до оповещения (по умолчанию 10)." + +msgid "Maximum time to wait for example.com to resolve during a DNS health check." +msgstr "Максимальное время ожидания разрешения example.com при проверке DNS." + msgid "Memory Usage" msgstr "Использование памяти" +msgid "Metrics Retention (hours)" +msgstr "Хранение метрик (часы)" + +msgid "Minimum latency difference in milliseconds that triggers switching to a faster server." +msgstr "Минимальная разница задержки в миллисекундах, при которой происходит переключение на более быстрый сервер." + +msgid "Mixed Proxy Password" +msgstr "Пароль смешанного прокси" + +msgid "Mixed Proxy Port" +msgstr "Порт смешанного прокси" + +msgid "Mixed Proxy Username" +msgstr "Имя пользователя смешанного прокси" + +msgid "Model name to use. Leave empty to use default (gpt-4o-mini / claude-3-5-haiku / deepseek-chat / llama3:latest)." +msgstr "Имя модели. Оставьте пустым для использования по умолчанию (gpt-4o-mini / claude-3-5-haiku / deepseek-chat / llama3:latest)." + +msgid "Monitored Interfaces" +msgstr "Отслеживаемые интерфейсы" + msgid "Monitoring & Analytics" msgstr "Мониторинг и аналитика" +msgid "Monitors sing-box reconnect frequency. Alerts if too many reconnects per hour." +msgstr "Отслеживает частоту переподключений sing-box. Оповещает при слишком частых переподключениях." + msgid "Move down" msgstr "Вниз" msgid "Move up" msgstr "Вверх" +msgid "MTU" +msgstr "MTU" + +msgid "Must be a comma-separated list of numeric IDs" +msgstr "Должен быть список числовых ID через запятую" + +msgid "Must be a number in the range of 0 - 10000" +msgstr "Должно быть числом в диапазоне 0 - 10000" + +msgid "Name displayed on the dashboard" +msgstr "Имя, отображаемое на дашборде" + +msgid "Name shown in the priority level list" +msgstr "Имя в списке уровней приоритета" + +msgid "Netherlands (nl)" +msgstr "Нидерланды (nl)" + +msgid "Network & Interfaces" +msgstr "Сеть и интерфейсы" + +msgid "Network Interface" +msgstr "Сетевой интерейс" + +msgid "Network interface settings" +msgstr "Настройки сетевого интерфейса" + +msgid "New domains:" +msgstr "Новые домены:" + msgid "New version %s is available for %s" msgstr "Доступна новая версия %s для %s" @@ -803,6 +1829,18 @@ msgstr "Диапазон NFQUEUE свободен" msgid "NFQUEUE range overlaps with another rule" msgstr "Диапазон NFQUEUE пересекается с другим правилом" +msgid "NFQWS Strategy" +msgstr "Стратегия NFQWS" + +msgid "NFQWS strategy cannot be empty" +msgstr "Стратегия NFQWS не может быть пустой" + +msgid "NFQWS2 Strategy" +msgstr "Стратегия NFQWS2" + +msgid "NFQWS2 strategy cannot be empty" +msgstr "Стратегия NFQWS2 не может быть пустой" + msgid "No" msgstr "Нет" @@ -821,12 +1859,21 @@ msgstr "Нет закрытых подключений" msgid "No conflict detected" msgstr "Конфликт не обнаружен" +msgid "No Custom Rules Matched" +msgstr "Нет совпадений с пользовательскими правилами" + msgid "No diagnostic history available yet." -msgstr "" +msgstr "История проверок пока пуста." + +msgid "No domains detected yet" +msgstr "Домены пока не обнаружены" msgid "No enabled server inbounds configured" msgstr "Включённые серверные inbounds не настроены" +msgid "No file selected" +msgstr "Файл не выбран" + msgid "No issues found" msgstr "Проблем не обнаружено" @@ -837,7 +1884,7 @@ msgid "No public firewall port required" msgstr "Публичный порт в firewall не требуется" msgid "No quick fix required" -msgstr "" +msgstr "Быстрая починка не требуется" msgid "No rules use ByeDPI" msgstr "Нет правил, использующих ByeDPI" @@ -848,9 +1895,6 @@ msgstr "Нет правил, использующих Zapret" msgid "No rules use Zapret2" msgstr "Нет правил, использующих Zapret2" -msgid "No targets found in section configs." -msgstr "Цели в конфигурациях секций не найдены." - msgid "Node list is empty" msgstr "Список узлов пуст" @@ -884,12 +1928,72 @@ msgstr "Не отвечает" msgid "Not running" msgstr "Не запущено" +msgid "Not set" +msgstr "Не задано" + +msgid "Notify on Certificate Warnings" +msgstr "Уведомлять о предупреждениях сертификатов" + +msgid "Notify on Core Crashes" +msgstr "Уведомлять о падениях ядра" + +msgid "Notify on DNS Leaks" +msgstr "Уведомлять об утечках DNS" + +msgid "Notify on Server Switches" +msgstr "Уведомлять о переключениях серверов" + +msgid "Notify on Service Restarts" +msgstr "Уведомлять о перезапусках сервиса" + +msgid "Notify on Subscription Updates" +msgstr "Уведомлять об обновлениях подписок" + +msgid "Number of consecutive failed checks required before switching DNS servers." +msgstr "Количество последовательных неудачных проверок до переключения DNS-серверов." + +msgid "Number of consecutive failures before restarting (default 3)." +msgstr "Количество последовательных ошибок до перезапуска (по умолчанию 3)." + +msgid "Number of consecutive successful checks required before returning to a higher-priority DNS server." +msgstr "Количество последовательных успешных проверок до возврата на DNS-сервер с более высоким приоритетом." + msgid "Ollama (Local PC / Server)" -msgstr "" +msgstr "Ollama (локальный ПК / сервер)" + +msgid "One record per line: example.com 192.168.1.100 or 192.168.1.100 example.com. Lines starting with # are ignored." +msgstr "Одна запись на строку: example.com 192.168.1.100 или 192.168.1.100 example.com. Строки, начинающиеся с #, игнорируются." + +msgid "Only from the specified countries." +msgstr "Только из указанных стран." + +msgid "Only selected" +msgstr "Только выбранные" + +msgid "Only selected except exclusions" +msgstr "Только выбранные кроме исключений" + +msgid "Only servers whose names match the expression." +msgstr "Только серверы, чьи имена соответствуют выражению." + +msgid "Only servers with one of the selected protocols." +msgstr "Только серверы с одним из выбранных протоколов." + +msgid "Only servers with one of the selected security types." +msgstr "Только серверы с одним из выбранных типов безопасности." + +msgid "Only servers with one of the selected transports." +msgstr "Только серверы с одним из выбранных транспортов." + +msgid "Only the specified servers." +msgstr "Только указанные серверы." msgid "Open" msgstr "Открыть" +msgid "Open priority settings and enter a display name" +msgstr "Откройте настройки приоритета и введите отображаемое имя" + msgid "Open Project Page" msgstr "Открыть страницу проекта" @@ -905,77 +2009,299 @@ msgstr "Время ожидания истекло" msgid "Optimization" msgstr "Оптимизация" +msgid "Option \"%s\" contains an invalid input value." +msgstr "Параметр \"%s\" содержит недопустимое значение." + +msgid "Optional — leave empty for default" +msgstr "Опционально — оставьте пустым для значения по умолчанию" + msgid "Optional for local LLM" -msgstr "" +msgstr "Опционально для локальных LLM" + +msgid "Optional tls-auth or tls-crypt key" +msgstr "Опциональный ключ tls-auth или tls-crypt" + +msgid "Optional values must be attached with '=' here; a separate token would be ignored by nfqws." +msgstr "Опциональные значения должны быть присоединены через '=' здесь; отдельный токен будет игнорироваться nfqws." + +msgid "Optional values must be attached with '=' here; a separate token would be ignored by nfqws2." +msgstr "Опциональные значения должны быть присоединены через '=' здесь; отдельный токен будет игнорироваться nfqws2." + +msgid "Or paste hosts file content:" +msgstr "Или вставьте содержимое файла hosts:" msgid "outbounds must be a non-empty array of strings" msgstr "outbounds должен быть непустым массивом строк" +msgid "Output Network Interface" +msgstr "Выходной сетевой интерфейс" + +msgid "Override the default OpenWrt device headers for this subscription" +msgstr "Переопределить стандартные заголовки устройства OpenWrt для этой подписки" + +msgid "Overwrite existing records (if unchecked, merge with existing records)" +msgstr "Перезаписать существующие записи (если снято — объединить с существующими)" + +msgid "P2P Leak Protection" +msgstr "Защита от утечек P2P" + +msgid "Parsed records:" +msgstr "Обработанные записи:" + +msgid "Password" +msgstr "Пароль" + +msgid "Password cannot be empty" +msgstr "Пароль не может быть пустым" + +msgid "Paste content or upload a file to preview imported DNS records." +msgstr "Вставьте содержимое или загрузите файл для предварительного просмотра импортируемых DNS-записей." + msgid "Path cannot be empty" msgstr "Путь не может быть пустым" +msgid "Path must be absolute (start with /)" +msgstr "Путь должен быть абсолютным (начинаться с /)" + +msgid "Path must contain at least one directory (like /tmp/cache.db)" +msgstr "Путь должен содержать как минимум одну директорию (например /tmp/cache.db)" + +msgid "Path must end with cache.db" +msgstr "Путь должен заканчиваться на cache.db" + msgid "Pause updates" msgstr "Приостановить обновление" +msgid "Peer Public Key" +msgstr "Публичный ключ пира" + +msgid "PEM-encoded CA certificate" +msgstr "CA-сертификат в формате PEM" + +msgid "PEM-encoded client certificate" +msgstr "Клиентский сертификат в формате PEM" + +msgid "PEM-encoded client private key" +msgstr "Приватный ключ клиента в формате PEM" + msgid "Pending" msgstr "Ожидает запуска" msgid "Per-Device Routing" msgstr "Маршрутизация по устройствам" +msgid "Periodically check the current level and switch to a faster server even when the current one works." +msgstr "Периодически проверять текущий уровень и переключаться на более быстрый сервер, даже если текущий работает." + +msgid "Periodically checks if the proxy is responding. Restarts Tachyon after consecutive failures." +msgstr "Периодически проверяет, отвечает ли прокси. Перезапускает Tachyon после последовательных ошибок." + +msgid "Persistent Keepalive" +msgstr "Постоянный Keepalive" + +msgid "Persistent Smart Detect" +msgstr "Постоянное умное определение" + +msgid "Pin on dashboard" +msgstr "Закрепить на дашборде" + msgid "Please wait, operation is running..." msgstr "Пожалуйста, подождите, выполняется операция..." +msgid "Polling Interval (seconds)" +msgstr "Интервал опроса (секунды)" + +msgid "Polling interval must be at least 1 second" +msgstr "Интервал опроса должен быть не менее 1 секунды" + +msgid "Port cannot be empty" +msgstr "Порт не может быть пустым" + msgid "Port conflict" msgstr "Конфликт порта" +msgid "Port for the local mixed proxy of this section" +msgstr "Порт локального смешанного прокси для этой секции" + +msgid "Port must be between 1 and 65535" +msgstr "Порт должен быть от 1 до 65535" + +msgid "Port range start must be less than or equal to end" +msgstr "Начало диапазона портов должно быть меньше или равно концу" + +msgid "Ports" +msgstr "Порты" + +msgid "Pre-download all preset lists" +msgstr "Предзагрузить все предустановленные списки" + +msgid "Pre-shared key" +msgstr "Предварительный общий ключ" + +msgid "Prefer IPv4" +msgstr "Предпочитать IPv4" + +msgid "Prefer IPv6" +msgstr "Предпочитать IPv6" + +msgid "Prefix text" +msgstr "Текст префикса" + +msgid "Preshared Key" +msgstr "Предварительный общий ключ" + +msgid "Prevents multiple reload_firewall calls within 120 seconds to avoid connection drops." +msgstr "Предотвращает множественные вызовы reload_firewall в течение 120 секунд для избежания разрыва соединений." + +msgid "Priority" +msgstr "Приоритет" + msgid "Priority details" msgstr "Детали Priority" msgid "Priority details are unavailable" msgstr "Детали Priority недоступны" +msgid "Priority level settings" +msgstr "Настройки уровня приоритета" + +msgid "Priority levels" +msgstr "Уровни приоритета" + +msgid "Priority settings" +msgstr "Настройки приоритета" + +msgid "Private Key" +msgstr "Приватный ключ" + msgid "Protection" msgstr "Защита" -msgid "Proxy" -msgstr "" +msgid "Protocol" +msgstr "Протокол" + +msgid "Proxy Fail Threshold" +msgstr "Порог ошибок прокси" + +msgid "Proxy Health Check Interval (s)" +msgstr "Интервал проверки здоровья прокси (с)" + +msgid "Proxy Health Check URL" +msgstr "URL проверки здоровья прокси" msgid "Proxy link is unavailable" msgstr "Ссылка прокси недоступна" +msgid "Proxy Section for Bot" +msgstr "Секция прокси для бота" + +msgid "Proxy to use for WARP API registration (api.cloudflareclient.com)" +msgstr "Прокси для регистрации WARP API (api.cloudflareclient.com)" + +msgid "PSK" +msgstr "PSK" + msgid "Public host" msgstr "Публичный хост" +msgid "QUIC (HTTP/3)" +msgstr "QUIC (HTTP/3)" + +msgid "RDP" +msgstr "RDP" + +msgid "Read error" +msgstr "Ошибка чтения" + msgid "Rebuilt release" msgstr "Пересобранный релиз" msgid "Recommended Quick Fixes:" -msgstr "" +msgstr "Рекомендуемые исправления:" + +msgid "Reconnect Threshold" +msgstr "Порог переподключений" + +msgid "Records proxy/DNS latency and health status in hourly buckets for analysis." +msgstr "Записывает задержку прокси/DNS и состояние здоровья в почасовые блоки для анализа." + +msgid "Records: %d" +msgstr "Записей: %d" msgid "Refill" msgstr "Сброс" +msgid "Registration Detour" +msgstr "Маршрут регистрации" + +msgid "Regular expression must not contain spaces or commas" +msgstr "Регулярное выражение не должно содержать пробелов или запятых" + msgid "Reinstall" msgstr "Переустановить" msgid "Reloading page in" msgstr "Перезагрузка страницы через" +msgid "Remote Hosts Lists" +msgstr "Удалённые списки Hosts" + msgid "Removal completed successfully!" msgstr "Удаление успешно завершено!" msgid "Remove" msgstr "Удалить" +msgid "Remove servers from the specified countries from this level." +msgstr "Удалить серверы из указанных стран с этого уровня." + +msgid "Remove servers whose names match the expression from this level." +msgstr "Удалить серверы, чьи имена соответствуют выражению, с этого уровня." + +msgid "Remove the specified servers from this level." +msgstr "Удалить указанные серверы с этого уровня." + msgid "Removing" msgstr "Удаление" msgid "Removing binaries & package files..." msgstr "Удаление бинарных файлов и пакетов..." -msgid "Resolved IP / DNS" -msgstr "IP / DNS" +msgid "Require a username and password for the local mixed proxy" +msgstr "Требовать имя пользователя и пароль для локального смешанного прокси" + +msgid "Reset" +msgstr "Сбросить" + +msgid "Reset Settings" +msgstr "Сбросить настройки" + +msgid "Resetting…" +msgstr "Сброс…" + +msgid "Resolve domain names before routing so sing-box can use real destination IPs." +msgstr "Разрешать имена доменов перед маршрутизацией, чтобы sing-box мог использовать реальные IP назначения." + +msgid "Resolve real IP for routing" +msgstr "Разрешать реальный IP для маршрутизации" + +msgid "Resource selection by hostname inside nfqws is not supported here; sing-box selects resources before NFQUEUE." +msgstr "Выбор ресурсов по имени хоста внутри nfqws не поддерживается здесь; sing-box выбирает ресурсы до NFQUEUE." + +msgid "Resource selection by hostname inside nfqws2 is not supported here; sing-box selects resources before NFQUEUE." +msgstr "Выбор ресурсов по имени хоста внутри nfqws2 не поддерживается здесь; sing-box выбирает ресурсы до NFQUEUE." + +msgid "Resource selection by IP or CIDR inside nfqws is not supported here; sing-box selects resources before NFQUEUE." +msgstr "Выбор ресурсов по IP или CIDR внутри nfqws не поддерживается здесь; sing-box выбирает ресурсы до NFQUEUE." + +msgid "Resource selection by IP or CIDR inside nfqws2 is not supported here; sing-box selects resources before NFQUEUE." +msgstr "Выбор ресурсов по IP или CIDR внутри nfqws2 не поддерживается здесь; sing-box выбирает ресурсы до NFQUEUE." + +msgid "Response Packet Magic Header (S2)" +msgstr "Magic-заголовок ответного пакета (S2)" + +msgid "Response Packet Magic Header (S4)" +msgstr "Magic-заголовок ответного пакета (S4)" msgid "Restart Tachyon" msgstr "Перезапустить Tachyon" @@ -983,18 +2309,45 @@ msgstr "Перезапустить Tachyon" msgid "Restarts" msgstr "Перезапуски" +msgid "Restores the Tachyon factory defaults: all rules, subscriptions, custom DNS servers and other options will be lost." +msgstr "Восстанавливает заводские настройки Tachyon: все правила, подписки, пользовательские DNS-серверы и другие параметры будут удалены." + msgid "Resume updates" msgstr "Продолжить обновление" msgid "Route" msgstr "Маршрут" -msgid "Route Type" -msgstr "" +msgid "Route bot API requests through this section. Leave empty to use the default mixed proxy." +msgstr "Маршрутизировать запросы API бота через эту секцию. Оставьте пустым для использования смешанного прокси по умолчанию." + +msgid "Route main DNS requests through the selected section." +msgstr "Маршрутизировать основные DNS-запросы через выбранную секцию." + +msgid "Route requests to this DNS server through another section." +msgstr "Маршрутизировать запросы к этому DNS-серверу через другую секцию." + +msgid "Routing Rule Tracer" +msgstr "Трассировщик правил маршрутизации" msgid "Routing rules" msgstr "Правила маршрутизации" +msgid "Rule" +msgstr "Правило" + +msgid "Rule set must be an HTTP(S) URL or a local .srs / .json path" +msgstr "Набор правил должен быть HTTP(S) URL или локальным путём .srs / .json" + +msgid "Rule set settings" +msgstr "Настройки набора правил" + +msgid "Rule sets" +msgstr "Наборы правил" + +msgid "Rule Sets (.srs / .json)" +msgstr "Наборы правил (.srs / .json)" + msgid "Rules mangle counters" msgstr "Счётчики правил mangle" @@ -1014,7 +2367,7 @@ msgid "Rules proxy exist" msgstr "Правила прокси существуют" msgid "Run AI Doctor" -msgstr "" +msgstr "Запустить ИИ-доктора" msgid "Run Diagnostic" msgstr "Запустить диагностику" @@ -1025,6 +2378,9 @@ msgstr "Запустить восстановление" msgid "Running" msgstr "Запущен" +msgid "Russia (ru)" +msgstr "Россия (ru)" + msgid "Save" msgstr "Сохранить" @@ -1040,18 +2396,102 @@ msgstr "Сохранение…" msgid "Search" msgstr "Поиск" -msgid "Search domain or service..." -msgstr "" +msgid "Secret key for authenticating remote access to YACD when WAN access is enabled." +msgstr "Секретный ключ для аутентификации удалённого доступа к YACD при включённом WAN-доступе." + +msgid "Secret token for authorizing WRITE operations (POST/PUT) on /cgi-bin/tachyon-agent/. Leave empty if auth is not required." +msgstr "Секретный токен для авторизации операций записи (POST/PUT) на /cgi-bin/tachyon-agent/. Оставьте пустым, если аутентификация не требуется." msgid "Secret token for WRITE requests" msgstr "Секретный токен для POST/PUT запросов" +msgid "Section action" +msgstr "Действие секции" + +msgid "Section name" +msgstr "Имя секции" + +msgid "Section Rules Content" +msgstr "Содержимое правил секции" + msgid "Section test order (checked = active, drag rows with △▽):" msgstr "Порядок проверки секций (галочка = активна, перетаскивайте △▽):" +msgid "Security" +msgstr "Безопасность" + +msgid "Select a common client profile or enter a custom User-Agent" +msgstr "Выберите общий профиль клиента или введите пользовательский User-Agent" + +msgid "Select a file with .conf extension" +msgstr "Выберите файл с расширением .conf" + +msgid "Select a network interface" +msgstr "Выберите сетевой интерфейс" + +msgid "Select a predefined domain list" +msgstr "Выберите предустановленный список доменов" + +msgid "Select a section" +msgstr "Выберите секцию" + +msgid "Select a section for downloading this subscription" +msgstr "Выберите секцию для загрузки этой подписки" + +msgid "Select a transit section" +msgstr "Выберите транзитную секцию" + +msgid "Select AI LLM provider for diagnostics" +msgstr "Выберите провайдер ИИ LLM для диагностики" + +msgid "Select an existing network interface" +msgstr "Выберите существующий сетевой интерфейс" + +msgid "Select an existing URLTest or Priority group" +msgstr "Выберите существующую группу URLTest или Приоритет" + +msgid "Select an intermediate section" +msgstr "Выберите промежуточную секцию" + +msgid "Select and order the sections through which blocked domains are tested. Checked sections are tried top-to-bottom." +msgstr "Выберите и упорядочите секции, через которые тестируются заблокированные домены. Отмеченные секции проверяются сверху вниз." + +msgid "Select DNS protocol to use" +msgstr "Выберите протокол DNS" + +msgid "Select network interface for VPN connection" +msgstr "Выберите интерфейс для VPN-подключения" + +msgid "Select one or more country ISO codes (e.g. ru, us, de, nl, fr, fi, se, tr, cn, jp, sg, by, kz, ua)." +msgstr "Выберите один или несколько ISO-кодов стран (напр. ru, us, de, nl, fr, fi, se, tr, cn, jp, sg, by, kz, ua)." + +msgid "Select or enter a User-Agent" +msgstr "Выберите или введите User-Agent" + +msgid "Select or enter path for sing-box cache file. Change this ONLY if you know what you are doing" +msgstr "Выберите или введите путь к файлу кэша sing-box. Изменяйте ТОЛЬКО если точно знаете, что делаете" + +msgid "Select or enter the IP addresses of your game consoles." +msgstr "Выберите или введите IP-адреса ваших игровых консолей." + +msgid "Select path for sing-box config file. Change this ONLY if you know what you are doing" +msgstr "Выберите путь к файлу конфигурации sing-box. Изменяйте ТОЛЬКО если точно знаете, что делаете" + msgid "Select the fastest node" msgstr "Выбирать самый быстрый узел" +msgid "Select the log level for sing-box" +msgstr "Выберите уровень логирования для sing-box" + +msgid "Select the network interface from which the traffic will originate" +msgstr "Выберите интерфейс, с которого будет идти трафик" + +msgid "Select the network interface to which the traffic will originate" +msgstr "Выберите интерфейс, на который будет идти трафик" + +msgid "Select the WAN interfaces to be monitored" +msgstr "Выберите WAN-интерфейсы для отслеживания" + msgid "Selected" msgstr "Выбран" @@ -1061,33 +2501,105 @@ msgstr "Selector и URLTest outbound должны содержать непус msgid "Send" msgstr "Отправить" +msgid "Send a Telegram notification if a potential DNS leak is detected." +msgstr "Отправлять уведомление в Telegram при обнаружении потенциальной утечки DNS." + +msgid "Send a Telegram notification if sing-box or nftables rules crash and get auto-restored." +msgstr "Отправлять уведомление в Telegram, если правила sing-box или nftables упали и были автоматически восстановлены." + +msgid "Send a Telegram notification if SSL/TLS certificates are close to expiration." +msgstr "Отправлять уведомление в Telegram, если SSL/TLS-сертификаты скоро истекут." + +msgid "Send a Telegram notification if the Tachyon service is restarted by the watchdog." +msgstr "Отправлять уведомление в Telegram, если сервис Tachyon перезапущен watchdog." + +msgid "Send a Telegram notification when a URLTest group switches to a new server." +msgstr "Отправлять уведомление в Telegram при переключении группы URLTest на новый сервер." + +msgid "Send a Telegram notification when proxy subscriptions are successfully updated." +msgstr "Отправлять уведомление в Telegram при успешном обновлении подписок прокси." + +msgid "Server Address" +msgstr "Адрес сервера" + +msgid "Server filtering" +msgstr "Фильтрация серверов" + +msgid "Server group for automatic lowest-latency selection" +msgstr "Группа серверов для автоматического выбора с наименьшей задержкой" + +msgid "Server group for priority failover" +msgstr "Группа серверов для приоритетного переключения" + +msgid "Server Name Indication — leave empty to use server address" +msgstr "Server Name Indication — оставьте пустым для использования адреса сервера" + msgid "Server outbound must contain a non-empty server field" msgstr "Серверный outbound должен содержать непустое поле server" msgid "Server outbound must contain a numeric server_port from 1 to 65535" msgstr "Серверный outbound должен содержать числовой server_port от 1 до 65535" +msgid "Server Port" +msgstr "Порт сервера" + msgid "Server unavailable" msgstr "Сервер недоступен" msgid "server_port must be a number from 1 to 65535" msgstr "server_port должен быть числом от 1 до 65535" -msgid "Service / Target" -msgstr "" +msgid "Servers on dashboard" +msgstr "Серверы на дашборде" msgid "Service action failed" msgstr "Действие сервиса не выполнено" -msgid "Service Availability Check" -msgstr "" +msgid "Service list" +msgstr "Список сервисов" + +msgid "Services & Access" +msgstr "Сервисы и доступ" msgid "Services info" msgstr "Информация о сервисах" +msgid "Settings" +msgstr "Настройки" + +msgid "Settings have been reset to defaults. The page will reload." +msgstr "Настройки сброшены к значениям по умолчанию. Страница будет перезагружена." + +msgid "Show metadata on dashboard" +msgstr "Показывать метаданные на дашборде" + +msgid "Show only selected servers." +msgstr "Показать только выбранные серверы." + +msgid "Show only servers with one of the selected protocols." +msgstr "Показывать только серверы с одним из выбранных протоколов." + +msgid "Show only servers with one of the selected security types." +msgstr "Показывать только серверы с одним из выбранных типов безопасности." + +msgid "Show only servers with one of the selected transports." +msgstr "Показывать только серверы с одним из выбранных транспортов." + +msgid "Show servers from selected groups without repeating their filtering criteria." +msgstr "Показать серверы из выбранных групп без повторения критериев фильтрации." + +msgid "Show servers only from the specified countries." +msgstr "Показывать серверы только из указанных стран." + +msgid "Show servers whose names match the expression." +msgstr "Показывать серверы, чьи имена соответствуют выражению." + msgid "Show sing-box config" msgstr "Показать sing-box конфигурацию" +msgid "Show subscription metadata for this source on the dashboard" +msgstr "Показывать метаданные подписки для этого источника на дашборде" + msgid "Sing-box autostart disabled" msgstr "Автостарт sing-box отключен" @@ -1112,15 +2624,51 @@ msgstr "Сервис sing-box существует" msgid "Sing-box version is compatible (newer than 1.12.4)" msgstr "Версия Sing-box совместима (новее 1.12.4)" +msgid "Singapore (sg)" +msgstr "Сингапур (sg)" + +msgid "Skip loopback & local entries (127.0.0.1, ::1, 0.0.0.0, localhost)" +msgstr "Пропустить loopback и локальные записи (127.0.0.1, ::1, 0.0.0.0, localhost)" + +msgid "Skip TLS certificate verification (not recommended)" +msgstr "Пропустить проверку TLS-сертификатов (не рекомендуется)" + +msgid "Skipped comments/invalid:" +msgstr "Пропущены комментарии/невалидные:" + +msgid "Skipped loopback:" +msgstr "Пропущены loopback:" + msgid "Smart Detect" msgstr "Smart Detect" msgid "Smart Detect settings saved" msgstr "Настройки Smart Detect сохранены" +msgid "Snell Version" +msgstr "Версия Snell" + +msgid "Sort Alphabetically" +msgstr "Сортировать по алфавиту" + +msgid "Sort by latency" +msgstr "Сортировать по задержке" + +msgid "Sorts servers in this section by lowest latency in the dashboard." +msgstr "Сортировать серверы в этой секции по наименьшей задержке на дашборде." + msgid "Source" msgstr "Источник" +msgid "Source Devices" +msgstr "Устройства-источники" + +msgid "Source Network Interface" +msgstr "Исходный сетевой интерфейс" + +msgid "SSH" +msgstr "SSH" + msgid "Standalone ByeDPI autostart is enabled" msgstr "Автозапуск отдельной службы ByeDPI включен" @@ -1154,15 +2702,33 @@ msgstr "Отдельная служба Zapret2 активна" msgid "Standalone Zapret2 service is inactive" msgstr "Отдельная служба Zapret2 неактивна" +msgid "Start" +msgstr "Старт" + +msgid "Start bot" +msgstr "Запустить бота" + msgid "Start Tachyon" msgstr "Запустить Tachyon" msgid "Start Watchdog first" msgstr "Сначала запустите Watchdog" +msgid "Starting…" +msgstr "Запуск…" + msgid "Status" msgstr "Статус" +msgid "Stop" +msgstr "Стоп" + +msgid "Stop bot" +msgstr "Остановить бота" + +msgid "Stop checking when URLTest group is not used. Use sing-box duration format like 1d, 12h or 30m." +msgstr "Остановить проверку, когда группа URLTest не используется. Используйте формат длительности sing-box, например 1d, 12h или 30m." + msgid "Stop Tachyon" msgstr "Остановить Tachyon" @@ -1172,15 +2738,51 @@ msgstr "Остановлен" msgid "Stopping active services..." msgstr "Остановка активных служб..." +msgid "Stopping…" +msgstr "Остановка…" + +msgid "Store auto-detected domains in /etc instead of /tmp to survive reboots." +msgstr "Хранить автоопределённые домены в /etc вместо /tmp для сохранения после перезагрузки." + +msgid "Strict ECH + DoQ DNS Enforcer" +msgstr "Строгий ECH + DoQ DNS Enforcer" + +msgid "STUN (P2P Calls)" +msgstr "STUN (P2P-звонки)" + +msgid "Subnets from the list will be extracted and added to nftables" +msgstr "Подсети из списка будут извлечены и добавлены в nftables" + +msgid "Subscription auto update" +msgstr "Автообновление подписки" + msgid "Subscription info:" msgstr "Информация о подписке:" msgid "Subscription update failed" msgstr "Обновление подписки завершилось ошибкой" +msgid "Subscription update interval" +msgstr "Интервал обновления подписки" + +msgid "Subscription URL" +msgstr "URL подписки" + +msgid "Subscription URL settings" +msgstr "Настройки URL подписки" + msgid "Subscriptions updated" msgstr "Подписки обновлены" +msgid "Success" +msgstr "Успех" + +msgid "Successfully imported %d DNS record(s)" +msgstr "Успешно импортировано %d DNS-записей" + +msgid "Sweden (se)" +msgstr "Швеция (se)" + msgid "System info" msgstr "Системная информация" @@ -1193,12 +2795,27 @@ msgstr "Таблица существует" msgid "Tachyon Error" msgstr "Ошибка Tachyon" +msgid "Tachyon manages ciadpi pid files itself, so pidfile options are not allowed here." +msgstr "Tachyon управляет файлами pid ciadpi самостоятельно, поэтому параметры pidfile здесь не допускаются." + +msgid "Tachyon manages the ciadpi process lifecycle itself, so daemon mode is not allowed here." +msgstr "Tachyon управляет жизненным циклом процесса ciadpi самостоятельно, поэтому режим daemon здесь не допускается." + +msgid "Tachyon manages the nfqws process lifecycle itself, so daemon mode is not allowed here." +msgstr "Tachyon управляет жизненным циклом процесса nfqws самостоятельно, поэтому режим daemon здесь не допускается." + +msgid "Tachyon manages the nfqws2 process lifecycle itself, so daemon mode is not allowed here." +msgstr "Tachyon управляет жизненным циклом процесса nfqws2 самостоятельно, поэтому режим daemon здесь не допускается." + msgid "Tachyon service is stopped. Start the service to display connections." msgstr "Служба Tachyon остановлена. Запустите сервис для отображения подключений." msgid "Tachyon service is stopped. Start the service to display the dashboard." msgstr "Служба Tachyon остановлена. Запустите сервис для отображения дашборда." +msgid "Tachyon will not modify your DHCP configuration" +msgstr "Tachyon не будет изменять вашу конфигурацию DHCP" + msgid "Tachyon-managed ciadpi runtime has restarted" msgstr "ciadpi Tachyon перезапускался" @@ -1232,17 +2849,41 @@ msgstr "NFQWS2 Tachyon готов" msgid "Tailscale endpoint" msgstr "Tailscale endpoint" -msgid "TCP" -msgstr "" +msgid "Telegram Bot Token" +msgstr "Токен Telegram-бота" msgid "Test latency" msgstr "Тестирование задержки" +msgid "Test only selected servers." +msgstr "Тестировать только выбранные серверы." + +msgid "Test only servers with one of the selected protocols." +msgstr "Тестировать только серверы с одним из выбранных протоколов." + +msgid "Test only servers with one of the selected security types." +msgstr "Тестировать только серверы с одним из выбранных типов безопасности." + +msgid "Test only servers with one of the selected transports." +msgstr "Тестировать только серверы с одним из выбранных транспортов." + +msgid "Test servers only from the specified countries." +msgstr "Тестировать серверы только из указанных стран." + +msgid "Test servers whose names match the expression." +msgstr "Тестировать серверы, чьи имена соответствуют выражению." + msgid "Testing URL" msgstr "URL проверки" -msgid "Testing..." -msgstr "Тестирование..." +msgid "The desync fwmark is managed by Tachyon for loop prevention and must not be overridden here." +msgstr "fwmark desync управляется Tachyon для предотвращения циклов и не может быть переопределён здесь." + +msgid "The NFQUEUE number is assigned by Tachyon for each rule and must not be overridden here." +msgstr "Номер NFQUEUE назначается Tachyon для каждого правила и не может быть переопределён здесь." + +msgid "The rule applies to the domain and all its subdomains. Use full:, keyword:, or regex: prefixes for exact match, keyword match, or regular expression." +msgstr "Правило применяется к домену и всем его поддоменам. Используйте префиксы full:, keyword: или regex: для точного совпадения, совпадения по ключевому слову или регулярного выражения." msgid "There are rules using ByeDPI" msgstr "Есть правила, использующие ByeDPI" @@ -1256,41 +2897,152 @@ msgstr "Есть правила, использующие Zapret2" msgid "Thinking..." msgstr "Думаю..." +msgid "This field is required" +msgstr "Это поле обязательно" + +msgid "This field must start a working ciadpi strategy; help/version options exit immediately and are not allowed here." +msgstr "Это поле должно запускать рабочую стратегию ciadpi; опции help/version завершаются немедленно и здесь не допускаются." + +msgid "This field must start a working nfqws strategy; --dry-run exits immediately and is not allowed here." +msgstr "Это поле должно запускать рабочую стратегию nfqws; --dry-run завершается немедленно и здесь не допускается." + +msgid "This field must start a working nfqws strategy; --version exits immediately and is not allowed here." +msgstr "Это поле должно запускать рабочую стратегию nfqws; --version завершается немедленно и здесь не допускается." + +msgid "This field must start a working nfqws2 strategy; --dry-run exits immediately and is not allowed here." +msgstr "Это поле должно запускать рабочую стратегию nfqws2; --dry-run завершается немедленно и здесь не допускается." + +msgid "This field must start a working nfqws2 strategy; --version exits immediately and is not allowed here." +msgstr "Это поле должно запускать рабочую стратегию nfqws2; --version завершается немедленно и здесь не допускается." + +msgid "This flag does not accept a value." +msgstr "Этот флаг не принимает значение." + +msgid "This option requires a value." +msgstr "Этот параметр требует значение." + +msgid "This will erase all Tachyon settings and restore the factory defaults. The service will restart. This action cannot be undone." +msgstr "Все настройки Tachyon будут удалены и восстановлены заводские значения. Сервис будет перезапущен. Это действие нельзя отменить." + msgid "Time" msgstr "Время" +msgid "Time in seconds for DNS record caching (default: 60)" +msgstr "Время кэширования DNS-записей в секундах (по умолчанию: 60)" + msgid "tiny" msgstr "tiny" -msgid "TLS" -msgstr "" +msgid "TLS / HTTPS" +msgstr "TLS / HTTPS" + +msgid "TLS Auth/Crypt Key" +msgstr "Ключ TLS Auth/Crypt" + +msgid "TLS SNI" +msgstr "TLS SNI" + +msgid "Token is required when the bot is enabled" +msgstr "Токен обязателен, когда бот включён" msgid "Tolerance" msgstr "Допуск" -msgid "Total Targets" -msgstr "Всего целей" +msgid "Top level has the highest priority; lower levels are used as fallback" +msgstr "Верхний уровень имеет наивысший приоритет; нижние уровни используются как запасные" + +msgid "Total lines:" +msgstr "Всего строк:" + +msgid "Trace" +msgstr "Трассировка" + +msgid "Tracing routing rules..." +msgstr "Трассировка правил маршрутизации..." msgid "Traffic" msgstr "Трафик" +msgid "Traffic for this level goes directly." +msgstr "Трафик этого уровня идёт напрямую." + +msgid "Traffic from these IP addresses will never be routed through this section, even if other conditions match." +msgstr "Трафик от этих IP-адресов никогда не будет маршрутизирован через эту секцию, даже если другие условия совпадают." + +msgid "Traffic of specified protocols (e.g. BitTorrent, QUIC, STUN) will bypass this section." +msgstr "Трафик указанных протоколов (например BitTorrent, QUIC, STUN) будет обходить эту секцию." + msgid "Traffic Total" msgstr "Всего трафика" +msgid "Traffic type filter" +msgstr "Фильтр типа трафика" + +msgid "Traffic will go through the default route (Direct/Default)." +msgstr "Трафик пойдёт через маршрут по умолчанию (Direct/Default)." + msgid "Transient connection error" -msgstr "" +msgstr "Временная ошибка соединения" + +msgid "Transparent proxy mode is incompatible with action=byedpi because Tachyon connects to ciadpi through SOCKS." +msgstr "Режим прозрачного прокси несовместим с action=byedpi, потому что Tachyon подключается к ciadpi через SOCKS." + +msgid "Transport" +msgstr "Транспорт" msgid "Troubleshooting" msgstr "Устранение неполадок" +msgid "Try compatible User-Agent profiles automatically when downloading this subscription" +msgstr "Пробовать совместимые профили User-Agent автоматически при загрузке этой подписки" + +msgid "TTL must be a positive number" +msgstr "TTL должен быть положительным числом" + +msgid "TTL value cannot be empty" +msgstr "Значение TTL не может быть пустым" + +msgid "Turkey (tr)" +msgstr "Турция (tr)" + msgid "Type" msgstr "Тип" +msgid "UDP (Unprotected DNS)" +msgstr "UDP (незащищённый DNS)" + +msgid "Ukraine (ua)" +msgstr "Украина (ua)" + +msgid "Unable to validate the ByeDPI strategy through the backend parser." +msgstr "Не удалось проверить стратегию ByeDPI через парсер бэкенда." + +msgid "Unable to validate the NFQWS strategy through the backend parser." +msgstr "Не удалось проверить стратегию NFQWS через парсер бэкенда." + +msgid "Unable to validate the NFQWS2 strategy through the backend parser." +msgstr "Не удалось проверить стратегию NFQWS2 через парсер бэкенда." + msgid "Unavailability timeout" msgstr "Таймаут недоступности" -msgid "Unavailable" -msgstr "" +msgid "Underload Packet Magic Header (H1)" +msgstr "Magic-заголовок пакета недогрузки (H1)" + +msgid "Underload Packet Magic Header (H2)" +msgstr "Magic-заголовок пакета недогрузки (H2)" + +msgid "Underload Packet Magic Header (H3)" +msgstr "Magic-заголовок пакета недогрузки (H3)" + +msgid "Underload Packet Magic Header (H4)" +msgstr "Magic-заголовок пакета недогрузки (H4)" + +msgid "Unexpected ByeDPI strategy argument: %s" +msgstr "Неожиданный аргумент стратегии ByeDPI: %s" + +msgid "Unexpected standalone token. Use explicit flags such as --name or --name=value." +msgstr "Неожиданный отдельный токен. Используйте явные флаги, такие как --name или --name=value." msgid "Unexpected Tachyon-managed ciadpi runtime is running" msgstr "Обнаружен лишний ciadpi Tachyon" @@ -1301,15 +3053,33 @@ msgstr "Обнаружен лишний NFQWS Tachyon" msgid "Unexpected Tachyon-managed nfqws2 runtime is running" msgstr "Обнаружен лишний NFQWS2 Tachyon" +msgid "United Kingdom (gb)" +msgstr "Великобритания (gb)" + +msgid "United States (us)" +msgstr "США (us)" + msgid "unknown" msgstr "неизвестно" msgid "Unknown" msgstr "Неизвестно" +msgid "Unknown ByeDPI option: %s" +msgstr "Неизвестный параметр ByeDPI: %s" + +msgid "Unknown country" +msgstr "Неизвестная страна" + msgid "Unknown error" msgstr "Неизвестная ошибка" +msgid "Unknown NFQWS flag." +msgstr "Неизвестный флаг NFQWS." + +msgid "Unknown NFQWS2 flag." +msgstr "Неизвестный флаг NFQWS2." + msgid "Unpacking & installing binaries..." msgstr "Распаковка и установка компонентов..." @@ -1337,6 +3107,15 @@ msgstr "Доступна новая версия:" msgid "Update subscriptions" msgstr "Обновить подписки" +msgid "Update this subscription automatically" +msgstr "Обновлять эту подписку автоматически" + +msgid "Updated/duplicates:" +msgstr "Обновлено/дубликаты:" + +msgid "Updates & Downloads" +msgstr "Обновления и загрузки" + msgid "Updating" msgstr "Обновление" @@ -1355,36 +3134,138 @@ msgstr "URL должен начинаться с vless://, vmess://, ss://, troj msgid "URL must use one of the following protocols:" msgstr "URL должен использовать один из следующих протоколов:" +msgid "URL to test through the proxy (default: Cloudflare 204)." +msgstr "URL для теста через прокси (по умолчанию: Cloudflare 204)." + +msgid "URL used to check whether a server is alive" +msgstr "URL для проверки доступности сервера" + +msgid "URL used to test server latency" +msgstr "URL для теста задержки сервера" + +msgid "URLs of remote hosts files to download and apply. Supports standard hosts format: IP domain." +msgstr "URL удалённых файлов hosts для загрузки и применения. Поддерживается стандартный формат hosts: IP domain." + +msgid "URLTest" +msgstr "URLTest" + msgid "URLTest details" msgstr "Детали URLTest" msgid "URLTest details are unavailable" msgstr "Детали URLTest недоступны" +msgid "URLTest settings" +msgstr "Настройки URLTest" + +msgid "Use 3-tier check intervals: fast (15s), normal (120s), slow (300s) instead of a single interval." +msgstr "Использовать 3-уровневые интервалы проверки: быстрый (15с), нормальный (120с), медленный (300с)." + +msgid "Use another section as an intermediate hop to connect to servers in this section. Does not apply to network interfaces or JSON outbounds." +msgstr "Использовать другую секцию в качестве промежуточного узла для подключения к серверам в этой секции. Не применяется к сетевым интерфейсам и JSON-выходам." + +msgid "Use sing-box duration format like 10s, 1m or 2m30s" +msgstr "Используйте формат длительности sing-box, например 10s, 1m или 2m30s" + +msgid "Use sing-box duration format like 1d, 12h or 30m" +msgstr "Используйте формат длительности sing-box, например 1d, 12h или 30m" + +msgid "Use sing-box duration format like 1d, 12h or 6h" +msgstr "Используйте формат длительности sing-box, например 1d, 12h или 6h" + msgid "Used by" msgstr "Используется" +msgid "User-Agent" +msgstr "User-Agent" + +msgid "Username" +msgstr "Имя пользователя" + +msgid "Username cannot be empty" +msgstr "Имя пользователя не может быть пустым" + msgid "Valid" msgstr "Валидно" +msgid "Validates sing-box config before restart to prevent boot loops on broken configs." +msgstr "Проверять конфигурацию sing-box перед перезапуском, чтобы предотвратить циклические перезагрузки." + +msgid "Validation errors:" +msgstr "Ошибки валидации:" + +msgid "Value cannot be empty" +msgstr "Значение не может быть пустым" + +msgid "Value must not contain control characters" +msgstr "Значение не должно содержать символы управления" + +msgid "Via country.is" +msgstr "Через country.is" + msgid "View logs" msgstr "Посмотреть логи" +msgid "Visible name of this section" +msgstr "Видимое имя этой секции" + +msgid "vless://, vmess://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links" +msgstr "Ссылки vless://, vmess://, ss://, trojan://, socks4/5://, hy2/hysteria2://" + msgid "WAN" msgstr "WAN" msgid "WAN public IP" msgstr "Публичный WAN IP" +msgid "WARP Access Token" +msgstr "Токен доступа WARP" + +msgid "WARP Account ID" +msgstr "ID аккаунта WARP" + +msgid "WARP Configuration generated and loaded successfully!" +msgstr "Конфигурация WARP успешно сгенерирована и загружена!" + +msgid "WARP Private Key" +msgstr "Приватный ключ WARP" + msgid "Watchdog" msgstr "Сторожевой таймер" +msgid "Watchdog Status" +msgstr "Статус Watchdog" + +msgid "WebRTC Leak Protection" +msgstr "Защита от утечек WebRTC" + +msgid "What Tachyon should do when this section matches" +msgstr "Что должен делать Tachyon при совпадении этой секции" + +msgid "When switching to another level, test every server and select the fastest instead of the first working one." +msgstr "При переключении на другой уровень тестировать каждый сервер и выбирать самый быстрый вместо первого рабочего." + msgid "Why Discord fails?" msgstr "Почему не работает Discord?" +msgid "WireGuard private key from your Cloudflare account" +msgstr "Приватный ключ WireGuard из вашего аккаунта Cloudflare" + +msgid "WireGuard private key from your Cloudflare WARP account" +msgstr "Приватный ключ WireGuard из вашего аккаунта Cloudflare WARP" + +msgid "YACD Secret Key" +msgstr "Секретный ключ YACD" + msgid "Yes" msgstr "Да" +msgid "You can select Output Network Interface, by default autodetect" +msgstr "Вы можете выбрать выходной сетевой интерфейс, по умолчанию автоопределение" + +msgid "Zapret hostlist templates are not supported here because Tachyon does not expand them for per-rule NFQWS strategies." +msgstr "Шаблоны hostlist Zapret не поддерживаются здесь, потому что Tachyon не расширяет их для стратегий NFQWS по правилам." + msgid "Zapret package is installed" msgstr "Пакет Zapret установлен" @@ -1403,6 +3284,9 @@ msgstr "sing-box outbound для Zapret настроен" msgid "Zapret sing-box outbound is not configured" msgstr "sing-box outbound для Zapret не настроен" +msgid "Zapret2 hostlist templates are not supported here because Tachyon does not expand them for per-rule NFQWS2 strategies." +msgstr "Шаблоны hostlist Zapret2 не поддерживаются здесь, потому что Tachyon не расширяет их для стратегий NFQWS2 по правилам." + msgid "Zapret2 package is installed" msgstr "Пакет Zapret2 установлен" @@ -1420,3 +3304,405 @@ msgstr "sing-box outbound для Zapret2 настроен" msgid "Zapret2 sing-box outbound is not configured" msgstr "sing-box outbound для Zapret2 не настроен" + +msgid "Service Health Check" +msgstr "Проверка доступности сервисов" + +msgid "Total Targets" +msgstr "Всего целей" + +msgid "Passed" +msgstr "Успешно" + +msgid "Failed" +msgstr "Ошибки" + +msgid "Avg Latency" +msgstr "Ср. задержка" + +msgid "Search domain..." +msgstr "Поиск домена..." + +msgid "Section / Target" +msgstr "Секция / Цель" + +msgid "Outbound Route" +msgstr "Маршрут" + +msgid "Resolved IP / DNS" +msgstr "IP / DNS" + +msgid "Verdict" +msgstr "Статус" + +msgid "Check domain or IP (e.g. example.com)..." +msgstr "Проверить домен или IP (напр. example.com)..." + +msgid "Check Custom" +msgstr "Проверить свой" + +msgid "Check All" +msgstr "Проверить все" + +msgid "Check Again" +msgstr "Проверить снова" + +msgid "Testing..." +msgstr "Тестирование..." + +msgid "Fetching service targets..." +msgstr "Получение списка сервисов..." + +msgid "Failed to run service check." +msgstr "Не удалось выполнить проверку сервисов." + +msgid "Failed to parse target list." +msgstr "Ошибка обработки списка целей." + +msgid "No targets found in section configs." +msgstr "Цели в конфигурациях секций не найдены." + +msgid "Check YouTube availability" +msgstr "Проверить доступность YouTube" + +msgid "Check Mode:" +msgstr "Режим проверки:" + +msgid "Active Sections" +msgstr "Активные секции" + +msgid "All Profiles" +msgstr "Все сервисы и профили" + +msgid "Sections" +msgstr "Секции" + +msgid "Servers" +msgstr "Серверы" + +msgid "Monitoring" +msgstr "Мониторинг" + +msgid "Components" +msgstr "Компоненты" + +msgid "Drag rows to change priority. The rule at the top is checked first." +msgstr "Перетащите строки для изменения приоритета. Правило вверху проверяется первым." + +msgid "Rules" +msgstr "Правила" + +msgid "Edit" +msgstr "Редактировать" + +msgid "Connection" +msgstr "Соединение" + +msgid "Add a section" +msgstr "Добавить секцию" + +msgid "Add a server inbound" +msgstr "Добавить серверный инбаунд" + +msgid "Accept external proxy connections and route them with sing-box." +msgstr "Принимать внешние прокси-подключения и маршрутизировать их через sing-box." + +msgid "Section" +msgstr "Секция" + +msgid "Server" +msgstr "Сервер" + +msgid "Installing" +msgstr "Установка" + +msgid "Initializing operation..." +msgstr "Инициализация операции..." + +msgid "Installing package & updating configurations..." +msgstr "Установка пакета и обновление настроек..." + +msgid "Installation completed successfully!" +msgstr "Установка успешно завершена!" + +msgid "Direct" +msgstr "Напрямую" + +msgid "Tachyon Settings" +msgstr "Настройки Tachyon" + +msgid "All Services" +msgstr "Все сервисы" + +msgid "Service Availability Check" +msgstr "Проверка доступности сервисов" + +msgid "Filter by service:" +msgstr "Фильтр по сервису:" + +msgid "Search domain or service..." +msgstr "Поиск домена или сервиса..." + +msgid "Service / Target" +msgstr "Сервис / Цель" + +msgid "Route Type" +msgstr "Тип маршрута" + +msgid "Active Routes" +msgstr "Активные маршруты" + +msgid "Custom Domains" +msgstr "Свои домены" + +msgid "Unavailable" +msgstr "Недоступно" + +msgid "Available" +msgstr "Доступно" + +msgid "Auto" +msgstr "Авто" + +msgid "Proxy" +msgstr "Прокси" + +msgid "TCP" +msgstr "TCP" + +msgid "TLS" +msgstr "TLS" + +msgid "Method" +msgstr "Метод" + +msgid "ALPN" +msgstr "ALPN" + +msgid "VLESS flow" +msgstr "VLESS flow" + +msgid "FakeTLS host" +msgstr "FakeTLS host" + +msgid "Concurrency" +msgstr "Параллелизм" + +msgid "Delete" +msgstr "Удалить" + +msgid "Information" +msgstr "Информация" + +msgid "Saving..." +msgstr "Сохранение..." + +msgid "Generating..." +msgstr "Генерация..." + +msgid "Starting..." +msgstr "Запуск..." + +msgid "Stopping..." +msgstr "Остановка..." + +msgid "None" +msgstr "Нет" + +msgid "Enabled" +msgstr "Включено" + +msgid "Disabled" +msgstr "Отключено" + +msgid "Configuration for Tachyon service" +msgstr "Конфигурация сервиса Tachyon" + +msgid "Only the specified servers" +msgstr "Только указанные серверы" + +msgid "Select all" +msgstr "Выбрать все" + +msgid "Routing mode" +msgstr "Режим маршрутизации" + +msgid "Routing section" +msgstr "Секция маршрутизации" + +msgid "Keeps FakeIP cache persistent across reboots and pre-resolves popular blocked domains on startup so first-visit latency is 0 ms." +msgstr "Сохраняет кэш FakeIP между перезагрузками и предварительно разрешает популярные заблокированные домены при запуске, чтобы задержка первого обращения была 0 мс." + +msgid "Configure User-Agent в the item settings" +msgstr "Настройте User-Agent в параметрах элемента" + +msgid "Client link" +msgstr "Клиентская ссылка" + +msgid "Client link QR code" +msgstr "QR-код клиентской ссылки" + +msgid "Client link is not available yet" +msgstr "Клиентская ссылка пока недоступна" + +msgid "Loading client link..." +msgstr "Загрузка клиентской ссылки..." + +msgid "Secret" +msgstr "Секрет" + +msgid "Public Key" +msgstr "Публичный ключ" + +msgid "Certificate path" +msgstr "Путь к сертификату" + +msgid "Key path" +msgstr "Путь к ключу" + +msgid "Specify a file path" +msgstr "Укажите путь к файлу" + +msgid "Specify different files" +msgstr "Укажите разные файлы" + +msgid "Selected section" +msgstr "Выбранная секция" + +msgid "Inbound JSON" +msgstr "Inbound JSON" + +msgid "Inbound JSON cannot be empty" +msgstr "Inbound JSON не может быть пустым" + +msgid "Inbound JSON must be an object with a type field" +msgstr "Inbound JSON должен быть объектом с полем type" + +msgid "Server information" +msgstr "Информация о сервере" + +msgid "Server name" +msgstr "Имя сервера" + +msgid "Server name / SNI" +msgstr "Имя сервера / SNI" + +msgid "Reality fake site" +msgstr "Фейковый сайт Reality" + +msgid "Reality fake site port" +msgstr "Порт фейкового сайта Reality" + +msgid "Reality max time difference" +msgstr "Макс. разница времени Reality" + +msgid "Reality private key" +msgstr "Приватный ключ Reality" + +msgid "Reality public key" +msgstr "Публичный ключ Reality" + +msgid "Reality short ID" +msgstr "Короткий ID Reality" + +msgid "Reality short ID must contain 1-8 hex digits" +msgstr "Короткий ID Reality должен содержать 1-8 шестнадцатеричных цифр" + +msgid "Fronting IP" +msgstr "Fronting IP" + +msgid "Fronting port" +msgstr "Fronting порт" + +msgid "Fronting proxy protocol" +msgstr "Протокол Fronting прокси" + +msgid "gRPC service" +msgstr "Сервис gRPC" + +msgid "Transport host" +msgstr "Хост транспорта" + +msgid "Transport path" +msgstr "Путь транспорта" + +msgid "Transport path must start with /" +msgstr "Путь транспорта должен начинаться с /" + +msgid "HTTP hosts" +msgstr "HTTP хосты" + +msgid "XHTTP mode" +msgstr "Режим XHTTP" + +msgid "Fallback on unknown DC" +msgstr "Fallback при неизвестном DC" + +msgid "Padding" +msgstr "Padding" + +msgid "Handshake timeout" +msgstr "Таймаут рукопожатия" + +msgid "Time skew tolerance" +msgstr "Допуск отклонения времени" + +msgid "Invalid NFQWS strategy" +msgstr "Неверная стратегия NFQWS" + +msgid "Invalid NFQWS2 strategy" +msgstr "Неверная стратегия NFQWS2" + +msgid "Installed build \\u2192 Available build" +msgstr "Установленная сборка \\u2192 Доступная сборка" + +msgid "Prevent multiple reload_firewall calls within 120 seconds to avoid connection drops." +msgstr "Предотвращать множественные вызовы reload_firewall в течение 120 секунд для избежания разрыва соединений." + +msgid "Obfuscation" +msgstr "Обфускация" + +msgid "Obfuscation password" +msgstr "Пароль обфускации" + +msgid "Auto update" +msgstr "Автообновление" + +msgid "Use CIDR prefixes like 192.168.1.0/24 or 2001:db8::/32" +msgstr "Используйте CIDR-префиксы, например 192.168.1.0/24 или 2001:db8::/32" + +msgid "Use an IP address" +msgstr "Используйте IP-адрес" + +msgid "Use an IP listen address" +msgstr "Используйте IP-адрес прослушивания" + +msgid "Use a domain name or IP address" +msgstr "Используйте имя домена или IP-адрес" + +msgid "Use an HTTP or HTTPS URL" +msgstr "Используйте HTTP или HTTPS URL" + +msgid "Use letters, digits, dots, underscores, or hyphens" +msgstr "Используйте буквы, цифры, точки, подчёркивания или дефисы" + +msgid "Use a non-negative integer" +msgstr "Используйте неотрицательное целое число" + +msgid "Use a non-zero secret" +msgstr "Используйте ненулевой секрет" + +msgid "Use 32 hex characters" +msgstr "Используйте 32 шестнадцатеричных символа" + +msgid "Use a duration like 30s, 5m, or 1h30m" +msgstr "Используйте длительность, например 30s, 5m или 1h30m" + +msgid "Expecting: %s" +msgstr "Ожидалось: %s" + +msgid "Cannot save server" +msgstr "Не удалось сохранить сервер" + +msgid "QR code is too large" +msgstr "QR-код слишком большой" diff --git a/luci-app-tachyon/po/templates/tachyon.pot b/luci-app-tachyon/po/templates/tachyon.pot index 515047b9..6b7ba73c 100644 --- a/luci-app-tachyon/po/templates/tachyon.pot +++ b/luci-app-tachyon/po/templates/tachyon.pot @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: TACHYON\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-13 05:37+0300\n" -"PO-Revision-Date: 2026-08-13 05:37+0300\n" +"POT-Creation-Date: 2026-08-13 17:10+0300\n" +"PO-Revision-Date: 2026-08-13 17:10+0300\n" "Last-Translator: Dushnilin \n" "Language-Team: LANGUAGE \n" "Language: \n" @@ -16,6 +16,42 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2062 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2439 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2818 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2833 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3031 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3046 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3282 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3434 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3444 +msgid "-- Select --" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10205 +msgid ".lst Lists" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1375 +msgid "(provider default)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8865 +msgid "+ Add JSON outbound" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3198 +msgid "+ Add level" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8951 +msgid "+ Add priority" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8892 +msgid "+ Add URLTest" +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:467 msgid "⏹ Stop" msgstr "" @@ -28,6 +64,14 @@ msgstr "" msgid "⚙ Advanced Settings" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:668 +msgid "⚠️ If all Bootstrap DNS fail 3 times, queries will be sent to your ISP's DNS in plaintext. Only use as a last resort to prevent complete internet loss." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:659 +msgid "⚠️ If all Main DNS fail 3 times, queries will be sent to your ISP's DNS in plaintext. Only use as a last resort to prevent complete internet loss." +msgstr "" + #: src/tachyon/tabs/dashboard/initController.ts:1670 #: src/tachyon/tabs/dashboard/initController.ts:1679 #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:457 @@ -44,6 +88,11 @@ msgstr "" msgid "🔑 Generate" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7236 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7266 +msgid "Action" +msgstr "" + #: src/tachyon/tabs/monitoring/initController.ts:713 #: src/tachyon/tabs/monitoring/render.ts:20 msgid "Active" @@ -66,22 +115,87 @@ msgstr "" msgid "Active Main DNS" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:223 -msgid "Active Routes" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:122 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:166 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1843 +msgid "Add at least one DNS server" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2529 +msgid "Add prefix to nodes" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9429 +msgid "Add URLs or local paths to .lst lists containing domains and subnets." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9455 +msgid "Add URLs or local paths to .lst lists containing domains. IP entries are ignored." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9404 +msgid "Add URLs or local paths to .srs / .json lists. Only domain rules are supported." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9375 +msgid "Add URLs or local paths to .srs / .json lists. Subnets are ignored by default." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3456 +msgid "Add URLTest / Priority group" msgstr "" #: src/tachyon/tabs/diagnostic/checks/runNftCheck.ts:106 msgid "Additional marking rules found" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2748 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2958 +msgid "Additionally exclude servers by protocol, transport, and security. Exclude only servers matching the specified parameters." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2731 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2940 +msgid "Additionally filter servers by protocol, transport, and security. Add only servers matching the specified parameters." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3356 +msgid "Additionally hide servers by protocol, transport, and security. Hide servers matching the specified parameters." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3336 +msgid "Additionally show servers by protocol, transport, and security. Add only servers matching the specified parameters." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1781 +msgid "Administrator Chat IDs" +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:579 msgid "Advanced self-healing features. Requires Watchdog to be enabled." msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:584 +msgid "Advanced System" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8603 +msgid "AEAD Method" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:583 +msgid "AI & Watchdog" +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:684 msgid "AI Agent REST API (12 Endpoints)" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1327 +msgid "AI Agent REST API Bearer Token" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1394 #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:893 msgid "AI API Key" msgstr "" @@ -108,14 +222,17 @@ msgstr "" msgid "AI Doctor failed" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1381 #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:860 msgid "AI Doctor Language" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1368 #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:836 msgid "AI Model" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1352 #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:766 msgid "AI Provider" msgstr "" @@ -137,20 +254,79 @@ msgstr "" msgid "All" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1959 +msgid "All except selected" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1969 +msgid "All remaining except selected" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1967 +msgid "All remaining servers" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2914 +msgid "All remaining servers means every server not already assigned to a higher-priority level." +msgstr "" + #: src/tachyon/tabs/monitoring/initController.ts:635 #: src/tachyon/tabs/monitoring/render.ts:49 msgid "All Routes" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:235 -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:358 -msgid "All Services" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1958 +msgid "All servers" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9487 +msgid "All traffic from these IP addresses will be routed through the section unconditionally, ignoring all other conditions." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8505 +msgid "Allow Insecure TLS" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5323 +msgid "Allowed domain prefixes are full:, keyword:, and regex:" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:959 +msgid "Allows access to YACD from the WAN. Make sure to open the appropriate port in your firewall." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2708 +msgid "Allows limiting the list of servers for URLTest" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1341 +msgid "Allows Tachyon to send diagnostic snapshots to ChatGPT or DeepSeek API for intelligent root-cause analysis and auto-repair recommendations." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8292 +msgid "AmneziaWG config loaded successfully!" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8005 +msgid "AmneziaWG Generator" msgstr "" #: src/tachyon/tabs/updates/initController.ts:835 msgid "Another component action is already running" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1395 +msgid "API Key for OpenAI (sk-...) or DeepSeek (optional for Ollama / LM Studio)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9543 +msgid "Apply rules of this section only to selected protocols." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9478 +msgid "Apply section rules only to the specified local IP addresses" +msgstr "" + #: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:133 msgid "Applying changes & reloading services..." msgstr "" @@ -163,43 +339,115 @@ msgstr "" msgid "Ask Tachyon AI Assistant a question..." msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:35 -msgid "Auto" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1792 +msgid "At least one Admin Chat ID is required" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5354 +msgid "At least one valid domain must be specified." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5436 +msgid "At least one valid IP or subnet must be specified." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8686 +msgid "Auth Digest" msgstr "" #: src/partials/modal/renderModal.ts:286 msgid "Auto refresh" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1584 +msgid "Auto-detected domains" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9300 +msgid "Auto-detected Domains" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1544 #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:1053 msgid "Auto-detects blocked domains from logs and adds them to the first section where they work via proxy." msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2455 +msgid "Auto-generate HWID" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7978 +msgid "Auto-update Hosts Lists" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1094 +msgid "Automatic component update checks" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2424 +msgid "Automatic User-Agent selection" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2530 +msgid "Automatically add text to the name of each server from this subscription for convenient filtering." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1095 +msgid "Automatically check installed components for new versions" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8006 +msgid "Automatically generate a Cloudflare WARP account and configure all AmneziaWG settings." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1518 +msgid "Automatically increase check intervals when healthy (to 5 min) and decrease on problems (to 120s)." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3148 #: src/tachyon/tabs/dashboard/initController.ts:1243 msgid "Automatically select the fastest node in the current level" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:102 -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:326 -msgid "Available" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7979 +msgid "Automatically update remote hosts lists on schedule" msgstr "" #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:54 msgid "Available actions" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:328 -msgid "Avg Latency" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5569 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6014 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6426 +msgid "Backend validation failed: %s" msgstr "" #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:694 msgid "Bearer Auth Token" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9249 +msgid "Belarus (by)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9526 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9545 +msgid "BitTorrent / P2P" +msgstr "" + #: src/tachyon/tabs/diagnostic/checks/runDnsCheck.ts:57 msgid "Bootstrap DNS" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:622 +msgid "Bootstrap DNS Servers" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1743 +msgid "Bot Status" +msgstr "" + #: src/tachyon/tabs/diagnostic/checks/runFakeIPCheck.ts:51 #: src/tachyon/tabs/diagnostic/checks/runFakeIPCheck.ts:79 msgid "Browser FakeIP check could not be completed" @@ -217,6 +465,33 @@ msgstr "" msgid "Bug report downloaded" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9321 +msgid "Built-in rule sets" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1976 +msgid "By flag emoji from name" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6495 +msgid "ByeDPI listen address and port are assigned by Tachyon and must not be set in the strategy." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6672 +msgid "ByeDPI option does not accept a compact value: %s" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6601 +msgid "ByeDPI option does not accept a value: %s" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6593 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6619 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6653 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6662 +msgid "ByeDPI option requires a value: %s" +msgstr "" + #: src/tachyon/tabs/diagnostic/checks/runByedpiCheck.ts:71 msgid "ByeDPI package is installed" msgstr "" @@ -241,6 +516,39 @@ msgstr "" msgid "ByeDPI sing-box outbound is not configured" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7435 +msgid "ByeDPI Strategy" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6698 +msgid "ByeDPI strategy cannot be empty" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1008 +msgid "Bypasses UDP traffic for selected game consoles (PS5/Xbox) to achieve NAT Type 1 / 2 (Full Cone NAT) for P2P matchmaking, while keeping TCP (PSN/Auth) routed through the proxy." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8697 +msgid "CA Certificate" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1082 +msgid "Cache all built-in lists and databases even if they are not currently selected in any section. Recommended if you have plenty of storage space or USB drive." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1225 +msgid "Cache File Path" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1239 +msgid "Cache file path cannot be empty" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:434 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7712 +msgid "Cancel" +msgstr "" + #: src/tachyon/tabs/diagnostic/checks/runByedpiCheck.ts:26 #: src/tachyon/tabs/diagnostic/checks/runDnsCheck.ts:27 #: src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:172 @@ -252,12 +560,12 @@ msgstr "" msgid "Cannot receive checks result" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:796 -msgid "Check Again" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3584 +msgid "Cannot save settings" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:724 -msgid "Check All" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8984 +msgid "Cascade connection" msgstr "" #: src/tachyon/tabs/updates/initController.ts:498 @@ -270,31 +578,26 @@ msgstr "" msgid "Check Connection" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:612 -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:709 -msgid "Check Domain" -msgstr "" - -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:606 -msgid "Check domain or IP (e.g. example.com)..." -msgstr "" - +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2636 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3099 #: src/tachyon/tabs/dashboard/initController.ts:1230 msgid "Check interval" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:254 -msgid "Check Mode:" -msgstr "" - #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:148 msgid "Check Services" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3112 +msgid "Check timeout after which the server is considered dead" +msgstr "" + #: src/tachyon/tabs/updates/initController.ts:903 msgid "Check update" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2662 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3086 #: src/tachyon/tabs/dashboard/initController.ts:1228 msgid "Check URL" msgstr "" @@ -328,10 +631,14 @@ msgstr "" #: src/tachyon/tabs/dashboard/partials/renderSections.ts:420 #: src/tachyon/tabs/dashboard/partials/renderSections.ts:775 #: src/tachyon/tabs/dashboard/partials/renderSections.ts:849 -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:728 msgid "Checking..." msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:275 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1635 +msgid "Checking…" +msgstr "" + #: src/tachyon/tabs/diagnostic/helpers/getCheckTitle.ts:2 msgid "checks" msgstr "" @@ -351,22 +658,54 @@ msgstr "" msgid "Checks passed with manual DHCP" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9246 +msgid "China (cn)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7531 +msgid "Choose Hosts File..." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9215 +msgid "Choose whether to route traffic to all destinations except selected countries (Exclude) or only to selected countries (Include)." +msgstr "" + #: src/validators/validateSubnet.ts:35 msgid "CIDR must be between 0 and 32 for IPv4 or 0 and 128 for IPv6" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8675 +msgid "Cipher" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7815 +msgid "Clean Comments" +msgstr "" + #: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:126 msgid "Cleaning configuration & reloading..." msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10013 +msgid "Clear" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8709 +msgid "Client Certificate" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8721 +msgid "Client Key" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3651 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10221 #: src/partials/modal/renderModal.ts:263 #: src/tachyon/tabs/dashboard/initController.ts:1085 #: src/tachyon/tabs/monitoring/initController.ts:884 #: src/tachyon/tabs/monitoring/initController.ts:934 #: src/tachyon/tabs/diagnostic/initController.ts:1144 #: src/tachyon/tabs/diagnostic/partials/renderAiChatModal.ts:212 -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:155 -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:802 #: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:416 #: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:461 msgid "Close" @@ -387,6 +726,30 @@ msgstr "" msgid "Closed" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8629 +msgid "Cloudflare account / device ID" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8641 +msgid "Cloudflare API access token" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8434 +msgid "Cloudflare WARP account / device ID" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8446 +msgid "Cloudflare WARP API access token" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1782 +msgid "Comma-separated list of Telegram user IDs authorized to control the bot." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10201 +msgid "Community Lists" +msgstr "" + #: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:120 msgid "Comparing versions & fingerprint check..." msgstr "" @@ -395,10 +758,26 @@ msgstr "" msgid "Component update available" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1104 +msgid "Component update check interval" +msgstr "" + #: src/tachyon/helpers/singBoxVariant.ts:60 msgid "compressed" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7224 +msgid "Conditions" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1211 +msgid "Config File Path" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4749 +msgid "Configure User-Agent in the item settings" +msgstr "" + #: src/tachyon/methods/custom/getDashboardSections.ts:1569 #: src/tachyon/tabs/dashboard/partials/renderSections.ts:583 #: src/tachyon/tabs/diagnostic/checks/runSectionsCheck.ts:141 @@ -409,6 +788,10 @@ msgstr "" msgid "Connect ChatGPT, DeepSeek or local LLM to get automated diagnostic reports and intelligent root-cause analysis." msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9022 +msgid "Connect through" +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderSections.ts:782 msgid "Connected" msgstr "" @@ -417,6 +800,10 @@ msgstr "" msgid "Connecting to update server..." msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8745 +msgid "Connection URL" +msgstr "" + #: src/tachyon/tabs/monitoring/initController.ts:998 msgid "Connections are unavailable" msgstr "" @@ -443,30 +830,89 @@ msgstr "" msgid "Could not compare FakeIP and control public IPs" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9252 +msgid "Country code (e.g. ru, us, de)" +msgstr "" + #: src/tachyon/tabs/diagnostic/initController.ts:1110 msgid "Current Diagnosis" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9039 +msgid "Current section cannot be used as its own transit section" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2416 +msgid "Current section cannot download its own subscription" +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderWidget.ts:22 msgid "Currently unavailable" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1405 #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:915 msgid "Custom API Endpoint URL" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:55 -msgid "Custom Domains" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2492 +msgid "Custom device headers" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7720 +msgid "Custom DNS Records (Hosts)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1361 +msgid "Custom OpenAI-Compatible API (OpenRouter)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1406 +msgid "Custom OpenAI-compatible API endpoint URL (e.g. http://192.168.1.100:11434/v1/chat/completions)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8860 +msgid "Custom outbound configurations in JSON format" msgstr "" #: src/tachyon/tabs/dashboard/partials/renderSections.ts:44 msgid "Dashboard currently unavailable" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1908 +msgid "Default (auto)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1141 +msgid "Default address for checking server availability and latency. URLTest uses its own address." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:932 +msgid "Delay in milliseconds before reloading Tachyon after interface UP" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:939 +msgid "Delay value cannot be empty" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2718 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2927 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3323 +msgid "Detect server country" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1281 +msgid "Detects and drops STUN/TURN packets in nftables to prevent real IP leaks via WebRTC." +msgstr "" + #: src/validators/validateOutboundJson.ts:115 msgid "detour must be a non-empty string" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9477 +msgid "Device filter" +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:1126 msgid "Device IPs (one per line):" msgstr "" @@ -475,6 +921,10 @@ msgstr "" msgid "Device IPs saved" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6961 +msgid "Device or IP" +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:1164 msgid "Devices listed here are always routed through the assigned section, regardless of global rules." msgstr "" @@ -487,23 +937,137 @@ msgstr "" msgid "DHCP is managed manually" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:25 -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:32 -msgid "Direct" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8464 +msgid "Direct (Default)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2904 +msgid "Direct connection" msgstr "" #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:90 msgid "Disable autostart" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:983 +msgid "Disable QUIC" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:984 +msgid "Disable the QUIC protocol to improve compatibility or fix issues with video streaming" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6096 +msgid "Disabling interception is incompatible with action=zapret2 because Tachyon sends matched traffic through NFQUEUE." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2618 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3075 +msgid "Display name" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9529 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9548 +msgid "DNS" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:677 +msgid "DNS Check Interval" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1462 +msgid "DNS Check Interval (s)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:706 +msgid "DNS Failures Before Switching" +msgstr "" + #: src/tachyon/tabs/diagnostic/checks/runDnsCheck.ts:75 msgid "DNS on router" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:595 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1814 +msgid "DNS over HTTPS (DoH)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:597 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1816 +msgid "DNS over QUIC (DoQ)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:596 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1815 +msgid "DNS over TLS (DoT)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2585 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7294 +msgid "DNS protocol" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:592 +msgid "DNS Protocol Type" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2586 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7295 +msgid "DNS protocol used by the resolver" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:787 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7357 +msgid "DNS requests through section" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:734 +msgid "DNS Rewrite TTL" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2595 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7308 +msgid "DNS server" +msgstr "" + #: src/validators/validateDns.ts:8 msgid "DNS server address cannot be empty" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2596 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7309 +msgid "DNS server used by the resolver" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:623 +msgid "DNS server used to obtain IP addresses for upstream DNS and proxies. If multiple servers are selected, a timeout switches to a backup." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:608 +msgid "DNS Servers" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:579 +msgid "DNS Settings" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:766 +msgid "DNS Strategy" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:720 +msgid "DNS Successful Checks Before Recovery" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:778 +msgid "DNS through proxy" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7345 +msgid "DNS through section" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:756 #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:479 msgid "DNS Turbo Cache" msgstr "" @@ -512,10 +1076,38 @@ msgstr "" msgid "DNS Turbo Cache saved" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:695 +msgid "DNS Unavailability Timeout" +msgstr "" + #: src/tachyon/tabs/diagnostic/partials/renderWikiDisclaimer.ts:26 msgid "Do not panic, everything can be fixed, just..." msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2791 +msgid "Do not test servers from these countries." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2807 +msgid "Do not test servers whose names match the expression." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2752 +msgid "Do not test servers with one of the selected protocols." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2758 +msgid "Do not test servers with one of the selected security types." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2755 +msgid "Do not test servers with one of the selected transports." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2799 +msgid "Do not test specified servers." +msgstr "" + #: src/tachyon/tabs/diagnostic/initController.ts:721 #: src/tachyon/tabs/diagnostic/initController.ts:759 #: src/tachyon/tabs/diagnostic/initController.ts:767 @@ -531,6 +1123,39 @@ msgstr "" msgid "Does not resolve" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9428 +msgid "Domain and IP lists" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9454 +msgid "Domain lists" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2576 +msgid "Domain Resolver" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1556 +msgid "Domain test sections" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9271 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10202 +msgid "Domains" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9301 +msgid "Domains automatically detected by Smart Detect or added via Telegram bot. You can manually edit or remove them here." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8292 +msgid "Done" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1201 +msgid "Dont Touch My DHCP!" +msgstr "" + #: src/tachyon/tabs/dashboard/initController.ts:1630 #: src/tachyon/tabs/dashboard/initController.ts:1643 msgid "Downlink" @@ -540,6 +1165,42 @@ msgstr "" msgid "Download" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1180 +msgid "Download component packages via the selected section" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1188 +msgid "Download components through" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1179 +msgid "Download components through a section" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1166 +msgid "Download lists through" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1157 +msgid "Download lists through a section" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1158 +msgid "Download remote lists and rule sets via the selected section" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2390 +msgid "Download subscription through a section" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2391 +msgid "Download subscriptions via the selected section" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2399 +msgid "Download through" +msgstr "" + #: src/tachyon/tabs/monitoring/initController.ts:877 #: src/tachyon/tabs/monitoring/initController.ts:931 msgid "Downloaded" @@ -549,34 +1210,274 @@ msgstr "" msgid "Downloading package from repository..." msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9514 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10209 +msgid "DSCP marks (QoS)" +msgstr "" + #: src/validators/validateOutboundJson.ts:75 msgid "Duplicate JSON outbound tag" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4795 +msgid "Duplicate value" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8676 +msgid "e.g. AES-256-GCM — leave empty for default" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10011 +msgid "e.g. google.com, 1.1.1.1, 443" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8687 +msgid "e.g. SHA256 — leave empty for default" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7226 +msgid "Enable" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1517 +msgid "Enable Adaptive Intervals" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1340 +msgid "Enable AI Doctor (ChatGPT / LLM Analysis)" +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:760 msgid "Enable AI Doctor (LLM Integration)" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1524 +msgid "Enable Anomaly Detection" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1035 +msgid "Enable automatic updates for remote lists and rule sets" +msgstr "" + #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:100 msgid "Enable autostart" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2577 +msgid "Enable built-in DNS resolver for domains handled by this section" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1496 +msgid "Enable Config Validation" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1456 +msgid "Enable DNS Continuous Check" +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:498 msgid "Enable DNS Turbo Cache" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1469 +msgid "Enable Firewall Reload Dedup" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1503 +msgid "Enable Graceful Degradation" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1476 +msgid "Enable Health Metrics" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1034 +msgid "Enable list updates" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9060 +msgid "Enable Mixed Proxy" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9101 +msgid "Enable Mixed Proxy Authentication" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:834 +msgid "Enable Output Network Interface" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1432 +msgid "Enable Proxy Health Monitor" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1489 +msgid "Enable Smart Cooldowns" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1543 #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:1070 msgid "Enable Smart Detect" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1753 +msgid "Enable Telegram Bot" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:667 +msgid "Enable WAN DNS Fallback for Bootstrap DNS" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:658 +msgid "Enable WAN DNS Fallback for Main DNS" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1314 +msgid "Enable Watchdog" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:948 +msgid "Enable YACD" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:958 +msgid "Enable YACD WAN Access" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1754 +msgid "Enables the background daemon that polls Telegram for commands and sends notifications." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1315 +msgid "Enables the background watchdog process to monitor services and auto-recover on failures." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4001 +msgid "Enter a complete sing-box outbound object" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2630 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3080 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3956 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3972 +msgid "Enter a display name" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2877 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2898 +msgid "Enter a level name" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2473 +msgid "Enter HWID" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1765 +msgid "Enter the API token obtained from @BotFather." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2465 +msgid "Enter the HWID sent with subscription requests" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8771 +msgid "Enter the subscription URL" +msgstr "" + #: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:129 msgid "Environment preparation & dependency check..." msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8083 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8085 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8092 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8094 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8146 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8148 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8152 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8154 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8233 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8244 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8246 +msgid "Error" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8154 +msgid "Error running generator:" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10124 +msgid "Error running trace:" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2747 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2957 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3355 +msgid "Exclude by proxy parameters" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2806 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3019 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3415 +msgid "Exclude by regular expression" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2790 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3003 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3399 +msgid "Exclude countries" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9219 +msgid "Exclude selected countries" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2798 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3011 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3407 +msgid "Exclude servers" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2965 +msgid "Exclude servers with one of the selected protocols from this level." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2971 +msgid "Exclude servers with one of the selected security types from this level." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2968 +msgid "Exclude servers with one of the selected transports from this level." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9523 +msgid "Exclude traffic types" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3470 +msgid "Exclude URLTest / Priority group" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9497 +msgid "Excluded devices" +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderSections.ts:131 msgid "Expires" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9061 +msgid "Expose this section as a local HTTP+SOCKS proxy" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5630 +msgid "External nfqws config files bypass Tachyon queue management and explicit validation." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6075 +msgid "External nfqws2 config files bypass Tachyon queue management and explicit validation." +msgstr "" + #: src/tachyon/tabs/diagnostic/initController.ts:1015 msgid "Failed to apply fix" msgstr "" @@ -608,17 +1509,25 @@ msgstr "" msgid "Failed to generate bug report" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:208 -msgid "Failed to parse target list." +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8085 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8094 +msgid "Failed to generate WARP config:" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8246 +msgid "Failed to parse file:" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8148 +msgid "Failed to parse WARP config:" msgstr "" #: src/tachyon/tabs/diagnostic/partials/renderAiChatModal.ts:106 msgid "Failed to receive response from AI service." msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:190 -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:821 -msgid "Failed to run service check." +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:417 +msgid "Failed to reset settings" msgstr "" #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:405 @@ -637,6 +1546,22 @@ msgstr "" msgid "Failed to save Smart Detect settings" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1699 +msgid "Failed to start bot" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:341 +msgid "Failed to start watchdog" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1713 +msgid "Failed to stop bot" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:355 +msgid "Failed to stop watchdog" +msgstr "" + #: src/tachyon/tabs/dashboard/initController.ts:309 #: src/tachyon/tabs/dashboard/initController.ts:310 #: src/tachyon/tabs/dashboard/initController.ts:329 @@ -659,6 +1584,11 @@ msgstr "" msgid "FakeIP works; public IP comparison is inconclusive" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1457 +msgid "Faster DNS health monitoring than the default cycle. Switches bootstrap DNS on failure." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3159 #: src/tachyon/tabs/dashboard/initController.ts:1249 msgid "Faster server search interval" msgstr "" @@ -671,13 +1601,12 @@ msgstr "" msgid "Fetching release & commit metadata..." msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:127 -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:171 -msgid "Fetching service targets..." +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3312 +msgid "Filter the servers that will be displayed on the dashboard." msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:407 -msgid "Filter by service:" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9243 +msgid "Finland (fi)" msgstr "" #: src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:136 @@ -688,23 +1617,94 @@ msgstr "" msgid "Fix applied" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3585 +msgid "Fix the highlighted fields and save again." +msgstr "" + #: src/tachyon/tabs/diagnostic/initController.ts:743 #: src/tachyon/tabs/diagnostic/initController.ts:1006 msgid "Fixed" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9486 +msgid "Forced device routing" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1291 +msgid "Forces sing-box to tunnel DNS requests via DoQ with Encrypted Client Hello (ECH) for SNI hiding." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9242 +msgid "France (fr)" +msgstr "" + #: src/tachyon/tabs/diagnostic/partials/renderAiChatModal.ts:158 msgid "Full System Diagnostic" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6093 +msgid "Fuzzing is not supported here because Tachyon needs deterministic runtime validation." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1017 +msgid "Game Console IPs" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1007 +msgid "Game Console Optimizer (NAT Type 1)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2480 +msgid "Generate a random 16-character hexadecimal HWID" +msgstr "" + #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:175 msgid "Generate bug report" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2479 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2484 +msgid "Generate HWID" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2456 +msgid "Generate HWID from router hardware information for this subscription" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8009 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8047 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8063 +msgid "Generate WARP Config" +msgstr "" + #: src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:89 msgid "Generated inbound" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8142 +msgid "Generated!" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8078 +msgid "Generating…" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9232 +msgid "GeoIP Countries" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9214 +msgid "GeoIP Mode" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10206 +msgid "GeoSite / GeoIP" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9239 +msgid "Germany (de)" +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:729 msgid "GET endpoints are open on LAN. POST endpoints require Authorization: Bearer ." msgstr "" @@ -725,14 +1725,63 @@ msgstr "" msgid "Hello! I am Tachyon AI Assistant. How can I help you today? Ask me about domain blocks, diagnostics, or router settings." msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2565 +msgid "Hide cascade connection nodes" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2554 +msgid "Hide individual nodes that are already included in imported subscription URLTest groups" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2566 +msgid "Hide intermediate nodes used as detours by other subscription nodes" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3408 +msgid "Hide selected servers." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3471 +msgid "Hide servers from selected groups without repeating their filtering criteria." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3400 +msgid "Hide servers from the specified countries." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3416 +msgid "Hide servers whose names match the expression." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3363 +msgid "Hide servers with one of the selected protocols." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3367 +msgid "Hide servers with one of the selected security types." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3364 +msgid "Hide servers with one of the selected transports." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2553 +msgid "Hide URLTest group nodes" +msgstr "" + #: src/partials/modal/renderModal.ts:310 msgid "Hide values" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3123 #: src/tachyon/tabs/dashboard/initController.ts:1235 msgid "Higher-level check interval" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:686 +msgid "Higher-priority DNS Check" +msgstr "" + #: src/tachyon/tabs/diagnostic/initController.ts:1122 msgid "History" msgstr "" @@ -742,7 +1791,48 @@ msgstr "" msgid "Host" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:455 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4264 +msgid "Hosts" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7985 +msgid "Hosts Lists Update Interval" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1483 +msgid "How many hours of metrics to keep (default 24)." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3124 +msgid "How often higher priority levels are checked while a lower level is active" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3100 +msgid "How often the currently selected server is checked" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1463 +msgid "How often to check DNS health in seconds (default 60)." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1439 +msgid "How often to check proxy health in seconds (fast tier, default 30)." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1805 +msgid "How often to check Telegram for new messages (default: 5)." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:678 +msgid "How often to check the active DNS servers." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:687 +msgid "How often to check whether a higher-priority DNS server has recovered." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9530 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9549 msgid "HTTP" msgstr "" @@ -754,10 +1844,106 @@ msgstr "" msgid "HTTP REST API for external AI agents (Claude, GPT, Open-WebUI) served at /cgi-bin/tachyon-agent/" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2464 +msgid "HWID" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2675 #: src/tachyon/tabs/dashboard/initController.ts:1110 msgid "Idle timeout" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1504 +msgid "If one health check fails with an error, continue running other checks instead of stopping." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7577 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7590 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7640 +msgid "Import" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7637 +msgid "Import (%d records)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8164 +msgid "Import AmneziaWG settings from .conf file" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7691 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7824 +msgid "Import Hosts File" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2544 +msgid "Import subscription URLTest groups" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2545 +msgid "Import URLTest groups returned by this subscription provider" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2730 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2939 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3335 +msgid "Include by proxy parameters" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2782 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2995 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3391 +msgid "Include by regular expression" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2766 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2979 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3375 +msgid "Include countries" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4076 +msgid "Include IP addresses and subnets" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9220 +msgid "Include selected countries" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2774 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2987 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3383 +msgid "Include servers" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8401 +msgid "Init Packet Magic Header (S1)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8403 +msgid "Init Packet Magic Header (S3)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8409 +msgid "Init Packet Payload (I1)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8410 +msgid "Init Packet Payload (I2)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8411 +msgid "Init Packet Payload (I3)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8412 +msgid "Init Packet Payload (I4)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8413 +msgid "Init Packet Payload (I5)" +msgstr "" + #: src/tachyon/tabs/updates/initController.ts:917 #: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:405 msgid "Install" @@ -776,15 +1962,41 @@ msgstr "" msgid "Installed version is newer than release" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:897 +msgid "Interface Monitoring" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:931 +msgid "Interface Monitoring Delay" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:898 +msgid "Interface monitoring for Bad WAN" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2689 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3175 #: src/tachyon/tabs/dashboard/initController.ts:1112 #: src/tachyon/tabs/dashboard/initController.ts:1255 msgid "Interrupt connections" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3176 +msgid "Interrupt connections when priority failover switches server" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2690 +msgid "Interrupt connections when URLTest switches the selected server" +msgstr "" + #: src/tachyon/tabs/dashboard/initController.ts:1108 msgid "Interval" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7456 +msgid "Invalid ByeDPI strategy" +msgstr "" + #: src/validators/validateSubnet.ts:25 msgid "Invalid CIDR prefix" msgstr "" @@ -797,6 +2009,7 @@ msgstr "" msgid "Invalid DNS server port" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5303 #: src/validators/validateDomain.ts:67 #: src/validators/validateDomain.ts:73 msgid "Invalid domain address" @@ -871,14 +2084,27 @@ msgstr "" msgid "Invalid JSON format" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7754 +msgid "Invalid line: \"%s\". Use: domain ip or ip domain" +msgstr "" + #: src/validators/validatePath.ts:22 msgid "Invalid path format. Path must start with \"/\" and contain valid characters" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9094 #: src/validators/validateShadowsocksUrl.ts:91 msgid "Invalid port number. Must be between 1 and 65535" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5452 +msgid "Invalid port or range. Use 80 or 1000-2000" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4678 +msgid "Invalid regular expression" +msgstr "" + #: src/validators/validateShadowsocksUrl.ts:38 msgid "Invalid Shadowsocks URL: decoded credentials must contain method:password" msgstr "" @@ -1046,6 +2272,26 @@ msgstr "" msgid "Invalid VMess URL: parsing failed" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10203 +msgid "IP Addresses (IP CIDR)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9311 +msgid "IPs" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:768 +msgid "IPv4 only" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:770 +msgid "IPv6 only" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:996 +msgid "Isolate BitTorrent traffic and force it direct to prevent VPN bans" +msgstr "" + #: src/tachyon/tabs/diagnostic/initController.ts:739 msgid "Issues" msgstr "" @@ -1055,6 +2301,17 @@ msgstr "" msgid "Issues detected" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9247 +msgid "Japan (jp)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1082 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4000 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4266 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8859 +msgid "JSON outbound" +msgstr "" + #: src/validators/validateOutboundJson.ts:50 msgid "JSON outbound cannot be empty" msgstr "" @@ -1071,15 +2328,60 @@ msgstr "" msgid "JSON outbound must contain a non-empty type field" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4024 +msgid "JSON outbound settings" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8400 +msgid "Junk Max Size (Jmax)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8399 +msgid "Junk Min Size (Jmin)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8398 +msgid "Junk Packet Count (Jc)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9250 +msgid "Kazakhstan (kz)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3185 +msgid "Keep Priority before latency-sorted servers" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2699 +msgid "Keep URLTest before latency-sorted servers" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:757 #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:484 msgid "Keeps FakeIP cache persistent across reboots and pre-resolves popular blocked domains on startup so first-visit latency is 0 ms." msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8592 +msgid "Key" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4688 +msgid "Keyword must not contain spaces or commas" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1382 +msgid "Language for AI Doctor diagnosis responses" +msgstr "" + #: src/tachyon/methods/shell/index.ts:480 #: src/tachyon/methods/shell/index.ts:501 msgid "Latency test failed" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1140 +msgid "Latency test URL" +msgstr "" + #: src/tachyon/tabs/updates/initController.ts:344 #: src/tachyon/tabs/updates/initController.ts:1275 msgid "Latest version is installed" @@ -1089,18 +2391,60 @@ msgstr "" msgid "Latest version:" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2510 +msgid "Leave empty to omit this header" +msgstr "" + #: src/tachyon/tabs/dashboard/initController.ts:1191 msgid "Level" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2893 +msgid "Level name" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7157 +msgid "List must be an HTTP(S) URL or a local .lst path" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1585 +msgid "List of domains automatically detected and the section they were added to. To edit or remove them, open the routing rules of the respective section." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1044 +msgid "List Update Frequency" +msgstr "" + #: src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:125 msgid "Listening port" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1360 #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:821 msgid "LM Studio (Local PC / Server)" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8215 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8224 +msgid "Load .conf" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8163 +msgid "Load .conf config" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7550 +msgid "Load Current Records" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7547 +msgid "Loaded %d current record(s)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8290 +msgid "Loaded!" +msgstr "" + #: src/tachyon/tabs/monitoring/initController.ts:988 #: src/tachyon/tabs/monitoring/render.ts:101 msgid "Loading connections" @@ -1118,6 +2462,14 @@ msgstr "" msgid "Loading…" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8312 +msgid "Local Address" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1262 +msgid "Log Level" +msgstr "" + #: src/tachyon/helpers/singBoxVariant.ts:62 msgid "lx" msgstr "" @@ -1126,14 +2478,86 @@ msgstr "" msgid "Main DNS" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:609 +msgid "Main DNS server. If multiple servers are selected, a timeout switches to a backup." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8640 +msgid "MASQUE Access Token" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8628 +msgid "MASQUE Account ID" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8616 +msgid "MASQUE Private Key" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9312 +msgid "Match destination IPs or subnets" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9507 +msgid "Match destination ports. Use a single port or a range" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10064 +msgid "Match Found" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9515 +msgid "Match traffic by packet DSCP mark (assigned in Windows via Policy-Based QoS). Examples: 46 (EF), 0x2e, 34 (AF41)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1531 +msgid "Max reconnects per hour before alert (default 10)." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:696 +msgid "Maximum time to wait for example.com to resolve during a DNS health check." +msgstr "" + #: src/tachyon/tabs/dashboard/initController.ts:1656 msgid "Memory Usage" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1482 +msgid "Metrics Retention (hours)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2649 +msgid "Minimum latency difference in milliseconds that triggers switching to a faster server." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9152 +msgid "Mixed Proxy Password" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9075 +msgid "Mixed Proxy Port" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9116 +msgid "Mixed Proxy Username" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1369 +msgid "Model name to use. Leave empty to use default (gpt-4o-mini / claude-3-5-haiku / deepseek-chat / llama3:latest)." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:907 +msgid "Monitored Interfaces" +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:633 msgid "Monitoring & Analytics" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1525 +msgid "Monitors sing-box reconnect frequency. Alerts if too many reconnects per hour." +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:1004 msgid "Move down" msgstr "" @@ -1142,6 +2566,49 @@ msgstr "" msgid "Move up" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8375 +msgid "MTU" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1795 +msgid "Must be a comma-separated list of numeric IDs" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2074 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2089 +msgid "Must be a number in the range of 0 - 10000" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2619 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3076 +msgid "Name displayed on the dashboard" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2894 +msgid "Name shown in the priority level list" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9240 +msgid "Netherlands (nl)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:580 +msgid "Network & Interfaces" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1889 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8818 +msgid "Network Interface" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3775 +msgid "Network interface settings" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7631 +msgid "New domains:" +msgstr "" + #: src/tachyon/services/core.service.ts:38 msgid "New version %s is available for %s" msgstr "" @@ -1156,6 +2623,22 @@ msgstr "" msgid "NFQUEUE range overlaps with another rule" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7374 +msgid "NFQWS Strategy" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5760 +msgid "NFQWS strategy cannot be empty" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7407 +msgid "NFQWS2 Strategy" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6234 +msgid "NFQWS2 strategy cannot be empty" +msgstr "" + #: src/tachyon/tabs/dashboard/initController.ts:812 #: src/tachyon/tabs/dashboard/initController.ts:816 #: src/tachyon/tabs/dashboard/initController.ts:892 @@ -1171,6 +2654,7 @@ msgstr "" msgid "No active connections" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:465 #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:1112 msgid "No active routing sections found." msgstr "" @@ -1183,14 +2667,26 @@ msgstr "" msgid "No conflict detected" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10113 +msgid "No Custom Rules Matched" +msgstr "" + #: src/tachyon/tabs/diagnostic/initController.ts:1042 msgid "No diagnostic history available yet." msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1600 +msgid "No domains detected yet" +msgstr "" + #: src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:187 msgid "No enabled server inbounds configured" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7554 +msgid "No file selected" +msgstr "" + #: src/tachyon/tabs/diagnostic/initController.ts:746 msgid "No issues found" msgstr "" @@ -1219,10 +2715,6 @@ msgstr "" msgid "No rules use Zapret2" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:216 -msgid "No targets found in section configs." -msgstr "" - #: src/tachyon/tabs/dashboard/initController.ts:1070 msgid "Node list is empty" msgstr "" @@ -1282,15 +2774,98 @@ msgstr "" msgid "Not running" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10179 +msgid "Not set" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1877 +msgid "Notify on Certificate Warnings" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1825 +msgid "Notify on Core Crashes" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1890 +msgid "Notify on DNS Leaks" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1851 +msgid "Notify on Server Switches" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1838 +msgid "Notify on Service Restarts" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1864 +msgid "Notify on Subscription Updates" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:707 +msgid "Number of consecutive failed checks required before switching DNS servers." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1445 +msgid "Number of consecutive failures before restarting (default 3)." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:721 +msgid "Number of consecutive successful checks required before returning to a higher-priority DNS server." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1359 #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:813 msgid "Ollama (Local PC / Server)" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7721 +msgid "One record per line: example.com 192.168.1.100 or 192.168.1.100 example.com. Lines starting with # are ignored." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2980 +msgid "Only from the specified countries." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1960 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1968 +msgid "Only selected" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1961 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1970 +msgid "Only selected except exclusions" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2996 +msgid "Only servers whose names match the expression." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2947 +msgid "Only servers with one of the selected protocols." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2951 +msgid "Only servers with one of the selected security types." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2948 +msgid "Only servers with one of the selected transports." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2988 +msgid "Only the specified servers." +msgstr "" + #: src/tachyon/tabs/updates/initController.ts:1251 #: src/tachyon/tabs/updates/initController.ts:1290 msgid "Open" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3968 +msgid "Open priority settings and enter a display name" +msgstr "" + #: src/tachyon/tabs/diagnostic/partials/renderWikiDisclaimer.ts:31 msgid "Open Project Page" msgstr "" @@ -1314,26 +2889,112 @@ msgstr "" msgid "Optimization" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1399 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6836 +msgid "Option \"%s\" contains an invalid input value." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8604 +msgid "Optional — leave empty for default" +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:901 msgid "Optional for local LLM" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8734 +msgid "Optional tls-auth or tls-crypt key" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5838 +msgid "Optional values must be attached with '=' here; a separate token would be ignored by nfqws." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6312 +msgid "Optional values must be attached with '=' here; a separate token would be ignored by nfqws2." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7696 +msgid "Or paste hosts file content:" +msgstr "" + #: src/validators/validateOutboundJson.ts:111 msgid "outbounds must be a non-empty array of strings" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:844 +msgid "Output Network Interface" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2493 +msgid "Override the default OpenWrt device headers for this subscription" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7705 +msgid "Overwrite existing records (if unchecked, merge with existing records)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:995 +msgid "P2P Leak Protection" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7628 +msgid "Parsed records:" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8483 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8571 +msgid "Password" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9178 +msgid "Password cannot be empty" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7573 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7588 +msgid "Paste content or upload a file to preview imported DNS records." +msgstr "" + #: src/validators/validatePath.ts:7 msgid "Path cannot be empty" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1243 +msgid "Path must be absolute (start with /)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1252 +msgid "Path must contain at least one directory (like /tmp/cache.db)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1247 +msgid "Path must end with cache.db" +msgstr "" + #: src/tachyon/tabs/monitoring/initController.ts:737 #: src/tachyon/tabs/monitoring/render.ts:80 #: src/tachyon/tabs/monitoring/render.ts:81 msgid "Pause updates" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8335 +msgid "Peer Public Key" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8698 +msgid "PEM-encoded CA certificate" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8710 +msgid "PEM-encoded client certificate" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8722 +msgid "PEM-encoded client private key" +msgstr "" + #: src/tachyon/tabs/diagnostic/diagnostic.store.ts:63 -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:75 msgid "Pending" msgstr "" @@ -1342,14 +3003,97 @@ msgstr "" msgid "Per-Device Routing" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3149 +msgid "Periodically check the current level and switch to a faster server even when the current one works." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1433 +msgid "Periodically checks if the proxy is responding. Restarts Tachyon after consecutive failures." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8382 +msgid "Persistent Keepalive" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1510 +msgid "Persistent Smart Detect" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2698 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3184 +msgid "Pin on dashboard" +msgstr "" + #: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:212 msgid "Please wait, operation is running..." msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1804 +msgid "Polling Interval (seconds)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1817 +msgid "Polling interval must be at least 1 second" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9086 +msgid "Port cannot be empty" +msgstr "" + #: src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:19 msgid "Port conflict" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9076 +msgid "Port for the local mixed proxy of this section" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5459 +msgid "Port must be between 1 and 65535" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5463 +msgid "Port range start must be less than or equal to end" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9506 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10208 +msgid "Ports" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1081 +msgid "Pre-download all preset lists" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8526 +msgid "Pre-shared key" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:767 +msgid "Prefer IPv4" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:769 +msgid "Prefer IPv6" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2537 +msgid "Prefix text" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8369 +msgid "Preshared Key" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1470 +msgid "Prevents multiple reload_firewall calls within 120 seconds to avoid connection drops." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8945 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10103 +msgid "Priority" +msgstr "" + #: src/tachyon/tabs/dashboard/initController.ts:1274 #: src/tachyon/tabs/dashboard/partials/renderSections.ts:514 #: src/tachyon/tabs/dashboard/partials/renderSections.ts:515 @@ -1360,22 +3104,80 @@ msgstr "" msgid "Priority details are unavailable" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3853 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3854 +msgid "Priority level settings" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3193 +msgid "Priority levels" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3913 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3918 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3919 +msgid "Priority settings" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8324 +msgid "Private Key" +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:613 msgid "Protection" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:29 -msgid "Proxy" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2030 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8663 +msgid "Protocol" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1444 +msgid "Proxy Fail Threshold" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1438 +msgid "Proxy Health Check Interval (s)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1450 +msgid "Proxy Health Check URL" msgstr "" #: src/tachyon/tabs/dashboard/initController.ts:807 msgid "Proxy link is unavailable" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1901 +msgid "Proxy Section for Bot" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8457 +msgid "Proxy to use for WARP API registration (api.cloudflareclient.com)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8526 +msgid "PSK" +msgstr "" + #: src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:40 msgid "Public host" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9527 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9546 +msgid "QUIC (HTTP/3)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9533 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9552 +msgid "RDP" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8296 +msgid "Read error" +msgstr "" + #: src/tachyon/tabs/updates/initController.ts:1271 msgid "Rebuilt release" msgstr "" @@ -1384,10 +3186,30 @@ msgstr "" msgid "Recommended Quick Fixes:" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1530 +msgid "Reconnect Threshold" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1477 +msgid "Records proxy/DNS latency and health status in hourly buckets for analysis." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7779 +msgid "Records: %d" +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderSections.ts:132 msgid "Refill" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8456 +msgid "Registration Detour" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5345 +msgid "Regular expression must not contain spaces or commas" +msgstr "" + #: src/tachyon/tabs/updates/initController.ts:1031 msgid "Reinstall" msgstr "" @@ -1396,14 +3218,31 @@ msgstr "" msgid "Reloading page in" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7838 +msgid "Remote Hosts Lists" +msgstr "" + #: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:365 msgid "Removal completed successfully!" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7918 #: src/tachyon/tabs/updates/initController.ts:987 msgid "Remove" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3004 +msgid "Remove servers from the specified countries from this level." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3020 +msgid "Remove servers whose names match the expression from this level." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3012 +msgid "Remove the specified servers from this level." +msgstr "" + #: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:111 msgid "Removing" msgstr "" @@ -1412,8 +3251,54 @@ msgstr "" msgid "Removing binaries & package files..." msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:431 -msgid "Resolved IP / DNS" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9102 +msgid "Require a username and password for the local mixed proxy" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:442 +msgid "Reset" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:389 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:424 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1300 +msgid "Reset Settings" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:399 +msgid "Resetting…" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9189 +msgid "Resolve domain names before routing so sing-box can use real destination IPs." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9188 +msgid "Resolve real IP for routing" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5633 +msgid "Resource selection by hostname inside nfqws is not supported here; sing-box selects resources before NFQUEUE." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6078 +msgid "Resource selection by hostname inside nfqws2 is not supported here; sing-box selects resources before NFQUEUE." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5636 +msgid "Resource selection by IP or CIDR inside nfqws is not supported here; sing-box selects resources before NFQUEUE." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6081 +msgid "Resource selection by IP or CIDR inside nfqws2 is not supported here; sing-box selects resources before NFQUEUE." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8402 +msgid "Response Packet Magic Header (S2)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8404 +msgid "Response Packet Magic Header (S4)" msgstr "" #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:60 @@ -1424,6 +3309,10 @@ msgstr "" msgid "Restarts" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1301 +msgid "Restores the Tachyon factory defaults: all rules, subscriptions, custom DNS servers and other options will be lost." +msgstr "" + #: src/tachyon/tabs/monitoring/initController.ts:737 msgid "Resume updates" msgstr "" @@ -1433,8 +3322,20 @@ msgstr "" msgid "Route" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:426 -msgid "Route Type" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1902 +msgid "Route bot API requests through this section. Leave empty to use the default mixed proxy." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:779 +msgid "Route main DNS requests through the selected section." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7346 +msgid "Route requests to this DNS server through another section." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10008 +msgid "Routing Rule Tracer" msgstr "" #: src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:103 @@ -1443,6 +3344,27 @@ msgstr "" msgid "Routing rules" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10074 +msgid "Rule" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7148 +msgid "Rule set must be an HTTP(S) URL or a local .srs / .json path" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4083 +msgid "Rule set settings" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9374 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9403 +msgid "Rule sets" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10204 +msgid "Rule Sets (.srs / .json)" +msgstr "" + #: src/tachyon/tabs/diagnostic/checks/runNftCheck.ts:79 msgid "Rules mangle counters" msgstr "" @@ -1479,12 +3401,20 @@ msgstr "" msgid "Run doctor repair" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:301 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1663 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1664 #: src/tachyon/methods/custom/getDashboardSections.ts:1567 #: src/tachyon/tabs/dashboard/partials/renderSections.ts:581 #: src/tachyon/tabs/diagnostic/checks/runSectionsCheck.ts:135 msgid "Running" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9237 +msgid "Russia (ru)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3660 #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:1151 msgid "Save" msgstr "" @@ -1508,22 +3438,136 @@ msgstr "" msgid "Search" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:379 -msgid "Search domain or service..." +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:972 +msgid "Secret key for authenticating remote access to YACD when WAN access is enabled." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1328 +msgid "Secret token for authorizing WRITE operations (POST/PUT) on /cgi-bin/tachyon-agent/. Leave empty if auth is not required." msgstr "" #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:700 msgid "Secret token for WRITE requests" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10198 +msgid "Section action" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7253 +msgid "Section name" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10213 +msgid "Section Rules Content" +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:1078 msgid "Section test order (checked = active, drag rows with △▽):" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2042 +msgid "Security" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2436 +msgid "Select a common client profile or enter a custom User-Agent" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8233 +msgid "Select a file with .conf extension" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8824 +msgid "Select a network interface" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9322 +msgid "Select a predefined domain list" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:87 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7367 +msgid "Select a section" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2413 +msgid "Select a section for downloading this subscription" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9023 +msgid "Select a transit section" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1353 +msgid "Select AI LLM provider for diagnostics" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1940 +msgid "Select an existing network interface" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3295 +msgid "Select an existing URLTest or Priority group" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9036 +msgid "Select an intermediate section" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1557 +msgid "Select and order the sections through which blocked domains are tested. Checked sections are tried top-to-bottom." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:593 +msgid "Select DNS protocol to use" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8819 +msgid "Select network interface for VPN connection" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9233 +msgid "Select one or more country ISO codes (e.g. ru, us, de, nl, fr, fi, se, tr, cn, jp, sg, by, kz, ua)." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2449 +msgid "Select or enter a User-Agent" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1226 +msgid "Select or enter path for sing-box cache file. Change this ONLY if you know what you are doing" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1018 +msgid "Select or enter the IP addresses of your game consoles." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1212 +msgid "Select path for sing-box config file. Change this ONLY if you know what you are doing" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3137 #: src/tachyon/tabs/dashboard/initController.ts:1239 msgid "Select the fastest node" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1263 +msgid "Select the log level for sing-box" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:797 +msgid "Select the network interface from which the traffic will originate" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:845 +msgid "Select the network interface to which the traffic will originate" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:908 +msgid "Select the WAN interfaces to be monitored" +msgstr "" + #: src/tachyon/tabs/dashboard/initController.ts:1104 #: src/tachyon/tabs/dashboard/initController.ts:1225 msgid "Selected" @@ -1537,6 +3581,56 @@ msgstr "" msgid "Send" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1891 +msgid "Send a Telegram notification if a potential DNS leak is detected." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1826 +msgid "Send a Telegram notification if sing-box or nftables rules crash and get auto-restored." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1878 +msgid "Send a Telegram notification if SSL/TLS certificates are close to expiration." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1839 +msgid "Send a Telegram notification if the Tachyon service is restarted by the watchdog." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1852 +msgid "Send a Telegram notification when a URLTest group switches to a new server." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1865 +msgid "Send a Telegram notification when proxy subscriptions are successfully updated." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8346 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8471 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8514 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8545 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8580 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8650 +msgid "Server Address" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2707 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2913 +msgid "Server filtering" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8887 +msgid "Server group for automatic lowest-latency selection" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8946 +msgid "Server group for priority failover" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8495 +msgid "Server Name Indication — leave empty to use server address" +msgstr "" + #: src/validators/validateOutboundJson.ts:94 msgid "Server outbound must contain a non-empty server field" msgstr "" @@ -1545,6 +3639,15 @@ msgstr "" msgid "Server outbound must contain a numeric server_port from 1 to 65535" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8357 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8477 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8520 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8551 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8586 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8656 +msgid "Server Port" +msgstr "" + #: src/tachyon/tabs/diagnostic/partials/renderAiChatModal.ts:135 msgid "Server unavailable" msgstr "" @@ -1553,8 +3656,8 @@ msgstr "" msgid "server_port must be a number from 1 to 65535" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:421 -msgid "Service / Target" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3311 +msgid "Servers on dashboard" msgstr "" #: src/tachyon/methods/shell/index.ts:401 @@ -1563,19 +3666,68 @@ msgstr "" msgid "Service action failed" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:163 -msgid "Service Availability Check" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9325 +msgid "Service list" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:581 +msgid "Services & Access" msgstr "" #: src/tachyon/tabs/dashboard/initController.ts:1666 msgid "Services info" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1143 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7223 +msgid "Settings" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:411 +msgid "Settings have been reset to defaults. The page will reload." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2520 +msgid "Show metadata on dashboard" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3384 +msgid "Show only selected servers." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3343 +msgid "Show only servers with one of the selected protocols." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3349 +msgid "Show only servers with one of the selected security types." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3346 +msgid "Show only servers with one of the selected transports." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3457 +msgid "Show servers from selected groups without repeating their filtering criteria." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3376 +msgid "Show servers only from the specified countries." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3392 +msgid "Show servers whose names match the expression." +msgstr "" + #: src/tachyon/tabs/diagnostic/initController.ts:1194 #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:166 msgid "Show sing-box config" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2521 +msgid "Show subscription metadata for this source on the dashboard" +msgstr "" + #: src/tachyon/tabs/diagnostic/checks/runSingBoxCheck.ts:77 msgid "Sing-box autostart disabled" msgstr "" @@ -1608,6 +3760,26 @@ msgstr "" msgid "Sing-box version is compatible (newer than 1.12.4)" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9248 +msgid "Singapore (sg)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7701 +msgid "Skip loopback & local entries (127.0.0.1, ::1, 0.0.0.0, localhost)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8506 +msgid "Skip TLS certificate verification (not recommended)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7630 +msgid "Skipped comments/invalid:" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7629 +msgid "Skipped loopback:" +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:1048 msgid "Smart Detect" msgstr "" @@ -1616,11 +3788,41 @@ msgstr "" msgid "Smart Detect settings saved" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8533 +msgid "Snell Version" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7801 +msgid "Sort Alphabetically" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9048 +msgid "Sort by latency" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9049 +msgid "Sorts servers in this section by lowest latency in the dashboard." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10081 #: src/tachyon/tabs/monitoring/initController.ts:883 #: src/tachyon/tabs/monitoring/initController.ts:933 msgid "Source" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10207 +msgid "Source Devices" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:796 +msgid "Source Network Interface" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9532 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9551 +msgid "SSH" +msgstr "" + #: src/tachyon/tabs/diagnostic/checks/runByedpiCheck.ts:122 msgid "Standalone ByeDPI autostart is enabled" msgstr "" @@ -1665,6 +3867,14 @@ msgstr "" msgid "Standalone Zapret2 service is inactive" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:285 +msgid "Start" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1645 +msgid "Start bot" +msgstr "" + #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:80 msgid "Start Tachyon" msgstr "" @@ -1673,16 +3883,34 @@ msgstr "" msgid "Start Watchdog first" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:334 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1692 +msgid "Starting…" +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:449 #: src/tachyon/tabs/dashboard/partials/renderSections.ts:633 -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:463 msgid "Status" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:292 +msgid "Stop" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1652 +msgid "Stop bot" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2676 +msgid "Stop checking when URLTest group is not used. Use sing-box duration format like 1d, 12h or 30m." +msgstr "" + #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:70 msgid "Stop Tachyon" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:307 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1669 #: src/tachyon/methods/custom/getDashboardSections.ts:1571 #: src/tachyon/tabs/dashboard/partials/renderSections.ts:585 #: src/tachyon/tabs/diagnostic/checks/runSectionsCheck.ts:147 @@ -1693,6 +3921,32 @@ msgstr "" msgid "Stopping active services..." msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:348 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1706 +msgid "Stopping…" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1511 +msgid "Store auto-detected domains in /etc instead of /tmp to survive reboots." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1290 +msgid "Strict ECH + DoQ DNS Enforcer" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9528 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9547 +msgid "STUN (P2P Calls)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4077 +msgid "Subnets from the list will be extracted and added to nftables" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2367 +msgid "Subscription auto update" +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderSections.ts:146 msgid "Subscription info:" msgstr "" @@ -1702,10 +3956,34 @@ msgstr "" msgid "Subscription update failed" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2376 +msgid "Subscription update interval" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8770 +msgid "Subscription URL" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3764 +msgid "Subscription URL settings" +msgstr "" + #: src/tachyon/tabs/dashboard/initController.ts:335 msgid "Subscriptions updated" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8144 +msgid "Success" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7688 +msgid "Successfully imported %d DNS record(s)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9244 +msgid "Sweden (se)" +msgstr "" + #: src/tachyon/tabs/dashboard/initController.ts:1653 msgid "System info" msgstr "" @@ -1722,6 +4000,22 @@ msgstr "" msgid "Tachyon Error" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6504 +msgid "Tachyon manages ciadpi pid files itself, so pidfile options are not allowed here." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6501 +msgid "Tachyon manages the ciadpi process lifecycle itself, so daemon mode is not allowed here." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5648 +msgid "Tachyon manages the nfqws process lifecycle itself, so daemon mode is not allowed here." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6099 +msgid "Tachyon manages the nfqws2 process lifecycle itself, so daemon mode is not allowed here." +msgstr "" + #: src/tachyon/tabs/monitoring/initController.ts:977 msgid "Tachyon service is stopped. Start the service to display connections." msgstr "" @@ -1730,6 +4024,10 @@ msgstr "" msgid "Tachyon service is stopped. Start the service to display the dashboard." msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1202 +msgid "Tachyon will not modify your DHCP configuration" +msgstr "" + #: src/tachyon/tabs/diagnostic/checks/runByedpiCheck.ts:91 msgid "Tachyon-managed ciadpi runtime has restarted" msgstr "" @@ -1774,8 +4072,8 @@ msgstr "" msgid "Tailscale endpoint" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:439 -msgid "TCP" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1764 +msgid "Telegram Bot Token" msgstr "" #: src/tachyon/tabs/dashboard/partials/renderSections.ts:241 @@ -1784,12 +4082,46 @@ msgstr "" msgid "Test latency" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2775 +msgid "Test only selected servers." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2735 +msgid "Test only servers with one of the selected protocols." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2741 +msgid "Test only servers with one of the selected security types." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2738 +msgid "Test only servers with one of the selected transports." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2767 +msgid "Test servers only from the specified countries." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2783 +msgid "Test servers whose names match the expression." +msgstr "" + #: src/tachyon/tabs/dashboard/initController.ts:1107 msgid "Testing URL" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:85 -msgid "Testing..." +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5645 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6090 +msgid "The desync fwmark is managed by Tachyon for loop prevention and must not be overridden here." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5642 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6087 +msgid "The NFQUEUE number is assigned by Tachyon for each rule and must not be overridden here." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9272 +msgid "The rule applies to the domain and all its subdomains. Use full:, keyword:, or regex: prefixes for exact match, keyword match, or regular expression." msgstr "" #: src/tachyon/tabs/diagnostic/checks/runByedpiCheck.ts:78 @@ -1808,25 +4140,93 @@ msgstr "" msgid "Thinking..." msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10265 +msgid "This field is required" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6507 +msgid "This field must start a working ciadpi strategy; help/version options exit immediately and are not allowed here." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5651 +msgid "This field must start a working nfqws strategy; --dry-run exits immediately and is not allowed here." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5654 +msgid "This field must start a working nfqws strategy; --version exits immediately and is not allowed here." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6102 +msgid "This field must start a working nfqws2 strategy; --dry-run exits immediately and is not allowed here." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6105 +msgid "This field must start a working nfqws2 strategy; --version exits immediately and is not allowed here." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5823 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6297 +msgid "This flag does not accept a value." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5854 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6328 +msgid "This option requires a value." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:426 +msgid "This will erase all Tachyon settings and restore the factory defaults. The service will restart. This action cannot be undone." +msgstr "" + #: src/tachyon/tabs/monitoring/initController.ts:874 #: src/tachyon/tabs/monitoring/initController.ts:930 msgid "Time" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:735 +msgid "Time in seconds for DNS record caching (default: 60)" +msgstr "" + #: src/tachyon/helpers/singBoxVariant.ts:64 msgid "tiny" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:447 -msgid "TLS" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9531 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9550 +msgid "TLS / HTTPS" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8733 +msgid "TLS Auth/Crypt Key" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8494 +msgid "TLS SNI" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1773 +msgid "Token is required when the bot is enabled" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2648 #: src/tachyon/tabs/dashboard/initController.ts:1109 msgid "Tolerance" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:325 -msgid "Total Targets" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3194 +msgid "Top level has the highest priority; lower levels are used as fallback" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7627 +msgid "Total lines:" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10012 +msgid "Trace" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10049 +msgid "Tracing routing rules..." msgstr "" #: src/tachyon/tabs/dashboard/initController.ts:1627 @@ -1834,30 +4234,119 @@ msgstr "" msgid "Traffic" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2905 +msgid "Traffic for this level goes directly." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9498 +msgid "Traffic from these IP addresses will never be routed through this section, even if other conditions match." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9524 +msgid "Traffic of specified protocols (e.g. BitTorrent, QUIC, STUN) will bypass this section." +msgstr "" + #: src/tachyon/tabs/dashboard/initController.ts:1640 msgid "Traffic Total" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9542 +msgid "Traffic type filter" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10114 +msgid "Traffic will go through the default route (Direct/Default)." +msgstr "" + #: src/tachyon/tabs/updates/initController.ts:851 msgid "Transient connection error" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6498 +msgid "Transparent proxy mode is incompatible with action=byedpi because Tachyon connects to ciadpi through SOCKS." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2036 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8557 +msgid "Transport" +msgstr "" + #: src/tachyon/tabs/diagnostic/partials/renderWikiDisclaimer.ts:25 msgid "Troubleshooting" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2425 +msgid "Try compatible User-Agent profiles automatically when downloading this subscription" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:746 +msgid "TTL must be a positive number" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:741 +msgid "TTL value cannot be empty" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9245 +msgid "Turkey (tr)" +msgstr "" + #: src/tachyon/tabs/monitoring/initController.ts:868 #: src/tachyon/tabs/monitoring/initController.ts:928 msgid "Type" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:598 +msgid "UDP (Unprotected DNS)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9251 +msgid "Ukraine (ua)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6422 +msgid "Unable to validate the ByeDPI strategy through the backend parser." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5565 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6900 +msgid "Unable to validate the NFQWS strategy through the backend parser." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6010 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6909 +msgid "Unable to validate the NFQWS2 strategy through the backend parser." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3111 #: src/tachyon/tabs/dashboard/initController.ts:1233 msgid "Unavailability timeout" msgstr "" -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:112 -#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:327 -msgid "Unavailable" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8405 +msgid "Underload Packet Magic Header (H1)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8406 +msgid "Underload Packet Magic Header (H2)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8407 +msgid "Underload Packet Magic Header (H3)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8408 +msgid "Underload Packet Magic Header (H4)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6639 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6688 +msgid "Unexpected ByeDPI strategy argument: %s" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5803 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6277 +msgid "Unexpected standalone token. Use explicit flags such as --name or --name=value." msgstr "" #: src/tachyon/tabs/diagnostic/checks/runByedpiCheck.ts:96 @@ -1872,6 +4361,14 @@ msgstr "" msgid "Unexpected Tachyon-managed nfqws2 runtime is running" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9241 +msgid "United Kingdom (gb)" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9238 +msgid "United States (us)" +msgstr "" + #: src/tachyon/helpers/singBoxVariant.ts:37 #: src/tachyon/services/systemInfo.service.ts:10 #: src/tachyon/services/systemInfo.service.ts:12 @@ -1887,10 +4384,22 @@ msgstr "" msgid "unknown" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:328 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1686 #: src/tachyon/methods/custom/getDashboardSections.ts:1573 msgid "Unknown" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6608 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6630 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6681 +msgid "Unknown ByeDPI option: %s" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:616 +msgid "Unknown country" +msgstr "" + #: src/tachyon/api.ts:40 #: src/tachyon/tabs/diagnostic/initController.ts:721 #: src/tachyon/tabs/diagnostic/initController.ts:758 @@ -1899,6 +4408,14 @@ msgstr "" msgid "Unknown error" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5814 +msgid "Unknown NFQWS flag." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6288 +msgid "Unknown NFQWS2 flag." +msgstr "" + #: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:131 msgid "Unpacking & installing binaries..." msgstr "" @@ -1937,6 +4454,18 @@ msgstr "" msgid "Update subscriptions" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2368 +msgid "Update this subscription automatically" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7632 +msgid "Updated/duplicates:" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:582 +msgid "Updates & Downloads" +msgstr "" + #: src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:113 msgid "Updating" msgstr "" @@ -1963,6 +4492,26 @@ msgstr "" msgid "URL must use one of the following protocols:" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1451 +msgid "URL to test through the proxy (default: Cloudflare 204)." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3087 +msgid "URL used to check whether a server is alive" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2663 +msgid "URL used to test server latency" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7839 +msgid "URLs of remote hosts files to download and apply. Supports standard hosts format: IP domain." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8886 +msgid "URLTest" +msgstr "" + #: src/tachyon/tabs/dashboard/initController.ts:1131 #: src/tachyon/tabs/dashboard/partials/renderSections.ts:495 #: src/tachyon/tabs/dashboard/partials/renderSections.ts:496 @@ -1973,10 +4522,60 @@ msgstr "" msgid "URLTest details are unavailable" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3803 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3804 +msgid "URLTest settings" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1490 +msgid "Use 3-tier check intervals: fast (15s), normal (120s), slow (300s) instead of a single interval." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8985 +msgid "Use another section as an intermediate hop to connect to servers in this section. Does not apply to network interfaces or JSON outbounds." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:252 +msgid "Use sing-box duration format like 10s, 1m or 2m30s" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1045 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1067 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1074 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1105 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1133 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2377 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2637 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3160 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4722 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4729 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4736 +msgid "Use sing-box duration format like 1d, 12h or 30m" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7986 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7997 +msgid "Use sing-box duration format like 1d, 12h or 6h" +msgstr "" + #: src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:25 msgid "Used by" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2435 +msgid "User-Agent" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8565 +msgid "Username" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9142 +msgid "Username cannot be empty" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5338 +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5351 #: src/validators/validateDns.ts:25 #: src/validators/validateDns.ts:29 #: src/validators/validateDomain.ts:57 @@ -1996,11 +4595,39 @@ msgstr "" msgid "Valid" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1497 +msgid "Validates sing-box config before restart to prevent boot loops on broken configs." +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4791 +msgid "Validation errors:" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5328 +msgid "Value cannot be empty" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10268 +msgid "Value must not contain control characters" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1977 +msgid "Via country.is" +msgstr "" + #: src/tachyon/tabs/diagnostic/initController.ts:817 #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:157 msgid "View logs" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7254 +msgid "Visible name of this section" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8746 +msgid "vless://, vmess://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links" +msgstr "" + #: src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:70 msgid "WAN" msgstr "" @@ -2009,18 +4636,70 @@ msgstr "" msgid "WAN public IP" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8445 +msgid "WARP Access Token" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8433 +msgid "WARP Account ID" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8144 +msgid "WARP Configuration generated and loaded successfully!" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8421 +msgid "WARP Private Key" +msgstr "" + #: src/tachyon/tabs/dashboard/partials/renderAdvancedSettings.ts:446 msgid "Watchdog" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1421 +msgid "Watchdog Status" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1280 +msgid "WebRTC Leak Protection" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7267 +msgid "What Tachyon should do when this section matches" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3138 +msgid "When switching to another level, test every server and select the fastest instead of the first working one." +msgstr "" + #: src/tachyon/tabs/diagnostic/partials/renderAiChatModal.ts:156 msgid "Why Discord fails?" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8617 +msgid "WireGuard private key from your Cloudflare account" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8422 +msgid "WireGuard private key from your Cloudflare WARP account" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:971 +msgid "YACD Secret Key" +msgstr "" + #: src/tachyon/tabs/dashboard/initController.ts:812 msgid "Yes" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:835 +msgid "You can select Output Network Interface, by default autodetect" +msgstr "" + +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:5639 +msgid "Zapret hostlist templates are not supported here because Tachyon does not expand them for per-rule NFQWS strategies." +msgstr "" + #: src/tachyon/tabs/diagnostic/checks/runZapretCheck.ts:71 msgid "Zapret package is installed" msgstr "" @@ -2045,6 +4724,10 @@ msgstr "" msgid "Zapret sing-box outbound is not configured" msgstr "" +#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:6084 +msgid "Zapret2 hostlist templates are not supported here because Tachyon does not expand them for per-rule NFQWS2 strategies." +msgstr "" + #: src/tachyon/tabs/diagnostic/checks/runZapret2Check.ts:74 msgid "Zapret2 package is installed" msgstr "" diff --git a/tachyon/Makefile b/tachyon/Makefile index 138dc725..b8c4564d 100644 --- a/tachyon/Makefile +++ b/tachyon/Makefile @@ -148,6 +148,9 @@ define Package/tachyon/install $(INSTALL_DIR) $(1)/usr/lib/tachyon $(CP) ./files/usr/lib/. $(1)/usr/lib/tachyon/ + $(INSTALL_DIR) $(1)/usr/lib/tachyon/defaults + $(INSTALL_CONF) ./files/etc/config/tachyon $(1)/usr/lib/tachyon/defaults/config + $(INSTALL_DIR) $(1)/etc/hotplug.d/iface $(INSTALL_BIN) ./files/etc/hotplug.d/iface/99-tachyon-wan-monitor $(1)/etc/hotplug.d/iface/99-tachyon-wan-monitor diff --git a/tachyon/files/usr/bin/tachyon b/tachyon/files/usr/bin/tachyon index 78224fd9..c07f465f 100755 --- a/tachyon/files/usr/bin/tachyon +++ b/tachyon/files/usr/bin/tachyon @@ -51,6 +51,7 @@ function restore_dnsmasq_failsafe_on_loader_failure(command) { command = as_string(command); if (command == "start" || command == "stop" || command == "restart" || command == "reload" || command == "uninstall" || + command == "reset_settings" || command == "dnsmasq_restore" || command == "restore_dnsmasq") restore_dnsmasq_failsafe(); } @@ -64,6 +65,8 @@ function show_help() { print(" restart Restart Tachyon service\n"); print(" enable Enable Tachyon autostart\n"); print(" disable Disable Tachyon autostart\n"); + print(" reset_settings [no-start]\n"); + print(" Reset Tachyon settings to factory defaults\n"); print(" uninstall Remove Tachyon files installed outside opkg/apk\n"); print(" main Run main Tachyon process\n"); print(" list_update Update remote lists\n"); @@ -160,6 +163,7 @@ function command_spec(command) { enable: [ "service/lifecycle.uc", "enable", 0 ], disable: [ "service/lifecycle.uc", "disable", 0 ], uninstall: [ "service/uninstall.uc", "uninstall", 1 ], + reset_settings: [ "service/reset.uc", "reset-settings", 1 ], dnsmasq_restore: [ "service/lifecycle.uc", "dnsmasq-restore", 0 ], restore_dnsmasq: [ "service/lifecycle.uc", "dnsmasq-restore", 0 ], main: [ "service/lifecycle.uc", "main", 0 ], diff --git a/tachyon/files/usr/lib/service/reset.uc b/tachyon/files/usr/lib/service/reset.uc new file mode 100644 index 00000000..e4899c90 --- /dev/null +++ b/tachyon/files/usr/lib/service/reset.uc @@ -0,0 +1,143 @@ +#!/usr/bin/env ucode + +let fs = require("fs"); + +function as_string(value) { + return value == null ? "" : "" + value; +} + +function env(name, fallback) { + let value = getenv(name); + return value == null ? as_string(fallback) : as_string(value); +} + +function shell_quote(value) { + return "'" + replace(as_string(value), /'/g, "'\\''") + "'"; +} + +function command_from_args(args) { + let parts = []; + for (let arg in args) + push(parts, shell_quote(arg)); + return join(" ", parts); +} + +function normalize_status(status) { + status = int(status); + if (status == -1) + return 255; + let signal = status & 127; + if (signal != 0) + return 128 + signal; + return (status >> 8) & 255; +} + +function command_success_from_args(args) { + return normalize_status(system(command_from_args(args) + " >/dev/null 2>&1")) == 0; +} + +function log_message(message) { + system(command_from_args([ "logger", "-t", CONFIG_NAME, "[info] " + message ]) + " >/dev/null 2>&1"); +} + +const CONFIG_NAME = env("TACHYON_CONFIG_NAME", "tachyon"); +const LIB_DIR = env("TACHYON_LIB", "/usr/lib/tachyon"); +const BIN_PATH = env("TACHYON_BIN", "/usr/bin/tachyon"); +const INIT_PATH = env("TACHYON_SERVICE_INIT", "/etc/init.d/" + CONFIG_NAME); +const CONFIG_PATH = env("TACHYON_CONFIG_PATH", "/etc/config/" + CONFIG_NAME); +const PERSISTENT_DIR = env("TACHYON_PERSISTENT_DIR", "/etc/" + CONFIG_NAME); +const RUNTIME_STATE_DIR = env("TACHYON_RUNTIME_STATE_DIR", "/var/run/" + CONFIG_NAME); +const SING_BOX_TMP_DIR = env("TACHYON_SING_BOX_TMP_DIR", "/tmp/sing-box"); +const SING_BOX_CONFIG_PATH = env("TACHYON_SING_BOX_CONFIG_PATH", "/etc/sing-box/config.json"); + +const PRESERVED_PERSISTENT_ENTRIES = { + tailscale: 1 +}; + +function default_config_source() { + for (let candidate in [ + "/rom/etc/config/" + CONFIG_NAME, + LIB_DIR + "/defaults/" + CONFIG_NAME + ".conf", + LIB_DIR + "/defaults/config" + ]) { + candidate = as_string(candidate); + if (fs.stat(candidate) != null) + return candidate; + } + return null; +} + +function remove_persistent_state() { + if (fs.stat(PERSISTENT_DIR) == null) + return true; + + let entries = fs.lsdir(PERSISTENT_DIR); + if (type(entries) != "array") + return false; + + for (let entry in entries) { + entry = as_string(entry); + if (PRESERVED_PERSISTENT_ENTRIES[entry]) + continue; + if (!command_success_from_args([ "rm", "-rf", PERSISTENT_DIR + "/" + entry ])) + return false; + } + return true; +} + +function reset_settings(no_start) { + command_success_from_args([ BIN_PATH, "stop" ]); + command_success_from_args([ INIT_PATH, "stop" ]); + + command_success_from_args([ "rm", "-rf", + RUNTIME_STATE_DIR, + SING_BOX_TMP_DIR, + SING_BOX_CONFIG_PATH + ]); + if (!remove_persistent_state()) { + log_message("Reset settings failed: unable to clean " + PERSISTENT_DIR); + print("{\"success\":false,\"message\":\"unable to clean persistent state\"}\n"); + return 1; + } + + let source = default_config_source(); + if (source == null) { + log_message("Reset settings failed: default config source not found"); + print("{\"success\":false,\"message\":\"default config source not found\"}\n"); + return 1; + } + + if (!command_success_from_args([ "cp", "-f", source, CONFIG_PATH ])) { + log_message("Reset settings failed: unable to write default config"); + print("{\"success\":false,\"message\":\"unable to write default config\"}\n"); + return 1; + } + command_success_from_args([ "chmod", "600", CONFIG_PATH ]); + + log_message("Settings have been reset to defaults"); + print("{\"success\":true}\n"); + + if (no_start == "1") + return 0; + + let start_status = command_success_from_args([ INIT_PATH, "start" ]) ? 0 : 1; + if (start_status != 0) { + log_message("Reset settings: service failed to start after reset"); + print("{\"success\":true,\"started\":false}\n"); + } + return start_status; +} + +let mode = as_string(ARGV[0]); +let no_start = "0"; +for (let i = 1; i < length(ARGV); i++) { + let arg = as_string(ARGV[i]); + if (arg == "no-start" || arg == "--no-start") + no_start = "1"; +} + +if (mode == "reset-settings") + exit(reset_settings(no_start)); + +warn("Usage: service/reset.uc reset-settings [no-start]\n"); +exit(1); diff --git a/tests/reset_settings_contract.sh b/tests/reset_settings_contract.sh new file mode 100644 index 00000000..3b57f863 --- /dev/null +++ b/tests/reset_settings_contract.sh @@ -0,0 +1,150 @@ +#!/usr/bin/env bash +set -eo pipefail + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +TACHYON_LIB="$ROOT_DIR/tachyon/files/usr/lib" +RESET_UC="$TACHYON_LIB/service/reset.uc" +TACHYON_BIN="$ROOT_DIR/tachyon/files/usr/bin/tachyon" +INSTALLER="$ROOT_DIR/install.sh" +WORK_DIR="$(mktemp -d)" + +cleanup() { + rm -rf "$WORK_DIR" +} +trap cleanup EXIT + +fail() { + printf 'FAIL: %s\n' "$1" >&2 + exit 1 +} + +[ -r "$RESET_UC" ] || fail "service/reset.uc must own reset-to-defaults logic" +[ -r "$TACHYON_BIN" ] || fail "tachyon entrypoint is missing" + +grep -Fq 'reset_settings: [ "service/reset.uc", "reset-settings", 1 ]' "$TACHYON_BIN" || + fail "tachyon entrypoint must dispatch reset_settings to service/reset.uc" +grep -Fq 'reset_settings' "$TACHYON_BIN" || + fail "tachyon entrypoint must list reset_settings in the command table" + +mkdir -p "$WORK_DIR/lib/defaults" +cat >"$WORK_DIR/default-config" <<'EOF' +config settings 'settings' + option config_version '1.0.5' + option dns_type 'udp' + option shutdown_correctly '0' +EOF +cp "$WORK_DIR/default-config" "$WORK_DIR/lib/defaults/config" + +mkdir -p \ + "$WORK_DIR/persistent/subscription-cache" \ + "$WORK_DIR/persistent/rulesets" \ + "$WORK_DIR/persistent/tailscale/server-main" +printf '%s\n' 'stale-cache' >"$WORK_DIR/persistent/subscription-cache/cache.json" +printf '%s\n' 'stale-ruleset' >"$WORK_DIR/persistent/rulesets/community.srs" +printf '%s\n' 'tailscale-identity' >"$WORK_DIR/persistent/tailscale/server-main/node.key" +mkdir -p "$WORK_DIR/runtime" "$WORK_DIR/sing-box-tmp" +printf '%s\n' '{"log":{}}' >"$WORK_DIR/sing-box-tmp/config.json" +mkdir -p "$(dirname "$WORK_DIR/sing-box-config")" +printf '%s\n' '{"log":{}}' >"$WORK_DIR/sing-box-config" +printf '%s\n' 'custom-user-config' >"$WORK_DIR/config" + +: >"$WORK_DIR/bin.log" +: >"$WORK_DIR/init.log" +cat >"$WORK_DIR/fake-bin" <<'SH' +#!/usr/bin/env sh +printf '%s\n' "$*" >> "$TACHYON_RESET_BIN_LOG" +exit 0 +SH +chmod 0755 "$WORK_DIR/fake-bin" +cat >"$WORK_DIR/fake-init" <<'SH' +#!/usr/bin/env sh +printf '%s\n' "$*" >> "$TACHYON_RESET_INIT_LOG" +exit 0 +SH +chmod 0755 "$WORK_DIR/fake-init" + +TACHYON_LIB="$WORK_DIR/lib" \ +TACHYON_BIN="$WORK_DIR/fake-bin" \ +TACHYON_SERVICE_INIT="$WORK_DIR/fake-init" \ +TACHYON_CONFIG_PATH="$WORK_DIR/config" \ +TACHYON_PERSISTENT_DIR="$WORK_DIR/persistent" \ +TACHYON_RUNTIME_STATE_DIR="$WORK_DIR/runtime" \ +TACHYON_SING_BOX_TMP_DIR="$WORK_DIR/sing-box-tmp" \ +TACHYON_SING_BOX_CONFIG_PATH="$WORK_DIR/sing-box-config" \ +TACHYON_RESET_BIN_LOG="$WORK_DIR/bin.log" \ +TACHYON_RESET_INIT_LOG="$WORK_DIR/init.log" \ + ucode -L "$WORK_DIR/lib" "$RESET_UC" reset-settings no-start >"$WORK_DIR/result.json" +grep -Fq '"success":true' "$WORK_DIR/result.json" || + fail "reset-settings must report success" + +grep -Fxq 'stop' "$WORK_DIR/bin.log" || + fail "reset must stop the service through the backend entrypoint" +grep -Fxq 'stop' "$WORK_DIR/init.log" || + fail "reset must stop the service through init.d" +if grep -Fxq 'start' "$WORK_DIR/init.log"; then + fail "reset no-start must not start the service" +fi + +cmp -s "$WORK_DIR/config" "$WORK_DIR/default-config" || + fail "reset must restore the config file to factory defaults" +[ "$(stat -c %a "$WORK_DIR/config")" = "600" ] || + fail "reset config must be chmod 600" + +[ ! -e "$WORK_DIR/persistent/subscription-cache" ] || + fail "reset must remove stale subscription caches" +[ ! -e "$WORK_DIR/persistent/rulesets" ] || + fail "reset must remove stale ruleset caches" +[ "$(cat "$WORK_DIR/persistent/tailscale/server-main/node.key")" = 'tailscale-identity' ] || + fail "reset must preserve the Tailscale identity" +[ ! -e "$WORK_DIR/runtime" ] || + fail "reset must remove the runtime state directory" +[ ! -e "$WORK_DIR/sing-box-tmp" ] || + fail "reset must remove the sing-box temporary directory" +[ ! -e "$WORK_DIR/sing-box-config" ] || + fail "reset must remove the sing-box config file" + +TACHYON_LIB="$WORK_DIR/lib" \ +TACHYON_BIN="$WORK_DIR/fake-bin" \ +TACHYON_SERVICE_INIT="$WORK_DIR/fake-init" \ +TACHYON_CONFIG_PATH="$WORK_DIR/config" \ +TACHYON_PERSISTENT_DIR="$WORK_DIR/persistent" \ +TACHYON_RUNTIME_STATE_DIR="$WORK_DIR/runtime" \ +TACHYON_SING_BOX_TMP_DIR="$WORK_DIR/sing-box-tmp" \ +TACHYON_SING_BOX_CONFIG_PATH="$WORK_DIR/sing-box-config" \ +TACHYON_RESET_BIN_LOG="$WORK_DIR/bin.log" \ +TACHYON_RESET_INIT_LOG="$WORK_DIR/init.log" \ + ucode -L "$WORK_DIR/lib" "$RESET_UC" reset-settings >"$WORK_DIR/result.json" +grep -Fxq 'start' "$WORK_DIR/init.log" || + fail "reset without no-start must start the service" + +TACHYON_LIB="$WORK_DIR/lib" \ +TACHYON_BIN="$WORK_DIR/fake-bin" \ +TACHYON_SERVICE_INIT="$WORK_DIR/fake-init" \ +TACHYON_CONFIG_PATH="$WORK_DIR/config" \ +TACHYON_PERSISTENT_DIR="$WORK_DIR/persistent" \ +TACHYON_RUNTIME_STATE_DIR="$WORK_DIR/runtime" \ +TACHYON_SING_BOX_TMP_DIR="$WORK_DIR/sing-box-tmp" \ +TACHYON_SING_BOX_CONFIG_PATH="$WORK_DIR/sing-box-config" \ +TACHYON_RESET_BIN_LOG="$WORK_DIR/bin.log" \ +TACHYON_RESET_INIT_LOG="$WORK_DIR/init.log" \ + ucode -L "$WORK_DIR/lib" "$RESET_UC" bogus-mode 2>"$WORK_DIR/usage.err" && + fail "reset module must reject unknown modes" +grep -Fq 'Usage' "$WORK_DIR/usage.err" || + fail "reset module must print usage for unknown modes" + +grep -Fq 'reset_settings [no-start]' "$TACHYON_BIN" || + fail "tachyon help must document reset_settings" +grep -Fq 'reset_settings' "$TACHYON_BIN" || + fail "tachyon failsafe dnsmasq restore must cover reset_settings" + +# The installer must wipe leftover state on a fresh install but keep user +# configuration on upgrades and legacy migrations. +grep -Fq 'TACHYON_WAS_INSTALLED' "$INSTALLER" || + fail "installer must remember whether Tachyon was installed before" +grep -Fq 'reset_settings", "no-start"' "$INSTALLER" || + fail "installer post-install must delegate fresh-install defaults to reset_settings" +if grep -n -E 'reset_settings|TACHYON_WAS_INSTALLED' "$INSTALLER" | grep -qE 'rm -f |uci |sed -i '; then + fail "installer must not own reset/state shell logic" +fi + +printf 'reset settings contract checks passed\n'