{ "actions": { "copy": "Копировать", "download": "Скачать", "copied": "Скопировано" }, "title": { "costRanking": "Таблица расходов", "costRankingDescription": "Просмотр рейтинга расходов пользователей, данные обновляются каждые 5 минут", "usageLogs": "Журналы использования", "clients": "Клиенты", "userAndKeyManagement": "Управление пользователями и ключами", "requestMessages": "Сообщения запроса", "activeSessions": "Активные сеансы (последние 5 минут)", "sessionMonitoring": "Мониторинг сеансов", "sessionMonitoringDescription": "Отображение активных и неактивных сеансов в реальном времени (автоматическое обновление каждые 3 секунды)", "inactiveSessions": "Неактивные сеансы (более 5 минут, только просмотр)", "quotasManagement": "Управление квотами", "quotasManagementDescription": "Просмотр и управление квотами на всех уровнях", "usersQuotas": "Статистика квот пользователей", "keysQuotas": "Статистика квот ключей", "providersQuotas": "Статистика квот поставщиков", "usageLogsDescription": "Просмотр журналов вызовов API и статистики использования", "filterCriteria": "Критерии фильтрации", "filterCriteriaDescription": "Фильтруйте журналы по времени, пользователю, поставщику и другим параметрам" }, "description": { "viewApiCallLogs": "Просмотр журналов вызовов API и статистики использования", "dashboard": "Просмотр системной статистики и информации мониторинга", "quotas": "Просмотр и управление квотами на всех уровнях", "clientInfo": "Заголовок запроса User-Agent", "requestMessagesDescription": "Содержимое сообщения, отправленного клиентом", "responseBodyDescription": "Полный ответ сервера (TTL 5 минут)" }, "overview": { "title": "Обзор", "totalRequests": "Всего запросов", "totalCost": "Общие затраты", "totalUsers": "Всего пользователей", "totalProviders": "Всего поставщиков", "activeUsers": "Активные пользователи", "activeSessions": "Активные сеансы", "errorRate": "Коэффициент ошибок", "avgResponseTime": "Среднее время ответа" }, "stats": { "title": "Статистика", "requests": "Запросы", "cost": "Стоимость", "tokens": "Токены", "period": { "hour": "Последний час", "day": "Сегодня", "week": "На этой неделе", "month": "В этом месяце" } }, "logs": { "title": "Журналы использования", "description": "Просмотр и анализ записей вызовов API", "filters": { "user": "Пользователь", "provider": "Поставщик", "sessionId": "ID сессии", "searchUser": "Поиск пользователей...", "searchProvider": "Поиск провайдеров...", "searchSessionId": "Поиск ID сессии...", "noUserFound": "Пользователи не найдены", "noProviderFound": "Провайдеры не найдены", "noSessionFound": "ID сессии не найдены", "model": "Модель", "endpoint": "Эндпоинт", "status": "Статус", "timeRange": "Диапазон времени", "dateRange": "Диапазон дат", "startTime": "Время начала", "endTime": "Время окончания", "allUsers": "Все пользователи", "allKeys": "Все ключи", "selectUserFirst": "Сначала выберите пользователя", "allProviders": "Все поставщики", "allModels": "Все модели", "allEndpoints": "Все эндпоинты", "allStatusCodes": "Все коды состояния", "apiKey": "API ключ", "statusCode": "Код состояния", "minRetryCount": "Количество ретраев ≥", "minRetryCountPlaceholder": "Введите минимум (0 — без ограничения)", "apply": "Применить фильтр", "reset": "Сброс", "last7days": "7д", "last30days": "30д", "customRange": "Произвольный диапазон", "export": "Экспорт", "exporting": "Экспорт...", "exportSuccess": "Экспорт завершен", "exportError": "Ошибка экспорта", "quickFilters": { "today": "Сегодня", "thisWeek": "Эта неделя", "errorsOnly": "Только ошибки", "showRetries": "С ретраями" }, "activeFilters": { "title": "Активные фильтры", "remove": "Удалить фильтр", "clearAll": "Очистить все" }, "groups": { "time": "Период времени", "timeDesc": "Фильтр по дате и времени", "identity": "Идентификация", "identityDesc": "Фильтр по пользователю и ключу", "request": "Запрос", "requestDesc": "Фильтр по поставщику, модели, эндпоинту", "status": "Статус", "statusDesc": "Фильтр по коду состояния и ретраям" } }, "columns": { "time": "Время", "user": "Пользователь", "key": "Ключ", "sessionId": "ID сессии", "provider": "Поставщик", "model": "Модель тарификации", "endpoint": "Эндпоинт", "inputTokens": "Вход", "outputTokens": "Выход", "tokens": "Tokens", "cacheWrite": "Запись в кэш", "cacheRead": "Чтение из кэша", "cache": "Cache", "cost": "Стоимость", "duration": "Продолжительность", "performance": "Perf", "status": "Статус" }, "stats": { "title": "Сводка статистики", "description": "Агрегированная статистика по текущим фильтрам", "totalAmount": "Общая сумма расходов", "totalTokens": "Общее количество токенов", "cacheTokens": "Токены кэша", "input": "Вход", "output": "Выход", "write": "Запись", "read": "Чтение", "totalRequests": "Всего запросов", "loading": "Загрузка..." }, "table": { "noData": "Нет данных", "pagination": "Всего {total} записей, страница {page} / {totalPages}", "prevPage": "Предыдущая", "nextPage": "Следующая", "blocked": "Заблокировано", "nonBilling": "Не тарифицируется", "skipped": "Пропущено", "specialSettings": "Особые", "times": "раз", "loadedCount": "Загружено {count} записей", "loadingMore": "Загрузка...", "noMoreData": "Все записи загружены", "scrollToTop": "Наверх", "hideProviderColumn": "Скрыть столбец провайдера", "showProviderColumn": "Показать столбец провайдера", "columnVisibility": "Видимость столбцов" }, "actions": { "refresh": "Обновить", "refreshing": "Обновление...", "stopAutoRefresh": "Остановить автообновление", "startAutoRefresh": "Начать автообновление", "view": "Просмотр", "fullscreen": "Полный экран", "exitFullscreen": "Выйти из полного экрана" }, "error": { "loadFailed": "Ошибка загрузки", "loadKeysFailed": "Не удалось загрузить список ключей" }, "details": { "title": "Детали запроса", "statusTitle": "Статус: {status}", "inProgress": "В процессе", "unknown": "Неизвестно", "success": "Запрос успешно выполнен", "error": "Запрос не выполнен, ниже подробная информация об ошибке и цепочке решений поставщика", "processing": "Запрос находится в процессе выполнения и еще не завершен", "tabs": { "summary": "Обзор", "logicTrace": "Цепочка решений", "performance": "Производительность", "metadata": "Метаданные" }, "summary": { "keyMetrics": "Ключевые показатели", "totalCost": "Общая стоимость", "totalTokens": "Всего токенов", "duration": "Длительность", "outputRate": "Скорость вывода", "viewFullError": "Показать полную ошибку", "viewSession": "Просмотр сеанса" }, "specialSettings": { "title": "Особые настройки" }, "skipped": { "title": "Пропущено", "reason": "Причина", "warmup": "Warmup быстрый ответ (CCH)", "desc": "Этот запрос был распознан как Warmup-проба и был обработан самим CCH без обращения к провайдерам; он не тарифицируется, не учитывается в лимитах и исключается из статистики." }, "blocked": { "title": "Информация о блокировке", "type": "Тип блокировки", "sensitiveWord": "Блокировка по ключевым словам", "word": "Ключевое слово", "matchType": "Тип совпадения", "matchTypeContains": "Содержит", "matchTypeExact": "Точное совпадение", "matchTypeRegex": "Регулярное выражение", "matchedText": "Совпадающий контент" }, "sessionId": "ID сеанса", "messagesCount": "Количество сообщений", "messagesLabel": "Сообщения", "messagesUnit": "шт.", "clientInfo": "Информация о клиенте", "modelRedirect": { "title": "Перенаправление модели", "requestModel": "Запрошенная модель", "actualModel": "Фактический вызов", "billing": "Описание тарификации", "billingDescription": "Система в первую очередь тарифицирует по цене запрошенной модели ({original}). Если эта модель отсутствует в прайс-листе, используется цена фактически вызванной модели ({current}).", "billingModel": "Модель тарификации", "actualModelTooltip": "Фактическая модель: {model}", "originalModelTooltip": "Исходная модель: {model}", "billingDescription_original": "Текущий режим тарификации: По исходной модели до перенаправления ({original})", "billingDescription_redirected": "Текущий режим тарификации: По фактической модели после перенаправления ({current})", "billingOriginal": "оплата: исх.", "billingRedirected": "оплата: факт." }, "errorMessage": "Сообщение об ошибке", "fake200ForwardedNotice": "Примечание: для потоковых запросов эта ошибка может быть обнаружена только после завершения потока; содержимое ответа могло уже быть передано клиенту.", "filteredProviders": "Отфильтрованные поставщики", "providerChain": { "title": "Хронология цепочки решений поставщика", "totalDuration": "Общая продолжительность: {duration}мс" }, "noError": { "processing": "Запрос обрабатывается, ожидание ответа...", "success": "Запрос успешно выполнен, ошибок нет", "default": "Подробная информация об ошибке отсутствует" }, "clickStatusCode": "Нажмите на код состояния, чтобы просмотреть полную хронологию", "viewDetails": "Просмотр деталей", "reasons": { "rateLimited": "Лимит стоимости поставщика", "circuitOpen": "Размыкатель цепи открыт" }, "billingDetails": { "title": "Детали биллинга", "input": "Входные", "output": "Выходные", "cacheWrite5m": "Запись кэша (5m)", "cacheWrite1h": "Запись кэша (1h)", "cacheRead": "Чтение кэша", "cacheTtl": "TTL кэша", "multiplier": "Множитель поставщика", "totalCost": "Общая стоимость", "context1m": "1M контекст", "context1mPricing": "Вход 2x >200k, Выход 1.5x >200k" }, "performance": { "title": "Производительность", "ttfb": "TTFB", "duration": "Общее время", "outputRate": "Скорость вывода" }, "performanceTab": { "noPerformanceData": "Нет данных о производительности", "ttfbGauge": "Время до первого байта", "outputRateGauge": "Скорость вывода", "latencyBreakdown": "Разбивка задержки", "generationTime": "Время генерации", "assessment": { "excellent": "Отлично", "good": "Хорошо", "warning": "Предупреждение", "poor": "Плохо" }, "thresholds": { "ttfbGood": "TTFB < 1с", "ttfbWarning": "TTFB 1-2с", "ttfbPoor": "TTFB > 3с" } }, "metadata": { "noMetadata": "Нет метаданных", "sessionInfo": "Информация о сеансе", "clientInfo": "Информация о клиенте", "billingInfo": "Информация о биллинге", "technicalTimeline": "Техническая хронология", "copyTimeline": "Копировать хронологию" }, "logicTrace": { "title": "Цепочка решений", "noDecisionData": "Нет данных о решениях", "providersCount": "{count} поставщиков", "healthyCount": "{count} исправных", "initialSelection": "Начальный выбор", "healthCheck": "Проверка работоспособности", "prioritySelection": "Выбор по приоритету", "attemptProvider": "Попытка: {provider}", "retryAttempt": "Повтор #{number}", "sessionReuse": "Повторное использование сессии", "sessionReuseDesc": "Провайдер из кэша сессии", "sessionReuseTitle": "Привязка сессии", "sessionReuseSelection": "Выбор с повторным использованием сессии", "sessionReuseSelectionDesc": "Провайдер выбран из кэша сессии", "sessionInfo": "Информация о сессии", "sessionIdLabel": "ID сессии", "requestSequence": "Номер запроса", "sessionAge": "Возраст сессии", "reusedProvider": "Повторно используемый провайдер", "executeRequest": "Выполнить запрос", "cacheOptimizationHint": "Повторное использование сессии оптимизирует производительность, поддерживая привязку к провайдеру в рамках одного разговора, снижая накладные расходы на выбор и повышая частоту попаданий в кэш." } }, "providerChain": { "decisionChain": "Цепочка решений поставщика", "clickItemForDetails": "Нажмите на шаг, чтобы посмотреть детали" }, "modelRedirect": { "redirected": "Перенаправлено", "targetModel": "Целевая модель" }, "statusCodes": { "not200": "Не 200 (ошибки/блокировки)", "200": "200 (Успех)", "400": "400 (Неверный запрос)", "401": "401 (Не авторизован)", "429": "429 (Ограничение)", "500": "500 (Ошибка сервера)" }, "billingDetails": { "input": "Входные", "output": "Выходные", "cacheWrite5m": "Запись кэша (5m)", "cacheWrite1h": "Запись кэша (1h)", "cacheRead": "Чтение кэша", "cacheTtl": "TTL кэша", "multiplier": "Множитель поставщика", "totalCost": "Общая стоимость", "context1m": "1M Контекст", "context1mPricing": "Вход >200k 2x, Выход >200k 1.5x" } }, "leaderboard": { "title": "Таблица расходов", "description": "Просмотр рейтинга расходов пользователей и ключей", "todayTitle": "Сегодняшний рейтинг", "viewAll": "Смотреть все", "userRankings": "Рейтинг пользователей", "providerRankings": "Рейтинг поставщиков", "modelRankings": "Рейтинг моделей", "noData": "Нет данных за сегодня", "requests": "запросов", "tokens": "токенов", "tabs": { "users": "Рейтинг пользователей", "keys": "Рейтинг ключей", "userRanking": "Рейтинг пользователей", "providerRanking": "Рейтинг поставщиков", "providerCacheHitRateRanking": "Рейтинг по попаданиям в кэш", "modelRanking": "Рейтинг моделей", "dailyRanking": "Сегодня", "weeklyRanking": "Эта неделя", "monthlyRanking": "Этот месяц", "allTimeRanking": "Всё время" }, "dateRange": { "to": "по", "prevPeriod": "Предыдущий период", "nextPeriod": "Следующий период", "customRange": "Произвольный диапазон" }, "columns": { "rank": "Ранг", "name": "Имя", "totalCost": "Общие затраты", "totalRequests": "Всего запросов", "avgCost": "Средние затраты", "lastActive": "Последняя активность", "user": "Пользователь", "requests": "Количество запросов", "tokens": "Количество токенов", "consumedAmount": "Потраченная сумма", "provider": "Поставщик", "model": "Модель", "cost": "Стоимость", "cacheHitRequests": "Запросы (учтены в hit rate)", "cacheHitRate": "Попадания в кэш", "cacheReadTokens": "Токены чтения из кэша", "totalTokens": "Всего токенов", "cacheCreationConsumedAmount": "Расход на создание кэша", "totalConsumedAmount": "Общие расходы", "successRate": "Процент успеха", "avgResponseTime": "Среднее время ответа", "avgTtfbMs": "Средний TTFB", "avgTokensPerSecond": "Средн. ток/с", "avgCostPerRequest": "Ср. стоимость/запрос", "avgCostPerMillionTokens": "Ср. стоимость/1М токенов" }, "expandModelStats": "Развернуть модели", "collapseModelStats": "Свернуть модели", "states": { "loading": "Загрузка...", "noData": "Нет данных", "todayNoData": "Нет данных за сегодня", "weekNoData": "Нет данных за эту неделю", "monthNoData": "Нет данных за этот месяц", "fetchFailed": "Не удалось получить данные таблицы лидеров" }, "permission": { "title": "Требуются разрешения", "restricted": "Доступ ограничен", "description": "Для функции таблицы лидеров администратору необходимо включить разрешение «Разрешить просмотр использования всего сайта».", "adminAction": "Включить это разрешение.", "userAction": "Пожалуйста, свяжитесь с администратором, чтобы включить это разрешение.", "systemSettings": "Настройки системы" }, "filters": { "userTagsPlaceholder": "Фильтр по тегам пользователей...", "userGroupsPlaceholder": "Фильтр по группам пользователей..." } }, "sessions": { "title": "Активные сеансы", "description": "Мониторинг активных сеансов API в режиме реального времени", "monitoring": "Мониторинг сеансов", "monitoringDescription": "Отображение активных и неактивных сеансов в реальном времени (автоматическое обновление каждые 3 секунды)", "activeSessions": "Активные сеансы (последние 5 минут)", "inactiveSessions": "Неактивные сеансы (более 5 минут, только просмотр)", "columns": { "sessionId": "ID сеанса", "user": "Пользователь", "key": "Ключ", "provider": "Поставщик", "model": "Модель", "startTime": "Время начала", "lastActivity": "Последняя активность", "requestCount": "Количество запросов", "totalInput": "Общий ввод", "totalOutput": "Общий вывод", "totalCost": "Общая стоимость", "totalDuration": "Общая продолжительность", "status": "Статус", "actions": "Действия" }, "table": { "count": "Всего {count} {type} сеансов", "active": "Активные", "inactive": "Неактивные", "notCountedInConcurrency": "(не учитывается в параллельных запросах)", "refreshing": "Обновление...", "noActiveSessions": "Нет активных сеансов" }, "pagination": { "total": "всего" }, "details": { "title": "Сообщения сеанса", "messages": "Список сообщений", "info": "Информация сеанса", "timeline": "Хронология", "overview": "Обзор сеанса", "overviewDescription": "Сводная статистика", "providersAndModels": "Поставщики и модели", "providersAndModelsDescription": "Используемые поставщики и модели", "tokenUsage": "Использование токенов (всего)", "tokenUsageDescription": "Кумулятивная статистика по всем запросам", "costInfo": "Информация о стоимости (всего)", "costInfoDescription": "Кумулятивная стоимость по всем запросам", "totalRequests": "Всего запросов", "firstRequest": "Первый запрос", "lastRequest": "Последний запрос", "totalDuration": "Общая продолжительность", "totalInput": "Общий ввод", "totalOutput": "Общий вывод", "cacheCreation": "Создание кэша", "cacheTtlMixed": "Смешанный", "cacheRead": "Чтение из кэша", "total": "Всего", "totalFee": "Общая плата", "providers": "Поставщики", "models": "Модели", "noDetailedData": "Подробные данные отсутствуют", "storageTip": "Подробные данные не найдены. Возможные причины: Redis отключен/недоступен (REDIS_URL + ENABLE_RATE_LIMIT=true), данные истекли (SESSION_TTL, по умолчанию 300с), или сохранение тела ответа отключено (STORE_SESSION_RESPONSE_BODY=false, влияет только на тело ответа). Чтобы сохранять сообщения без маскировки, установите STORE_SESSION_MESSAGES=true.", "clientInfo": "Информация о клиенте", "requestHeaders": "Заголовки запроса", "requestBody": "Тело запроса", "requestMessages": "Сообщения запроса", "specialSettings": "Особые", "requestMessagesDescription": "Содержимое сообщения, отправленного клиентом", "responseHeaders": "Заголовки ответа", "responseBody": "Тело ответа", "responseBodyDescription": "Полный ответ сервера (TTL 5 минут)", "noHeaders": "Нет данных", "noData": "Нет данных", "prevRequest": "Предыдущий", "nextRequest": "Следующий" }, "actions": { "back": "Назад", "view": "Просмотр", "copy": "Копировать", "download": "Скачать", "copyMessages": "Копировать запрос (заголовки и тело)", "downloadMessages": "Скачать запрос (заголовки и тело)", "copied": "Скопировано", "copyResponse": "Копировать тело ответа", "terminate": "Прервать", "terminateTitle": "Прервать сессию", "terminateDescription": "Вы уверены, что хотите прервать эту сессию? После прерывания привязка поставщика будет очищена, и следующий запрос выберет нового поставщика.", "sessionIdLabel": "ID сессии: {sessionId}", "cancel": "Отмена", "confirmTerminate": "Прервать", "terminating": "Прерывание...", "terminateSuccess": "Сессия успешно прервана", "terminateFailed": "Не удалось прервать сессию", "terminateSelected": "Прервать выбранные", "selectedCount": "Выбрано: {count}", "selectAll": "Выбрать все", "selectSessionLabel": "Выбрать сессию", "multiSelect": "Множественный выбор", "cancelMultiSelect": "Отмена", "terminateSessionTitle": "Прервать сессию", "terminateSessionDescription": "Вы уверены, что хотите прервать эту сессию? Это действие нельзя отменить.", "batchTerminateSuccess": "Прервано {count} сессий", "batchTerminatePartial": "Без прав: {unauthorized} · Отсутствуют: {missing}", "batchTerminateAllowedFailed": "Не удалось прервать {count} разрешённых сессий", "batchTerminateNone": "Не удалось прервать ни одной сессии", "noSelection": "Выберите хотя бы одну сессию" }, "codeDisplay": { "raw": "Сырой", "pretty": "Форматированный", "searchPlaceholder": "Поиск", "expand": "Развернуть", "collapse": "Свернуть", "themeAuto": "Авто", "themeLight": "Светлая", "themeDark": "Тёмная", "noMatches": "Нет совпадений", "onlyMatches": "Только совпадения", "showAll": "Показать всё", "prevPage": "Назад", "nextPage": "Вперёд", "pageInfo": "Страница {page} / {total}", "sseEvent": "Событие", "sseData": "Данные", "hardLimit": { "title": "Содержимое слишком большое", "size": "Размер: {sizeMB} MB ({sizeBytes} bytes)", "maximum": "Максимум: {maxSizeMB} MB или {maxLines} строк", "hint": "Пожалуйста, скачайте файл, чтобы посмотреть весь контент.", "download": "Скачать" } }, "status": { "loading": "Загрузка...", "loadError": "Ошибка загрузки", "fetchFailed": "Не удалось получить", "unknownError": "Неизвестная ошибка", "storageNotEnabled": "Не сохранено", "storageNotEnabledHint": "Подсказка: проверьте REDIS_URL и ENABLE_RATE_LIMIT=true (кэш деталей сессии). Чтобы сохранять сообщения без маскировки, установите STORE_SESSION_MESSAGES=true." }, "errors": { "copyFailed": "Не удалось скопировать" }, "requestList": { "title": "Список запросов", "noRequests": "Запросы не найдены", "fetchFailed": "Не удалось получить список запросов", "unknownError": "Неизвестная ошибка", "prev": "Назад", "next": "Вперед", "orderAsc": "Переключить на прямой порядок (старые первыми)", "orderDesc": "Переключить на обратный порядок (новые первыми)" }, "back": "Назад", "loadingError": "Не удалось загрузить" }, "quotas": { "title": "Управление квотами", "description": "Управление квотами пользователей, ключей и поставщиков", "tabs": { "overview": "Обзор", "users": "Квоты пользователей", "keys": "Квоты ключей", "providers": "Квоты поставщиков" }, "columns": { "name": "Имя", "limit": "Лимит", "used": "Использовано", "remaining": "Осталось", "resetTime": "Время сброса", "status": "Статус" }, "labels": { "byName": "По имени", "byUsageRate": "По уровню использования", "all": "Все", "warning": "Приближается к лимиту (>60%)", "exceeded": "Превышено (≥100%)" }, "users": { "title": "Статистика квот пользователей", "totalUsers": "Всего {count} пользователей" }, "keys": { "title": "Статистика квот ключей", "totalKeysInfo": "Всего {userCount} пользователей, {keyCount} ключей", "setKeyQuota": "Установить квоту ключа", "setUserQuota": "Установить квоту пользователя", "onlyKeyQuota": "Только квота ключа", "onlyUserQuota": "Только квота пользователя", "success": "Квота пользователя установлена успешно" }, "providers": { "title": "Статистика квот поставщиков", "totalProviders": "Всего {count} поставщиков" } }, "labels": { "byName": "По имени", "byUsageRate": "По уровню использования" }, "all": "Все", "nav": { "mobileMenuTitle": "Меню навигации", "dashboard": "Панель", "usageLogs": "Журналы", "leaderboard": "Лидеры", "availability": "Мониторинг", "myQuota": "Моя квота", "quotasManagement": "Квоты", "userManagement": "Пользователи", "providers": "Поставщики", "documentation": "Доки", "systemSettings": "Настройки", "feedback": "Обратная связь", "login": "Вход", "logout": "Выход" }, "statistics": { "title": "Статистика", "cost": "Сумма расходов", "calls": "Количество вызовов API", "totalCost": "Общая сумма расходов", "totalCalls": "Общее количество вызовов API", "timeRange": { "today": "Сегодня", "todayDescription": "Использование за сегодня", "7days": "7д", "7daysDescription": "Использование за последние 7 дней", "30days": "30д", "30daysDescription": "Использование за последние 30 дней", "thisMonth": "Этот месяц", "thisMonthDescription": "Использование за этот месяц", "default": "Использование" }, "mode": { "keys": "Только ваши ключи", "mixed": "Показать детали ваших ключей и сводку других пользователей", "users": "Показать для всех" }, "legend": { "selectAll": "Выбрать все", "deselectAll": "Очистить", "selected": "Выбрано" }, "chartMode": { "label": "Режим отображения", "overlay": "Сравнение", "stacked": "Накопление" }, "states": { "noData": "Нет статистических данных", "fetchFailed": "Не удалось получить статистические данные" } }, "errors": { "fetchSystemSettingsFailed": "Не удалось получить параметры системы", "fetchFailed": "Ошибка загрузки", "fetchSessionListFailed": "Не удалось получить список сеансов" }, "keyList": { "columns": { "name": "Название", "key": "Ключ", "todayCalls": "Вызовы сегодня", "todayCost": "Расходы сегодня", "lastUsed": "Последнее использование", "actions": "Действия" }, "detailsButton": "Подробная информация", "modelStats": "Статистика моделей", "modelStatsColumns": { "model": "Модель", "calls": "Вызовы", "cost": "Расходы" }, "limitUsage": "Использование лимита", "copyKeyTooltip": "Скопировать полный ключ", "showKeyTooltip": "Показать полный ключ", "hideKeyTooltip": "Скрыть ключ", "copyFailed": "Не удалось скопировать:", "timesUnit": "раз", "provider": "Провайдер", "neverUsed": "Не использовался", "viewLogsTooltip": "Просмотр подробных журналов", "logsButton": "Журналы", "emptyState": { "title": "Нет ключей", "description": "Нажмите кнопку \"Добавить ключ\" в правом верхнем углу, чтобы добавить ключ" } }, "userList": { "title": "Список пользователей", "badge": "{count} ключей", "activeKeys": "Активные ключи", "totalKeys": "Всего ключей", "expiresAt": "Срок действия", "status": { "active": "Активен", "expiringSoon": "Скоро истечет", "expired": "Истек", "disabled": "Отключен" }, "actions": { "renew": "Продлить", "renew30d": "Продлить на 30 дней", "renew90d": "Продлить на 90 дней", "renew1y": "Продлить на 1 год", "renewCustom": "Настроить...", "customPrompt": "Введите новую дату истечения (ГГГГ-ММ-ДД). Оставьте пустым для отмены.", "invalidDate": "Пожалуйста, введите действительную дату", "enable": "Включить", "disable": "Отключить", "success": "Операция выполнена успешно", "failed": "Операция не удалась, попробуйте еще раз" }, "emptyState": { "title": "Нет пользователей", "description": "Вы еще не создали ни одного пользователя. Пользователи являются основой для управления API-ключами и квотами использования. Создайте первого пользователя, чтобы начать!", "action": "Создать первого пользователя" }, "addUser": "Добавить пользователя" }, "keyListHeader": { "todayUsage": "Использование сегодня", "allowedModels": { "label": "Разрешённые модели", "noRestrictions": "Разрешённые модели: без ограничений" }, "expiresAt": "Истекает", "proxyStatus": { "loading": "Загрузка статуса прокси", "fetchFailed": "Не удалось получить статус прокси", "noStatus": "Нет статуса прокси", "activeRequests": "Активные запросы", "lastRequest": "Последний запрос", "noRecord": "Нет записи", "timeAgo": { "justNow": "Только что", "secondsAgo": "{count}с назад", "minutesAgo": "{count} мин назад", "hoursAgo": "{count}ч назад", "daysAgo": "{count}д назад" } }, "addKey": "Добавить ключ", "keyCreatedDialog": { "title": "Ключ успешно создан", "description": "Ваш API-ключ был успешно создан. Пожалуйста, скопируйте и сохраните его в безопасном месте, так как он будет показан только один раз.", "apiKeyLabel": "API ключ", "warningText": "Пожалуйста, скопируйте и сохраните перед закрытием. После закрытия вы не сможете снова просмотреть этот ключ", "httpWarningText": "Обнаружен HTTP-доступ. Ограничения браузера не позволяют использовать функцию копирования. Нажмите на значок глаза, чтобы показать ключ и скопировать его вручную.", "copyTooltip": "Скопировать в буфер обмена", "showTooltip": "Показать полный ключ", "hideTooltip": "Скрыть ключ", "closeButton": "Закрыть" }, "allowedClients": { "label": "Разрешённые клиенты", "noRestrictions": "Разрешённые клиенты: без ограничений" } }, "keyLimitUsage": { "loading": "Загрузка...", "error": "Ошибка загрузки", "networkError": "Сетевая ошибка", "cost5h": "Расход за 5 часов", "costDaily": "Дневной расход", "costWeekly": "Недельный расход", "costMonthly": "Месячный расход", "concurrentSessions": "Параллельные сеансы", "noLimit": "Без ограничений" }, "addKeyForm": { "title": "Добавить ключ", "description": "Создать новый API-ключ для текущего пользователя. Значение ключа будет сгенерировано автоматически.", "submitText": "Создать ключ", "loadingText": "Создание...", "keyName": { "label": "Имя ключа", "placeholder": "Введите имя ключа" }, "expiresAt": { "label": "Срок действия", "placeholder": "Выберите срок действия", "description": "Оставьте пустым для бессрочного ключа" }, "canLoginWebUi": { "label": "Разрешить вход в веб-интерфейс", "description": "При отключении этот ключ можно использовать только для вызовов API и нельзя использовать для входа в панель администрирования" }, "limit5hUsd": { "label": "Лимит расходов за 5 часов (USD)", "placeholder": "Оставьте пустым для неограниченного", "description": "Максимальный расход в течение 5 часов", "descriptionWithUserLimit": "Максимальный расход за 5 часов (Лимит пользователя: {limit})" }, "limitDailyUsd": { "label": "Дневной лимит расходов (USD)", "placeholder": "Оставьте пустым для неограниченного", "description": "Максимальный расход в день" }, "dailyResetMode": { "label": "Режим ежедневного сброса", "options": { "fixed": "Сброс в фиксированное время", "rolling": "Скользящее окно (24 часа)" }, "desc": { "fixed": "Сброс квоты в определенное время каждый день", "rolling": "24-часовое скользящее окно от первого запроса" } }, "dailyResetTime": { "label": "Время ежедневного сброса", "placeholder": "HH:mm", "description": "Когда сбрасывается дневной лимит (использует системный часовой пояс)" }, "limitWeeklyUsd": { "label": "Недельный лимит расходов (USD)", "placeholder": "Оставьте пустым для неограниченного", "description": "Максимальный расход в неделю", "descriptionWithUserLimit": "Максимальный расход в неделю (Лимит пользователя: {limit})" }, "limitMonthlyUsd": { "label": "Месячный лимит расходов (USD)", "placeholder": "Оставьте пустым для неограниченного", "description": "Максимальный расход в месяц", "descriptionWithUserLimit": "Максимальный расход в месяц (Лимит пользователя: {limit})" }, "limitTotalUsd": { "label": "Общий лимит расходов (USD)", "placeholder": "Оставьте пустым для неограниченного", "description": "Максимальная сумма расходов (без сброса)", "descriptionWithUserLimit": "Не может превышать общий лимит пользователя ({limit})" }, "limitConcurrentSessions": { "label": "Лимит параллельных сеансов", "placeholder": "0 означает неограниченно", "description": "Количество одновременных разговоров", "descriptionWithUserLimit": "Максимум сеансов (Лимит пользователя: {limit})" }, "providerGroup": { "label": "Группа провайдеров", "placeholder": "Введите теги групп провайдеров и нажмите Enter", "description": "Группы провайдеров для этого ключа (по умолчанию: default).", "defaultDescription": "default включает провайдеров без groupTag.", "descriptionWithUserGroup": "Группы провайдеров для этого ключа (группы пользователя: {group}; по умолчанию: default)." }, "cacheTtl": { "label": "Переопределение Cache TTL", "description": "Принудительно установить Anthropic prompt cache TTL для запросов с cache_control.", "options": { "inherit": "Не переопределять (следовать провайдеру/клиенту)", "5m": "5m", "1h": "1h" } }, "successTitle": "Ключ успешно создан", "successDescription": "Ваш API-ключ был успешно создан.", "generatedKey": { "label": "Сгенерированный ключ", "hint": "Вы можете управлять этим ключом в списке ключей (включить/выключить, лимиты и т. д.), но полный ключ показывается только один раз. Скопируйте и сохраните его сейчас." }, "errors": { "userIdMissing": "ID пользователя не существует", "createFailed": "Не удалось создать, попробуйте позже", "noKeyReturned": "Создан успешно, но ключ не был возвращен" } }, "userForm": { "title": { "add": "Добавить пользователя", "edit": "Редактировать пользователя" }, "description": { "add": "Создать нового пользователя. Система автоматически сгенерирует ключ по умолчанию.", "edit": "Изменить основную информацию пользователя." }, "submitText": { "add": "Создать пользователя", "edit": "Сохранить изменения" }, "loadingText": { "add": "Создание...", "edit": "Сохранение..." }, "username": { "label": "Имя пользователя", "placeholder": "Введите имя пользователя" }, "note": { "label": "Примечание", "placeholder": "Введите примечание (необязательно)", "description": "Используется для описания назначения пользователя или примечаний" }, "providerGroup": { "label": "Группа поставщиков", "placeholder": "например, default или premium,economy", "description": "Группы провайдеров пользователя (по умолчанию: default). Провайдеры без groupTag относятся к default." }, "tags": { "label": "Теги пользователя", "placeholder": "Введите тег (Enter для добавления)", "description": "Добавьте теги для классификации и фильтрации (максимум 20 тегов, до 32 символов каждый)" }, "rpm": { "label": "Лимит RPM", "placeholder": "Лимит запросов в минуту", "description": "По умолчанию: {default}, диапазон: 1-10000" }, "dailyQuota": { "label": "Дневная квота", "placeholder": "Лимит дневного расхода", "helperText": "Установите 0 для неограниченного доступа", "description": "По умолчанию: ${default}, диапазон: $0.01-$1000" }, "limit5hUsd": { "label": "Лимит на 5 часов (USD)", "placeholder": "Оставьте пустым для неограниченного", "description": "Максимальный расход за 5 часов" }, "limitWeeklyUsd": { "label": "Недельный лимит (USD)", "placeholder": "Оставьте пустым для неограниченного", "description": "Максимальный недельный расход" }, "limitMonthlyUsd": { "label": "Месячный лимит (USD)", "placeholder": "Оставьте пустым для неограниченного", "description": "Максимальный месячный расход" }, "limitConcurrentSessions": { "label": "Лимит одновременных сессий", "placeholder": "0 означает неограниченно", "description": "Количество одновременных разговоров" }, "isEnabled": { "label": "Активировать пользователя", "description": "Отключенные пользователи не смогут использовать API" }, "expiresAt": { "label": "Срок действия", "placeholder": "Оставьте пустым для бессрочного", "description": "Пользователь будет автоматически отключен после истечения срока", "pastWarning": "Выбранная дата в прошлом. После сохранения пользователь сразу станет просроченным и будет отключен." }, "allowedClients": { "label": "Разрешённые клиенты", "description": "Ограничьте, какие CLI/IDE клиенты могут использовать эту учётную запись. Пусто = без ограничений.", "customLabel": "Пользовательские шаблоны клиентов", "customPlaceholder": "Введите шаблон (например, 'xcode', 'my-ide')" }, "allowedModels": { "label": "Разрешённые модели", "placeholder": "Введите название модели (Enter для добавления)", "description": "Ограничить пользователя определёнными моделями ИИ. Оставьте пустым без ограничений (макс. 50 моделей, 64 символа)" } }, "deleteKeyConfirm": { "title": "Подтвердить удаление ключа", "description": "Вы уверены, что хотите удалить ключ \"{name}\"?\n{maskedKey}\nЭто действие нельзя отменить. Все приложения, использующие этот ключ, потеряют доступ.", "cancel": "Отмена", "confirm": "Подтвердить удаление", "confirmLoading": "Удаление...", "errors": { "deleteFailed": "Не удалось удалить", "retryError": "Не удалось удалить, попробуйте позже" } }, "keyActions": { "edit": "Редактировать", "delete": "Удалить", "editAriaLabel": "Редактировать ключ", "deleteAriaLabel": "Удалить ключ" }, "userActions": { "edit": "Редактировать пользователя", "delete": "Удалить пользователя", "editAriaLabel": "Редактировать пользователя", "deleteAriaLabel": "Удалить пользователя" }, "availability": { "title": "Мониторинг доступности провайдеров", "description": "Мониторинг доступности и показателей производительности провайдеров в реальном времени", "nav": "Мониторинг доступности", "tabs": { "provider": "Доступность провайдеров", "endpoint": "Здоровье эндпоинтов" }, "overview": { "systemAvailability": "Доступность системы", "avgLatency": "Средняя задержка", "errorRate": "Коэффициент ошибок", "activeProbes": "Активные проверки", "load": "Нагрузка" }, "timeRange": { "label": "Временной диапазон", "15min": "15 мин", "1h": "1 час", "6h": "6 часов", "24h": "24 часа", "7d": "7 дней", "last15min": "Последние 15 минут", "last1h": "Последний час", "last6h": "Последние 6 часов", "last24h": "Последние 24 часа", "last7d": "7д", "custom": "Настраиваемый" }, "laneChart": { "title": "Хронология доступности провайдеров", "noData": "Нет данных", "requests": "{count} запросов", "availability": "{value}% доступно", "noRequests": "Нет запросов", "denseData": "Плотные", "sparseData": "Разреженные", "latency": "Задержка" }, "latencyChart": { "title": "Распределение задержки", "p50": "P50", "p95": "P95", "p99": "P99", "noData": "Нет данных о задержке" }, "latencyCurve": { "title": "Тренд задержки", "noData": "Нет данных о задержке", "avg": "Средн.", "min": "Мин.", "max": "Макс.", "latency": "Задержка" }, "terminal": { "title": "Журнал проверок", "live": "LIVE", "download": "Скачать журнал", "noLogs": "Нет журналов проверок", "manual": "Ручная", "auto": "Авто", "filterPlaceholder": "Фильтр журналов..." }, "probeGrid": { "title": "Статус эндпоинтов", "noEndpoints": "Эндпоинты не настроены", "lastProbe": "Последняя проверка", "status": { "unknown": "Неизвестно", "healthy": "Здоров", "unhealthy": "Нездоров" } }, "endpoint": { "selectVendor": "Выберите вендора", "selectType": "Выберите тип" }, "confidence": { "low": "Низкая", "medium": "Средняя", "high": "Высокая", "lowTooltip": "Менее {count} запросов. Данные могут быть нерепрезентативными.", "mediumTooltip": "Умеренный объём запросов. Данные достаточно надёжны.", "highTooltip": "Высокий объём запросов. Данные надёжны." }, "actions": { "retry": "Повторить", "probeNow": "Проверить сейчас", "probing": "Проверка...", "probeAll": "Проверить все", "probeSuccess": "Проверка успешна", "probeFailed": "Проверка не удалась" }, "status": { "green": "Здоров", "red": "Недоступен", "unknown": "Неизвестно" }, "statusDescription": { "green": "Сервис работает нормально, запросы успешны", "red": "Сервис недоступен или ошибка", "unknown": "Данные отсутствуют" }, "metrics": { "systemAvailability": "Доступность системы", "totalRequests": "Всего запросов", "successRate": "Успешность", "avgLatency": "Средняя задержка", "p50Latency": "P50 задержка", "p95Latency": "P95 задержка", "p99Latency": "P99 задержка", "lastRequest": "Последний запрос", "requestCount": "Кол-во запросов" }, "filters": { "provider": "Провайдер", "allProviders": "Все провайдеры", "includeDisabled": "Включить отключённые" }, "sort": { "label": "Сортировка", "availability": "Доступность", "name": "Название", "requests": "Запросы" }, "columns": { "provider": "Провайдер", "type": "Тип", "status": "Статус", "availability": "Доступность", "requests": "Запросы", "successRate": "Успешность", "avgLatency": "Средняя задержка", "lastRequest": "Последний запрос", "actions": "Действия" }, "chart": { "title": "Тренд доступности", "description": "Изменение доступности во времени", "availabilityScore": "Оценка доступности", "requestVolume": "Объём запросов", "latencyTrend": "Тренд задержки", "noData": "Нет данных" }, "details": { "title": "Детали провайдера", "overview": "Обзор", "timeBuckets": "Временные интервалы", "greenCount": "Успешные запросы", "redCount": "Неудачные запросы" }, "actions": { "refresh": "Обновить", "refreshing": "Обновление...", "autoRefresh": "Автообновление", "stopAutoRefresh": "Остановить автообновление", "viewDetails": "Подробнее", "testProvider": "Тестировать провайдера" }, "states": { "loading": "Загрузка...", "error": "Ошибка загрузки", "noProviders": "Нет провайдеров", "noData": "Нет данных о доступности", "fetchFailed": "Не удалось получить данные о доступности" }, "legend": { "green": "Отлично (доступность 95%+)", "lime": "Хорошо (доступность 80-95%)", "orange": "Внимание (доступность 50-80%)", "red": "Недоступен (доступность <50%)", "noData": "Нет данных" }, "summary": { "title": "Сводка доступности", "healthyProviders": "Здоровые провайдеры", "unhealthyProviders": "Недоступные провайдеры", "unknownProviders": "Нет данных", "totalProviders": "Всего провайдеров" }, "heatmap": { "bucketSize": "Размер интервала", "minutes": "мин", "requests": "запросов", "noData": "Нет данных", "noRequests": "Нет запросов" }, "probeHistory": { "title": "История проверок эндпоинтов", "description": "Просмотр журналов проверок и запуск ручной проверки для конкретного эндпоинта", "selectVendor": "Выберите вендора", "selectType": "Выберите тип провайдера", "selectEndpoint": "Выберите эндпоинт", "noEndpoints": "Эндпоинты не найдены", "probeNow": "Проверить", "probing": "Проверяем...", "columns": { "time": "Время", "method": "Метод", "status": "Статус", "latency": "Задержка", "error": "Ошибка" }, "success": "Успех", "manual": "Ручная проверка", "auto": "Автоматическая проверка", "probeSuccess": "Проверка успешна", "probeFailed": "Проверка не удалась" }, "toast": { "refreshSuccess": "Данные о доступности обновлены", "refreshFailed": "Обновление не удалось, попробуйте снова" } }, "rateLimits": { "title": "Статистика событий лимитов", "description": "Просмотр и анализ статистики событий лимитов", "loading": "Загрузка...", "error": "Ошибка загрузки", "totalEvents": "Всего событий", "avgUsage": "Среднее использование", "affectedUsers": "Затронутые пользователи", "noData": "Нет данных", "noDataHint": "Нет событий лимитов в выбранном диапазоне времени", "filters": { "startTime": "Начало", "endTime": "Конец", "user": "Пользователь", "provider": "Поставщик", "limitType": "Тип лимита", "allUsers": "Все пользователи", "allProviders": "Все провайдеры", "allLimitTypes": "Все типы", "apply": "Применить фильтры", "reset": "Сбросить", "loading": "Загрузка...", "limitTypes": { "rpm": "Лимит RPM", "usd_5h": "Лимит расходов за 5ч", "usd_weekly": "Недельный лимит расходов", "usd_monthly": "Месячный лимит расходов", "concurrent_sessions": "Лимит одновременных сессий", "daily_quota": "Дневной лимит квоты" } }, "chart": { "title": "Хронология событий лимитов", "description": "Почасовой тренд событий лимитов", "total": "Всего", "events": "Событий" }, "breakdown": { "title": "Распределение по типам лимитов", "description": "Доля событий по типам лимитов", "total": "Всего", "count": "Событий", "percentage": "Доля", "noData": "Нет данных", "types": { "rpm": "RPM", "usd_5h": "Расходы 5ч", "usd_weekly": "Недельные расходы", "usd_monthly": "Месячные расходы", "concurrent_sessions": "Одновременные сессии", "daily_quota": "Дневная квота" } }, "topUsers": { "title": "Топ затронутых пользователей", "description": "Пользователи, чаще всего попадавшие под лимиты", "total": "Всего", "rank": "Место", "username": "Имя пользователя", "eventCount": "Событий", "percentage": "Доля", "loading": "Загрузка...", "noData": "Нет данных" } }, "users": { "title": "Управление пользователями", "description": "Показано {count} пользователей", "toolbar": { "searchPlaceholder": "Поиск по имени, заметкам, тегам, ключам...", "groupFilter": "Фильтр по группе", "allGroups": "Все группы", "tagFilter": "Фильтр по тегу", "allTags": "Все теги", "keyGroupFilter": "Группа ключей", "allKeyGroups": "Все группы ключей", "sortBy": "Сортировка", "sortOrder": "Порядок", "sortByName": "Имя", "sortByTags": "Теги", "sortByExpiresAt": "Срок действия", "sortByRpm": "Лимит RPM", "sortByLimit5h": "Лимит 5 ч", "sortByLimitDaily": "Дневной лимит", "sortByLimitWeekly": "Недельный лимит", "sortByLimitMonthly": "Месячный лимит", "sortByCreatedAt": "Дата создания", "ascending": "По возрастанию", "descending": "По убыванию", "statusFilter": "Статус", "allStatus": "Все статусы", "statusActive": "Активен", "statusExpired": "Истек", "statusExpiringSoon": "Скоро истечет", "statusEnabled": "Включен", "statusDisabled": "Отключен", "createUser": "Создать пользователя", "createKey": "Создать ключ" }, "dialog": { "userProviderGroup": "Ваши группы провайдеров", "userProviderGroupHint": "Новые ключи могут использовать только ваши существующие группы провайдеров" } }, "userManagement": { "table": { "columns": { "username": "Имя пользователя", "note": "Примечание", "expiresAt": "Дата истечения", "expiresAtHint": "Нажмите для быстрого продления", "limitRpm": "RPM", "limit5h": "Лимит 5 ч", "limitDaily": "Дневной лимит", "limitWeekly": "Недельный лимит", "limitMonthly": "Месячный лимит", "limitTotal": "Общий лимит", "limitSessions": "Одновременные сессии" }, "keyRow": { "name": "Название ключа", "key": "Ключ", "group": "Группа", "todayUsage": "Запросы сегодня", "todayCost": "Расход сегодня", "todayTokens": "Токены сегодня", "lastUsed": "Последнее использование", "actions": "Действия", "quotaButton": "Просмотр использования квоты", "fields": { "callsLabel": "Запросы", "tokensLabel": "Токены", "costLabel": "Расход" } }, "expand": "Развернуть", "collapse": "Свернуть", "refresh": "Обновить", "noKeys": "Нет ключей", "defaultGroup": "default", "userStatus": { "disabled": "Отключен" }, "actions": { "addKey": "Добавить ключ" } }, "keyFullDisplay": { "title": "Полный ключ", "copySuccess": "Ключ скопирован в буфер обмена", "copyFailed": "Не удалось скопировать", "show": "Показать ключ", "hide": "Скрыть ключ", "copied": "Скопировано", "copy": "Скопировать ключ" }, "keyStatsDialog": { "title": "Статистика моделей за сегодня", "columns": { "model": "Модель", "calls": "Вызовы", "tokens": "Токены", "cost": "Стоимость" }, "modal": { "requests": "Запросов", "totalTokens": "Всего токенов", "cost": "Стоимость", "inputTokens": "Входные токены", "outputTokens": "Выходные токены", "cacheWrite": "Запись кэша", "cacheRead": "Чтение кэша", "cacheHitRate": "Попадание кэша", "cacheTokens": "Токены кэша", "performanceHigh": "Высокий", "performanceMedium": "Средний", "performanceLow": "Низкий" }, "noData": "Нет записей использования за сегодня", "totalCalls": "Всего вызовов", "totalCost": "Общий расход" }, "keyQuotaUsageDialog": { "title": "Использование квоты ключа", "fetchFailed": "Не удалось получить данные квоты", "noLimit": "Без лимита", "modeFixed": "Фиксированное время", "modeRolling": "Скользящие 24ч", "retry": "Повторить", "labels": { "limit5h": "5 часов", "limitDaily": "Ежедневно", "limitWeekly": "Еженедельно", "limitMonthly": "Месячный лимит", "limitTotal": "Всего", "limitSessions": "Одновременно" } }, "quickRenew": { "title": "Быстрое продление", "description": "Установить новую дату истечения для пользователя {userName}", "currentExpiry": "Текущий срок", "neverExpires": "Бессрочно", "expired": "Истёк", "quickExtensionLabel": "Быстрое продление", "quickExtensionHint": "Продлить от текущего срока (или от сейчас, если истёк)", "customDateLabel": "Указать дату", "customDateHint": "Напрямую указать дату истечения", "quickOptions": { "7days": "7 дней", "30days": "30 дней", "90days": "90 дней", "1year": "1 год" }, "customDate": "Произвольная дата", "enableOnRenew": "Также включить пользователя", "enableKeyOnRenew": "Также включить ключ", "cancel": "Отмена", "confirm": "Подтвердить продление", "confirming": "Продление...", "success": "Продление успешно", "failed": "Ошибка продления" }, "dialog": { "createKeyTitle": "Создать ключ", "editKeyTitle": "Редактировать ключ" }, "editDialog": { "title": "Редактировать пользователя", "description": "Редактирование данных пользователя", "userSection": "Настройки пользователя", "keysSection": "Настройки ключей", "scrollToKey": "Прокрутить к ключу", "saveFailed": "Не удалось сохранить пользователя", "keySaveFailed": "Не удалось сохранить ключ", "keyDeleteFailed": "Не удалось удалить ключ", "saveSuccess": "Изменения сохранены", "atLeastOneKeyEnabled": "Необходимо оставить хотя бы один активный ключ", "operationFailed": "Операция не удалась", "userDisabled": "Пользователь отключен", "userEnabled": "Пользователь активирован", "deleteFailed": "Не удалось удалить пользователя", "userDeleted": "Пользователь удален", "saving": "Сохранение...", "resetData": { "title": "Сброс статистики", "description": "Удалить все логи запросов и данные использования для этого пользователя. Это действие необратимо.", "error": "Не удалось сбросить данные", "button": "Сбросить статистику", "confirmTitle": "Сбросить всю статистику?", "confirmDescription": "Это навсегда удалит все логи запросов и статистику использования для этого пользователя. Это действие нельзя отменить.", "confirm": "Да, сбросить все", "loading": "Сброс...", "success": "Вся статистика сброшена" } }, "batchEdit": { "enterMode": "Массовое редактирование", "exitMode": "Выйти", "selectAll": "Выбрать все", "selectedCount": "Выбрано {users} пользователей, {keys} ключей", "editSelected": "Редактировать выбранное", "dialog": { "title": "Массовое редактирование", "description": "Повлияет на {users} пользователей и {keys} ключей", "cancel": "Отмена", "next": "Далее", "noFieldEnabled": "Включите хотя бы одно поле для замены", "noUpdate": "Нет обновлений для выполнения", "noSelection": "Сначала выберите пользователей или ключи для массового редактирования." }, "confirm": { "title": "Подтвердить массовое обновление", "description": "Будут обновлены {users} пользователей и {keys} ключей. Это действие нельзя отменить.", "userFields": "Поля пользователя", "keyFields": "Поля ключа", "goBack": "Вернуться и изменить", "update": "Подтвердить обновление", "updating": "Обновление..." }, "toast": { "usersUpdated": "Обновлено {count} пользователей", "keysUpdated": "Обновлено {count} ключей", "usersFailed": "Не удалось обновить пользователей: {error}", "keysFailed": "Не удалось обновить ключи: {error}", "batchFailed": "Массовое обновление не удалось" }, "validation": { "invalidNumber": "Введите корректное число", "negativeNumber": "Значение не может быть отрицательным" }, "aria": { "selectUser": "Выбрать пользователя", "selectKey": "Выбрать ключ" }, "user": { "title": "Настройки пользователя", "affected": "Повлияет на {count} пользователей", "enableFieldAria": "Включить поле: {title}", "fields": { "note": "Заметка", "tags": "Теги", "rpm": "Лимит RPM", "limit5h": "Лимит за 5 часов (USD)", "limitDaily": "Дневной лимит (USD)", "limitWeekly": "Недельный лимит (USD)", "limitMonthly": "Месячный лимит (USD)" }, "placeholders": { "emptyToClear": "Оставьте пустым, чтобы очистить", "tagsPlaceholder": "Нажмите Enter, чтобы добавить, можно разделять запятыми", "emptyNoLimit": "Оставьте пустым для безлимита" } }, "key": { "title": "Настройки ключа", "affected": "Повлияет на {count} ключей", "fields": { "providerGroup": "Группа (providerGroup)", "limit5h": "Лимит за 5 часов (USD)", "limitDaily": "Дневной лимит (USD)", "limitWeekly": "Недельный лимит (USD)", "limitMonthly": "Месячный лимит (USD)", "canLoginWebUi": "Независимая страница использования", "keyEnabled": "Статус ключа" }, "placeholders": { "groupPlaceholder": "Оставьте пустым, чтобы очистить; несколько значений через запятую", "emptyNoLimit": "Оставьте пустым для безлимита" }, "targetValue": "Целевое значение" } }, "createDialog": { "title": "Создать пользователя", "description": "Создание нового пользователя и настройка API-ключей", "saveFailed": "Не удалось создать пользователя", "keyCreateFailed": "Не удалось создать ключ", "rollbackFailed": "Не удалось выполнить откат. Возможно, пользователь был создан без ключа. Удалите пользователя вручную (userId: {userId}) и повторите попытку.", "createSuccess": "Пользователь создан", "successTitle": "Успешно создано", "successDescription": "Пользователь и ключ успешно созданы", "generatedKey": "Сгенерированный ключ", "keyHint": "Вы можете управлять этим ключом на странице управления пользователями (включить/выключить, лимиты и т. д.), но полный ключ показывается только один раз. Скопируйте и сохраните его сейчас.", "keysSection": "Ключи", "addKey": "Добавить ключ", "removeKey": "Удалить ключ", "cannotDeleteLastKey": "Нельзя удалить последний ключ", "confirmRemoveKeyTitle": "Удалить ключ", "confirmRemoveKeyDescription": "Вы уверены, что хотите удалить ключ \"{name}\"?", "creating": "Создание...", "create": "Создать" }, "limitRules": { "addRule": "Добавить правило лимита", "title": "Добавить правило лимита", "description": "Выберите тип лимита и установите значение", "cancel": "Отмена", "confirm": "Сохранить", "fields": { "type": { "label": "Тип лимита", "placeholder": "Выберите" }, "value": { "label": "Значение", "placeholder": "Введите" } }, "daily": { "mode": { "label": "Режим дневного сброса", "fixed": "Сброс в фиксированное время", "rolling": "Скользящее окно (24ч)", "helperRolling": "Скользящее окно 24 часа от первого запроса" }, "time": { "label": "Время сброса", "placeholder": "ЧЧ:мм" } }, "limitTypes": { "limitRpm": "Лимит RPM", "limit5h": "Лимит за 5 часов", "limitDaily": "Дневной лимит", "limitWeekly": "Недельный лимит", "limitMonthly": "Месячный лимит", "limitTotal": "Общий лимит", "limitSessions": "Одновременные сессии" }, "ruleTypes": { "limitRpm": "Лимит RPM", "limit5h": "Лимит за 5 часов", "limitDaily": "Дневной лимит", "limitWeekly": "Недельный лимит", "limitMonthly": "Месячный лимит", "limitTotal": "Общий лимит", "limitSessions": "Одновременные сессии" }, "errors": { "missingType": "Пожалуйста, выберите тип лимита", "invalidValue": "Пожалуйста, введите корректное значение", "invalidTime": "Пожалуйста, введите корректное время (ЧЧ:мм)" }, "overwriteHint": "Этот тип уже существует, сохранение перезапишет существующее значение", "dailyMode": { "fixed": "Сброс по фиксированному времени", "rolling": "Скользящее окно (24ч)" }, "quickValues": { "unlimited": "Без ограничений", "10": "$10", "50": "$50", "100": "$100", "500": "$500" }, "alreadySet": "Уже настроено", "confirmAdd": "Добавить" }, "quickExpire": { "oneWeek": "Через неделю", "oneMonth": "Через месяц", "threeMonths": "Через 3 месяца", "oneYear": "Через год" }, "providerGroupSelect": { "providersSuffix": "провайдеров", "loadFailed": "Не удалось загрузить группы провайдеров" }, "providerGroup": { "label": "Группа провайдеров", "placeholder": "Выберите группу провайдеров", "noRestriction": "Без ограничений (все провайдеры)", "providerCount": "{count} провайдеров" }, "dangerZone": { "title": "Опасная зона", "description": "Следующие действия необратимы, действуйте с осторожностью", "enable": { "title": "Включить пользователя", "description": "После включения этот пользователь и его ключи возобновят нормальную работу", "trigger": "Включить", "confirm": "Подтвердить включение", "confirmDescription": "Вы уверены, что хотите включить пользователя \"{userName}\"?", "loading": "Обработка..." }, "disable": { "title": "Отключить пользователя", "description": "После отключения этот пользователь и его ключи больше не будут работать", "trigger": "Отключить", "confirm": "Подтвердить отключение", "confirmDescription": "Вы уверены, что хотите отключить пользователя \"{userName}\"?", "loading": "Обработка..." }, "delete": { "title": "Удалить пользователя", "description": "Это удалит все связанные данные для этого пользователя, это действие необратимо", "trigger": "Удалить", "confirm": "Подтвердить удаление", "confirmDescription": "Это действие удалит все связанные данные пользователя \"{userName}\" и не может быть отменено.", "confirmLabel": "Вторичное подтверждение", "confirmHint": "Пожалуйста, введите \"{userName}\" для подтверждения удаления", "loading": "Удаление..." }, "actions": { "cancel": "Отмена" }, "errors": { "enableFailed": "Не удалось включить пользователя, попробуйте позже", "disableFailed": "Не удалось отключить пользователя, попробуйте позже", "deleteFailed": "Не удалось удалить пользователя, попробуйте позже" } }, "limitIndicator": { "notSet": "Не задано", "unlimited": "Без ограничений" }, "keySettings": { "balanceQueryPage": { "label": "Включить отдельную страницу проверки баланса", "description": "Разрешить пользователю просматривать баланс на отдельной странице", "descriptionEnabled": "При включении этот ключ будет использовать независимую страницу личного использования при входе. Однако он не может изменять группу провайдеров собственного ключа.", "descriptionDisabled": "При отключении пользователь не сможет получить доступ к странице личного использования. Вместо этого будет использоваться ограниченный Web UI." }, "cacheTtlOverride": { "label": "Переопределение Cache TTL", "inherit": "Не переопределять (следовать провайдеру/клиенту)", "5m": "5 минут", "1h": "1 час" } }, "pagination": { "previous": "Предыдущая", "next": "Следующая", "page": "Страница {current}", "of": "из {total}" }, "toolbar": { "expandAll": "Развернуть все", "collapseAll": "Свернуть все" }, "keyStatus": { "enabled": "Включён", "disabled": "Отключён", "active": "Активен", "expired": "Истёк", "expiringSoon": "Скоро истечёт", "keyEnabled": "Ключ включён", "keyDisabled": "Ключ отключён", "toggleKeyStatus": "Переключить статус ключа", "clickToDisableKey": "Нажмите, чтобы отключить ключ", "clickToEnableKey": "Нажмите, чтобы включить ключ", "operationFailed": "Операция не удалась", "clickToQuickRenew": "Нажмите для быстрого продления" }, "userStatus": { "enabled": "Включён", "disabled": "Отключён", "active": "Активен", "expired": "Истёк", "expiringSoon": "Скоро истечёт", "userEnabled": "Пользователь включён", "userDisabled": "Пользователь отключён", "toggleUserStatus": "Переключить статус пользователя", "clickToDisableUser": "Нажмите, чтобы отключить пользователя", "clickToEnableUser": "Нажмите, чтобы включить пользователя", "operationFailed": "Операция не удалась", "deleteFailed": "Не удалось удалить", "deleteSuccess": "Удаление успешно", "daysLeft": "{days, plural, =0 {Истекает сегодня} =1 {Остался 1 день} few {Осталось # дня} many {Осталось # дней} other {Осталось # дней}}" }, "userEditSection": { "sections": { "basicInfo": "Основная информация", "expireTime": "Срок действия", "limitRules": "Правила лимитов", "accessRestrictions": "Ограничения доступа" }, "fields": { "username": { "label": "Имя пользователя", "placeholder": "Введите имя пользователя" }, "description": { "label": "Заметка", "placeholder": "Введите заметку (необязательно)", "description": "Используется для описания назначения пользователя или примечаний" }, "tags": { "label": "Теги пользователя", "placeholder": "Введите тег (Enter для добавления)" }, "providerGroup": { "label": "Группа провайдеров", "placeholder": "default" }, "allowedClients": { "label": "Ограничения клиентов", "description": "Ограничьте, какие CLI/IDE клиенты могут использовать эту учетную запись. Пусто = без ограничений.", "customLabel": "Пользовательские шаблоны клиентов", "customPlaceholder": "Введите шаблон (например, 'xcode', 'my-ide')" }, "allowedModels": { "label": "Ограничения моделей", "placeholder": "Введите название модели или выберите из списка", "description": "Ограничить AI модели для пользователя. Пусто = без ограничений." }, "enableStatus": { "label": "Статус включения", "enabledDescription": "Сейчас включён. При отключении пользователь и его ключи станут недоступны.", "disabledDescription": "Сейчас отключён. При включении пользователь и его ключи станут доступны.", "confirmDisable": "Подтвердить отключение", "confirmEnable": "Подтвердить включение", "confirmEnableTitle": "Подтвердить включение пользователя", "confirmDisableTitle": "Подтвердить отключение пользователя", "confirmEnableDescription": "Включение позволит пользователю и его ключам работать в обычном режиме.", "confirmDisableDescription": "Отключение сделает пользователя и его ключи недоступными.", "cancel": "Отмена", "processing": "Обработка..." } }, "presetClients": { "claude-cli": "Claude Code CLI", "gemini-cli": "Gemini CLI", "factory-cli": "Droid CLI", "codex-cli": "Codex CLI" } }, "keyEditSection": { "sections": { "basicInfo": "Основная информация", "expireTime": "Срок действия", "limitRules": "Правила лимитов", "specialFeatures": "Специальные функции" }, "fields": { "keyName": { "label": "Название ключа", "placeholder": "Введите название ключа" }, "enableStatus": { "label": "Статус включения", "description": "Отключённые ключи не могут использоваться", "cannotDisableTooltip": "Невозможно отключить последний активный ключ" }, "balanceQueryPage": { "label": "Независимая страница использования", "description": "При включении этот ключ может использовать независимую страницу личного использования", "descriptionEnabled": "При включении этот ключ будет использовать независимую страницу личного использования при входе. Однако он не может изменять группу провайдеров собственного ключа.", "descriptionDisabled": "При отключении пользователь не сможет получить доступ к странице личного использования. Вместо этого будет использоваться ограниченный Web UI." }, "providerGroup": { "label": "Группа провайдеров", "placeholder": "По умолчанию: default", "selectHint": "Выберите группы провайдеров, доступные для этого ключа", "editHint": "Группа провайдеров существующего ключа не может быть изменена", "allGroups": "Использовать все группы", "noGroupHint": "default включает провайдеров без groupTag." }, "cacheTtl": { "label": "Переопределение Cache TTL", "description": "Принудительно установить Anthropic prompt cache TTL для запросов с cache_control.", "options": { "inherit": "Не переопределять (следовать провайдеру/клиенту)", "5m": "5m", "1h": "1h" } } }, "limitRules": { "title": "Добавить правило лимита", "actions": { "add": "Добавить правило", "remove": "Удалить" }, "daily": { "mode": { "fixed": "Сброс в фиксированное время", "rolling": "Скользящее окно (24ч)" } }, "overwriteHint": "Этот тип уже существует, сохранение перезапишет существующее значение" }, "accessRestrictions": { "title": "Ограничения доступа", "models": "Разрешённые модели", "clients": "Разрешённые клиенты", "noRestrictions": "Без ограничений", "inheritedFromUser": "Унаследовано от настроек пользователя" } } }, "webhookMigration": { "title": "Обновление системы Webhook", "description": "Мы запустили новую систему уведомлений Webhook с поддержкой многоцелевой доставки, независимой настройки и улучшенной надежности.", "step1": { "title": "Обнаружена устаревшая конфигурация Webhook", "description": "Система обнаружила, что вы используете устаревшую конфигурацию Webhook. Новая система предлагает более мощные функции, рекомендуем выполнить миграцию." }, "step2": { "title": "Выберите тип платформы", "description": "Следующие URL-адреса Webhook не удалось автоматически идентифицировать. Пожалуйста, выберите платформу вручную:" }, "platformOptions": { "wechat": "WeChat Work", "feishu": "Feishu", "dingtalk": "DingTalk", "telegram": "Telegram", "custom": "Пользовательский" }, "migrateButton": "Начать миграцию", "skipButton": "Позже", "nextButton": "Далее", "goToSettingsButton": "Перейти к настройкам", "migrating": "Миграция...", "success": "Миграция завершена", "successDescription": "Ваша конфигурация Webhook успешно перенесена в новую систему.", "error": "Ошибка миграции", "errorGeneric": "Не удалось выполнить миграцию. Пожалуйста, попробуйте позже.", "detectedWebhooks": "Обнаруженные Webhook", "notificationTypes": { "circuit_breaker": "Оповещение о размыкателе цепи", "daily_leaderboard": "Ежедневный рейтинг", "cost_alert": "Оповещение о стоимости" }, "urlLabel": "URL Webhook", "platformLabel": "Тип платформы", "autoDetected": "Автоматически определено", "selectPlatform": "Выберите платформу", "successStats": "Создано {targets} целей, {bindings} привязок" } }