const ruRU = { sidebar: { home: 'Главная', extensions: 'Расширения', installedPlugins: 'Установленные плагины', pluginMarket: 'Маркетплейс', mcpServers: 'MCP-серверы', addExtension: 'Добавить расширение', pluginPages: 'Страницы плагинов', pluginPagesTooltip: 'Визуальные страницы, предоставляемые установленными плагинами', quickStart: 'Быстрый старт', scrollToBottom: 'Прокрутить вниз', editionCommunity: 'Сообщество', editionCloud: 'Облако', }, common: { login: 'Войти', logout: 'Выйти', accountOptions: 'Настройки', account: 'Аккаунт', integration: 'Интеграция', email: 'Электронная почта', password: 'Пароль', welcome: 'С возвращением в LangBot 👋', continueToLogin: 'Войдите, чтобы продолжить', loginSuccess: 'Вход выполнен успешно', loginFailed: 'Ошибка входа, проверьте адрес электронной почты и пароль', loginLoadError: 'Не удалось подключиться к серверу', loginLoadErrorDesc: 'Не удалось подключиться к серверу LangBot. Убедитесь, что сервис запущен, и повторите попытку.', retry: 'Повторить', enterEmail: 'Введите адрес электронной почты', enterPassword: 'Введите пароль', invalidEmail: 'Пожалуйста, введите корректный адрес электронной почты', emptyPassword: 'Пожалуйста, введите пароль', language: 'Язык', helpDocs: 'Помощь', featureRequest: 'Запрос функции', starOnGitHub: 'Поставить звезду на GitHub', create: 'Создать', edit: 'Редактировать', delete: 'Удалить', add: 'Добавить', select: 'Выбрать', skill: 'Навык', cancel: 'Отмена', submit: 'Отправить', error: 'Ошибка', success: 'Успешно', save: 'Сохранить', saving: 'Сохранение...', recommend: 'Рекомендуется', start: 'Начать', confirm: 'Подтвердить', confirmDelete: 'Подтвердить удаление', deleteConfirmation: 'Вы уверены, что хотите удалить это?', selectOption: 'Выберите вариант', selectPreset: 'Выберите шаблон', required: 'Обязательно', enable: 'Включить', name: 'Название', description: 'Описание', icon: 'Иконка', close: 'Закрыть', deleteSuccess: 'Успешно удалено', deleteError: 'Ошибка удаления: ', addRound: 'Добавить раунд', copy: 'Копировать', copySuccess: 'Скопировано', copyFailed: 'Ошибка копирования', test: 'Тест', forgotPassword: 'Забыли пароль?', agreementNotice: 'Продолжая, вы соглашаетесь с нашей', privacyPolicy: 'Политикой конфиденциальности', and: 'и', dataCollectionPolicy: 'Политикой сбора данных', dataCollectionPolicyUrl: 'https://link.langbot.app/en/docs/data-policy', loading: 'Загрузка...', fieldRequired: 'Это поле обязательно для заполнения', or: 'или', loginWithSpace: 'Войти через Space', spaceLoginRecommended: 'Рекомендуется: Используйте официальные стабильные API моделей и облачные сервисы', loginLocal: 'Войти с локальной учётной записью', loginWithPassword: 'Войти с паролем', spaceLoginTitle: 'Войти через Space', spaceLoginDescription: 'Отсканируйте QR-код или перейдите по ссылке ниже для авторизации', spaceLoginUserCode: 'Ваш код', spaceLoginExpires: 'Код истекает через {{seconds}} секунд', spaceLoginWaiting: 'Ожидание авторизации...', spaceLoginSuccess: 'Авторизация успешна', spaceLoginFailed: 'Ошибка входа через Space', spaceLoginExpired: 'Код авторизации истёк, попробуйте снова', spaceLoginCancel: 'Отмена', spaceLoginVisitLink: 'Перейти по ссылке', spaceLoginProcessing: 'Вход через Space', spaceLoginProcessingDescription: 'Пожалуйста, подождите, пока мы завершим вход...', spaceLoginSuccessDescription: 'Перенаправление в LangBot...', spaceLoginError: 'Ошибка входа', spaceLoginNoCode: 'Отсутствует код авторизации', backToLogin: 'Вернуться к входу', backToHome: 'На главную', spaceAccountCannotChangePassword: 'Для аккаунтов Space невозможно изменить пароль здесь', theme: 'Тема', changePassword: 'Изменить пароль', currentPassword: 'Текущий пароль', newPassword: 'Новый пароль', confirmNewPassword: 'Подтвердите новый пароль', enterCurrentPassword: 'Введите текущий пароль', enterNewPassword: 'Введите новый пароль', enterConfirmPassword: 'Подтвердите новый пароль', currentPasswordRequired: 'Текущий пароль обязателен', newPasswordRequired: 'Новый пароль обязателен', confirmPasswordRequired: 'Подтверждение пароля обязательно', passwordsDoNotMatch: 'Пароли не совпадают', changePasswordSuccess: 'Пароль успешно изменён', changePasswordFailed: 'Не удалось изменить пароль, проверьте текущий пароль', apiIntegration: 'API-интеграция', apiKeys: 'API-ключи', manageApiIntegration: 'Управление API-интеграцией', manageApiKeys: 'Управление API-ключами', createApiKey: 'Создать API-ключ', apiKeyName: 'Имя API-ключа', apiKeyDescription: 'Описание API-ключа', apiKeyValue: 'Значение API-ключа', apiKeyCreated: 'API-ключ успешно создан', apiKeyDeleted: 'API-ключ успешно удалён', apiKeyDeleteConfirm: 'Вы уверены, что хотите удалить этот API-ключ?', apiKeyNameRequired: 'Имя API-ключа обязательно', copyApiKey: 'Копировать API-ключ', apiKeyCopied: 'API-ключ скопирован в буфер обмена', noApiKeys: 'API-ключи не настроены', apiKeyHint: 'API-ключи позволяют внешним системам получать доступ к API сервисов LangBot', webhooks: 'Вебхуки', createWebhook: 'Создать вебхук', webhookName: 'Имя вебхука', webhookUrl: 'URL вебхука', webhookDescription: 'Описание вебхука', webhookEnabled: 'Включён', webhookCreated: 'Вебхук успешно создан', webhookDeleted: 'Вебхук успешно удалён', webhookDeleteConfirm: 'Вы уверены, что хотите удалить этот вебхук?', webhookNameRequired: 'Имя вебхука обязательно', webhookUrlRequired: 'URL вебхука обязателен', noWebhooks: 'Вебхуки не настроены', webhookHint: 'Вебхуки позволяют LangBot отправлять события личных и групповых сообщений во внешние системы', actions: 'Действия', apiKeyCreatedMessage: 'Пожалуйста, скопируйте этот API-ключ. Если кнопка не работает, скопируйте вручную.', none: 'Нет', more: 'Ещё ({{count}})', less: 'Свернуть', noItems: 'Нет элементов', termsOfService: 'Условия обслуживания', }, notFound: { title: 'Страница не найдена', description: 'Запрашиваемая страница не существует.', back: 'Назад', home: 'Главная', help: 'Помощь', }, models: { title: 'Модели', description: 'Настройка и управление моделями, используемыми в конвейерах', createModel: 'Создать модель', editModel: 'Редактировать модель', getModelListError: 'Не удалось получить список моделей: ', modelName: 'Название модели', modelProvider: 'Провайдер модели', modelBaseURL: 'Базовый URL', modelAbilities: 'Возможности модели', saveSuccess: 'Успешно сохранено', saveError: 'Ошибка сохранения: ', createSuccess: 'Успешно создано', createError: 'Ошибка создания: ', deleteSuccess: 'Успешно удалено', deleteError: 'Ошибка удаления: ', deleteConfirmation: 'Вы уверены, что хотите удалить эту модель?', modelNameRequired: 'Название модели не может быть пустым', modelProviderRequired: 'Провайдер модели не может быть пустым', requestURLRequired: 'URL запроса не может быть пустым', apiKeyRequired: 'API-ключ не может быть пустым', keyNameRequired: 'Имя ключа не может быть пустым', mustBeValidNumber: 'Должно быть корректным числом', mustBeTrueOrFalse: 'Должно быть true или false', requestURL: 'URL запроса', scanURL: 'URL сканирования моделей', scanURLPlaceholder: 'Оставьте пустым для использования URL запроса + /models', scanURLDescription: 'Укажите фактический эндпоинт списка моделей, если сканирование моделей использует другой адрес, нежели вызов модели.', apiKey: 'API-ключ', abilities: 'Возможности', selectModelAbilities: 'Выберите возможности модели', visionAbility: 'Распознавание изображений', functionCallAbility: 'Вызов функций', extraParameters: 'Дополнительные параметры', addParameter: 'Добавить параметр', keyName: 'Имя ключа', type: 'Тип', value: 'Значение', string: 'Строка', number: 'Число', boolean: 'Логический', object: 'Объект', objectJsonPlaceholder: '{ "type": "disabled" }', invalidJsonObject: 'Значение должно быть допустимым объектом JSON', selectModelProvider: 'Выберите провайдера модели', modelProviderDescription: 'Пожалуйста, введите название модели, предоставленное провайдером', modelManufacturer: 'Производитель модели', aggregationPlatform: 'Платформа агрегации', selfDeployed: 'Самостоятельное развёртывание', builtin: 'Встроенный', selectModel: 'Выберите модель', testSuccess: 'Тест успешен', testError: 'Тест не пройден, проверьте конфигурацию модели', llmModels: 'LLM-модели', localProvider: 'Локальный', localProviderDescription: 'Модели, настроенные и управляемые локально', spaceProviderDescription: 'Модели, синхронизированные из вашего аккаунта Space', spaceDisabledForLocalAccount: 'Войдите через Space, чтобы использовать облачные модели', syncModels: 'Синхронизировать', syncSuccess: 'Синхронизация завершена: {{created}} создано, {{updated}} обновлено', syncError: 'Ошибка синхронизации: ', spaceModelReadOnly: 'Модели Space доступны только для чтения', noSpaceModels: 'Нет моделей Space. Нажмите «Синхронизировать», чтобы загрузить модели из Space.', noLocalModels: 'Нет локальных моделей. Нажмите «Создать», чтобы добавить модель.', providerCount: '{{count}} провайдеров', addModel: 'Добавить модель', manualAdd: 'Вручную', scanAdd: 'Сканировать', scanModels: 'Сканировать модели', scanModelsHint: 'Прочитайте доступные модели от текущего провайдера, затем выберите, какие из них добавить.', scannedModels: 'Отсканированные модели', scanDebug: 'Информация об отладке', searchScannedModels: 'Поиск отсканированных моделей', noScannedModels: 'Пока нет результатов. Нажмите кнопку выше для сканирования.', noScannedModelsMatch: 'Нет подходящих моделей', addSelectedModels: 'Добавить выбранные', addSelectedModelsSuccess: 'Добавлено моделей: {{count}}', selectAll: 'Выбрать все', alreadyAdded: 'Уже добавлено', addLLMModel: 'Добавить LLM-модель', addEmbeddingModel: 'Добавить Embedding-модель', provider: 'Провайдер', existingProvider: 'Существующий провайдер', newProvider: 'Новый провайдер', selectProvider: 'Выберите провайдера', requester: 'Тип провайдера', selectRequester: 'Выберите тип провайдера', langbotModelsDescription: 'Облачные модели на базе LangBot Space', credits: 'Кредиты', loginWithSpace: 'Войти через Space', loginToUseModels: 'Войдите через Space, чтобы использовать облачные модели', noModels: 'Модели не настроены', langbotModels: 'Модели LangBot', spaceTrialTooltip: 'Доступны бесплатные пробные кредиты! Войдите через Space, чтобы получить доступ к облачным моделям без настройки.', unlockModels: 'Войдите для использования', editProvider: 'Редактировать провайдера', addProvider: 'Добавить провайдера', addProviderHint: 'Добавьте провайдеров для использования моделей из других источников', addProviderHintSimple: 'Добавьте провайдеров для использования моделей', noProviders: 'Провайдеров пока нет', providerName: 'Имя провайдера', providerNameRequired: 'Имя провайдера обязательно', requesterRequired: 'Тип провайдера обязателен', providerSaved: 'Провайдер сохранён', providerCreated: 'Провайдер создан', providerSaveError: 'Ошибка сохранения провайдера: ', providerDeleted: 'Провайдер удалён', providerDeleteError: 'Ошибка удаления провайдера: ', deleteProviderConfirmation: 'Вы уверены, что хотите удалить этого провайдера?', loadError: 'Не удалось загрузить данные', chat: 'Чат', embedding: 'Embedding', rerank: 'Переранжирование', rerankUrlTooltip: 'Полный URL для эндпоинта переранжирования (напр.: https://dashscope.aliyuncs.com/compatible-api/v1/reranks)', rerankPathTooltip: 'Путь, добавляемый к базовому URL (по умолчанию: rerank, некоторые сервисы используют reranks)', modelsCount: '{{count}} модель(ей)', expandModels: 'Развернуть', collapseModels: 'Свернуть', fallback: { primary: 'Основная модель', fallbackList: 'Резервные модели', addFallback: 'Добавить резервную модель', }, }, bots: { title: 'Боты', description: 'Создание и управление ботами — точками входа LangBot для подключения к различным платформам', createBot: 'Создать бота', selectFromSidebar: 'Выберите бота из боковой панели', editBot: 'Редактировать бота', getBotListError: 'Не удалось получить список ботов: ', botName: 'Имя бота', botDescription: 'Описание бота', botNameRequired: 'Имя бота не может быть пустым', botDescriptionRequired: 'Описание бота не может быть пустым', adapterRequired: 'Адаптер не может быть пустым', defaultDescription: 'Бот', getBotConfigError: 'Не удалось получить конфигурацию бота: ', saveSuccess: 'Успешно сохранено', saveError: 'Ошибка сохранения: ', createSuccess: 'Успешно создано. Пожалуйста, включите или измените привязанный конвейер', createError: 'Ошибка создания: ', deleteSuccess: 'Успешно удалено', deleteError: 'Ошибка удаления: ', deleteConfirmation: 'Вы уверены, что хотите удалить этого бота?', platformAdapter: 'Выбор платформы/адаптера', selectAdapter: 'Выберите адаптер', adapterConfig: 'Настройка адаптера', viewAdapterDocs: 'Документация', bindPipeline: 'Привязать конвейер', selectPipeline: 'Выберите конвейер', selectBot: 'Выберите бота', botLogTitle: 'Журнал бота', enableAutoRefresh: 'Автообновление', session: 'Сессия', yesterday: 'Вчера', earlier: 'Ранее', dateFormat: '{{day}}.{{month}}', setBotEnableError: 'Не удалось изменить статус бота', log: 'Журнал', configuration: 'Настройки', logs: 'Журналы', basicInfo: 'Основная информация', basicInfoDescription: 'Задайте имя и описание бота', routingConnection: 'Маршрутизация и подключение', routingConnectionDescription: 'Привяжите конвейер, обрабатывающий сообщения для этого бота', routingRules: 'Правила условной маршрутизации', routingRulesDescription: 'Правила проверяются по порядку; первое совпадение направляет в соответствующий конвейер. При отсутствии совпадений используется конвейер по умолчанию.', addRoutingRule: 'Добавить правило', ruleTypeLauncherType: 'Тип сессии', ruleTypeLauncherId: 'ID сессии', ruleTypeMessageContent: 'Содержимое сообщения', operatorEq: 'Равно', operatorNeq: 'Не равно', operatorContains: 'Содержит', operatorNotContains: 'Не содержит', operatorStartsWith: 'Начинается с', operatorRegex: 'Регулярное выражение', operatorHas: 'Содержит', operatorNotHas: 'Не содержит', ruleTypeMessageHasElement: 'Элемент сообщения', ruleValueElementPlaceholder: 'Выберите тип элемента', elementImage: 'Изображение', elementVoice: 'Голос', elementFile: 'Файл', elementForward: 'Пересланное', elementFace: 'Эмодзи', elementAt: '@Упоминание', elementAtAll: '@Все', elementQuote: 'Цитата', ruleValuePlaceholder: 'Значение для сопоставления', ruleValueLauncherIdPlaceholder: 'ID группы или пользователя', ruleValueMessagePlaceholder: 'Текст сообщения', ruleValuePrefixPlaceholder: 'Напр., !draw', ruleValueRegexpPlaceholder: 'Напр., ^/help', pipelineDiscard: 'Отклонить сообщение', sessionTypePerson: 'Личный чат', sessionTypeGroup: 'Групповой чат', adapterConfigDescription: 'Настройте выбранный адаптер платформы', dangerZone: 'Опасная зона', dangerZoneDescription: 'Необратимые и деструктивные действия', deleteBotAction: 'Удалить этого бота', deleteBotHint: 'После удаления все связанные настройки будут безвозвратно удалены.', webhookUrl: 'URL обратного вызова Webhook', webhookUrlCopied: 'URL Webhook скопирован', webhookUrlHint: 'Нажмите на поле ввода, чтобы выделить всё, затем Ctrl+C (Mac: Cmd+C) для копирования, или нажмите кнопку', webhookUrlHintEither: 'Используйте любой из двух URL выше в настройках вашей платформы', webhookSaasHint: 'Для Webhook требуется публично доступный домен. LangBot Cloud предоставляет готовую публичную конечную точку для вашего бота.', webhookSaasLink: 'Подробнее о LangBot Cloud', adapterCategory: { popular: 'Популярные', china: 'Китай', global: 'Глобальные', protocol: 'Протокол', }, logLevel: 'Уровень журнала', allLevels: 'Все уровни', selectLevel: 'Выберите уровень', levelsSelected: 'уровней выбрано', viewDetailedLogs: 'Подробные журналы', viewDetails: 'Подробности', collapse: 'Свернуть', imagesAttached: 'изображений прикреплено', noLogs: 'Журналов пока нет', sessionMonitor: { title: 'Сессии', sessions: 'Сессии', noSessions: 'Сессии не найдены', selectSession: 'Выберите сессию для просмотра сообщений', noMessages: 'В этой сессии нет сообщений', messages: 'сообщений', messageCount: '{{count}} сообщений', loading: 'Загрузка...', loadingSessions: 'Загрузка сессий...', loadingMessages: 'Загрузка сообщений...', user: 'Пользователь', variables: 'Переменные', platform: 'Платформа', lastActive: 'Последняя активность', refresh: 'Обновить', active: 'Активна', inactive: 'Неактивна', discarded: 'Отклонена', userMessage: 'Пользователь', botMessage: 'Ассистент', }, }, plugins: { title: 'Расширения', description: 'Установка и настройка плагинов для расширения функциональности. Выберите их в настройках конвейера', createPlugin: 'Создать плагин', editPlugin: 'Редактировать плагин', installed: 'Установленные', marketplace: 'Маркетплейс', arrange: 'Сортировка плагинов', install: 'Установить', installPlugin: 'Установить плагин', newPlugin: 'Новый плагин', onlySupportGithub: 'В настоящее время поддерживается установка только с GitHub', enterGithubLink: 'Введите ссылку на GitHub плагина', installing: 'Установка плагина...', installSuccess: 'Плагин успешно установлен', installFailed: 'Ошибка установки плагина:', searchPlugin: 'Поиск плагинов', sortBy: 'Сортировать по', mostStars: 'Больше всего звёзд', recentlyAdded: 'Недавно добавленные', recentlyUpdated: 'Недавно обновлённые', noMatchingPlugins: 'Подходящие плагины не найдены', loading: 'Загрузка...', getPluginListError: 'Не удалось получить список плагинов:', noPluginInstalled: 'Плагины не установлены', noExtensionInstalled: 'Расширения не установлены', loadingExtensions: 'Загрузка расширений...', groupByType: 'Группировать по формату', pluginConfig: 'Настройка плагина', pluginSort: 'Порядок плагинов', pluginSortDescription: 'Порядок плагинов влияет на очерёдность обработки одного события. Перетащите карточку плагина для сортировки', pluginSortSuccess: 'Порядок плагинов обновлён', pluginSortError: 'Ошибка сортировки плагинов: ', pluginNoConfig: 'У плагина нет параметров настройки.', systemDisabled: 'Система плагинов отключена', systemDisabledDesc: 'Система плагинов не включена. Измените конфигурацию согласно документации', connectionError: 'Ошибка подключения системы плагинов', connectionErrorDesc: 'Проверьте конфигурацию системы плагинов или обратитесь к администратору.', errorDetails: 'Подробности ошибки', loadingStatus: 'Проверка статуса системы плагинов...', failedToGetStatus: 'Не удалось получить статус системы плагинов', pluginSystemNotReady: 'Система плагинов не готова, невозможно выполнить эту операцию', debugInfo: 'Отладочная информация', debugInfoTitle: 'Отладочная информация плагина', debugUrl: 'URL для отладки', debugKey: 'Ключ отладки', noDebugKey: '(Не задан)', debugKeyDisabled: 'Ключ отладки не задан, аутентификация при отладке плагина не требуется', boxStatusTitle: 'Box Runtime', boxStatus: 'Статус', boxConnected: 'Подключено', boxUnavailable: 'Недоступно', boxBackend: 'Бэкенд', boxProfile: 'Профиль', boxSandboxes: 'Песочницы', boxErrors: 'Ошибки', boxSessionImage: 'Образ', boxSessionBackend: 'Бэкенд', boxSessionResources: 'Ресурсы', boxSessionNetwork: 'Сеть', boxStatusLoadFailed: 'Не удалось загрузить статус Box', failedToGetDebugInfo: 'Не удалось получить отладочную информацию', copiedToClipboard: 'Скопировано в буфер обмена', deleting: 'Удаление...', deletePlugin: 'Удалить плагин', cancel: 'Отмена', saveConfig: 'Сохранить настройки', saving: 'Сохранение...', confirmDeletePlugin: 'Вы уверены, что хотите удалить плагин ({{author}}/{{name}})?', deleteDataCheckbox: 'Также удалить конфигурацию плагина и постоянное хранилище', confirmDelete: 'Подтвердить удаление', deleteError: 'Ошибка удаления: ', close: 'Закрыть', deleteConfirm: 'Подтверждение удаления', deleteSuccess: 'Удаление успешно', dangerZone: 'Опасная зона', dangerZoneDescription: 'Необратимые и разрушительные действия', modifyFailed: 'Ошибка изменения: ', componentName: { Tool: 'Инструмент', EventListener: 'Обработчик событий', Command: 'Команда', KnowledgeEngine: 'Движок знаний', Parser: 'Парсер', Page: 'Страница', }, uploadLocal: 'Загрузить локально', debugging: 'Отладка', uploadLocalPlugin: 'Загрузить локальный плагин', localPreview: { title: 'Предпросмотр локального пакета плагина', unpacking: 'Распаковка пакета для предпросмотра...', unpackComplete: 'Предпросмотр пакета готов', failed: 'Не удалось выполнить предпросмотр пакета', pluginInfo: 'Информация о плагине', packageInfo: 'Информация о пакете', name: 'Название', author: 'Автор', version: 'Версия', fileCount: 'Файлы', dependencies: 'Зависимости', components: 'Компоненты', ready: 'Пакет плагина распакован. Подтвердите, чтобы начать установку.', }, dragToUpload: 'Перетащите файл плагина сюда для загрузки', unsupportedFileType: 'Неподдерживаемый тип файла, поддерживаются только файлы .lbpkg и .zip', uploadingPlugin: 'Загрузка плагина...', uploadSuccess: 'Загрузка успешна', uploadFailed: 'Ошибка загрузки', selectFileToUpload: 'Выберите файл плагина для загрузки', askConfirm: 'Вы уверены, что хотите установить плагин "{{name}}" ({{version}})?', askConfirmNoVersion: 'Вы уверены, что хотите установить плагин "{{name}}"?', fromGithub: 'С GitHub', fromLocal: 'Из локального файла', fromMarketplace: 'Из маркетплейса', componentsList: 'Компоненты: ', noComponents: 'Нет компонентов', delete: 'Удалить плагин', update: 'Обновить плагин', new: 'Новый', updateConfirm: 'Подтверждение обновления', confirmUpdatePlugin: 'Вы уверены, что хотите обновить плагин ({{author}}/{{name}})?', confirmUpdate: 'Подтвердить обновление', updating: 'Обновление...', updateSuccess: 'Плагин успешно обновлён', updateError: 'Ошибка обновления: ', saveConfigSuccessNormal: 'Конфигурация успешно сохранена', saveConfigError: 'Ошибка сохранения конфигурации: ', config: 'Настройки', readme: 'Документация', viewSource: 'Исходный код', loadingReadme: 'Загрузка документации...', noReadme: 'Этот плагин не предоставляет документацию README', fileUpload: { tooLarge: 'Размер файла превышает лимит 10 МБ', success: 'Файл успешно загружен', failed: 'Ошибка загрузки файла', uploading: 'Загрузка...', chooseFile: 'Выбрать файл', addFile: 'Добавить файл', }, installFromGithub: 'С GitHub', enterRepoUrl: 'Введите URL репозитория GitHub', repoUrlPlaceholder: 'Напр., https://github.com/owner/repo', fetchingReleases: 'Загрузка релизов...', selectRelease: 'Выберите релиз', noReleasesFound: 'Релизы не найдены', fetchReleasesError: 'Не удалось загрузить релизы: ', selectAsset: 'Выберите файл для установки', noAssetsFound: 'В этом релизе нет файлов .lbpkg', fetchAssetsError: 'Не удалось загрузить файлы: ', backToReleases: 'Назад к релизам', backToRepoUrl: 'Назад к URL репозитория', backToAssets: 'Назад к файлам', releaseTag: 'Тег: {{tag}}', releaseName: 'Название: {{name}}', publishedAt: 'Опубликовано: {{date}}', prerelease: 'Предварительный релиз', assetSize: 'Размер: {{size}}', confirmInstall: 'Подтвердить установку', installFromGithubDesc: 'Установить плагин из GitHub Release', goToMarketplace: 'Перейти в маркетплейс', installProgress: { title: 'Установка {{name}}', titleGeneric: 'Установка плагина', overallProgress: 'Общий прогресс', downloading: 'Загрузка плагина', installingDeps: 'Установка зависимостей', initializing: 'Инициализация настроек', launching: 'Запуск плагина', completed: 'Завершено', failed: 'Ошибка', downloadSize: 'Размер пакета: {{size}}', depsInfo: '{{count}} зависимостей для установки', depsProgress: '{{installed}}/{{total}} установлено · {{remaining}} осталось', installComplete: 'Плагин успешно установлен', dismiss: 'Закрыть', background: 'В фоновом режиме', taskQueue: 'Задачи установки', clearCompleted: 'Очистить завершённые', noTasks: 'Нет задач установки', titlePlugin: 'Установка плагина {{name}}', titleMCP: 'Установка сервера MCP {{name}}', titleSkill: 'Установка навыка {{name}}', installCompletePlugin: 'Плагин успешно установлен', installCompleteMCP: 'Сервер MCP успешно установлен', installCompleteSkill: 'Навык успешно установлен', }, uploadPluginOnly: 'Поддерживаются только пакеты плагинов .lbpkg', }, market: { searchPlaceholder: 'Поиск плагинов...', searchResults: 'Найдено {{count}} плагинов', totalPlugins: 'Всего {{count}} плагинов', noPlugins: 'Нет доступных плагинов', noResults: 'Подходящие плагины не найдены', loadingMore: 'Загрузка ещё...', loading: 'Загрузка...', allLoaded: 'Все плагины отображены', install: 'Установить', installConfirm: 'Вы уверены, что хотите установить плагин "{{name}}" ({{version}})?', downloadComplete: 'Плагин "{{name}}" загружен', installFailed: 'Ошибка установки, попробуйте позже', loadFailed: 'Не удалось получить список плагинов, попробуйте позже', noDescription: 'Описание отсутствует', notFound: 'Информация о плагине не найдена', sortBy: 'Сортировать по', sort: { recentlyAdded: 'Недавно добавленные', recentlyUpdated: 'Недавно обновлённые', mostDownloads: 'Больше всего загрузок', leastDownloads: 'Меньше всего загрузок', }, downloads: 'загрузок', download: 'Скачать', repository: 'Репозиторий', downloadFailed: 'Ошибка загрузки', noReadme: 'Этот плагин не предоставляет документацию README', description: 'Описание', tagLabel: 'Теги', submissionTitle: 'У вас есть плагин на рассмотрении: {{name}}', submissionPending: 'Ваш плагин находится на рассмотрении: {{name}}', submissionApproved: 'Ваш плагин одобрен: {{name}}', submissionRejected: 'Ваш плагин отклонён: {{name}}', clickToRevoke: 'Отозвать', revokeSuccess: 'Успешно отозвано', revokeFailed: 'Ошибка отзыва', submissionDetails: 'Детали заявки на плагин', markAsRead: 'Отметить как прочитанное', markAsReadSuccess: 'Отмечено как прочитанное', markAsReadFailed: 'Не удалось отметить как прочитанное', filterByComponent: 'Компонент плагина', filterByComponentHint: 'Типы возможностей, которые предоставляет плагин — инструмент (Tool), команда (Command), обработчик событий (EventListener) и т. д., — расширяющие функции LangBot. Фильтруйте по компоненту, чтобы видеть только плагины с нужной возможностью.', allComponents: 'Все компоненты', componentName: { Tool: 'Инструмент', EventListener: 'Обработчик событий', Command: 'Команда', KnowledgeEngine: 'Движок знаний', Parser: 'Парсер', Page: 'Страница', }, filterByType: 'Тип', allTypes: 'Все типы', typePlugin: 'Плагин', typeMCP: 'MCP', typeSkill: 'Навык', requestPlugin: 'Запросить плагин', viewDetails: 'Подробнее', deprecated: 'Устаревший', deprecatedTooltip: 'Пожалуйста, установите соответствующий плагин движка знаний.', filters: { allFormats: 'Все типы', more: 'Ещё', advancedTitle: 'Расширенные фильтры', advancedDescription: 'Фильтр по типу расширения', technicalType: 'Технический тип', }, allExtensions: 'Все расширения', tags: { filterByTags: 'Фильтр по тегам', selected: 'выбрано', selectTags: 'Выберите теги', clearAll: 'Очистить всё', noTags: 'Нет доступных тегов', }, installCard: 'Установить {{name}}', }, mcp: { title: 'MCP', createServer: 'Добавить MCP-сервер', addMCPServer: 'Добавить MCP-сервер', editServer: 'Редактировать MCP-сервер', deleteServer: 'Удалить MCP-сервер', confirmDeleteServer: 'Вы уверены, что хотите удалить этот MCP-сервер?', confirmDeleteTitle: 'Удаление MCP-сервера', getServerListError: 'Не удалось получить список MCP-серверов: ', serverName: 'Имя сервера', serverMode: 'Режим подключения', selectMode: 'Выберите режим', stdio: 'Режим Stdio', sse: 'Режим SSE', http: 'Режим HTTP', noServerInstalled: 'MCP-серверы не настроены', serverNameRequired: 'Имя сервера не может быть пустым', commandRequired: 'Команда не может быть пустой', urlRequired: 'URL не может быть пустым', timeoutMustBePositive: 'Таймаут должен быть положительным числом', command: 'Команда', args: 'Аргументы', env: 'Переменные окружения', url: 'URL', headers: 'Заголовки', timeout: 'Таймаут', addArgument: 'Добавить аргумент', addEnvVar: 'Добавить переменную окружения', addHeader: 'Добавить заголовок', keyName: 'Имя ключа', value: 'Значение', testing: 'Тестирование...', connecting: 'Подключение...', testSuccess: 'Тест успешен', testFailed: 'Тест не пройден: ', testError: 'Ошибка тестирования', refreshSuccess: 'Обновление успешно', refreshFailed: 'Ошибка обновления: ', connectionSuccess: 'Подключение успешно', connectionFailed: 'Не удалось подключиться, проверьте URL', connectionFailedStatus: 'Ошибка подключения', boxDisabledStdioRefused: 'MCP-серверы в режиме stdio требуют песочницу Box, которая отключена в конфигурации (box.enabled = false).', boxUnavailableStdioRefused: 'MCP-серверы в режиме stdio требуют песочницу Box, которая сейчас недоступна.', boxStdioRefusedSuggestion: 'Включите Box (box.enabled = true) и убедитесь, что среда работает, либо переключите этот сервер в режим http/sse.', boxRequired: 'требуется Box', stdioBlockedByBoxToast: 'Сохранить MCP в режиме stdio нельзя: песочница Box отключена или недоступна. Включите Box либо выберите режим http/sse.', toolsFound: 'инструментов', unknownError: 'Неизвестная ошибка', noToolsFound: 'Инструменты не найдены', parseResultFailed: 'Не удалось разобрать результат теста', noResultReturned: 'Тест не вернул результат', getTaskFailed: 'Не удалось получить статус задачи', noTaskId: 'Не удалось получить ID задачи', deleteSuccess: 'Успешно удалено', deleteFailed: 'Ошибка удаления: ', deleteError: 'Ошибка удаления: ', saveSuccess: 'Успешно сохранено', saveError: 'Ошибка сохранения: ', createSuccess: 'Успешно создано', createFailed: 'Ошибка создания: ', createError: 'Ошибка создания: ', loadFailed: 'Ошибка загрузки', modifyFailed: 'Ошибка изменения: ', toolCount: 'Инструменты: {{count}}', parameterCount: 'Параметры: {{count}}', noParameters: 'Нет параметров', statusConnected: 'Подключён', statusDisconnected: 'Отключён', statusError: 'Ошибка подключения', statusDisabled: 'Отключён', loading: 'Загрузка...', starCount: 'Звёзды: {{count}}', install: 'Установить', installFromGithub: 'Установить MCP-сервер с GitHub', add: 'Добавить', name: 'Название', nameRequired: 'Название не может быть пустым', sseTimeout: 'Таймаут SSE', sseTimeoutDescription: 'Таймаут для установления SSE-соединения', extraParametersDescription: 'Дополнительные параметры для настройки поведения MCP-сервера', timeoutMustBeNumber: 'Таймаут должен быть числом', timeoutNonNegative: 'Таймаут не может быть отрицательным', sseTimeoutMustBeNumber: 'Таймаут SSE должен быть числом', sseTimeoutNonNegative: 'Таймаут SSE не может быть отрицательным', updateSuccess: 'Успешно обновлено', updateFailed: 'Ошибка обновления: ', selectFromSidebar: 'Выберите MCP-сервер из боковой панели', dangerZone: 'Опасная зона', dangerZoneDescription: 'Необратимые и деструктивные действия для этого MCP-сервера.', deleteMCPAction: 'Удалить этот MCP-сервер', deleteMCPHint: 'После удаления конфигурация этого MCP-сервера не может быть восстановлена.', }, pipelines: { title: 'Конвейеры', description: 'Конвейеры определяют поток обработки событий сообщений и привязываются к ботам', createPipeline: 'Создать конвейер', selectFromSidebar: 'Выберите конвейер из боковой панели', editPipeline: 'Редактировать конвейер', chat: 'Чат', configuration: 'Настройки', debugChat: 'Отладочный чат', getPipelineListError: 'Не удалось получить список конвейеров: ', daysAgo: 'дней назад', today: 'Сегодня', updateTime: 'Обновлено ', defaultBadge: 'По умолчанию', sortBy: 'Сортировать по', newestCreated: 'Сначала новые', earliestCreated: 'Сначала старые', recentlyEdited: 'Недавно изменённые', earliestEdited: 'Давно изменённые', basicInfo: 'Основная информация', basicInfoDescription: 'Задайте название, иконку и описание конвейера', aiCapabilities: 'ИИ', triggerConditions: 'Триггер', safetyControls: 'Безопасность', outputProcessing: 'Вывод', nameRequired: 'Название не может быть пустым', descriptionRequired: 'Описание не может быть пустым', createSuccess: 'Успешно создано. Отредактируйте параметры конвейера', createError: 'Ошибка создания: ', saveSuccess: 'Успешно сохранено', saveError: 'Ошибка сохранения: ', copySuffix: ' Копия', deleteConfirmation: 'Вы уверены, что хотите удалить этот конвейер? Боты, привязанные к нему, перестанут работать.', defaultPipelineCannotDelete: 'Конвейер по умолчанию нельзя удалить', deleteSuccess: 'Успешно удалено', deleteError: 'Ошибка удаления: ', copyConfirmTitle: 'Подтверждение копирования', copyConfirmation: 'Вы уверены, что хотите скопировать этот конвейер? Будет создан новый конвейер со всеми настройками.', unsavedChanges: 'У вас есть несохранённые изменения', dangerZone: 'Опасная зона', dangerZoneDescription: 'Необратимые и деструктивные действия', deletePipelineAction: 'Удалить этот конвейер', deletePipelineHint: 'После удаления боты, привязанные к этому конвейеру, перестанут работать.', copyPipelineAction: 'Копировать этот конвейер', copyPipelineHint: 'Создать новый конвейер с дублированием всех настроек.', extensions: { title: 'Расширения', loadError: 'Не удалось загрузить плагины', saveSuccess: 'Успешно сохранено', saveError: 'Ошибка сохранения', noPluginsAvailable: 'Нет доступных плагинов', disabled: 'Отключено', noPluginsSelected: 'Плагины не выбраны', addPlugin: 'Добавить плагин', selectPlugins: 'Выберите плагины', pluginsTitle: 'Плагины', mcpServersTitle: 'MCP-серверы', noMCPServersSelected: 'MCP-серверы не выбраны', addMCPServer: 'Добавить MCP-сервер', selectMCPServers: 'Выберите MCP-серверы', toolCount: '{{count}} инструментов', noPluginsInstalled: 'Нет установленных плагинов', noMCPServersConfigured: 'Нет настроенных MCP-серверов', selectAll: 'Выбрать все', enableAllPlugins: 'Включить все плагины', enableAllMCPServers: 'Включить все MCP-серверы', allPluginsEnabled: 'Все плагины включены', allMCPServersEnabled: 'Все MCP-серверы включены', enableAllSkills: 'Включить все навыки', allSkillsEnabled: 'Все навыки включены', skillsTitle: 'Навыки', noSkillsSelected: 'Навыки не выбраны', addSkill: 'Добавить навык', selectSkills: 'Выбрать навыки', noSkillsAvailable: 'Нет доступных навыков', }, debugDialog: { title: 'Чат конвейера', selectPipeline: 'Выберите конвейер', sessionType: 'Тип сессии', privateChat: 'Личный чат', groupChat: 'Групповой чат', send: 'Отправить', reset: 'Сбросить диалог', inputPlaceholder: 'Отправить {{type}} сообщение...', noMessages: 'Нет сообщений', userMessage: 'Пользователь', botMessage: 'Бот', sendFailed: 'Ошибка отправки', resetSuccess: 'Диалог успешно сброшен', resetFailed: 'Ошибка сброса', loadMessagesFailed: 'Не удалось загрузить сообщения', loadPipelinesFailed: 'Не удалось загрузить конвейеры', atTips: 'Упомянуть бота', streaming: 'Потоковая передача', streamOutput: 'Поток', connected: 'WebSocket подключён', disconnected: 'WebSocket отключён', connectionError: 'Ошибка подключения WebSocket', connectionFailed: 'Ошибка подключения WebSocket', notConnected: 'WebSocket не подключён, повторите попытку позже', imageUploadFailed: 'Ошибка загрузки изображения', reply: 'Ответить', replyTo: 'Ответ на', showMarkdown: 'Показать Markdown', showRaw: 'Показать исходный текст', allMembers: 'Все участники', file: 'Файл', voice: 'Голос', uploadImage: 'Загрузить изображение', uploading: 'Загрузка...', }, monitoring: { title: 'Мониторинг', description: 'Просмотр журналов выполнения и ошибок конвейера (за последние 24 часа)', detailedLogs: 'Подробные журналы', }, }, knowledge: { title: 'Знания', createKnowledgeBase: 'Создать базу знаний', selectFromSidebar: 'Выберите базу знаний из боковой панели', editKnowledgeBase: 'Редактировать базу знаний', selectKnowledgeBase: 'Выберите базу знаний', selectKnowledgeBases: 'Выберите базы знаний', addKnowledgeBase: 'Добавить базу знаний', noKnowledgeBaseSelected: 'Базы знаний не выбраны', empty: 'Пусто', editDocument: 'Документы', description: 'Настройка баз знаний для улучшения ответов LLM', metadata: 'Метаданные', documents: 'Документы', kbNameRequired: 'Название базы знаний не может быть пустым', kbDescriptionRequired: 'Описание базы знаний не может быть пустым', embeddingModelUUIDRequired: 'Модель Embedding не может быть пустой', daysAgo: 'дней назад', today: 'Сегодня', kbName: 'Название базы знаний', kbDescription: 'Описание базы знаний', topK: 'Top K', topKRequired: 'Top K не может быть пустым', topKMax: 'Максимальное значение Top K — 30', topKdescription: 'Указывает количество релевантных документов для извлечения, от 1 до 30.', defaultDescription: 'База знаний', embeddingModelUUID: 'Модель Embedding', selectEmbeddingModel: 'Выберите модель Embedding', embeddingModelDescription: 'Используется для векторизации текста. Настроить можно на странице моделей', updateTime: 'Обновлено ', cannotChangeEmbeddingModel: 'Модель Embedding нельзя изменить после создания базы знаний', updateKnowledgeBaseSuccess: 'База знаний успешно обновлена', updateKnowledgeBaseFailed: 'Ошибка обновления базы знаний: ', documentsTab: { name: 'Название', status: 'Статус', noResults: 'Нет документов', dragAndDrop: 'Перетащите файлы сюда или нажмите для загрузки', uploading: 'Загрузка...', supportedFormats: 'Поддерживаются PDF, Word, TXT, Markdown, HTML, ZIP и другие форматы', uploadSuccess: 'Файл успешно загружен!', uploadError: 'Ошибка загрузки файла: ', uploadingFile: 'Загрузка файла...', fileSizeExceeded: 'Размер файла превышает 10 МБ. Разделите на файлы меньшего размера.', actions: 'Действия', delete: 'Удалить файл', fileDeleteSuccess: 'Файл успешно удалён', fileDeleteFailed: 'Ошибка удаления файла: ', processing: 'Обработка', completed: 'Завершено', failed: 'Ошибка', selectParser: 'Выберите парсер', builtInParser: 'Предоставлено движком знаний', noParserAvailable: 'Нет парсера, поддерживающего этот тип файла. Установите плагин-парсер для этого формата.', installParserHint: 'Найти плагины-парсеры в маркетплейсе →', confirmUpload: 'Загрузить', cancelUpload: 'Отмена', }, deleteKnowledgeBaseConfirmation: 'Вы уверены, что хотите удалить эту базу знаний? Все документы будут удалены.', retrieve: 'Тест извлечения', retrieveTest: 'Тест извлечения', query: 'Запрос', queryPlaceholder: 'Введите текст запроса...', distance: 'Расстояние', content: 'Содержимое', fileName: 'Имя файла', noResults: 'Нет результатов', retrieveError: 'Ошибка извлечения: ', unknownEngine: 'Неизвестный движок', knowledgeEngine: 'Движок знаний', knowledgeEngineRequired: 'Движок знаний обязателен', selectKnowledgeEngine: 'Выберите движок знаний', builtInEngine: 'Встроенный движок', cannotChangeKnowledgeEngine: 'Движок знаний нельзя изменить после создания', basicInfo: 'Основная информация', basicInfoDescription: 'Задайте название, иконку и описание базы знаний', engineSettings: 'Настройки движка', engineSettingsDescription: 'Конфигурация выбранного движка знаний', engineSettingsReadonly: 'только чтение в режиме редактирования', engineSettingsInvalid: 'Настройки движка недействительны, проверьте обязательные поля', retrievalSettingsInvalid: 'Настройки извлечения недействительны, проверьте обязательные поля', retrievalSettings: 'Настройки извлечения', retrievalSettingsDescription: 'Настройте способ извлечения документов из базы знаний', dangerZone: 'Опасная зона', dangerZoneDescription: 'Необратимые и деструктивные действия', deleteKbAction: 'Удалить эту базу знаний', deleteKbHint: 'После удаления все документы и данные будут безвозвратно удалены.', noEnginesAvailable: 'Нет доступных движков баз знаний', installEngineHint: 'Сначала установите плагин «Движок знаний»', createKnowledgeBaseFailed: 'Ошибка создания базы знаний: ', loadKnowledgeBaseFailed: 'Ошибка загрузки базы знаний: ', deleteKnowledgeBaseFailed: 'Ошибка удаления базы знаний: ', getKnowledgeBaseListError: 'Не удалось получить список баз знаний: ', embeddingModel: 'Модель Embedding', embeddingModelRequired: 'Модель Embedding обязательна для этого движка', addExternal: 'Добавить внешнюю базу знаний', createExternalSuccess: 'Внешняя база знаний успешно создана', updateExternalSuccess: 'Внешняя база знаний успешно обновлена', deleteExternalSuccess: 'Внешняя база знаний успешно удалена', retriever: 'Ретривер', selectRetriever: 'Выберите ретривер...', retrieverConfiguration: 'Настройка ретривера', retrieverInstallInfo: 'Вы можете установить плагины ретривера знаний из', retrieverMarketLink: 'маркетплейса', migration: { title: 'Миграция базы знаний', description: 'Новая версия переработала базы знаний в архитектуру на основе плагинов. Требуется миграция данных. Старые данные автоматически сохранены в базе данных.', detected: 'Найдено {{total}} баз знаний для миграции ({{internal}} внутренних, {{external}} внешних).', startWithInstall: 'Автоустановка плагина и миграция', startDataOnly: 'Только миграция данных', dataOnlyHint: '«Только миграция данных» подходит для офлайн/интранет-сред. Установите плагин вручную после миграции.', dismiss: 'Отклонить исходные данные', running: 'Миграция баз знаний, пожалуйста, подождите...', success: 'Миграция базы знаний завершена', error: 'Ошибка миграции базы знаний: ', dismissError: 'Ошибка операции', retry: 'Повторить', }, }, register: { title: 'Инициализация LangBot 👋', description: 'Вы впервые запускаете LangBot', adminAccountNote: 'Указанная учётная запись будет настроена как администратор', register: 'Регистрация', initWithSpace: 'Инициализация через Space', spaceRecommended: 'Рекомендуется: Используйте официальные стабильные API моделей и облачные сервисы', spaceInfoTip1: 'Space предоставляет единую службу аутентификации без загрузки конфиденциальной информации.', spaceInfoTip2: 'Вход через Space даёт доступ к моделям LangBot и облачным сервисам, включая бесплатные кредиты для быстрого старта.', spaceInfoTip3: 'Способ входа не влияет на другие функции. Вы можете настроить модели из других источников в любое время.', registerLocal: 'Зарегистрировать локальную учётную запись', registerWithPassword: 'Зарегистрироваться с email и паролем', initSuccess: 'Инициализация успешна, пожалуйста, войдите', initFailed: 'Ошибка инициализации: ', }, resetPassword: { title: 'Сброс пароля 🔐', description: 'Введите ключ восстановления и новый пароль для сброса пароля учётной записи', recoveryKey: 'Ключ восстановления', recoveryKeyDescription: 'Хранится в `system.recovery_key` файла конфигурации `data/config.yaml`', newPassword: 'Новый пароль', enterRecoveryKey: 'Введите ключ восстановления', enterNewPassword: 'Введите новый пароль', recoveryKeyRequired: 'Ключ восстановления не может быть пустым', newPasswordRequired: 'Новый пароль не может быть пустым', resetPassword: 'Сбросить пароль', resetting: 'Сброс...', resetSuccess: 'Пароль успешно сброшен, пожалуйста, войдите', resetFailed: 'Ошибка сброса пароля, проверьте email и ключ восстановления', backToLogin: 'Вернуться к входу', }, embedding: { description: 'Управление моделями Embedding для векторизации текста', createModel: 'Создать модель Embedding', editModel: 'Редактировать модель Embedding', getModelListError: 'Не удалось получить список моделей Embedding: ', embeddingModels: 'Embedding', extraParametersDescription: 'Будут добавлены к телу запроса, например encoding_format, dimensions и т.д.', }, llm: { description: 'Управление LLM-моделями для генерации диалогов', llmModels: 'LLM', extraParametersDescription: 'Будут добавлены к телу запроса, например max_tokens, temperature, top_p и т.д.', }, version: { newVersionAvailable: 'Доступна новая версия', viewUpdateGuide: 'Руководство по обновлению', noReleaseNotes: 'Примечания к выпуску недоступны', }, account: { settings: 'Настройки аккаунта', setPassword: 'Установить пароль', passwordSetSuccess: 'Пароль успешно установлен', passwordStatus: 'Локальный пароль', passwordSet: 'Установлен', passwordNotSet: 'Не установлен', passwordSetDescription: 'Пароль установлен, вы можете входить с email и паролем', spaceStatus: 'Аккаунт Space', spaceBound: 'Привязан', spaceNotBound: 'Не привязан', spaceBoundDescription: 'Аккаунт Space привязан, доступны официальные API моделей и облачные сервисы', bindSpace: 'Привязать аккаунт Space', bindSpaceDescription: 'Привяжите для использования официальных API моделей и облачных сервисов', bindSpaceButton: 'Привязать', bindSpaceConfirmTitle: 'Подтверждение привязки', bindSpaceConfirmDescription: 'Вы собираетесь привязать локальный экземпляр к аккаунту Space', bindSpaceWarning: 'После привязки ваш email для входа будет изменён с {{localEmail}} на email аккаунта Space.', bindSpaceSuccess: 'Аккаунт Space успешно привязан', bindSpaceFailed: 'Не удалось привязать аккаунт Space', bindSpaceInvalidState: 'Недействительный запрос привязки. Повторите попытку из настроек аккаунта.', setPasswordHint: 'Установите пароль для входа с email и паролем', spaceEmailMismatch: 'Email входа через Space не совпадает с email локальной учётной записи', }, monitoring: { title: 'Мониторинг', description: 'Мониторинг активности ботов, вызовов LLM и производительности системы', overview: 'Обзор', totalMessages: 'Всего сообщений', llmCallsCount: 'Вызовы LLM', modelCallsCount: 'Вызовы моделей', successRate: 'Доля успешных', activeSessions: 'Активные сессии', last24Hours: 'За последние 24 часа', filters: { title: 'Фильтры', bot: 'Бот', pipeline: 'Конвейер', allBots: 'Все боты', selectBot: 'Выберите бота', allPipelines: 'Все конвейеры', selectPipeline: 'Выберите конвейер', loading: 'Загрузка...', timeRange: 'Период', customRange: 'Произвольный период', from: 'С', to: 'По', apply: 'Применить', reset: 'Сбросить фильтры', lastHour: 'За последний час', last6Hours: 'За последние 6 часов', last24Hours: 'За последние 24 часа', last7Days: 'За последние 7 дней', last30Days: 'За последние 30 дней', }, tabs: { messages: 'Записи сообщений', llmCalls: 'Вызовы LLM', embeddingCalls: 'Вызовы Embedding', modelCalls: 'Вызовы моделей', feedback: 'Обратная связь', sessions: 'Анализ сессий', errors: 'Журнал ошибок', }, messageList: { timestamp: 'Время', bot: 'Бот', pipeline: 'Конвейер', message: 'Сообщение', sessionId: 'ID сессии', status: 'Статус', actions: 'Действия', viewDetails: 'Подробнее', copyId: 'Копировать ID', noMessages: 'Сообщения не найдены', noMessagesDescription: 'Попробуйте изменить фильтры или проверьте позже', loading: 'Загрузка сообщений...', loadMore: 'Загрузить ещё', autoRefresh: 'Автообновление', platform: 'Роль', user: 'Пользователь', level: 'Уровень', runner: 'Обработчик', viewConversation: 'Просмотр диалога', }, llmCalls: { title: 'Вызовы LLM', model: 'Модель', tokens: 'Токены', duration: 'Длительность', cost: 'Стоимость', noData: 'Вызовы LLM не найдены', inputTokens: 'Входные токены', outputTokens: 'Выходные токены', totalTokens: 'Всего токенов', avgDuration: 'Средняя длительность', calls: 'Вызовы', }, embeddingCalls: { title: 'Вызовы Embedding', model: 'Модель', tokens: 'Токены', duration: 'Длительность', noData: 'Вызовы Embedding не найдены', promptTokens: 'Токены запроса', totalTokens: 'Всего токенов', inputCount: 'Количество входов', knowledgeBase: 'База знаний', queryText: 'Запрос', }, modelCalls: { title: 'Вызовы моделей', llmModel: 'LLM', embeddingModel: 'Embedding', embeddingCall: 'Embedding', retrieveCall: 'Извлечение', noData: 'Вызовы моделей не найдены', }, sessions: { sessionId: 'ID сессии', messageCount: 'Сообщений', duration: 'Длительность', lastActivity: 'Последняя активность', noSessions: 'Сессии не найдены', startTime: 'Время начала', messageStats: 'Статистика сообщений', totalMessages: 'Всего сообщений', successMessages: 'Успешных', errorMessages: 'С ошибками', llmStats: 'Статистика LLM', noData: 'Сессия не найдена', }, errors: { title: 'Ошибки', errorType: 'Тип ошибки', errorMessage: 'Сообщение об ошибке', occurredAt: 'Время возникновения', noErrors: 'Ошибки не найдены', stackTrace: 'Стек вызовов', }, feedback: { title: 'Обратная связь', totalFeedback: 'Всего отзывов', totalLikes: 'Лайков', totalDislikes: 'Дизлайков', satisfactionRate: 'Уровень удовлетворённости', like: 'Нравится', dislike: 'Не нравится', noFeedback: 'Отзывов пока нет', noFeedbackDescription: 'Отзывы пользователей будут отображаться здесь', feedbackList: 'Список отзывов', feedbackContent: 'Содержание отзыва', contextInfo: 'Контекстная информация', userId: 'ID пользователя', messageId: 'ID сообщения', streamId: 'ID потока', inaccurateReasons: 'Причины неточности', platform: 'Платформа', exportFeedback: 'Экспорт отзывов', }, queries: { title: 'Запросы', }, messageDetails: { noData: 'Нет вызовов LLM или ошибок для этого запроса', }, queryVariables: { title: 'Переменные запроса', }, trafficChart: { title: 'Обзор трафика', messages: 'Сообщения', llmCalls: 'Вызовы LLM', noData: 'Нет данных о трафике', }, viewMonitoring: 'Мониторинг', refreshData: 'Обновить данные', exportData: 'Экспорт данных', export: { title: 'Экспорт данных', exporting: 'Экспорт...', messages: 'Сообщения', llmCalls: 'Вызовы LLM', embeddingCalls: 'Вызовы Embedding', errors: 'Журнал ошибок', sessions: 'Сессии', feedback: 'Отзывы пользователей', }, systemStatus: 'Состояние системы', pluginRuntime: 'Среда плагинов', boxRuntime: 'Среда Box', connected: 'Подключено', disconnected: 'Отключено', disabled: 'Отключено', statusDetail: 'Статус', pluginDisabled: 'Система плагинов отключена', boxDisabled: 'Песочница Box отключена в конфигурации — инструменты песочницы, добавление/редактирование навыков и stdio MCP недоступны', boxUnavailable: 'Песочница Box недоступна — инструменты песочницы, добавление/редактирование навыков и stdio MCP недоступны', boxRequiredHint: 'Для этой функции требуется среда Box. Включите её в конфигурации (box.enabled = true) и убедитесь, что соединение работает.', boxBackend: 'Бэкенд', boxProfile: 'Профиль', boxSandboxes: 'Песочницы', boxSessionCreated: 'Создано', boxSessionLastUsed: 'Последнее использование', }, storageAnalysis: { title: 'Анализ хранилища', description: 'Проверьте использование хранилища и кандидатов на очистку', openDialog: 'Открыть анализ', dialogTitle: 'Анализ хранилища', generatedAt: 'Создано {{time}}', loading: 'Загрузка...', refresh: 'Обновить', totalSize: 'Общий размер', binaryStorage: 'Бинарное хранилище плагинов', uploadCleanup: 'Просроченные загрузки', logCleanup: 'Просроченные журналы', sections: 'Разделы хранилища', monitoringTables: 'Таблицы мониторинга', runtimeTasks: 'Задачи runtime', cleanupPolicy: 'Политика очистки', uploadRetention: 'Хранение загрузок', logRetention: 'Хранение журналов', databaseType: 'Тип базы данных', days: 'дн.', missing: 'Нет', expiredUploads: 'Просроченные загрузки', expiredLogs: 'Просроченные журналы', noExpiredUploads: 'Нет просроченных загруженных файлов', noExpiredLogs: 'Нет просроченных журналов', sectionNames: { database: 'База данных', logs: 'Журналы', storage: 'Загруженные файлы', vector_store: 'Векторное хранилище', plugins: 'Плагины', mcp: 'MCP', temp: 'Временные файлы', }, }, limitation: { maxBotsReached: 'Достигнуто максимальное количество ботов ({{max}}). Удалите существующего бота перед созданием нового.', maxPipelinesReached: 'Достигнуто максимальное количество конвейеров ({{max}}). Удалите существующий конвейер перед созданием нового.', maxExtensionsReached: 'Достигнуто максимальное количество расширений ({{max}}). Удалите существующий MCP-сервер или плагин перед добавлением нового.', }, wizard: { sidebarDescription: 'Создать бота с пошаговым руководством', loading: 'Загрузка мастера...', loadError: 'Не удалось загрузить данные мастера', skip: 'Пропустить', skipConfirmMessage: 'Вы можете вернуться к мастеру быстрого старта из меню аккаунта позже или создать бота вручную.', skipConfirmOk: 'ОК', prev: 'Назад', next: 'Далее', finish: 'Создать и развернуть', confirmCreateBot: 'Подтвердить, создать бота', createSuccess: 'Конвейер создан и привязан к боту!', botCreateSuccess: 'Бот успешно создан!', botSaveSuccess: 'Конфигурация бота сохранена и включена!', createError: 'Не удалось создать ресурсы', spaceAuthError: 'Не удалось инициировать авторизацию через Space', skipSaveError: 'Не удалось сохранить статус пропуска. Повторите попытку.', completeSaveError: 'Не удалось сохранить статус завершения. Повторите попытку.', step: { platform: 'Платформа', botConfig: 'Настройка бота', aiEngine: 'ИИ-движок', done: 'Готово', }, platform: { title: 'Выберите платформу', description: 'Выберите мессенджер, к которому подключится ваш бот.', }, botConfig: { title: 'Настройте бота', description: 'Настройте бота и проверьте его работу перед продолжением.', saveBot: 'Сохранить и включить бота', resaveBot: 'Пересохранить конфигурацию', botSaved: 'Конфигурация бота сохранена и включена. Проверьте журналы для подтверждения подключения.', logsTitle: 'Журналы бота', logsDescription: 'Отслеживайте активность бота для проверки подключения к платформе.', }, aiEngine: { title: 'Выберите ИИ-движок', description: 'Выберите ИИ-движок, который будет управлять интеллектом вашего бота.', }, spaceBanner: { message: 'Подключитесь к LangBot Space для бесплатных пробных кредитов и мгновенной настройки!', action: 'Авторизация через Space', }, config: { botInfo: 'Информация о боте', botNamePlaceholder: 'Введите имя бота', botDescPlaceholder: 'Введите описание бота (необязательно)', platformConfig: 'Настройка {{platform}}', aiConfig: 'Настройка {{engine}}', }, done: { title: 'Всё готово!', description: 'Ваш бот создан и подключён к конвейеру ИИ. Теперь вы можете управлять им из рабочей панели.', backToWorkbench: 'Вернуться к рабочей панели', }, }, errorPage: { unexpectedError: 'Что-то пошло не так', unexpectedErrorDescription: 'Произошла непредвиденная ошибка. Повторите попытку позже.', notFound: 'Страница не найдена', notFoundDescription: 'Страница, которую вы ищете, не существует или была перемещена.', backendUnavailableStatus: 'Бэкенд недоступен', goBack: 'Назад', backToHome: 'На главную', backToLogin: 'Вернуться к входу', retrying: 'Повторяем', retryFailed: 'По-прежнему не удается подключиться к бэкенду. Запустите сервис и повторите попытку.', }, feishu: { createApp: 'Создать приложение Feishu в один клик', scanQRCode: 'Отсканируйте QR-код ниже в Feishu, чтобы авторизоваться и автоматически создать приложение', waitingForScan: 'Ожидание сканирования', createSuccess: 'Приложение успешно создано! Учётные данные заполнены автоматически', createFailed: 'Не удалось создать приложение', connecting: 'Подключение к сервису Feishu...', expired: 'Срок действия QR-кода истёк. Повторите попытку', denied: 'Пользователь отклонил авторизацию', connectionLost: 'Соединение потеряно. Повторите попытку', reconnecting: 'Переподключение...', retry: 'Повторить', }, weixin: { scanLogin: 'Войти в WeChat по QR-коду', scanQRCode: 'Отсканируйте QR-код ниже в WeChat, чтобы авторизоваться и автоматически заполнить токен', loginSuccess: 'Вход выполнен успешно! Токен заполнен автоматически', loginFailed: 'Не удалось выполнить вход', }, dingtalk: { createApp: 'Создать приложение DingTalk в один клик', scanQRCode: 'Отсканируйте QR-код ниже в DingTalk, чтобы авторизоваться и автоматически создать приложение', waitingForScan: 'Ожидание сканирования', createSuccess: 'Приложение успешно создано! Учётные данные заполнены автоматически', createFailed: 'Не удалось создать приложение', connecting: 'Подключение к сервису DingTalk...', retry: 'Повторить', robotCodeNote: 'Код робота нельзя получить автоматически. Перейдите в консоль разработчика DingTalk > Настройки робота и скопируйте его вручную. Он нужен для таких функций, как распознавание изображений и загрузка файлов.', }, wecombot: { createBot: 'Создать бота WeCom в один клик', scanQRCode: 'Отсканируйте QR-код ниже в WeCom, чтобы авторизоваться и автоматически создать бота', waitingForScan: 'Ожидание сканирования', createSuccess: 'Бот успешно создан! Учётные данные заполнены автоматически', createFailed: 'Не удалось создать бота', connecting: 'Подключение к сервису WeCom...', retry: 'Повторить', robotNameNote: 'Имя бота нельзя получить автоматически. Пожалуйста, введите его вручную.', }, pluginPages: { selectFromSidebar: 'Выберите страницу плагина на боковой панели', invalidPage: 'Недопустимая страница плагина', }, skills: { title: 'Навыки', description: 'Создавайте навыки и управляйте ими для активации во время диалогов', createSkill: 'Создать навык', createSkillDescription: 'Импортируйте локальный каталог или создайте навык, заполнив данные', editSkill: 'Редактировать навык', getSkillListError: 'Не удалось получить список навыков: ', skillName: 'Название навыка', displayName: 'Название навыка', displayNamePlaceholder: 'Отображаемое имя (поддерживает любой язык)', skillSlug: 'Имя каталога', skillSlugPlaceholder: 'english-name-only', skillSlugHelp: 'Используется как имя каталога навыка. Разрешены только буквы, цифры, дефисы и подчёркивания.', skillDescription: 'Описание навыка', skillInstructions: 'Инструкции', saveSuccess: 'Успешно сохранено', saveError: 'Не удалось сохранить: ', createSuccess: 'Успешно создано', createError: 'Не удалось создать: ', deleteSuccess: 'Успешно удалено', deleteError: 'Не удалось удалить: ', deleteConfirmation: 'Вы уверены, что хотите удалить этот навык?', delete: 'Удалить навык', skillNameRequired: 'Название навыка не может быть пустым', skillDescriptionRequired: 'Описание навыка не может быть пустым', packageRootRequired: 'Корневой путь пакета не может быть пустым', scan: 'Сканировать', scanSuccess: 'Каталог успешно просканирован', scanError: 'Не удалось просканировать каталог: ', noSkills: 'Навыки не настроены', preview: 'Предпросмотр', previewInstructions: 'Предпросмотр содержимого SKILL.md', instructionsPlaceholder: 'Введите инструкции навыка в формате Markdown...', descriptionPlaceholder: 'Краткое описание того, что делает этот навык (показывается LLM)', packageRoot: 'Каталог пакета', packageRootHelp: 'Необязательно. Нужно только при импорте существующего каталога навыка. Для новых навыков оставьте пустым. Сканирование проверяет текущий каталог и подкаталоги глубиной до 2 уровней.', importLocalDirectory: 'Импортировать локальный каталог навыка', chooseSkillDirectory: 'Выбрать каталог с SKILL.md', chooseAnotherDirectory: 'Выбрать другой каталог', importingDirectory: 'Подготовка предпросмотра...', clearDirectoryPreview: 'Очистить выбранный каталог', noSkillMdInDirectory: 'В выбранном каталоге не найден SKILL.md', multipleSkillMdInDirectory: 'В выбранном каталоге найдено несколько файлов SKILL.md. Выберите один каталог навыка напрямую.', importDirectoryError: 'Не удалось импортировать каталог: ', advancedSettings: 'Расширенные настройки', searchSkills: 'Поиск навыков...', selectSkills: 'Выбрать навыки', addSkill: 'Добавить навык', builtin: 'Встроенный', importFromGithub: 'Установить навык из GitHub', createManually: 'Создать вручную', uploadZip: 'Загрузить ZIP-пакет', uploadZipOnly: 'Поддерживаются только ZIP-пакеты навыков', installSuccess: 'Навык успешно установлен', installError: 'Не удалось установить навык: ', enterRepoUrl: 'Введите URL репозитория GitHub', repoUrlPlaceholder: 'например, https://github.com/owner/repo', fetchingReleases: 'Получение релизов...', selectRelease: 'Выбрать релиз', noReleasesFound: 'Релизы не найдены', fetchReleasesError: 'Не удалось получить релизы: ', selectAsset: 'Выберите файл для установки', sourceArchive: 'Исходный код (zip)', noAssetsFound: 'В этом релизе нет устанавливаемых файлов', fetchAssetsError: 'Не удалось получить файлы: ', backToReleases: 'Назад к релизам', backToRepoUrl: 'Назад к URL репозитория', backToAssets: 'Назад к файлам', releaseTag: 'Тег: {{tag}}', publishedAt: 'Опубликовано: {{date}}', prerelease: 'Предварительный релиз', assetSize: 'Размер: {{size}}', confirmInstall: 'Подтвердить установку', installing: 'Установка навыка...', loading: 'Загрузка...', previewLoadError: 'Не удалось загрузить предпросмотр', selectFromSidebar: 'Выберите навык на боковой панели', dangerZone: 'Опасная зона', dangerZoneDescription: 'Необратимые и разрушительные действия', files: 'Файлы', noFiles: 'Файлы не найдены', loadFilesError: 'Не удалось загрузить файлы: ', readFileError: 'Не удалось прочитать файл: ', saveFile: 'Сохранить файл', saveFileSuccess: 'Файл успешно сохранён', saveFileError: 'Не удалось сохранить файл: ', }, addExtension: { installTitle: 'Установить {{type}}', installConfirm: 'Установить {{type}} «{{name}}»?', installInfoType: 'Тип', installInfoId: 'ID', installInfoVersion: 'Версия', installSuccess: 'Успешно установлено', installStage: { mcpInstalling: 'Добавление и подключение сервера MCP…', skillInstalling: 'Установка навыка…', installed: 'Готово', }, manualAdd: 'Добавить вручную', uploadExtension: 'Перетащите файл сюда или нажмите для загрузки', uploadHint: 'Поддерживаются файлы .zip (навыки) и .lbpkg (плагины)', orContinueWith: 'или выберите действие ниже', addMCPServerHint: 'Подключить расширение сервера инструментов MCP', installFromGithub: 'Установить из GitHub', installFromGithubHint: 'Пакет плагина или навык (SKILL.md)', githubUrlHelp: 'Вставьте URL GitHub', githubUrlTooltip: 'Плагин: вставьте URL репозитория, Release или Tag. Навык: вставьте URL страницы SKILL.md внутри каталога навыка.', githubUrlPlaceholder: 'Репозиторий GitHub, Release или ссылка SKILL.md', githubUrlRequired: 'Введите URL GitHub', previewSkill: 'Предпросмотр навыка', noSkillPreviewFound: 'Импортируемый навык не найден', createSkill: 'Создать новый навык', createSkillHint: 'Импортировать из локального каталога или создать вручную', unsupportedFileType: 'Неподдерживаемый тип файла. Поддерживаются только файлы .zip и .lbpkg', }, }; export default ruRU;