{ "waf": { "title": "WAF", "createRule": "Новое правило", "ruleGroups": "Группы правил", "ruleGroupsDesc": "Создавайте правила защиты WAF с помощью визуального представления. Глобальные правила всегда применяются к каждому сайту.", "refresh": "Обновить", "loading": "Загрузка групп правил WAF...", "empty": "Групп правил пока нет. Система обычно автоматически создает глобальную группу.", "created": "Правило создано", "groupDeleted": "Группа правил удалена.", "deleteTitle": "Удалить группу правил", "deleteDesc": "Удалить группу правил «{name}»? Это невозможно отменить.", "deleting": "Удаление...", "confirmDelete": "Удалить", "operationFailed": "Операция не удалась", "autoConfigMustBeObject": "Автоматическая конфигурация должна быть объектом JSON.", "autoConfigInvalid": "Неверный формат автоматической конфигурации.", "saveFailed": "Сохранить не удалось", "enabled": "Включено", "disabled": "Отключено", "enable": "Включено", "disable": "Отключено", "global": "Глобальный", "custom": "Пользовательский", "allSites": "Все сайты", "siteCount": "Сайтов: {count}", "columns": { "name": "Название", "type": "Тип", "status": "Статус", "nodeCount": "Узлы", "scope": "Область применения", "updatedAt": "Обновлено", "actions": "Действия" }, "actions": { "compose": "Изменить", "delete": "Удалить" }, "createDialog": { "title": "Новое правило WAF", "description": "После создания вы откроете редактор и настроите процесс обработки.", "name": "Название правила", "namePlaceholder": "например Защита кромок", "submit": "Создавать и редактировать" }, "editor": { "missingId": "Требуется действительное правило ID.", "loadFailed": "Не удалось загрузить правило. Пожалуйста, попробуйте еще раз.", "reload": "Перезагрузить", "back": "Назад", "graphValid": "График действителен", "issueCount": "Ошибок: {count}", "unsaved": "несохраненный", "enableRule": "Включить правило", "format": "Формат", "formatTitle": "Автоматическое расположение узлов и ребер", "saving": "Сохранение...", "save": "Сохранить", "saved": "График правил сохранен.", "conflict": "Это правило было обновлено в другом месте. Пожалуйста, перезагрузите.", "saveCheckNodes": "Сохранить не удалось. Проверьте выделенные узлы и ребра.", "ruleEnabled": "Правило включено", "ruleDisabled": "Правило отключено", "leaveTitle": "Несохраненные изменения", "leaveDesc": "У вас есть несохраненные изменения. Все равно уйти?", "leaveConfirm": "Уйти", "deleteNode": "Удалить узел", "systemNodeLocked": "Системные узлы не могут быть удалены", "deleteEdge": "Удалить край", "propsTitle": "Свойства узла", "propsDesc": "Настроить этот процессор", "systemNodeNoConfig": "Системные узлы не нуждаются в настройке.", "displayName": "Отображаемое имя", "ips": "IP адреса", "cidrs": "CIDR диапазоны", "ipGroups": "IP группы", "countries": "Коды стран", "countriesDesc": "Стран и территорий: {count}. Показаны названия и коды ISO.", "regions": "Коды регионов", "regionsDesc": "Регионов первого уровня: {count}. Поиск по названию или коду.", "uaCheck": "Проверка User-Agent", "enableUaCheck": "Включить флажок UA", "enableUaCheckTip": "Если эта функция включена, запросы без User-Agent возвращают False.", "block": "Заблокировать", "blockTip": "Соответствие возвращает false и имеет приоритет над правилами сопоставления.", "blockBots": "Блокировать UA обычных сканеров", "blockBotsTip": "Браузер или OS классифицируется как бот (бот/паук/сканер/хлюпает, например Googlebot)", "blockAbnormal": "Блокировать аномальные UA", "blockAbnormalTip": "Браузер классифицирован как «Другой» или «Неизвестный» (исключая ботов поисковых систем; для сканеров используйте переключатель выше)", "blockCustom": "Блокировать пользовательские UA", "blockCustomTip": "Возвращает false, если необработанный User-Agent соответствует любому регулярному выражению (синтаксис шаблона Lua)", "customUaPatterns": "Пользовательское регулярное выражение UA", "customUaPatternsTip": "Одно регулярное выражение Lua-шаблона в каждой строке. Любое совпадение возвращает false. Макс 32.", "uaMatch": "UA совпадение", "matchMode": "Режим матча", "matchModeTip": "Используется, когда установлены параметры браузера и OS.", "matchOr": "OR", "matchAnd": "AND", "browsers": "Браузеры", "os": "Операционные системы", "security": "Проверки безопасности", "securityTip": "Любое включенное совпадение правил возвращает False", "basicProtection": "Базовая защита", "help": "Помощь", "oneValuePerLine": "Одно значение в строке", "selectedCount": "Выбрано: {count}", "pleaseSelect": "Выбрать", "createLabel": "Новый {label}", "searchNameOrCode": "Поиск имени или кода", "addCode": "Добавить код", "searchOptions": "Поиск по названию или коду ({count})", "noMatchingOptions": "Нет подходящих вариантов", "algorithm": "Алгоритм", "algorithmFast": "Быстро", "algorithmSlow": "Прочный", "difficulty": "Сложность", "sessionTtl": "Сеанс TTL (секунды)", "challengeTtl": "Вызов TTL (секунды)", "statusCode": "HTTP код состояния", "responseBody": "HTML тело ответа", "bytes": "байты", "securityRules": { "path_traversal": { "label": "Обход пути", "tip": "Обнаружение ../ и закодированных вариантов в пути/запросе/теле" }, "file_inclusion": { "label": "Включение файла (LFI/RFI)", "tip": "Обнаружение php://, file://, /etc/passwd и подобных в Path/Query/Body" }, "sql_injection": { "label": "SQL инъекция", "tip": "Обнаружение шаблонов внедрения SQL в запросе/теле/заголовке/файле cookie" }, "command_injection": { "label": "Внедрение команд", "tip": "Обнаружение шаблонов внедрения команд OS в запросе/теле/заголовке" }, "xss": { "label": "XSS", "tip": "Обнаружение отраженных шаблонов XSS в запросе/теле/заголовке" }, "ssrf": { "label": "SSRF", "tip": "Обнаружение частных адресов и опасных протоколов в запросе/теле" }, "malicious_upload": { "label": "Вредоносная загрузка", "tip": "Обнаружение опасных составных имен и расширений файлов" }, "xxe": { "label": "XXE", "tip": "Обнаружение шаблонов внешних объектов в телах XML" }, "crlf_injection": { "label": "CRLF инъекция", "tip": "Обнаружение инъекции новой строки в заголовке/запросе/теле" } } } }, "ipGroups": { "title": "IP группы", "create": "Новая группа IP", "listTitle": "IP группы", "listDesc": "Поддерживать ручные, автоматические и подписные наборы IP, на которые WAF могут ссылаться списки разрешений/запретов.", "refresh": "Обновить", "loading": "Загрузка групп IP...", "empty": "IP групп пока нет. Сначала создайте его.", "updated": "Группа IP обновлена", "created": "IP группа создана", "deleted": "IP группа удалена", "synced": "Синхронизация завершена", "ipRemoved": "IP удалено", "testHit": "Проверка завершена. Совпавших IP-адресов: {count}.", "testMiss": "Проверка правил завершена. Ни один IP-адрес не соответствует.", "deleteTitle": "Удалить группу IP", "deleteDesc": "Удалить группу IP «{name}»? Это невозможно отменить.", "deleting": "Удаление...", "confirmDelete": "Удалить", "operationFailed": "Операция не удалась", "types": { "manual": "Вручную", "automatic": "Автоматический", "subscription": "Подписка" }, "enabled": "Включено", "disabled": "Отключено", "noSyncRecord": "Нет истории синхронизации", "columns": { "name": "Название", "type": "Тип", "status": "Статус", "ipCount": "IP-адреса", "refCount": "Ссылки", "syncStatus": "Статус синхронизации", "updatedAt": "Обновлено", "actions": "Действия" }, "actions": { "view": "Посмотреть", "edit": "Изменить", "test": "Правило теста", "runNow": "Беги сейчас", "syncNow": "Синхронизировать сейчас", "delete": "Удалить" }, "ban": { "permanent": "Постоянный", "expired": "Срок действия истек", "minutesLater": "через {count} мин.", "hoursLater": "через {count} ч" }, "presets": { "scan404": "Высокочастотное сканирование 404 с одного IP", "directAccess": "Аномальный прямой доступ с одного IP" }, "dialog": { "editTitle": "Изменить {name}", "createTitle": "Новая группа IP", "description": "Поддерживать ручные, автоматические и подписные наборы IP, на которые WAF могут ссылаться списки разрешений/запретов.", "name": "IP имя группы", "nameRequired": "Введите имя группы IP.", "type": "Тип", "enable": "Включить группу IP", "enableDesc": "Если этот параметр отключен, конфигурация сохраняется, но не расширяется в список времени выполнения WAF при публикации.", "subscriptionUrl": "Подписка URL", "subscriptionUrlRequired": "Тип подписки требует URL", "subscriptionFormat": "Формат подписки", "formatText": "Текстовый список", "syncInterval": "Интервал синхронизации (минуты)", "syncIntervalDesc": "Минимум 1 минута. По умолчанию 1440 минут.", "mappingRule": "JSON правило сопоставления", "mappingPlaceholder": "Оставьте пустым для корневого массива", "autoIntervalDesc": "Как часто извлекать вредоносные IP-адреса из журналов запросов. Минимум 1 минута, по умолчанию 1440 минут.", "presetRules": "Предустановленные правила", "autoConfigJson": "Автоматическая конфигурация JSON", "ipList": "IP-адреса/CIDR-адреса", "ipListSubscriptionHint": "При следующей синхронизации подписки этот список будет перезаписан. Вы все равно можете сначала сохранить текущее содержимое.", "ipListManualHint": "Один IP или CIDR в каждой строке.", "saving": "Сохранение...", "save": "Сохранить группу IP" }, "testDialog": { "title": "Результат автоматической проверки правил", "description": "Воспроизведение журналов запросов в соответствии с текущей автоматической конфигурацией JSON.", "testing": "Тестирование...", "summary": "{lookback} · правил: {rules} · совпавших IP-адресов: {matched}", "testedAt": "Протестировано: {time}", "noMatch": "Ни один IP-адрес не соответствует.", "empty": "Результата теста пока нет.", "close": "Закрыть" }, "viewDialog": { "titleNamed": "Посмотреть {name}", "title": "Посмотреть группу IP", "summary": "{type} · IP-адресов: {count}", "summaryFiltered": "{type} · IP-адресов: {count}, совпадений: {matched}", "searchPlaceholder": "Поиск IP адресов...", "clearSearch": "Очистить поиск", "noSearchResult": "Соответствующие адреса IP не найдены.", "fallbackDesc": "Просмотрите IP-адреса в этой группе и удалите записи, которые вам больше не нужны.", "loading": "Загрузка списка IP...", "noGroup": "Группа IP не выбрана.", "emptyAuto": "Это автоматическое правило еще не зафиксировало ни одного IP-адреса. Нажмите «Запустить сейчас», чтобы запустить захват.", "empty": "В этой группе IP нет IP-адресов.", "subscriptionHint": "Группы подписки могут восстановить удаленные IP-адреса при следующей синхронизации.", "ipAddress": "IP адрес", "capturedAt": "Снято в", "banRemaining": "Запретить осталось", "actions": "Действия", "deleteIp": "Удалить {ip}", "close": "Закрыть", "deleteTitle": "Удалить IP", "deleteDesc": "Удалить {ip} из группы IP «{name}»?", "deleting": "Удаление...", "confirmDelete": "Удалить" }, "autoConfigMustBeObject": "Автоматическая конфигурация должна быть объектом JSON." }, "rateLimits": { "title": "Лимиты запросов", "subtitle": "Проверьте нагрузку на пограничные запросы и настройте ограничения параллелизма и пропускной способности по умолчанию.", "loadingAuth": "Загрузка разрешений...", "forbiddenTitle": "Недостаточно разрешений", "forbiddenDesc": "Доступ к настройкам ограничения скорости имеют только администраторы.", "tabAnalysis": "Анализ", "tabConfig": "Конфигурация", "loadingPage": "Загрузка ограничений скорости...", "loadingPressure": "Загрузка данных о нагрузке…", "loadFailed": "Загрузка не удалась", "emptyTitle": "Нет данных", "emptyDesc": "В текущем временном диапазоне нет журналов доступа.", "topHost": "Самый высокий средний хост RPS", "topIp": "Самый высокий средний показатель RPS IP", "avgRate": "Средняя частота запросов для {range}", "range": { "h24": "24 часа", "h72": "3 дня" }, "chart": { "title": "Нагрузка от запросов", "empty": "Нет данных о нагрузке", "requestRate": "Запросить ставку", "uniqueVisitors": "Уникальные посетители", "visitorsPerBucket": "Посетители / сегмент" }, "config": { "saved": "Настройки ограничения скорости сохранены.", "saveFailed": "Сохранить не удалось", "loading": "Загрузка настроек ограничения скорости...", "preview": "Посмотреть предварительный просмотр конфигурации", "title": "Глобальные лимиты запросов", "description": "0 или пусто означает, что по умолчанию отключено. Сайты без собственных настроек наследуют эти значения. Опубликуйте релиз, чтобы применить изменения.", "save": "Сохранить", "connPerServer": "Параллелизм по умолчанию (на сайт)", "connPerServerHint": "Максимальное количество одновременных подключений по умолчанию на сайт", "connPerIp": "Параллелизм по умолчанию на IP", "connPerIpHint": "Максимальное количество одновременных подключений по умолчанию на IP", "limitRate": "Ограничение пропускной способности по умолчанию", "limitRateHint": "Скорость передачи данных на один запрос по умолчанию, например 512k или 1m", "reqPerIp": "Ограничение скорости запросов по умолчанию на IP", "reqPerIpHint": "Частота запросов на один IP по умолчанию, например 10r/s или 100r/m. Оставьте пустым, чтобы отключить.", "invalidConn": "Введите неотрицательное целое число для параллелизма или оставьте пустым, чтобы отключить", "invalidRate": "Неверный формат скорости. Используйте 512k, 1m, число или оставьте пустым для отключения.", "invalidReq": "Неверный формат частоты запросов. Используйте 10r/s или 100r/m либо оставьте пустым, чтобы отключить." } }, "pages": { "title": "Страницы", "subtitle": "Размещайте статические сайты на периферии. Загрузите статический пакет и выберите Pages в качестве основного в правилах прокси.", "refresh": "Обновить", "create": "Новый проект", "loadFailed": "Загрузка не удалась", "emptyTitle": "Проектов Pages пока нет", "emptyDesc": "Создайте проект, а затем загрузите статический пакет развертывания.", "enabled": "Включено", "disabled": "Отключено", "spaFallback": "SPA запасной вариант", "strict404": "Строгий 404", "currentActive": "В настоящее время активен", "none": "Нет", "activatedAt": "Активировано: ", "notActivated": "Не активировано", "viewDetail": "Посмотреть детали", "saveFailed": "Сохранить не удалось", "updated": "Проект обновлен", "created": "Проект создан", "deleted": "Проект удален", "deleteFailed": "Удаление не удалось", "editTitle": "Изменить проект страниц", "createTitle": "Проект «Новые страницы»", "editorDesc": "Настройте статические параметры хостинга. После загрузки пакета выберите Pages в качестве основного в правилах прокси.", "settingsDesc": "Настройте статические параметры хостинга. При сохранении синхронизируются сведения о проекте и ссылки на прокси.", "reset": "Сброс", "saving": "Сохранение...", "saveChanges": "Сохранить изменения", "createProject": "Создать проект", "form": { "name": "Название проекта", "nameRequired": "Введите название проекта", "slug": "Ссылка проекта", "slugPlaceholder": "Оставьте пустым для автоматической генерации", "entryFile": "Входной файл", "entryRequired": "Введите файл записи", "rootDir": "Корневой каталог", "optional": "Необязательно", "spaFallback": "SPA запасной вариант", "spaFallbackDesc": "Вернитесь к указанному пути, если ни один статический файл не соответствует", "fallbackPath": "Резервный путь", "fallbackPathPrefix": "Резервный путь должен начинаться с /", "apiProxy": "API обратный прокси", "apiProxyDesc": "Прикрепите правила прокси API к статическому сайту.", "matchPath": "Путь совпадения", "matchPathPrefix": "Путь совпадения должен начинаться с /", "backend": "Бэкэнд URL", "backendPrefix": "Серверная часть URL должна начинаться с http:// или https://.", "rewrite": "Переписать правило" }, "detail": { "invalidId": "Требуется действительный проект Pages ID.", "loading": "Загрузка сведений о проекте...", "loadFailed": "Не удалось загрузить сведения о проекте.", "back": "Вернуться к списку", "notFound": "Этот проект Pages не существует или был удален.", "deploymentCount": "Развёртываний: {count}", "tabDeployments": "Развертывания", "tabSettings": "Настройки" }, "danger": { "title": "Опасная зона", "deleteProject": "Удалить проект", "deleteHint": "Удалите навсегда {name} ({slug}) и все его развертывания.", "confirmTitle": "Удалить проект страниц", "confirmDesc": "Удалить проект {name}? Это невозможно отменить.", "confirm": "Удалить" }, "upload": { "selectFile": "Выберите пакет развертывания", "success": "Пакет развертывания загружен.", "failed": "Загрузка не удалась", "unsupported": "Поддерживаются только пакеты zip, tar.gz, tar.xz, tar.bz2, tar и 7z.", "title": "Загрузить пакет развертывания", "description": "Загрузите неизменяемый статический архив. Позже вы сможете активировать его из истории развертываний.", "localPackage": "Локальный пакет", "dropHint": "Перетащите пакет сюда или нажмите, чтобы выбрать файл", "selected": "Выбрано {name} ({size})", "chooseArchive": "Выберите поддерживаемый архив.", "entry": "Запись о развертывании", "entryHint": "Запись происходит из настроек проекта. Загрузка пакета не перезаписывает его.", "processing": "Обработка на сервере", "progress": "Ход загрузки", "pleaseWait": "Пожалуйста, подождите", "uploading": "Загрузка...", "submit": "Загрузите и создайте развертывание" }, "files": { "loadFailed": "Не удалось загрузить список файлов", "empty": "Нет записей в файлах", "path": "Путь", "size": "Размер" }, "history": { "source": { "manual_upload": "Локальная загрузка", "manual_url": "URL импорт", "remote_url": "URL архива" }, "trigger": { "manual_upload": "Загрузка вручную", "manual_url": "Ручной импорт", "manual_sync": "Ручная синхронизация", "scheduled_auto_update": "Запланированное обновление" }, "fileMeta": "{checksum} · файлов: {count} · ", "createdAt": "Создано {time}", "activatedAt": " · Активировано {time}", "collapseFiles": "Свернуть список файлов", "expandFiles": "Развернуть список файлов", "deploymentNumber": "Развертывание №{number}", "activate": "Активировать", "delete": "Удалить", "activated": "Историческое развертывание активировано. Автообновление (если оно включено) отключено.", "activateFailed": "Активация не удалась", "deleted": "Развертывание удалено.", "deleteFailed": "Удаление не удалось", "activateTitle": "Активировать историческое развертывание", "deleteTitle": "Удалить развертывание", "activateDesc": "Активация другого исторического развертывания останавливает текущую исходную задачу. Если автоматическое обновление включено, оно будет отключено.", "deleteDesc": "Удалить развертывание №{number}? Это невозможно отменить.", "confirm": "Подтвердить", "loading": "Загрузка истории развертываний...", "loadFailed": "Не удалось загрузить историю развертываний.", "productionHint": "Это живое производственное развертывание. Изменение активного развертывания вступает в силу немедленно.", "manualUpload": "Загрузка вручную", "emptyProductionTitle": "Нет производственного развертывания", "emptyProductionDesc": "Загрузите локальный пакет или настройте удаленный источник выпуска URL/GitHub и синхронизируйте его.", "historyHint": "Развертывания являются неизменяемыми. Исходная информация — это снимок времени создания. Вы можете активировать или удалить исторические развертывания.", "emptyTitle": "Нет развертываний", "emptyDesc": "Загрузите локальный пакет или настройте удаленный источник выпуска URL/GitHub и синхронизируйте его." }, "source": { "status": { "idle": "Простой", "checking": "Проверка", "update_available": "Доступно обновление", "syncing": "Синхронизация", "failed": "Последняя синхронизация не удалась", "attention": "Требуется подтверждение" }, "check": "Проверить", "syncPublish": "Синхронизировать и опубликовать", "missingExecutionId": "Не выполнено задание ID", "actionDone": "Источник {action} завершен.", "actionFailed": "Источник {action} не удался", "checkQueued": "Проверить задачу в очереди", "checkQueueFailed": "Не удалось поставить задачу проверки в очередь", "syncQueued": "Задача синхронизации поставлена в очередь", "syncQueueFailed": "Не удалось поставить задачу синхронизации в очередь.", "title": "Источник развертывания", "loadingDesc": "Загрузка исходной конфигурации...", "independentDesc": "Исходная конфигурация не зависит от истории развертывания.", "loadFailed": "Не удалось загрузить источник развертывания.", "configDesc": "Настройте удаленный источник и синхронизируйте его для публикации. Результаты отображаются в истории развертываний.", "manualBadge": "Развертывание вручную", "localPackage": "Локальный пакет", "noRemote": "Нет постоянного удаленного источника. Загрузите пакет, а затем активируйте его из истории развертываний.", "submitFailed": "Не удалось поставить исходную задачу в очередь.", "statusFailed": "Не удалось прочитать статус задачи.", "waitStopped": "Автоматическое ожидание остановлено. Задача может все еще выполняться в фоновом режиме.", "refreshStatus": "Обновить статус задачи", "configure": "Настроить", "checkUpdate": "Проверьте наличие обновлений", "refresh": "Обновить", "confirmTitle": "Опубликовать текущую версию GitHub", "confirmLead": "При этом публикуется точная ревизия, показанная в данный момент на карте:", "revisionUnavailable": "Текущая редакция больше не доступна. Обновите и повторите попытку.", "confirmPublish": "Подтвердить и опубликовать", "updated": "Источник развертывания обновлен.", "updateFailed": "Не удалось обновить источник развертывания.", "switchedManual": "Переключен обратно на ручное развертывание", "switchFailed": "Переключиться не удалось", "urlRequired": "Введите удаленный URL", "urlInvalid": "Введите действительный HTTP(S) URL", "githubUrlInvalid": "Введите общедоступный репозиторий URL в формате https://github.com/'{owner}'/'{repo}'.", "tagInvalid": "Тег выпуска должен быть допустимой ссылкой Git (допускаются 1–255 байт; / # & =).", "assetInvalid": "Имя ресурса должно иметь длину от 1 до 255 байт и не может быть путем или содержать символы управления, новой строки или двунаправленного текста.", "intervalInvalid": "Интервал проверки должен быть целым числом от 5 до 1440 минут.", "useManual": "Использовать развертывание вручную", "saveRemote": "Сохранить удаленный источник", "saveGithub": "Сохранить источник GitHub", "settingsTitle": "Источник развертывания", "settingsDesc": "Выберите источник развертывания.", "mode": "Тип источника", "manual": "Развертывание вручную", "manualHint": "Сохраните существующие развертывания и текущую производственную версию. Создайте новые развертывания с помощью «Загрузить пакет».", "urlHint": "Введите HTTP(S) URL, чтобы загрузить пакет развертывания напрямую.", "allowInsecure": "Разрешить небезопасные соединения", "allowInsecureDesc": "По умолчанию разрешены публичные и частные адреса. Включение этого параметра позволяет пропустить проверку сертификата TLS для самозаверяющих или частных центров сертификации.", "switchManualTitle": "Вернитесь к развертыванию вручную", "switchManualDesc": "Текущая исходная конфигурация будет удалена. Существующие развертывания и текущая производственная версия сохраняются.", "githubUrl": "GitHub хранилище URL", "githubUrlHint": "Поддерживаются только общедоступные репозитории github.com.", "releaseSelect": "Выбор релиза", "latestRelease": "Последний выпуск", "pinnedTag": "Закрепленный тег", "pinnedTagHint": "Проверьте и синхронизируйте именно этот тег.", "autoUpdate": "Автообновление", "autoUpdateHint": "Автоматически синхронизировать и публиковать при обнаружении нового выпуска.", "checkInterval": "Интервал проверки (минуты)", "checkIntervalHint": "Можно установить от 5 до 1440 минут.", "assetName": "Имя файла в релизе", "noRecord": "Пока нет записей", "address": "URL", "verifyCert": "Проверить сертификат", "lastSync": "Последняя синхронизация", "neverSynced": "Еще не синхронизировано", "applied": "Прикладной", "latestReleaseLabel": "Последний выпуск", "pinnedTagLabel": "Закрепленный тег · {tag}", "tagMissing": "Не предусмотрено", "assetChangedTitle": "Релизный актив изменен и требует подтверждения", "assetChangedDesc": "Удаленная редакция не соответствует опубликованному содержимому. Проверьте версию и ресурсы, а затем подтвердите публикацию именно этой версии.", "autoUpdateOn": "Вкл.", "autoUpdateOff": "Выкл.", "intervalMinutes": "{count, plural, one {# минута} few {# минуты} many {# минут} other {# минуты}}", "nextCheck": "Следующая проверка", "waitingSchedule": "Жду расписания", "lastCheck": "Последняя проверка", "neverChecked": "Еще не проверено", "remote": "Удаленный" } }, "accessLogs": { "title": "Журнал запросов", "subtitle": "Просмотрите обзор трафика, детали IP и запросите журналы.", "refresh": "Обновить", "cleanup": "Очистка журналов", "tabOverview": "Обзор", "tabIps": "IP-адреса", "tabList": "Журналы", "cleaned": "Удалено записей журнала: {count}", "cleanupFailed": "Очистка не удалась", "loadingTitle": "Загрузка журналов доступа", "loadingDesc": "Готовим страницу...", "loadFailed": "Загрузка не удалась", "range": { "h24": "24 часа", "h168": "7 дней", "h360": "15 дней", "h720": "30 дней" }, "rangeHint": { "hours24": "Последние 24 часа", "days": "Период: {count} дн.", "hours": "Период: {count} ч" }, "sort": { "logged_at:desc": "Сначала самые новые", "logged_at:asc": "Сначала самый старый", "status_code:desc": "Статус от высокого к низкому", "status_code:asc": "Статус от низкого к высокому", "remote_addr:asc": "IP А – Я", "remote_addr:desc": "IP Я – А", "total_requests:desc": "Запросы от высокого к низкому", "total_requests:asc": "Запросы от низкого к высокому", "request_length:desc": "Входящий от высокого к низкому", "request_length:asc": "Входящий от низкого к высокому", "bytes_sent:desc": "Исходящий от высокого к низкому", "bytes_sent:asc": "Исходящий от низкого к высокому", "success_ratio:desc": "Соотношение 2xx от высокого к низкому", "success_ratio:asc": "Соотношение 2xx от низкого к высокому", "last_seen_at:desc": "Последний раз видели сначала новые", "last_seen_at:asc": "Последний раз видели самого старшего первым" }, "cache": { "hit": "Хит", "origin": "Сервер-источник", "uncached": "Некэшированный" }, "filters": { "pickTime": "Выберите время", "remoteAddr": "Источник IP", "remoteAddrPlaceholder": "Поиск по IP", "host": "Хост", "hostPlaceholder": "Поиск по хосту", "statusCode": "Код состояния", "statusCodePlaceholder": "Введите код состояния, например. 404", "more": "Больше фильтров", "nodeId": "Узел ID", "nodeIdPlaceholder": "Поиск по node_id", "path": "Путь", "pathPlaceholder": "Поиск по пути", "timeRange": "Временной диапазон", "pageSize": "За страницу", "pageSizeItem": "По {count} на странице", "apply": "Фильтр", "clear": "Очистить" }, "cleanupDialog": { "invalidDays": "Дней хранения должно быть больше 0.", "title": "Очистка журналов доступа", "description": "Удалите журналы доступа старше срока хранения. Это невозможно отменить.", "policy": "Политика хранения", "keepDays": "Срок хранения: {days} дн.", "custom": "Пользовательские дни", "customDays": "Пользовательские дни хранения", "cleaning": "Очистка...", "confirm": "Очистить" }, "detail": { "title": "Доступ к данным журнала", "description": "Все поля для этого запроса. Используйте вкладку IP-адреса для анализа IP.", "logId": "Запись ID", "requestTime": "Запросить время", "storedAt": "Хранится в", "node": "Узел", "nodeId": "Узел ID", "clientIp": "Клиент IP", "region": "Регион", "host": "Хост", "status": "Статус", "cache": "Кэш", "bytesSent": "Исходящий", "requestLength": "Входящий", "duration": "Продолжительность", "path": "Путь", "page": "Страница {page}", "prev": "Назад", "next": "Далее", "listTitle": "Журналы", "empty": "Нет журналов доступа", "time": "Время", "view": "Посмотреть детали" }, "ip": { "needRange": "Введите время начала и окончания", "invalidTime": "Неверный формат времени", "endAfterStart": "Время окончания должно быть позже времени начала.", "maxRange": "Диапазон времени не может превышать 30 дней.", "page": "Страница {page}", "total": " · IP-адресов: {count}", "prev": "Назад", "next": "Далее", "customRange": "Пользовательский диапазон", "customPending": "Пользовательский (не применяется)", "timeRange": "Временной диапазон", "current": "Текущий: {range}", "custom": "Пользовательский", "start": "Запустить", "end": "Конец", "apply": "Применить", "applyHint": "Нажмите «Применить» после изменения времени. Окно подробностей соответствует диапазону списка.", "sort": "Сортировать", "pageSize": "За страницу", "title": "IP-адреса", "empty": "Нет данных IP", "region": "Регион", "requests": "Запросы", "successRatio": "соотношение 2хх", "inbound": "Входящий", "outbound": "Исходящий", "lastSeen": "Последний раз видели", "view": "Посмотреть детали IP", "dialogTitle": "IP подробности", "dialogDesc": ". Просмотрите тенденцию трафика этого IP, его распределение и групповые действия WAF IP-." }, "analysis": { "emptySeries": "Нет данных {title}", "selectGroup": "Выберите группу IP, чтобы присоединиться.", "added": "Добавлен {ip} в группу IP «{name}».", "addFailed": "Не удалось добавить в группу IP.", "removed": "Удален {ip} из группы IP «{name}».", "removeFailed": "Удалить не удалось", "joinTitle": "Добавьте IP в группу IP.", "targetIp": "Цель IP:", "loadingGroups": "Загрузка групп IP", "loadGroupsFailed": "Не удалось загрузить группы IP.", "alreadyIn": "Этот IP уже есть в этих IP группах.", "alreadyInHint": "Вы можете удалить его или добавить в другую группу IP.", "entryCount": "{type} · записей: {count}", "delete": "Удалить", "cannotDelete": "Невозможно удалить вручную", "notInAny": "Этого IP пока нет ни в одной группе IP.", "addToOther": "Добавить в другую группу IP", "noWritable": "Нет записываемых вручную групп IP (или они уже содержат это IP).", "selectManual": "Выберите группу вручную IP.", "close": "Закрыть", "processing": "Работаю...", "joinSelected": "Добавить в выбранную группу IP", "recentHours": "Период: {hours} ч", "invalidIp": "Нет допустимого IP.", "addToGroup": "Добавьте IP в группу IP.", "loading": "Загрузка анализа IP", "loadFailed": "Не удалось загрузить анализ IP.", "totalRequests": "Всего запросов", "errors": "Ошибки", "bandwidth": "Обслуживаемая пропускная способность", "received": "Полученные данные", "uniqueHosts": "Уникальные хосты", "uniquePaths": "Уникальные пути", "trend": "IP тренд запроса", "trendMeta": "{ip} · {range} · интервал: {minutes} мин", "refresh": "Обновить", "trendFailed": "Не удалось загрузить тренд.", "trendEmpty": "У этого IP нет запросов в {range}." }, "overview": { "loadingTitle": "Загрузка обзора трафика", "loadingDesc": "Агрегирование запросов, посещений и тенденций пропускной способности...", "loadFailed": "Не удалось загрузить обзор трафика.", "emptyTitle": "Нет обзорных данных", "emptyDesc": "В текущем временном диапазоне нет статистики трафика.", "uniqueVisitors": "{hint} · уникальные посетители", "served": "{hint} · данные отправлены", "requestsHint": "Следите за необычными скачками или падениями объема запросов.", "requests": "Запросы", "deviceDesc": "Запросите общий доступ по типу устройства.", "deviceEmpty": "Нет данных о типе устройства", "statusDesc": "Запросите долю по коду статуса HTTP.", "statusEmpty": "Нет данных кода состояния", "topPathsDesc": "Наиболее востребованные пути.", "topHostsDesc": "Хосты с наибольшим трафиком.", "topIpsDesc": "Исходные IP-адреса с наибольшим количеством запросов.", "browsersDesc": "Запросы, агрегированные по браузеру.", "osDesc": "Запросы, агрегированные по операционной системе.", "uaDesc": "Запросы ранжированы по необработанному значению User-Agent." }, "toolbar": { "hostsFiltered": "Хостов в фильтре: {count}", "filterByHost": "Фильтровать по хосту", "filterHosts": "Фильтровать хосты", "clear": "Очистить", "searchPlaceholder": "Зона поиска или хост", "loadingHosts": "Загрузка хостов…", "loadHostsFailed": "Не удалось загрузить хосты", "retry": "Повторить", "noRegistered": "Нет зарегистрированных хостов", "noMatch": "Нет подходящих хостов", "selectZone": "Выберите зону {name}", "selectHost": "Выберите хост {name}", "selectedCount": "Выбрано хостов: {count}" } }, "cloudflare": { "title": "Cloudflare", "connectionSettings": "Настройки подключения", "addGroup": "Новая группа", "loadingOverview": "Загружается обзор Cloudflare...", "notReadyTitle": "Cloudflare соединение не готово", "notReadyDesc": "Импортируйте существующую учетную запись Cloudflare DNS или введите отдельный токен API и проверьте соединение.", "configure": "Настроить соединение", "groupsTitle": "Группы указателей", "groupsDesc": "Управляйте целями Cloudflare DNS и членами домена.", "loadingGroups": "Загрузка групп указателей...", "emptyTitle": "Нет указывающих групп", "emptyDesc": "Создайте группу, чтобы привязать членов домена к граничному узлу или пользовательской цели DNS.", "enabled": "Включено", "disabled": "Отключено", "memberSummary": "Доменов: {count} · проксирование новых доменов: {proxy}", "proxyOn": "на", "proxyOff": "выкл.", "manage": "Управление", "sync": "Синхронизировать", "delete": "Удалить", "created": "Группа указателей создана.", "syncQueued": "Групповая синхронизация поставлена в очередь", "deleted": "Группа указателей и удаленные записи удалены.", "deleteTitle": "Удалить группу указателей", "deleteDesc": "При этом будут удалены все члены записи {name} и удаленные записи DNS, управляемые этим модулем. Это невозможно отменить.", "confirmDelete": "Удалить", "loadingDetail": "Загрузка сведений о группе...", "groupUpdated": "Настройки группы обновлены", "memberAddedOne": "Домен добавлен и поставлен в очередь на синхронизацию", "memberAddedMany": "Домены добавлены в очередь синхронизации: {count}", "memberAddFailed": "Не удалось добавить домены: {count}", "memberPartial": "Частичный успех: {succeeded} добавлено, {failed} не удалось.", "proxyUpdated": "Настройки проксирования обновлены. Синхронизация поставлена в очередь.", "memberSyncQueued": "Синхронизация участников поставлена в очередь", "memberDeleted": "Запись участника и удаленная запись DNS удалены.", "batchEnableProxy": "Включить проксирование", "batchProxyEnabled": "Проксирование включено, синхронизация поставлена в очередь. Доменов: {count}.", "back": "Вернуться к списку", "refresh": "Обновить", "edit": "Изменить", "addDomain": "Добавить домен", "currentPoint": "Текущая цель", "activeNode": "Активный узел {name} · {ip}", "customTargetSummary": "Пользовательская цель {type} · {content}", "nodeTargetMode": "Привязка узла", "customTargetMode": "Пользовательская запись", "syncEnabled": "Синхронизация включена", "syncDisabled": "Синхронизация отключена", "primaryNode": "Первичный {name}", "backupNode": "Резервная копия {name}", "backupUnset": "Не установлено", "members": "Участники домена", "membersDesc": "Оранжевое облако для каждого участника является единственным источником достоверной информации во время синхронизации.", "noMembers": "Пока нет участников домена.", "columns": { "domain": "Домен", "desiredIp": "Желаемое значение", "status": "Статус", "proxied": "Оранжевое облако", "actions": "Действия" }, "pendingSync": "Ожидает синхронизации", "remove": "Удалить", "groupDialog": { "editTitle": "Редактировать группу указателей", "createTitle": "Новая группа указателей", "description": "Привяжите элементы к граничному узлу или назначьте настраиваемую цель записи DNS.", "name": "Название группы", "targetMode": "Целевой режим", "bindNode": "Привязать узел", "customTarget": "Пользовательский", "recordType": "Тип записи", "recordContent": "Значение DNS-записи", "recordContentHint": "Введите IPv4 для A, IPv6 для AAAA или целевое имя хоста для CNAME.", "recordContentPlaceholder": { "CNAME": "например origin.example.com", "A": "e.g. 203.0.113.10", "AAAA": "например 2001:db8::10" }, "primary": "Первичный узел", "primaryPlaceholder": "Выберите пограничный узел с IPv4.", "noIp": "Нет IP настроено", "backup": "Резервный узел", "none": "Нет", "defaultProxied": "Проксировать новые домены по умолчанию", "enableSync": "Включить синхронизацию", "save": "Сохранить" }, "memberDialog": { "title": "Добавить участников домена", "description": "Ищите и выбирайте оптом. Присоединение создает или перенимает уникальную одноименную запись DNS, используемую этой группой.", "zoneDomain": "Домен зоны", "searchPlaceholder": "Поиск доменов или зон…", "selected": "Выбрано: {count}", "visible": "Показано: {count}", "unselectAll": "Снять выбор с видимых доменов", "selectVisible": "Выбрать видимый", "clear": "Очистить", "noAvailable": "Нет доступных доменов (уже в группе или не добавлены в управление сайтом).", "noMatch": "Нет подходящих доменов", "groupByZone": "Группировать по зонам", "selectZone": "Выберите зону {name}", "zone": "Зона DNS", "proxied": "Проксировать через Cloudflare", "submitCount": "Добавить и синхронизировать ({count})", "submit": "Добавить и синхронизировать" }, "tasks": { "pending": "Ожидает", "running": "Выполняется", "succeeded": "Успешно", "failed": "Ошибка", "system": "Система", "manual": "Вручную", "retry": "Повторить", "schedule": "Запланировано", "retried": "Задача синхронизации повторно поставлена в очередь", "newTaskId": "Новое задание ID: {id}", "retryFailed": "Не удалось повторить задачу", "unknownError": "Неизвестная ошибка", "title": "Синхронизировать задачи", "description": "Показывает только выполнение синхронизации домена Cloudflare (sync_member) и групповой синхронизации (sync_group).", "statusPlaceholder": "Статус", "allStatus": "Все статусы", "refresh": "Обновить", "loadFailed": "Не удалось загрузить задачи синхронизации.", "loading": "Загрузка задач синхронизации...", "emptyTitle": "Нет задач синхронизации", "emptyDesc": "После добавления доменов или синхронизации группы здесь отображаются операции синхронизации домена/группы Cloudflare.", "columns": { "task": "Задача", "status": "Статус", "trigger": "Триггер", "duration": "Продолжительность", "result": "Результат/ошибка", "createdAt": "Создано" }, "pageSummary": "Всего: {total}, страница {page}/{pages}", "prev": "Назад", "next": "Далее", "detailTitle": "Синхронизировать сведения о задаче", "defaultName": "Cloudflare синхронизация", "loadingDetail": "Загрузка сведений о задаче...", "status": "Статус", "trigger": "Триггер", "retries": "Повторные попытки", "duration": "Продолжительность", "taskId": "Задача ID", "createdAt": "Создано", "finishedAt": "Завершено", "result": "Результат", "error": "Ошибка", "logs": "Журналы", "close": "Закрыть" }, "settings": { "saved": "Cloudflare соединение сохранено", "verified": "Cloudflare соединение проверено", "cleared": "Cloudflare соединение очищено", "back": "Вернуться к списку", "title": "Cloudflare соединение", "sourceTitle": "Источник учетных данных", "sourceDesc": "Токен должен иметь права Zone:Read и DNS:Edit. Значения токенов не отображаются в ответах API и интерфейсе.", "source": "Источник подключения", "importDns": "Импортировать существующую учетную запись DNS.", "standalone": "Автономный токен API", "dnsAccount": "Cloudflare DNS аккаунт", "selectAccount": "Выберите учетную запись DNS.", "dnsHint": "Показаны только учетные записи типа Cloudflare DNS. Добавьте один в", "dnsLink": "DNS аккаунтов", "dnsHintAfter": ".", "tokenKeep": "Оставьте пустым, чтобы сохранить существующий токен; сохранение заменяет его", "tokenEnter": "Введите токен Cloudflare API", "save": "Сохранить настройки", "test": "Тестовое соединение", "clear": "Сбросить настройки подключения", "statusTitle": "Текущий статус", "ready": "Токен проверен. Cloudflare синхронизация указателей может быть запущена.", "notReady": "После сохранения вам еще нужно протестировать соединение. Синхронизация отклоняется до тех пор, пока она не будет проверена." } }, "openflareOps": { "saved": "OpenFlare настройки операций сохранены", "saveFailed": "Сохранить не удалось", "tokenRotated": "Токен обнаружения заменён", "tokenRotateFailed": "Не удалось заменить токен", "kumaSynced": "Uptime Kuma синхронизация выполнена", "syncFailed": "Синхронизация не удалась", "invalidParams": "Проверка не удалась", "loading": "Загрузка настроек операций OpenFlare...", "loadFailed": "Загрузка не удалась", "save": "Сохранить", "agent": { "title": "Работа агента", "description": "Интервал контрольных сигналов и тайм-аут отсутствия связи передаются узлам при следующем контрольном сигнале.", "heartbeat": "Интервал контрольных сигналов ({duration})", "offline": "Тайм-аут отсутствия связи ({duration})", "wsUpgrade": "Включить переход на WebSocket", "wsUpgradeDesc": "После успешного контрольного сигнала по HTTP переходить на WebSocket, чтобы узлы сразу получали уведомления о публикации конфигурации.", "updateRepo": "Репозиторий обновлений агента" }, "geo": { "title": "IP геолокация", "description": "Управляет источником GeoIP для карт узлов и подобных представлений. Геолокация журнала доступа посетителей всегда использует MaxMind mmdb.", "mode": "Метод поиска", "disabled": "Выкл.", "testIp": "Тест IP", "querying": "Поиск…", "query": "Найти", "country": "Страна/регион" }, "pages": { "title": "Статический хостинг страниц", "description": "Настройте ограничение размера загрузки и количество исторических развертываний, которые сохраняет каждый проект.", "maxSize": "Ограничение размера пакета (МиБ)", "history": "Хранить исторические развертывания (0 = неограниченно)", "historyHint": "В каждом проекте хранится не более N развертываний: всегда сохраняется активное, затем остальные заполняются сначала самыми новыми. Дополнительные неактивные развертывания удаляются после успешной загрузки. Поддерживаются zip, tar.gz, tar.xz, tar.bz2, tar и 7z." }, "discovery": { "title": "Токен обнаружения и развертывание", "description": "Новые узлы используют токен обнаружения при первом подключении. Заменить токен можно в разделе управления узлами или кнопкой ниже.", "manageNodes": "Управление узлами", "rotate": "Заменить токен", "tokenReadonly": "Токен обнаружения (только для чтения)", "loading": "Загрузка…", "notGenerated": "Не создано", "command": "Однострочная команда развертывания", "commandHint": "Укажите доступный URL сервера и получите токен.", "copied": "Команда скопирована", "copy": "Копировать команду" }, "kuma": { "title": "Uptime Kuma интеграция", "description": "Синхронизируйте сайты обратного прокси-сервера с экземпляром Uptime Kuma.", "syncNow": "Синхронизировать сейчас", "enable": "Включить Uptime Kuma", "url": "Uptime Kuma URL", "username": "Имя пользователя", "password": "Пароль", "passwordKeep": "Оставьте пустым, чтобы сохранить текущий пароль.", "syncInterval": "Интервал синхронизации (минуты)", "scope": "Область мониторинга", "allSites": "Все сайты", "selectedSites": "Выбранные сайты", "selectedLabel": "Выбранные сайты", "pickSites": "Выбирайте отслеживаемые сайты", "noneSelected": "Сайты не выбраны", "interval": "Интервал проверки (секунды)", "retry": "Повторные попытки", "retryInterval": "Интервал повтора (секунды)", "timeout": "Тайм-аут запроса (секунды)" }, "duration": { "minutes": "{count} мин", "seconds": "{count} сек." }, "errors": { "heartbeatMin": "Интервал контрольных сигналов не может быть меньше 1000 миллисекунд.", "offlineMin": "Тайм-аут отсутствия связи не может быть меньше 10 000 миллисекунд.", "offlineRatio": "Тайм-аут отсутствия связи должен быть как минимум в 3 раза больше интервала контрольных сигналов.", "kumaUrl": "Введите Uptime Kuma URL.", "kumaUser": "Введите имя пользователя Uptime Kuma.", "syncInterval": "Интервал синхронизации должен быть положительным целым числом.", "interval": "Интервал контрольных сигналов должен быть положительным целым числом.", "retry": "Число повторов должно быть неотрицательным целым числом.", "retryInterval": "Интервал повторных проверок должен быть положительным целым числом.", "timeout": "Тайм-аут запроса должен быть положительным целым числом.", "pagesSize": "Максимальный размер пакета страниц должен находиться в диапазоне от 1 до 2048 МБ.", "pagesHistory": "Число страниц истории должно быть целым числом ≥ 0 (0 означает неограниченное количество)." }, "status": { "title": "Статус системы", "loadFailed": "Не удалось загрузить статус системы.", "unknownError": "Произошла неизвестная ошибка", "autoRefresh": "Автообновление", "refresh": "Обновить", "overview": "Состояние сервиса", "overviewDesc": "Основные показатели работоспособности сервиса", "uptime": "Время работы", "goroutines": "Горутины", "heapObjects": "Объекты в куче", "memory": "Память", "memoryDesc": "Использование основной памяти", "alloc": "Текущий объём выделенной памяти", "totalAlloc": "Всего выделено", "sys": "Системная память", "nextGc": "Порог следующего GC", "usageRatio": "Текущее использование (Alloc/Sys)", "heapStack": "Куча/стек", "heapStackDesc": "Подробности кучи и стека во время выполнения", "heapAlloc": "Выделено в куче", "heapSys": "Память кучи, полученная от ОС", "heapIdle": "Незанятая память кучи", "heapInuse": "Занятая память кучи", "heapReleased": "Память кучи, возвращённая ОС", "stackInuse": "Занятая память стека", "stackSys": "Память стека, полученная от ОС", "structs": "Внутренние структуры", "structsDesc": "Память внутренних структур среды выполнения", "mspanInuse": "MSpan используется", "mspanSys": "Память MSpan, полученная от ОС", "mcacheInuse": "MCache используется", "mcacheSys": "Память MCache, полученная от ОС", "buckHashSys": "Профилирование хеш-таблицы", "gcSys": "GC метаданные", "otherSys": "Другая системная память", "gc": "GC и выделение памяти", "gcDesc": "История GC и счётчики операций с памятью", "numGc": "Количество запусков GC", "lastGc": "Время с момента последнего GC", "pauseTotal": "Общая длительность пауз GC", "lastPause": "Последняя пауза GC", "mallocs": "Количество выделений памяти", "frees": "Количество освобождений памяти", "lookups": "Поиск по указателю" }, "siteModal": { "title": "Выбирайте отслеживаемые сайты", "description": "Выберите сайты обратного прокси-сервера для синхронизации с Uptime Kuma. Поиск по названию сайта или домену.", "search": "Поиск сайтов", "searchPlaceholder": "Поиск по имени или домену...", "selectFiltered": "Выбрать отфильтрованное", "clearFiltered": "Снять выбор с отфильтрованных сайтов", "loading": "Загрузка сайтов...", "loadFailed": "Не удалось загрузить сайты", "noMatch": "Нет подходящих сайтов", "select": "Выбрать", "siteName": "Название сайта", "primaryDomain": "Основной домен", "selectedCount": "Выбрано сайтов для мониторинга: {count}", "save": "Сохранить выбор" } } }