const ruRU = {
  sidebar: {
    home: 'Главная',
    extensions: 'Расширения',
    installedPlugins: 'Установленные плагины',
    pluginMarket: 'Маркетплейс',
    mcpServers: 'MCP-серверы',
    quickStart: 'Быстрый старт',
  },
  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: 'Выбрать',
    cancel: 'Отмена',
    submit: 'Отправить',
    error: 'Ошибка',
    success: 'Успешно',
    save: 'Сохранить',
    saving: 'Сохранение...',
    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: 'Нет элементов',
  },
  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: 'Логический',
    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: 'Установить плагин',
    onlySupportGithub:
      'В настоящее время поддерживается установка только с GitHub',
    enterGithubLink: 'Введите ссылку на GitHub плагина',
    installing: 'Установка плагина...',
    installSuccess: 'Плагин успешно установлен',
    installFailed: 'Ошибка установки плагина:',
    searchPlugin: 'Поиск плагинов',
    sortBy: 'Сортировать по',
    mostStars: 'Больше всего звёзд',
    recentlyAdded: 'Недавно добавленные',
    recentlyUpdated: 'Недавно обновлённые',
    noMatchingPlugins: 'Подходящие плагины не найдены',
    loading: 'Загрузка...',
    getPluginListError: 'Не удалось получить список плагинов:',
    noPluginInstalled: 'Плагины не установлены',
    pluginConfig: 'Настройка плагина',
    pluginSort: 'Порядок плагинов',
    pluginSortDescription:
      'Порядок плагинов влияет на очерёдность обработки одного события. Перетащите карточку плагина для сортировки',
    pluginSortSuccess: 'Порядок плагинов обновлён',
    pluginSortError: 'Ошибка сортировки плагинов: ',
    pluginNoConfig: 'У плагина нет параметров настройки.',
    systemDisabled: 'Система плагинов отключена',
    systemDisabledDesc:
      'Система плагинов не включена. Измените конфигурацию согласно документации',
    connectionError: 'Ошибка подключения системы плагинов',
    connectionErrorDesc:
      'Проверьте конфигурацию системы плагинов или обратитесь к администратору.',
    errorDetails: 'Подробности ошибки',
    loadingStatus: 'Проверка статуса системы плагинов...',
    failedToGetStatus: 'Не удалось получить статус системы плагинов',
    pluginSystemNotReady:
      'Система плагинов не готова, невозможно выполнить эту операцию',
    debugInfo: 'Отладочная информация',
    debugInfoTitle: 'Отладочная информация плагина',
    debugUrl: 'URL для отладки',
    debugKey: 'Ключ отладки',
    noDebugKey: '(Не задан)',
    debugKeyDisabled:
      'Ключ отладки не задан, аутентификация при отладке плагина не требуется',
    failedToGetDebugInfo: 'Не удалось получить отладочную информацию',
    copiedToClipboard: 'Скопировано в буфер обмена',
    deleting: 'Удаление...',
    deletePlugin: 'Удалить плагин',
    cancel: 'Отмена',
    saveConfig: 'Сохранить настройки',
    saving: 'Сохранение...',
    confirmDeletePlugin:
      'Вы уверены, что хотите удалить плагин ({{author}}/{{name}})?',
    deleteDataCheckbox:
      'Также удалить конфигурацию плагина и постоянное хранилище',
    confirmDelete: 'Подтвердить удаление',
    deleteError: 'Ошибка удаления: ',
    close: 'Закрыть',
    deleteConfirm: 'Подтверждение удаления',
    deleteSuccess: 'Удаление успешно',
    modifyFailed: 'Ошибка изменения: ',
    componentName: {
      Tool: 'Инструмент',
      EventListener: 'Обработчик событий',
      Command: 'Команда',
      KnowledgeEngine: 'Движок знаний',
      Parser: 'Парсер',
    },
    uploadLocal: 'Загрузить локально',
    debugging: 'Отладка',
    uploadLocalPlugin: 'Загрузить локальный плагин',
    dragToUpload: 'Перетащите файл плагина сюда для загрузки',
    unsupportedFileType:
      'Неподдерживаемый тип файла, поддерживаются только файлы .lbpkg и .zip',
    uploadingPlugin: 'Загрузка плагина...',
    uploadSuccess: 'Загрузка успешна',
    uploadFailed: 'Ошибка загрузки',
    selectFileToUpload: 'Выберите файл плагина для загрузки',
    askConfirm:
      'Вы уверены, что хотите установить плагин "{{name}}" ({{version}})?',
    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: 'Нет задач установки',
    },
  },
  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: 'Компонент',
    allComponents: 'Все компоненты',
    requestPlugin: 'Запросить плагин',
    viewDetails: 'Подробнее',
    deprecated: 'Устаревший',
    deprecatedTooltip:
      'Пожалуйста, установите соответствующий плагин движка знаний.',
    tags: {
      filterByTags: 'Фильтр по тегам',
      selected: 'выбрано',
      selectTags: 'Выберите теги',
      clearAll: 'Очистить всё',
      noTags: 'Нет доступных тегов',
    },
  },
  mcp: {
    title: 'MCP',
    createServer: 'Добавить 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: 'Ошибка подключения',
    toolsFound: 'инструментов',
    unknownError: 'Неизвестная ошибка',
    noToolsFound: 'Инструменты не найдены',
    parseResultFailed: 'Не удалось разобрать результат теста',
    noResultReturned: 'Тест не вернул результат',
    getTaskFailed: 'Не удалось получить статус задачи',
    noTaskId: 'Не удалось получить ID задачи',
    deleteSuccess: 'Успешно удалено',
    deleteFailed: 'Ошибка удаления: ',
    deleteError: 'Ошибка удаления: ',
    saveSuccess: 'Успешно сохранено',
    saveError: 'Ошибка сохранения: ',
    createSuccess: 'Успешно создано',
    createFailed: 'Ошибка создания: ',
    createError: 'Ошибка создания: ',
    loadFailed: 'Ошибка загрузки',
    modifyFailed: 'Ошибка изменения: ',
    toolCount: 'Инструменты: {{count}}',
    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-серверы включены',
    },
    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: 'только чтение в режиме редактирования',
    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: 'Отзывы пользователей',
    },
  },
  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: 'Вернуться к рабочей панели',
    },
  },
  workflows: {
    title: 'Workflows',
    description: 'Create and manage visual workflows for complex message processing logic',
    createWorkflow: 'Create Workflow',
    selectFromSidebar: 'Select a workflow from the sidebar',
    editWorkflow: 'Edit Workflow',
    newWorkflow: 'New Workflow',
    getWorkflowListError: 'Failed to get workflow list: ',
    workflowName: 'Workflow Name',
    workflowDescription: 'Workflow Description',
    workflowNameRequired: 'Workflow name is required',
    defaultDescription: 'A workflow',
    getWorkflowError: 'Failed to get workflow: ',
    loadError: 'Failed to load workflow',
    saveSuccess: 'Saved successfully',
    saveError: 'Failed to save: ',
    createSuccess: 'Workflow created successfully',
    createError: 'Failed to create: ',
    deleteSuccess: 'Deleted successfully',
    deleteError: 'Failed to delete: ',
    deleteConfirmation: 'Are you sure you want to delete this workflow?',
    copySuccess: 'Copied successfully',
    copyError: 'Failed to copy: ',
    export: 'Export',
    import: 'Import',
    exportSuccess: 'Workflow exported',
    importSuccess: 'Workflow imported',
    importError: 'Import failed: Invalid file format',
    publish: 'Publish',
    publishSuccess: 'Published successfully',
    publishError: 'Failed to publish',
    configuration: 'Configuration',
    executions: 'Executions',
    editor: 'Editor',
    debugChat: 'Отладочный чат',
    basicInfo: 'Basic Info',
    basicInfoDesc: 'Set workflow name, icon and description',
    basicInfoDescription: 'Set workflow name and description',
    dangerZone: 'Danger Zone',
    dangerZoneDesc: 'Irreversible operations',
    dangerZoneDescription: 'Irreversible operations',
    deleteWorkflowAction: 'Delete this workflow',
    deleteWorkflowHint: 'Once deleted, all associated configurations will be permanently removed and cannot be recovered.',
    deleteWorkflow: 'Delete Workflow',
    deleteConfirm: 'Confirm Delete',
    deleteConfirmDesc: 'Are you sure you want to delete workflow "{{name}}"? This action cannot be undone.',
    // Form component
    name: 'Name',
    namePlaceholder: 'Enter workflow name',
    descriptionPlaceholder: 'Enter workflow description (optional)',
    enabled: 'Enabled',
    enabledDesc: 'When enabled, the workflow can be triggered for execution',
    loading: 'Loading...',
    info: 'Workflow Info',
    uuid: 'UUID',
    version: 'Version',
    createdAt: 'Created At',
    updatedAt: 'Updated At',
    // Executions tab
    totalExecutions: '{{count}} execution(s) total',
    statistics: 'Statistics',
    successfulCount: '{{count}} successful',
    successRate: 'Success Rate',
    averageDuration: 'Avg. Duration',
    perExecution: 'per execution',
    failedExecutions: 'Failed',
    lastExecution: 'Last run',
    filterByStatus: 'Filter by status',
    allStatuses: 'All statuses',
    manualTrigger: 'Manual Trigger',
    executionId: 'Execution ID',
    status: 'Status',
    triggerType: 'Trigger Type',
    startedAt: 'Started At',
    duration: 'Duration',
    noExecutions: 'No executions yet',
    executionDetails: 'Execution Details',
    error: 'Error',
    nodeExecutions: 'Node Executions',
    result: 'Result',
    'status.pending': 'Pending',
    'status.running': 'Running',
    'status.completed': 'Completed',
    'status.failed': 'Failed',
    'status.cancelled': 'Cancelled',
    // Editor component translations
    nodePalette: 'Node Palette',
    properties: 'Properties',
    zoomIn: 'Zoom In',
    zoomOut: 'Zoom Out',
    fitView: 'Fit View',
    unsavedChanges: 'Unsaved changes',
    paste: 'Paste',
    deleted: 'Deleted',
    nothingToCopy: 'No nodes selected to copy',
    nothingToPaste: 'Clipboard is empty',
    copied: 'Copied {{count}} node(s)',
    pasted: 'Pasted {{count}} node(s)',
    nodesSelected: '{{count}} node(s) selected',
    edgesSelected: '{{count}} edge(s) selected',
    // Node palette
    searchNodes: 'Search nodes...',
    loadingNodeTypes: 'Loading node types...',
    noNodesFound: 'No matching nodes found',
    clearSearch: 'Clear search',
    dragToAdd: 'Drag nodes to add to canvas',
    // Property panel
    selectNodeOrEdge: 'Select a node or edge',
    selectNodeOrEdgeHint: 'Click on a node or edge in the canvas to view and edit its properties',
    edgeProperties: 'Edge Properties',
    nodeProperties: 'Node Properties',
    condition: 'Condition',
    hasCondition: 'Set',
    conditionPlaceholder: 'Enter condition expression, e.g. output.success == true',
    conditionHelp: 'When condition is empty, this edge will always be executed. Use {{variable}} to reference context variables.',
    deleteEdge: 'Delete Edge',
    deleteEdgeConfirm: 'Confirm Delete Edge',
    deleteEdgeConfirmDesc: 'This edge will be permanently removed.',
    nodeLabel: 'Node Label',
    nodeLabelPlaceholder: 'Enter node display name',
    nodeId: 'Node ID',
    inputOutputVariables: 'Input/Output Variables',
    inputs: 'Inputs',
    outputs: 'Outputs',
    availableVariables: 'Available Variables',
    globalVariables: 'Global Variables',
    messageContent: 'Message Content',
    messageSender: 'Sender',
    platform: 'Platform',
    sessionId: 'Session ID',
    timestamp: 'Timestamp',
    nodeConfig: 'Node Configuration',
    noConfigOptions: 'No configuration options for this node type',
    deleteNode: 'Delete Node',
    deleteNodeConfirm: 'Confirm Delete Node',
    deleteNodeConfirmDesc: 'This node and all its connections will be permanently removed.',
    // Node inputs/outputs i18n (for port labels)
    nodeInputs: {
      // Common inputs
      input: 'Input',
      message: 'Message',
      text: 'Text',
      query: 'Query',
      data: 'Data',
      condition: 'Condition',
      value: 'Value',
      // Trigger inputs
      content: 'Content',
      context: 'Context',
      body: 'Request Body',
      variables: 'Variables',
      items: 'Items',
      arguments: 'Arguments',
      // AI/Process inputs
      question: 'Question',
      parameters: 'Parameters',
      key: 'Key',
      // Control inputs
      case_1: 'Case 1',
      case_2: 'Case 2',
      branch_1: 'Branch 1',
      branch_2: 'Branch 2',
      // Action inputs
      notification_id: 'Notification ID',
      // Integration inputs
      key_template: 'Key Template',
      hash_field: 'Hash Field',
      server_name: 'Server Name',
      tool_name: 'Tool Name',
      arguments_template: 'Arguments Template',
      scope: 'Scope',
    },
    // Data type labels
    'type.string': 'String',
    'type.object': 'Object',
    'type.array': 'Array',
    'type.boolean': 'Boolean',
    'type.number': 'Number',
    'type.any': 'Any',
    'type.datetime': 'DateTime',
    nodes: {
      trigger: 'Triggers',
      triggerDescription: 'Starting nodes for workflows',
      messageTrigger: 'Message Trigger',
      messageTriggerDescription: 'Triggered when a message is received',
      scheduleTrigger: 'Schedule Trigger',
      scheduleTriggerDescription: 'Triggered on a schedule',
      cronTrigger: 'Cron Trigger',
      cronTriggerDescription: 'Trigger workflow on a scheduled time',
      webhookTrigger: 'Webhook Trigger',
      webhookTriggerDescription: 'Triggered via HTTP request',
      eventTrigger: 'Event Trigger',
      eventTriggerDescription: 'Triggered on system events',
      process: 'AI/Process',
      processDescription: 'Data processing nodes',
      aiProcess: 'AI Processing',
      aiProcessDescription: 'Process messages using AI models',
      llmCall: 'LLM Call',
      llmCallDescription: 'Invoke large language model for conversation or generation',
      codeProcess: 'Code Processing',
      codeProcessDescription: 'Execute custom code',
      codeExecutor: 'Code Executor',
      codeExecutorDescription: 'Execute Python/JavaScript code',
      templateProcess: 'Template Processing',
      templateProcessDescription: 'Format output using templates',
      httpRequest: 'HTTP Request',
      httpRequestDescription: 'Send HTTP requests',
      dataTransform: 'Data Transform',
      dataTransformDescription: 'Transform data format',
      questionClassifier: 'Question Classifier',
      questionClassifierDescription: 'Classify user questions into predefined categories using LLM',
      parameterExtractor: 'Parameter Extractor',
      parameterExtractorDescription: 'Extract structured parameters from text using LLM',
      knowledgeRetrieval: 'Knowledge Retrieval',
      knowledgeRetrievalDescription: 'Retrieve relevant content from knowledge base',
      textTemplate: 'Text Template',
      textTemplateDescription: 'Generate text using templates with variable interpolation',
      jsonTransform: 'JSON Transform',
      jsonTransformDescription: 'Transform JSON data using expressions',
      dataAggregator: 'Data Aggregator',
      dataAggregatorDescription: 'Aggregate data from multiple sources',
      textSplitter: 'Text Splitter',
      textSplitterDescription: 'Split text into smaller chunks',
      variableAssignment: 'Variable Assignment',
      variableAssignmentDescription: 'Assign values to workflow variables',
      control: 'Control Flow',
      controlDescription: 'Flow control nodes',
      condition: 'Condition Branch',
      conditionDescription: 'Branch based on conditions',
      switch: 'Switch',
      switchDescription: 'Multi-way branching',
      loop: 'Loop',
      loopDescription: 'Repeat execution',
      iterator: 'Iterator',
      iteratorDescription: 'Iterate over array elements',
      parallel: 'Parallel',
      parallelDescription: 'Execute multiple branches in parallel',
      wait: 'Wait',
      waitDescription: 'Wait for specified time',
      delay: 'Delay',
      delayDescription: 'Wait for a specified time',
      merge: 'Merge',
      mergeDescription: 'Merge multiple branches',
      variableAggregator: 'Variable Aggregator',
      variableAggregatorDescription: 'Aggregate variable outputs from multiple branches',
      action: 'Actions',
      actionDescription: 'Action execution nodes',
      sendMessage: 'Send Message',
      sendMessageDescription: 'Send message to platform',
      replyMessage: 'Reply Message',
      replyMessageDescription: 'Reply to the message that triggered the workflow',
      storeData: 'Store Data',
      storeDataDescription: 'Store data to database',
      callPipeline: 'Call Pipeline',
      callPipelineDescription: 'Call an existing Pipeline',
      setVariable: 'Set Variable',
      setVariableDescription: 'Set context variable',
      openingStatement: 'Opening Statement',
      openingStatementDescription: 'Provide conversation opener and suggested questions',
      end: 'End',
      endDescription: 'Mark the end of workflow execution',
      log: 'Log',
      logDescription: 'Record log information',
      integration: 'Integration',
      integrationDescription: 'Third-party platform integration nodes',
      difyWorkflow: 'Dify Workflow',
      difyWorkflowDescription: 'Call Dify platform workflow',
      difyKnowledgeQuery: 'Dify Knowledge Query',
      difyKnowledgeQueryDescription: 'Query Dify knowledge base',
      n8nWorkflow: 'N8n Workflow',
      n8nWorkflowDescription: 'Call n8n workflow',
      langflowFlow: 'Langflow Flow',
      langflowFlowDescription: 'Call Langflow flow',
      cozeBot: 'Coze Bot',
      cozeBotDescription: 'Call Coze Bot',
      // Data & Tools integration nodes
      databaseQuery: 'Database Query',
      databaseQueryDescription: 'Execute database queries',
      redisOperation: 'Redis Operation',
      redisOperationDescription: 'Perform Redis cache operations',
      mcpTool: 'MCP Tool',
      mcpToolDescription: 'Invoke an MCP tool',
      memoryStore: 'Memory Store',
      memoryStoreDescription: 'Store and retrieve data from workflow memory',
    },
    executionHistory: {
      title: 'Execution History',
      noExecutions: 'No executions yet',
      status: 'Status',
      startTime: 'Start Time',
      duration: 'Duration',
      running: 'Running',
      completed: 'Completed',
      failed: 'Failed',
      cancelled: 'Cancelled',
      viewDetails: 'View Details',
      cancel: 'Cancel Execution',
      retry: 'Retry',
      nodeResults: 'Node Execution Results',
    },
    versions: {
      title: 'Version History',
      current: 'Current Version',
      rollback: 'Rollback to this version',
      rollbackConfirm: 'Are you sure you want to rollback to this version? Current changes will be lost.',
      rollbackSuccess: 'Rollback successful',
      rollbackError: 'Failed to rollback: ',
    },
    // Debug and monitoring
    debug: 'Debug',
    debugMode: 'Debug Mode',
    debugPanel: 'Debug Panel',
    startDebug: 'Start Debug',
    pauseDebug: 'Pause',
    resumeDebug: 'Resume',
    stepDebug: 'Step',
    stopDebug: 'Stop',
    debugContext: 'Debug Context',
    simulatedMessage: 'Simulated Message',
    simulatedMessagePlaceholder: 'Enter the message content to simulate',
    senderId: 'Sender ID',
    senderIdPlaceholder: 'Sender unique identifier',
    senderName: 'Sender Name',
    senderNamePlaceholder: 'Sender display name',
    conversationId: 'Conversation ID',
    conversationIdPlaceholder: 'Conversation unique identifier',
    isGroup: 'Group Chat',
    customVariables: 'Custom Variables',
    addVariable: 'Add Variable',
    variableName: 'Variable Name',
    variableValue: 'Variable Value',
    watchedVariables: 'Watched Variables',
    addWatchVariable: 'Add Watch',
    nodeStates: 'Node States',
    breakpoints: 'Breakpoints',
    toggleBreakpoint: 'Toggle Breakpoint',
    breakpointSet: 'Breakpoint set',
    breakpointRemoved: 'Breakpoint removed',
    debugLogs: 'Debug Logs',
    noLogs: 'No logs yet',
    clearLogs: 'Clear Logs',
    autoScroll: 'Auto Scroll',
    debugState: {
      idle: 'Idle',
      running: 'Running',
      paused: 'Paused',
      completed: 'Completed',
      error: 'Error',
    },
    nodeStatus: {
      pending: 'Pending',
      running: 'Running',
      completed: 'Completed',
      failed: 'Failed',
      skipped: 'Skipped',
    },
    debugDialog: {
      title: 'Workflow Chat',
      selectWorkflow: 'Select Workflow',
      sessionType: 'Session Type',
      privateChat: 'Private Chat',
      groupChat: 'Group Chat',
      send: 'Send',
      reset: 'Reset Conversation',
      inputPlaceholder: 'Send {{type}} message...',
      noMessages: 'No messages',
      userMessage: 'User',
      botMessage: 'Bot',
      sendFailed: 'Send failed',
      resetSuccess: 'Conversation reset successfully',
      resetFailed: 'Reset failed',
      loadMessagesFailed: 'Failed to load messages',
      loadWorkflowsFailed: 'Failed to load workflows',
      atTips: 'Mention bot',
      streaming: 'Streaming',
      streamOutput: 'Stream',
      connected: 'WebSocket connected',
      disconnected: 'WebSocket disconnected',
      connectionError: 'WebSocket connection error',
      connectionFailed: 'WebSocket connection failed',
      notConnected: 'WebSocket not connected, please try again later',
      imageUploadFailed: 'Image upload failed',
      reply: 'Reply',
      replyTo: 'Reply to',
      showMarkdown: 'Render',
      showRaw: 'Raw',
      allMembers: 'All Members',
      file: 'File',
      voice: 'Voice',
      uploadImage: 'Upload Image',
      uploading: 'Uploading...',
    },
    // Execution history and monitoring
    filterByDate: 'Filter by Date',
    allTime: 'All Time',
    today: 'Today',
    lastWeek: 'Last Week',
    lastMonth: 'Last Month',
    showingExecutions: 'Showing {{shown}} / {{total}} executions',
    rerun: 'Rerun',
    rerunExecution: 'Rerun Execution',
    logs: 'Logs',
    details: 'Details',
    completedAt: 'Completed At',
    noNodeExecutions: 'No node executions yet',
    // Node config field labels (used by DynamicFormComponent)
    nodeConfigFields: {
      // trigger.py - MessageTriggerNode
      conditions: 'Trigger Conditions',
      keyword_filter: 'Keyword Filter',
      regex_filter: 'Regex Filter',
      min_length: 'Min Length',
      max_length: 'Max Length',
      require_mention: 'Require Mention',
      respond_rules: 'Group Respond Rules',
      access_control: 'Access Control',
      // trigger.py - CronTriggerNode
      cron: 'Cron Expression',
      timezone: 'Timezone',
      // trigger.py - WebhookTriggerNode
      path: 'Webhook Path',
      allowed_methods: 'Allowed HTTP Methods',
      content_type: 'Content-Type',
      auth_type: 'Authentication Type',
      auth_key: 'Auth Key',
      validation: 'Request Validation',
      timeout: 'Timeout',
      // trigger.py - EventTriggerNode
      event_types: 'Event Types',
      filter: 'Event Filter',
      debounce_ms: 'Debounce Time',
      // process.py - LLMCallNode
      model: 'Model',
      prompt_template: 'Prompt Template',
      system_prompt: 'System Prompt',
      temperature: 'Temperature',
      top_p: 'Top P',
      frequency_penalty: 'Frequency Penalty',
      presence_penalty: 'Presence Penalty',
      max_tokens: 'Max Tokens',
      stop_sequences: 'Stop Sequences',
      seed: 'Random Seed',
      stream: 'Stream Output',
      use_conversation_history: 'Use Conversation History',
      // process.py - CodeExecutorNode
      language: 'Programming Language',
      code: 'Code',
      // process.py - HTTPRequestNode
      url: 'Request URL',
      method: 'Request Method',
      auth_config: 'Auth Configuration',
      // process.py - DataTransformNode
      transform_type: 'Transform Type',
      template: 'Template',
      expression: 'Expression',
      output_type: 'Output Type',
      // process.py - QuestionClassifierNode
      categories: 'Categories',
      instruction: 'Instruction',
      // process.py - ParameterExtractorNode
      parameters: 'Parameter Definitions',
      // process.py - KnowledgeRetrievalNode
      knowledge_bases: 'Knowledge Bases',
      top_k: 'Top K Results',
      score_threshold: 'Score Threshold',
      search_method: 'Search Method',
      enable_citations: 'Enable Citations',
      // control.py - ConditionNode
      condition_type: 'Condition Type',
      condition_expression: 'Condition Expression',
      left_value: 'Left Value',
      operator: 'Comparison Operator',
      right_value: 'Right Value',
      // control.py - SwitchNode
      cases: 'Branch Cases',
      // control.py - LoopNode
      max_iterations: 'Max Iterations',
      break_condition: 'Break Condition',
      // control.py - IteratorNode
      parallel: 'Parallel Processing',
      max_concurrency: 'Max Concurrency',
      // control.py - ParallelNode
      branches: 'Branch Configuration',
      wait_all: 'Wait All',
      fail_fast: 'Fail Fast',
      // control.py - WaitNode
      duration: 'Duration',
      duration_type: 'Time Unit',
      // control.py - MergeNode
      merge_strategy: 'Merge Strategy',
      // control.py - VariableAggregatorNode
      variable_mappings: 'Variable Mappings',
      aggregation_mode: 'Aggregation Mode',
      // action.py - SendMessageNode
      target_type: 'Target Type',
      target_id: 'Target ID',
      platform: 'Platform',
      message_type: 'Message Type',
      // action.py - ReplyMessageNode
      reply_mode: 'Reply Mode',
      message_template: 'Message Template',
      long_text_processing: 'Long Text Processing',
      force_delay: 'Force Delay',
      // action.py - CallPipelineNode
      pipeline_uuid: 'Pipeline',
      inherit_context: 'Inherit Context',
      // action.py - StoreDataNode
      storage_type: 'Storage Type',
      ttl: 'TTL',
      key_prefix: 'Key Prefix',
      // action.py - SetVariableNode
      variable_name: 'Variable Name',
      variable_scope: 'Variable Scope',
      set_variable_operation: 'Operation Type',
      // action.py - OpeningStatementNode
      statement: 'Opening Statement',
      suggested_questions: 'Suggested Questions',
      show_suggestions: 'Show Suggestions',
      // action.py - EndNode
      output_format: 'Output Format',
      success_message: 'Success Message',
      // integration.py - DatabaseQueryNode
      connection_type: 'Database Type',
      connection_string: 'Connection String',
      query: 'SQL Query',
      query_type: 'Query Type',
      // integration.py - RedisOperationNode
      connection_url: 'Connection URL',
      operation: 'Operation Type',
      key_template: 'Key Template',
      hash_field: 'Hash Field',
      // integration.py - MCPToolNode
      server_name: 'Server Name',
      tool_name: 'Tool Name',
      arguments_template: 'Arguments Template',
      // integration.py - MemoryStoreNode
      scope: 'Scope',
      // integration.py - DifyWorkflowNode
      'base-url': 'Base URL',
      'api-key': 'API Key',
      'app-type': 'App Type',
      // integration.py - DifyKnowledgeQueryNode
      dataset_id: 'Dataset ID',
      // integration.py - N8nWorkflowNode
      'webhook-url': 'Webhook URL',
      // integration.py - LangflowFlowNode
      'flow-id': 'Flow ID',
      // integration.py - CozeBotNode
      'bot-id': 'Bot ID',
      'api-base': 'API Base URL',
    },
    // Node outputs i18n
    nodeOutputs: {
      // trigger.py - MessageTriggerNode
      message: 'Message Content',
      sender_id: 'Sender ID',
      sender_name: 'Sender Name',
      platform: 'Platform',
      conversation_id: 'Conversation ID',
      is_group: 'Is Group Chat',
      context: 'Full Message Context',
      // trigger.py - CronTriggerNode
      timestamp: 'Trigger Time',
      schedule: 'Trigger Schedule',
      cron_timestamp: 'Cron Timestamp',
      cron_schedule: 'Cron Schedule',
      cron_context: 'Cron Context',
      // trigger.py - WebhookTriggerNode
      body: 'Request Body',
      headers: 'Request Headers',
      query: 'Query Parameters',
      method: 'Request Method',
      webhook_body: 'Webhook Body',
      webhook_headers: 'Webhook Headers',
      webhook_query: 'Webhook Query',
      webhook_method: 'Webhook Method',
      // trigger.py - EventTriggerNode
      event_type: 'Event Type',
      event_data: 'Event Data',
      event_timestamp: 'Event Timestamp',
      // process.py - LLMCallNode
      response: 'Model Response',
      usage: 'Token Usage Statistics',
      prompt: 'Prompt/Question',
      context_info: 'Context Information',
      // process.py - CodeExecutorNode
      output: 'Output Data',
      console: 'Console Output',
      code_input: 'Code Input',
      code_output: 'Code Output',
      // process.py - HTTPRequestNode
      status_code: 'Status Code',
      http_body: 'HTTP Body',
      http_headers: 'HTTP Headers',
      http_response: 'HTTP Response',
      response_headers: 'Response Headers',
      // process.py - DataTransformNode
      result: 'Transform Result',
      transform_input: 'Transform Input',
      transform_result: 'Transform Result',
      // process.py - QuestionClassifierNode
      category: 'Category Result',
      confidence: 'Confidence',
      all_scores: 'All Category Scores',
      question: 'User Question',
      // process.py - ParameterExtractorNode
      parameters: 'Extracted Parameters',
      extraction_success: 'Extraction Success',
      extract_text: 'Input Text',
      // process.py - KnowledgeRetrievalNode
      documents: 'Retrieved Documents',
      citations: 'Citation Information',
      knowledge_context: 'Merged Context',
      knowledge_query: 'Retrieval Query',
      // control.py - ConditionNode
      true: 'True Branch Output',
      false: 'False Branch Output',
      condition_input: 'Condition Input',
      // control.py - SwitchNode
      matched_case: 'Matched Branch Output',
      default: 'Default Branch Output',
      switch_input: 'Switch Input',
      // control.py - LoopNode
      item: 'Current Item',
      index: 'Current Index',
      results: 'All Iteration Results',
      completed: 'Is Completed',
      loop_items: 'Items to Iterate',
      // control.py - IteratorNode
      is_first: 'Is First',
      is_last: 'Is Last',
      iterator_array: 'Input Array',
      iterator_item: 'Current Element',
      iterator_index: 'Current Index',
      // control.py - ParallelNode
      errors: 'Error List',
      parallel_input: 'Parallel Input',
      parallel_results: 'All Branch Results',
      // control.py - WaitNode
      wait_input: 'Passthrough Input',
      wait_output: 'Passthrough Output',
      // control.py - MergeNode
      merged: 'Merged Result',
      merge_array: 'Array Result',
      merge_input_1: 'Input 1',
      merge_input_2: 'Input 2',
      merge_input_3: 'Input 3',
      merge_input_4: 'Input 4',
      // control.py - VariableAggregatorNode
      aggregated: 'Aggregated Variables',
      aggregator_variables: 'Variable Input',
      // action.py - SendMessageNode
      status: 'Send Status',
      message_id: 'Message ID',
      target: 'Target ID',
      // action.py - ReplyMessageNode
      reply_message: 'Reply Content',
      // action.py - CallPipelineNode
      pipeline_response: 'Pipeline Response',
      pipeline_result: 'Full Result',
      pipeline_query: 'Query Content',
      context_data: 'Context Data',
      // action.py - StoreDataNode
      store_status: 'Store Status',
      store_key: 'Store Key',
      store_value: 'Store Value',
      // action.py - SetVariableNode
      variable_value: 'Variable Value',
      variable_result: 'Set Variable Result',
      // action.py - OpeningStatementNode
      statement: 'Opening Statement',
      suggested_questions: 'Suggested Questions',
      // action.py - EndNode
      workflow_output: 'Workflow Output',
      final_result: 'Final Result',
      // integration.py - DatabaseQueryNode
      query_results: 'Query Results',
      row_count: 'Affected/Returned Rows',
      query_success: 'Query Success',
      query_params: 'Query Parameters',
      // integration.py - RedisOperationNode
      redis_result: 'Operation Result',
      redis_success: 'Operation Success',
      redis_key: 'Redis Key',
      redis_value: 'Redis Value',
      error: 'Error Message',
      plugin_input: 'Plugin Input',
      // integration.py - MCPToolNode
      tool_result: 'Tool Execution Result',
      tool_success: 'Tool Call Success',
      mcp_arguments: 'Tool Arguments',
      // integration.py - MemoryStoreNode
      memory_result: 'Retrieved/Stored Value',
      memory_success: 'Operation Success',
      memory_value: 'Value to Store',
      // integration.py - DifyWorkflowNode
      answer: 'Dify Answer',
      dify_success: 'Call Success',
      dify_query: 'User Input/Query',
      dify_conversation_id: 'Conversation ID',
      // integration.py - DifyKnowledgeQueryNode
      search_results: 'Search Results',
      knowledge_base_query: 'Query Content',
      // integration.py - N8nWorkflowNode
      n8n_result: 'Workflow Execution Result',
      n8n_success: 'Call Success',
      n8n_payload: 'Workflow Input Data',
      // integration.py - LangflowFlowNode
      flow_result: 'Flow Execution Result',
      flow_success: 'Call Success',
      langflow_input: 'Input Content',
      // integration.py - CozeBotNode
      bot_answer: 'Bot Reply',
      bot_success: 'Call Success',
      coze_query: 'User Input/Query',
      coze_conversation_id: 'Conversation ID',
      bot_conversation_id: 'Conversation ID',
    },
  },

};

export default ruRU;
