{ "dashboard": { "title": "Обзор", "generatedAt": "Создано в {time}", "refresh": "Обновить", "loadingTitle": "Загрузка обзора", "loadingDesc": "Собираем данные о состоянии узлов, трафике и ресурсах…", "loadFailed": "Не удалось загрузить обзор: {error}", "emptyTitle": "Нет обзорных данных", "emptyDesc": "Система работает, но сводного обзора пока нет.", "requestFailed": "Запрос не выполнен. Пожалуйста, повторите попытку позже.", "stats": { "requests24h": "Запросы за 24 часа", "requestsMeta": "Уникальные посетители за 24 часа {visitors} · ошибки {errors} · оценка QPS {qps}", "clusterCapacity": "Емкость кластера", "avgMemoryHighLoad": "Среднее использование памяти: {memory} · высокая нагрузка: CPU — {cpu}, память — {memoryNodes}, диск — {storage}", "nodeOverview": "Состояние узлов", "onlineOf": "/ {total} онлайн", "pending": "В ожидании {count}", "unhealthyOffline": "С ошибками: {unhealthy} · не в сети: {offline}" }, "world": { "title": "Глобальный обзор", "description": "Расположение узлов, география запросов и текущее состояние системы.", "legendSource": "Источник", "legendHealthy": "В норме", "legendPressure": "Под нагрузкой", "legendUnhealthy": "С ошибками", "modeVisitorSource": "Источники посетителей", "modeNodeCoords": "Координаты узла", "modeCoverage": "Покрытие", "onlineCoverage": "Онлайн-покрытие", "onlineHint": "{online}/{total} онлайн", "runHealth": "Состояние выполнения", "unhealthyCount": "С ошибками: {count}", "requests24h": "Запросы за 24 часа", "qpsReported": "QPS {qps} · узлов с данными: {count}", "nodeCoords": "Координаты узла", "sourceCountries": "Стран-источников: {count}", "fallbackPins": "Если координаты не заданы, используются стандартные отметки на карте.", "avgCpu": "Средняя загрузка CPU", "highCount": "С высокой нагрузкой: {count}", "avgMemory": "Среднее использование памяти", "highStorage": "Высокая заполненность диска", "offlinePending": "{offline} оффлайн · {pending} в ожидании", "mapPreparing": "Подготовка карты", "mapPreparingDesc": "Загружается при входе в область просмотра", "noNodesOverlay": "Узлов пока нет. После их подключения на карте появится географическое распределение." }, "map": { "sourceRequests": "Запросов за последние 24 часа: {count}", "presetPin": "Стандартная отметка", "requestsErrors": "Запросы {requests} · ошибки {errors}", "eventsStatus": "Активные события {events} · статус узла {status}", "openrestyStatus": "Состояние OpenResty: {status}", "loadFailed": "Не удалось загрузить карту мира.", "loading": "Загрузка карты мира", "loadFailedDesc": "Карту мира ECharts не удалось зарегистрировать. Обновите и повторите попытку.", "loadingDesc": "Инициализация карты мира после того, как будет готов первый экран.", "measuring": "Измерение размера контейнера карты..." }, "trafficTrend": { "title": "Запросы за 24 часа", "description": "Количество запросов по часам и распределение ответов 2xx/4xx/5xx для выявления всплесков ошибок.", "summaryHint": "Последние 24 часа", "requests": "Запросы", "status2xx": "2xx запросов", "status4xx": "4xx запросов", "status5xx": "5xx запросов" }, "capacityTrend": { "title": "Использование ресурсов за 24 часа", "description": "Средняя загрузка CPU и использование памяти по часам для оценки доступных ресурсов кластера.", "avgCpu": "Средняя загрузка CPU", "avgMemory": "Среднее использование памяти" }, "trafficCapacity": { "title": "Динамика 24-часового трафика и пропускной способности", "networkHint": "За последние 24 часа · из журналов доступа", "received": "Полученные данные", "provided": "Данные переданы", "capacityHint": "Последние 24 часа · емкость хоста · среднее значение" }, "distributions": { "sourceTitle": "География запросов", "sourceDesc": "Страны с наибольшим количеством запросов за последние 24 часа.", "sourceEmpty": "Нет данных о географии запросов", "statusTitle": "Коды ответа HTTP", "statusDesc": "Проверьте, доминируют ли по-прежнему успешные ответы и не увеличивается ли число ошибок.", "statusEmpty": "Нет данных о кодах ответа", "httpLabel": "HTTP {code}", "domainTitle": "Популярные домены", "domainDesc": "Посмотрите, какие домены концентрируют большую часть трафика.", "domainEmpty": "Нет данных о доменах" }, "nodeHealth": { "title": "Состояние узла", "description": "Сортировка по активным инцидентам и нехватке ресурсов.", "openNodes": "Перейти к узлам", "emptyTitle": "Нет узлов", "emptyDesc": "После присоединения узлов в этом списке будут отображаться сводные данные о работоспособности и емкости.", "colNode": "Узел", "colStatus": "Статус", "colCpuMem": "CPU / Память", "colReqErr": "Запросы/Ошибки", "colEvents": "Активные инциденты", "colHeartbeat": "Последний сигнал", "colActions": "Действия", "noGeo": "Точка карты не настроена", "wsConnected": "WS подключено", "na": "N/A", "detail": "Подробности" }, "nodeRank": { "title": "Рейтинг узлов", "traffic": "Самый высокий трафик", "trafficEmpty": "Нет рейтинга трафика", "pressure": "Высокая нагрузка", "pressureEmpty": "Нет данных о нагрузке" } }, "nodes": { "title": "Узлы", "applyLogs": "Журнал применения", "create": "Добавить узел", "listTitle": "Список узлов", "refreshNow": "Обновить сейчас", "loadingList": "Загрузка узлов...", "emptyAll": "Узлов пока нет. Создайте его, чтобы начать.", "emptyFilter": "Ни один узел не соответствует текущему фильтру.", "updated": "Узел обновлен", "created": "Узел создан", "deleted": "Узел удален.", "deleteTitle": "Удалить узел", "deleteDesc": "Удалить узел «{name}»? Вам нужно будет воссоздать его и снова присоединиться к нему.", "deleting": "Удаление...", "confirmDelete": "Удалить", "edit": "Изменить", "delete": "Удалить", "refresh": "Обновить", "detail": "Подробности", "na": "N/A", "wsConnected": "WS подключено", "wsEstablished": "Соединение WebSocket установлено.", "requestFailed": "Запрос не выполнен. Пожалуйста, повторите попытку позже.", "unknown": "Неизвестно", "running": "Выполняется", "liveConfig": "Живая конфигурация", "notApplied": "Не применяется", "enabled": "Включено", "manual": "Вручную", "lockedSuffix": " (заблокировано)", "noGeo": "Точка карты не настроена", "notConfigured": "Не настроено", "ipLine": "IP: {ip}", "locationLine": "Местоположение: {location}", "backToList": "Вернуться к узлам", "missingId": "Отсутствует узел ID. Откройте детали из списка узлов.", "loadingDetail": "Загрузка сведений об узле...", "notFound": "Узел не найден. Возможно, он был удален или ID недействителен.", "syncing": "Синхронизация...", "forceSync": "Принудительная синхронизация", "dispatching": "Отправка...", "viewUpgrade": "Посмотреть обновление", "tabOverview": "Обзор", "tabManage": "Статус и развертывание", "kpiNodeId": "ID узла", "kpiLastSeen": "Последний сигнал", "kpiCurrentConfig": "Текущая конфигурация", "filter": { "all": "Все узлы", "descAll": "Показаны все узлы.", "descRelay": "Показаны только ретрансляторы.", "descTunnel": "Показаны только узлы туннеля.", "descEdge": "Показаны только пограничные узлы." }, "status": { "online": "Онлайн", "pending": "Ожидает", "offline": "Оффлайн", "running": "Выполняется", "wsConnected": "WS подключено" }, "apply": { "success": "Успешно", "warning": "Предупреждение", "failed": "Ошибка", "none": "N/A" }, "health": { "healthy": "В норме", "unhealthy": "С ошибками", "unknown": "Неизвестно" }, "relative": { "justNow": "только что", "minutesAgo": "{count, plural, one {# минуту} few {# минуты} many {# минут} other {# минуты}} назад", "hoursAgo": "{count, plural, one {# час} few {# часа} many {# часов} other {# часа}} назад", "daysAgo": "{count, plural, one {# день} few {# дня} many {# дней} other {# дня}} назад", "monthsAgo": "{count, plural, one {# месяц} few {# месяца} many {# месяцев} other {# месяца}} назад" }, "uptime": { "daysHours": "{days} дн. {hours} ч", "hoursMinutes": "{hours} ч {minutes} мин", "minutes": "{minutes} мин" }, "channel": { "preview": "предварительный просмотр", "stable": "стабильный" }, "table": { "node": "Узел", "status": "Статус", "version": "Версия", "runHealth": "Состояние выполнения", "currentVersion": "Текущая версия", "latestApply": "Последняя подача заявки", "lastSeen": "Последний сигнал", "actions": "Действия" }, "editor": { "editTitle": "Редактировать узел", "createTitle": "Добавить узел", "description": "После создания узла откройте его данные для выделенного токена и выполните команду развертывания.", "nodeType": "Тип узла", "typeEdge": "Краевой узел", "typeRelay": "Узел-ретранслятор", "typeTunnel": "Туннельный узел", "name": "Имя узла", "namePlaceholder": "например край-hk-01", "ip": "Узел IP", "ipPlaceholder": "Необязательно; сообщается автоматически после присоединения", "lockIp": "Блокировка IP", "lockIpDesc": "Если включено, сервер управления не будет перезаписывать IP-адрес узла.", "autoUpdate": "Агент автоматического обновления", "autoUpdateDesc": "Если этот параметр включен, узел автоматически получает стабильные обновления.", "bindPort": "Привязать порт", "vhostPort": "Порт хоста", "manualGeo": "Ручная точка карты", "manualGeoDesc": "Используется на обзорной карте", "geoName": "Название местоположения", "latitude": "Широта", "longitude": "Долгота", "saving": "Сохранение...", "saveEdit": "Сохранить изменения", "createAction": "Добавить узел", "errName": "Введите имя узла", "errLockIp": "Узел IP требуется, когда IP заблокирован.", "errBindPort": "Введите действительный порт привязки", "errVhostPort": "Введите действительный порт VHost" }, "install": { "edgeTitle": "Развертывание пограничного узла", "edgeDesc": "Используйте токен агента для подключения пограничного узла к серверу управления.", "relayTitle": "Команда развертывания реле", "relayDesc": "Используйте токен обнаружения для подключения ретранслятора frps к серверу управления.", "tunnelTitle": "Команда развертывания туннеля", "tunnelDesc": "Используйте токен туннеля для подключения клиента openflared к серверу управления.", "agentToken": "Токен агента", "discoveryToken": "Токен открытия", "tunnelToken": "Туннельный токен", "scriptLabel": "Однострочный скрипт (Linux / macOS)", "dockerLabel": "Docker развертывание контейнера", "copyFailed": "Копировать не удалось. Выберите текст команды вручную.", "copiedScript": "Скрипт развертывания скопирован.", "copiedDocker": "Docker команда развертывания скопирована", "copyScript": "Копировать скрипт", "copyDocker": "Копировать Docker", "nodeId": "Узел ID", "serverUrl": "URL сервера управления", "serverUrlHint": "Скрипт и контейнер используют этот адрес для подключения к серверу управления OpenFlare.", "noToken": "У этого узла еще нет токена доступа. Обновите позже.", "needServerUrl": "Введите действительный сервер URL, чтобы сгенерировать команду развертывания." }, "update": { "title": "Обновление агента", "description": "Проверьте выпуски GitHub и отправьте обновление. Узел запускает его после следующего такта.", "currentVersion": "Текущая версия", "channel": "Канал выпуска", "updateStatus": "Обновить статус", "waitingPreview": "Ожидание обновления предварительного просмотра", "waitingUpdate": "Ожидание обновления", "notRequested": "Не отправлено", "checking": "Проверяем выпуски...", "hasUpdate": "Доступно обновление", "upToDate": "Уже в курсе", "previewRelease": "Предварительный выпуск", "stableRelease": "Стабильная версия", "targetVersion": "Целевая версия", "notFound": "Не найден", "publishedAt": "Опубликовано", "noNotes": "Нет примечаний к выпуску", "viewRelease": "Посмотреть выпуск", "checkStable": "Проверить стабильную версию", "checkPreview": "Проверить предварительный просмотр", "upgradePreview": "Обновите до предварительной версии", "upgradeStable": "Обновить до стабильной версии" }, "edge": { "upgrade": "Агент обновления", "restartOpenresty": "Перезагрузить OpenResty", "runStatus": "Статус выполнения", "runStatusDesc": "Доступность узла и состояние OpenResty", "openrestyHealth": "Состояние OpenResty", "lastSeen": "Последний сигнал", "ip": "IP адрес", "geo": "Точка карты", "syncTitle": "Синхронизация конфигурации", "syncDesc": "Обновление версии и последний результат применения", "currentVersion": "Текущая версия конфигурации", "latestApply": "Последняя подача заявки", "latestApplyAt": "Последнее время подачи заявки", "agentVersion": "Версия агента", "nginxVersion": "Версия Nginx", "autoUpdate": "Автоматическое обновление", "runtimeMessages": "Сообщения времени выполнения", "runtimeMessagesDesc": "Примечания о состоянии сообщили OpenResty и агент", "openrestyMessage": "OpenResty сообщение о состоянии", "noExtraError": "Никаких дополнительных ошибок не сообщается.", "restartPending": "Ожидание перезапуска узла OpenResty после следующего контрольного сигнала.", "kpiAgent": "Версия агента", "connectionHint": "Текущие соединения OpenResty", "toastUpdated": "Узел обновлен", "toastForceSync": "Принудительная синхронизация отправлена на узел {name}", "toastRestart": "OpenResty перезапуск отправлен на узел {name}", "toastUpgrade": "{channel} обновление отправлено на узел {name}", "toastDeleted": "Узел удален." }, "relay": { "upgrade": "Обновление реле", "runStatus": "Время работы реле", "runStatusDesc": "онлайн-состояние и сводка нагрузки frps", "health": "Состояние ретранслятора", "connections": "Активные соединения/прокси", "portsTitle": "Сетевые порты", "portsDesc": "Плоскость управления frps и настройки vhost HTTP", "bindPort": "Порт привязки управления", "vhostPort": "Порт VHost HTTP", "agentAddr": "Адрес доступа агента", "relayVersion": "Версия реле", "frpsVersion": "основная версия frps", "webuiTitle": "FRPS Веб-интерфейс", "webuiDesc": "Включите встроенную веб-консоль frps и установите ее порт прослушивания.", "enableWebui": "Включить веб-консоль", "enableWebuiHint": "Когда этот параметр включен, узел запускает встроенную службу администрирования frps.", "webuiPort": "Порт веб-консоли", "webuiPortPlaceholder": "e.g. 17500", "actualPort": "Сейчас используется порт {port}. Изменения вступят в силу после следующего сигнала узла. По умолчанию: основной порт + 500.", "openWebui": "Откройте веб-интерфейс FRPS", "copiedLink": "Ссылка скопирована", "copyLink": "Копировать ссылку", "webuiDisabled": "WebUI отключен или порт привязки не установлен.", "metadata": "Метаданные узла", "createdAt": "Создано", "updatedAt": "Обновлено", "kpiFrps": "Ядро frps", "connectionHint": "Релейные активные соединения", "invalidPort": "Порт должен быть между 1 и 65535.", "portSaveFailed": "Не удалось обновить порт", "toastPortSaved": "FRPS Порт WebUI обновлен.", "toastUpdated": "Узел-ретранслятор обновлен", "toastWebui": "FRPS Настройки веб-интерфейса обновлены.", "toastForceSync": "Команда принудительной синхронизации отправлена ретранслятору {name}", "toastUpgrade": "{channel} обновление отправлено на ретранслятор {name}", "toastDeleted": "Узел-ретранслятор удален.", "deleteTitle": "Удалить узел реле", "deleteDesc": "Удалить ретранслятор «{name}»? Для повторного подключения его потребуется создать заново." }, "tunnel": { "upgrade": "Обновление openflared", "runStatus": "Время работы туннеля", "runStatusDesc": "openflared соединение и онлайн-состояние", "flaredStatus": "Состояние openflared", "autoUpdate": "Автоматическое обновление", "syncTitle": "Синхронизация конфигурации", "syncDesc": "Обновление конфигурации туннельного клиента", "currentVersion": "Текущая версия конфигурации", "latestApply": "Последняя подача заявки", "latestApplyAt": "Последнее время подачи заявки", "fileCount": "Синхронизированные файлы", "fileCountValue": "{count}", "upgradeStatus": "Статус обновления", "credentials": "Учетные данные для присоединения", "credentialsDesc": "Токен, необходимый туннельному клиенту", "tunnelToken": "Туннельный токен", "createdAt": "Создано", "updatedAt": "Обновлено", "kpiOpenflared": "openflared", "connectionHint": "Одновременные соединения через туннель", "toastUpdated": "Узел туннеля обновлен.", "toastForceSync": "Принудительная синхронизация отправлена в туннель {name}", "toastUpgrade": "{channel} обновление отправлено в туннель {name}", "toastDeleted": "Узел туннеля удален.", "deleteTitle": "Удалить туннельный узел", "deleteDesc": "Удалить туннельный узел «{name}»? Вам нужно будет воссоздать его и снова присоединиться к нему." }, "obs": { "hostname": "Имя хоста", "os": "Операционная система", "kernelArch": "Ядро / арка", "uptime": "Время работы", "cpu": "CPU", "cpuCores": "{count, plural, one {# ядро} few {# ядра} many {# ядер} other {# ядра}}", "totalMemory": "Общий объем памяти", "totalStorage": "Общий объём хранилища", "reportedAt": "Об этом сообщается на", "eventsTitle": "История событий состояния узла", "eventsDesc": "Сохраняет активные и восстановленные события, чтобы помочь оценить работоспособность среды выполнения.", "cleanupLogs": "Очистить журналы", "filterAll": "Все события", "filterActive": "Активный", "filterResolved": "Восстановлено", "filterEmpty": "Для этого фильтра нет событий работоспособности.", "noMessage": "Нет подробного сообщения", "firstTriggered": "Первое срабатывание:", "lastTriggered": "Последний запуск:", "resolvedAt": "Восстановлено:", "noEvents": "Этот узел еще не сообщил ни о каких событиях работоспособности.", "cleaned": "Удалено записей о состоянии: {count}", "nothingToClean": "Нет журналов событий работоспособности, которые нужно очистить", "loading": "Загрузка данных наблюдения...", "diag": "Диагностика во время выполнения", "activeIssues": "Активных инцидентов: {count}", "stable": "Стабильный", "noActiveEvents": "Нет активных событий состояния", "systemCore": "Ядро системы", "uptimeFromProfile": "Из профиля системы узла", "profileTitle": "Профиль системы", "profileDesc": "Информация о хосте и оборудовании, сообщаемая узлом", "noProfile": "Узел присоединился, но еще не предоставил полный профиль системы.", "noProfileLong": "Узел присоединился, но еще не предоставил полный профиль системы.", "snapshotTitle": "Живой снимок ресурса", "snapshotDesc": "Последний отчет по показателям", "realtimeResources": "Живые ресурсы", "memory": "Память", "storage": "Хранилище", "connections": "Соединения", "snapshotAgo": "Снимок {time}", "noSnapshot": "Узел присоединился, но еще не сообщил о снимке ресурса.", "noSnapshotLong": "Узел присоединился, но еще не сообщил о снимке ресурса.", "cleanupTitle": "Очистить журнал событий состояния", "cleanupDesc": "Вся история диагностики этого узла на сервере управления будет удалена. Новые события продолжат поступать.", "cleaning": "Очистка...", "confirmCleanup": "Чистый", "windowRequests": "Запросы окон", "windowVisitorsHint": "Уникальные посетители окна {visitors} · частота ошибок {rate}%", "noWindowSummary": "Сводка окна «Нет запроса»", "capacityPressure": "Давление производительности", "needsAttention": "Требует внимания", "normalRange": "Нормальный", "cpuStorage": "CPU {cpu} · хранилище {storage}", "noResourceSnapshot": "Нет снимка ресурса", "sourceSignal": "Исходный сигнал", "requestTimes": "{count, plural, one {# запрос} few {# запроса} many {# запросов} other {# запроса}}", "noSourceDist": "Нет данных о распространении источника", "systemInfo": "Информация о системе", "networkTraffic": "Сетевой трафик", "noActiveIssue": "Нет активных инцидентов", "openrestyConn": "OpenResty соединения", "currentConn": "Текущие связи:", "throughputHint": "Просмотр тенденций журнала доступа для бизнес-пропускной способности (обслужено/получено)", "windowVisitors": "Уникальные посетители окна", "reqQps": "Запросы {requests} · расчетное QPS {qps}", "noTrafficSummary": "Нет окна сводки трафика", "windowErrors": "Ошибки окна", "errorRate": "Частота ошибок {rate}%", "noErrorSummary": "Нет сводки по частоте ошибок", "noNetworkSnapshot": "Узел присоединился, но еще не сообщил о снимке сетевого трафика.", "trafficTrendDesc": "Почасовое количество запросов и ошибок для этого узла.", "capacityTrendDesc": "CPU и использование памяти для этого узла за 24 часа.", "structureTitle": "Структура запроса", "structureDesc": "Последние 24 часа: какие коды статуса и домены концентрируют трафик и ошибки.", "mainStatus": "Верхний код статуса", "times": "{count, plural, one {# раз} few {# раза} many {# раз} other {# раза}}", "noStatusDist": "Нет распределения кода состояния", "topDomain": "Топ Домен", "noDomainDist": "Нет распределения доменов", "resolvedEvents": "Восстановленные события", "resolvedHint": "Устранённые события состояния за последние 24 часа", "statusDist": "Распределение кода состояния", "distEmpty": "Нет данных о распространении", "unknownLabel": "Неизвестно" }, "networkTrend": { "title": "24-часовой сетевой тренд", "description": "Почасовые данные, обслуживаемые/полученные из журналов доступа; сводка — это итоговые данные за последние 24 часа.", "summaryHint": "Последние 24 часа", "received": "Полученные данные", "provided": "Данные переданы" }, "diskIo": { "title": "24-часовой диск IO тренд", "description": "Почасовая скорость чтения/записи диска (Б/с) для выявления увеличения журнала, дрожания кэша или нагрузки на диск.", "summaryHint": "Последние 24 часа · средняя цена", "read": "Чтение диска", "write": "Запись на диск" } }, "performance": { "title": "Производительность", "description": "Управление глобальными настройками производительности OpenResty. Сохранение входит в единый процесс публикации конфигурации.", "preview": "Посмотреть предварительный просмотр конфигурации", "saved": "Настройки производительности сохранены.", "saveFailed": "Сохранить не удалось", "loadingAuth": "Загрузка разрешений...", "forbiddenTitle": "Недостаточно разрешений", "forbiddenDesc": "Доступ к настройкам производительности имеют только администраторы.", "loading": "Загрузка настроек производительности...", "runtimeTitle": "Связи и события", "runtimeDesc": "Рабочие процессы, тайм-ауты и размер тела запроса", "proxyTitle": "Прокси-буферы и таймауты", "proxyDesc": "Восходящие соединения, буферизация запросов/ответов и переключатели WebSocket/HTTP3", "proxyRequestBuffering": "Буферизация тела запроса (отключить для потоковой загрузки)", "gzipTitle": "Сжатие", "cacheTitle": "Кэш", "cacheDesc": "Кэш обратного прокси-сервера с одним узлом", "errors": { "workerProcesses": "worker_processes должно быть автоматическим или целым числом больше 0.", "timeouts": "Значения времени ожидания и соединения должны быть целыми числами больше 0.", "statusCode": "Статус возврата сервера по умолчанию должен находиться в диапазоне от 100 до 999.", "bodySize": "Неверный формат client_max_body_size.", "headerBuffers": "large_client_header_buffers должно выглядеть как «4 16k»", "proxyTimeouts": "Тайм-ауты прокси-сервера должны быть целыми числами больше 0 секунд.", "proxyBuffers": "proxy_buffers должно выглядеть как «16 16k»", "bufferSize": "Размеры буфера должны быть целыми числами или значениями в единицах к/м/г.", "gzipMinLength": "gzip_min_length должно быть целым числом больше 0", "gzipLevel": "gzip_comp_level должно быть от 1 до 9", "cachePath": "proxy_cache_path требуется, если кэш включен.", "cacheFormat": "Неверные уровни кэша, неактивный формат max_size или lock_timeout.", "cacheKey": "Шаблон ключа кэша необходим, если кэш включен." } }, "applyLogs": { "title": "Журнал применения конфигурации", "description": "Проверьте успешную, предупреждающую и неудачную конфигурацию. Фильтровать по node_id.", "refresh": "Обновить", "clear": "Очистить журналы", "backToNodes": "Вернуться к узлам", "totalRecords": "Всего записей", "currentPage": "Текущая страница", "totalPages": "Всего страниц", "pageNodes": "Узлы на этой странице", "nodeId": "Узел ID", "nodePlaceholder": "Фильтровать журналы применения по node_id", "pageSize": "Размер страницы", "pageSizeOption": "{count}", "filter": "Фильтр", "reset": "Сбросить фильтры", "emptyTitle": "Нет журналов применения", "emptyDesc": "Ни одна запись применения не соответствует текущим фильтрам.", "colNodeId": "Узел ID", "colVersion": "Версия", "colResult": "Результат", "colChecksum": "Контрольная сумма", "colTime": "Время", "colMessage": "Сообщение", "colActions": "Действия", "detail": "Подробности", "pageInfo": "Страница {current}/{total}, записей: {count}.", "prev": "Назад", "next": "Далее", "loadFailed": "Загрузка не удалась", "cleared": "Журнал применения конфигурации очищен", "clearedDesc": "Удалено записей: {count}", "clearFailed": "Не удалось очистить журналы применения.", "unknownError": "Неизвестная ошибка", "clearTitle": "Очистить все журналы применения?", "clearDesc": "Все записи журнала применения конфигурации ({count}) будут удалены. Это действие нельзя отменить. Узлы продолжат отправлять новые результаты.", "clearing": "Очистка...", "confirmClear": "Очистить", "success": "Успешно", "warning": "Предупреждение", "failed": "Ошибка", "sheetTitle": "Применить данные журнала", "sheetDesc": "Полный результат и сведения о контрольной сумме для этого журнала применения.", "versionBadge": "Версия: {version}", "createdAt": "Создано", "targetChecksum": "Целевая контрольная сумма", "mainChecksum": "Дайджест основной конфигурации", "routeChecksum": "Дайджест конфигурации маршрута", "supportFiles": "Файлы поддержки", "message": "Сообщение", "close": "Закрыть" }, "configVersions": { "title": "Версии конфигурации", "description": "Просматривайте исторические снимки, просматривайте ожидающие изменения и при необходимости повторно активируйте старую версию.", "refresh": "Обновить", "cleanupOld": "Чистый", "viewDiff": "Разница", "forcePublish": "Принудительно опубликовать", "previewPublish": "Опубликовать", "emptyTitle": "Нет истории", "emptyDesc": "Опубликованных версий пока нет. Сначала опубликуйте конфигурацию.", "colVersion": "Версия", "colStatus": "Статус", "colAuthor": "Создано", "colChecksum": "Контрольная сумма", "colCreatedAt": "Создано", "colActions": "Действия", "active": "Активный", "history": "История", "system": "Система", "snapshot": "Снимок", "activate": "Активировать", "loadFailed": "Загрузка не удалась", "previewLoadFailed": "Не удалось загрузить предварительный просмотр.", "diffLoadFailed": "Не удалось загрузить диф.", "publishSuccess": "Опубликовано", "publishSuccessDesc": "Версия {version}", "publishFailed": "Опубликовать не удалось", "activateSuccess": "Активировано", "activateSuccessDesc": "Версия {version}", "activateFailed": "Активировать не удалось", "cleanupDone": "Очистка завершена", "cleanupDoneDesc": "Удалено снимков: {count}", "cleanupFailed": "Очистка не удалась", "unknownError": "Неизвестная ошибка", "confirmPublishTitle": "Опубликовать конфигурацию", "confirmPublishDesc": "Это создаст новую версию из ожидающей конфигурации и пометит ее как активную. Следующими узлами будет получено обновление.", "confirmPublish": "Опубликовать", "confirmForceTitle": "Принудительно опубликовать", "confirmForceDesc": "При этом проверка изменений игнорируется и немедленно создается новая версия. Подтвердите, что вам действительно нужна повторная публикация.", "confirmActivateTitle": "Активировать версию", "confirmActivateDesc": "Установить версию {version} в качестве активной версии?", "confirmActivate": "Активировать", "previewTitle": "Опубликовать предварительный просмотр", "previewDesc": "Отображаются ожидающие файлы конфигурации и поддержки.", "loadingPreview": "Загрузка предварительного просмотра...", "routeCount": "Маршрутов: {count}", "websiteCount": "Сайтов: {count}", "mainConfig": "Основная конфигурация", "routeConfig": "Конфигурация маршрута", "supportFiles": "Файлы поддержки ({count})", "noSupportFiles": "Эта публикация не содержит дополнительных файлов поддержки.", "noChanges": "Ожидающие маршруты соответствуют активной версии, поэтому их нельзя опубликовать снова.", "close": "Закрыть", "publishing": "Публикация...", "diffTitle": "Разница в конфигурации", "diffDesc": "Различия между ожидающей конфигурацией и активной версией.", "loadingDiff": "Загрузка разницы...", "activeVersion": "Активная версия", "none": "Нет", "addedDomains": "Добавлены домены", "removedDomains": "Удаленные домены", "modifiedDomains": "Модифицированные домены", "itemCount": "{count}", "noChange": "Никаких изменений", "emptyValue": "пустой", "mainChanged": "Основная конфигурация изменена", "mainUnchanged": "Основная конфигурация без изменений", "wafChanged": "WAF изменено", "wafUnchanged": "WAF без изменений", "websiteDelta": "Веб-сайты {from} → {to}", "optionKey": "Вариант", "activeValue": "Активное значение", "pendingValue": "Ожидаемое значение", "noOptionChanges": "Опция OpenResty не изменяется.", "snapshotTitle": "Снимок версии", "snapshotVersion": "Версия {version}", "snapshotDesc": "Полный снимок этой исторической версии конфигурации.", "loadingSnapshot": "Загрузка снимка...", "createdBy": "Создано", "createdAt": "Создано", "snapshotLoadFailed": "Не удалось загрузить снимок версии.", "cleanupTitle": "Чистые исторические снимки", "cleanupDesc": "Удалите старые снимки. Текущая активная версия всегда защищена.", "keepCount": "Сохраняйте последние снимки", "keepHint": "По умолчанию 10, минимум 3.", "keepMin": "Сохраните как минимум 3 исторических снимка.", "cleaning": "Очистка...", "confirmCleanup": "Чистый" } }