b5a1c88f75
Add a dedicated cancel route so users can skip mid-conversation OAuth without token verification, and restyle OAuth/approval cards to match AgentStreamDisplay with compact inline actions.
5857 lines
374 KiB
TypeScript
Executable File
5857 lines
374 KiB
TypeScript
Executable File
export default {
|
||
menu: {
|
||
knowledgeBase: 'База знаний',
|
||
chat: 'Диалог',
|
||
newChat: 'Новый диалог',
|
||
createChat: 'Создать диалог',
|
||
tenant: 'Информация об аккаунте',
|
||
settings: 'Настройки системы',
|
||
logout: 'Выход',
|
||
uploadKnowledge: 'Загрузить знания',
|
||
deleteRecord: 'Удалить запись',
|
||
clearMessages: 'Очистить сообщения',
|
||
clearMessagesSuccess: 'Сообщения очищены',
|
||
clearMessagesFailed: 'Не удалось очистить сообщения, попробуйте позже',
|
||
batchManage: 'Пакетное управление',
|
||
newSession: 'Новый диалог',
|
||
pin: 'Закрепить',
|
||
unpin: 'Открепить',
|
||
pinned: 'Закреплено',
|
||
pinFailed: 'Не удалось закрепить, попробуйте позже',
|
||
unpinFailed: 'Не удалось открепить, попробуйте позже',
|
||
confirmLogout: 'Вы уверены, что хотите выйти?',
|
||
systemInfo: 'Информация о системе',
|
||
search: 'Поиск',
|
||
collapseSidebar: 'Свернуть боковую панель',
|
||
expandSidebar: 'Развернуть боковую панель',
|
||
logoutSuccess: 'Вы вышли из системы',
|
||
myChats: 'Мои чаты',
|
||
embedChats: 'Веб-встраивание',
|
||
embedChannelNamed: 'Веб-встраивание · {name}',
|
||
groupBy: 'Группировать',
|
||
groupNone: 'Нет',
|
||
groupDate: 'Дата',
|
||
channelsSection: 'Чаты каналов',
|
||
chatsSection: 'Веб-чаты',
|
||
otherSources: 'Другие источники',
|
||
noSessions: 'Пока нет диалогов',
|
||
loadMoreSessions: 'Загрузить ещё',
|
||
agents: 'Агенты',
|
||
integrations: 'Публикация и интеграция',
|
||
organizations: 'Общие пространства'
|
||
},
|
||
newUserGuide: {
|
||
stepOf: '{current} / {total}',
|
||
skip: 'Пропустить',
|
||
prev: 'Назад',
|
||
next: 'Далее',
|
||
done: 'Готово',
|
||
reopen: 'Обучение',
|
||
steps: {
|
||
welcome: {
|
||
title: 'Добро пожаловать в WeKnora',
|
||
desc: 'Несколько простых шагов познакомят вас с базами знаний, чатом и агентами. Нажмите «Далее», чтобы начать.',
|
||
},
|
||
knowledge: {
|
||
title: 'Создайте базу знаний',
|
||
desc: 'С этого всё начинается: загружайте документы, веб-страницы или FAQ, и WeKnora автоматически разберёт и проиндексирует их. Нажмите здесь, чтобы открыть базы знаний.',
|
||
},
|
||
chat: {
|
||
title: 'Начните чат с ИИ',
|
||
desc: 'Задавайте вопросы на основе вашей базы знаний и получайте точные ответы со ссылками на источники. Нажмите здесь, чтобы начать новый чат.',
|
||
},
|
||
agents: {
|
||
title: 'Создавайте собственных агентов',
|
||
desc: 'Объединяйте базы знаний, промпты и инструменты в переиспользуемых агентов, закрепляя свою экспертизу.',
|
||
},
|
||
settings: {
|
||
title: 'Аккаунт и настройки',
|
||
desc: 'Откройте это меню, чтобы управлять аккаунтом, участниками и системными настройками. Обучение можно снова открыть кнопкой помощи рядом с именем вверху меню.',
|
||
},
|
||
models: {
|
||
title: 'Настройте модели',
|
||
desc: 'Ключевой шаг: добавьте модели чата, эмбеддингов и другие в управлении моделями, чтобы базы знаний и чат работали. Нажмите «Добавить модель», чтобы начать.',
|
||
},
|
||
done: {
|
||
title: 'Всё готово',
|
||
desc: 'Теперь вы знаете основы — начните создавать своего помощника на основе знаний! Вернуться к обучению можно кнопкой помощи рядом с именем в этом меню.',
|
||
},
|
||
},
|
||
},
|
||
contextualGuide: {
|
||
stepOf: '{current} / {total}',
|
||
skip: 'Пропустить',
|
||
prev: 'Назад',
|
||
next: 'Далее',
|
||
done: 'Понятно',
|
||
interactHint: 'Нажмите на выделенную область, чтобы продолжить',
|
||
kbList: {
|
||
steps: {
|
||
create: {
|
||
title: 'Создайте первую базу знаний',
|
||
desc: 'В базах знаний хранятся документы и FAQ. Нажмите выделенную кнопку «Новая база знаний» ниже — мы проведём вас по форме.',
|
||
},
|
||
},
|
||
},
|
||
tenantModels: {
|
||
needModelsFirst: 'Сначала добавьте модель чата и Embedding, затем создавайте базу знаний.',
|
||
needChatModelFirst: 'Перед созданием агента добавьте модель чата (KnowledgeQA).',
|
||
steps: {
|
||
intro: {
|
||
title: 'Сначала настройте модели',
|
||
desc: 'Для документной базы нужна модель чата (сводки и ответы) и модель Embedding (векторный поиск). Добавьте их в системных настройках.',
|
||
},
|
||
addModel: {
|
||
title: 'Добавить модели',
|
||
desc: 'Нажмите «Добавить модель» и настройте типы KnowledgeQA (чат) и Embedding. В Lite можно загрузить локальные модели через Ollama.',
|
||
},
|
||
done: {
|
||
title: 'Затем продолжите',
|
||
desc: 'После сохранения моделей закройте настройки и нажмите «Новая база знаний». Мастер проведёт через тип, индексацию и привязку моделей.',
|
||
},
|
||
},
|
||
stepsAgent: {
|
||
intro: {
|
||
title: 'Сначала настройте модель чата',
|
||
desc: 'Для создания агента нужна хотя бы одна модель KnowledgeQA. Добавьте её в системных настройках (Embedding нужен только для баз знаний).',
|
||
},
|
||
addModel: {
|
||
title: 'Добавить модель чата',
|
||
desc: 'Нажмите «Добавить модель» и настройте тип KnowledgeQA.',
|
||
},
|
||
done: {
|
||
title: 'Затем создайте агента',
|
||
desc: 'После сохранения закройте настройки и нажмите «Создать агента». Мастер охватит режим, базы знаний и мультимодальные опции.',
|
||
},
|
||
},
|
||
},
|
||
kbCreate: {
|
||
steps: {
|
||
type: {
|
||
title: 'Выберите тип',
|
||
desc: 'Для PDF, Word и похожих файлов — база документов. Для пар вопрос–ответ — база FAQ. Тип после создания изменить нельзя.',
|
||
},
|
||
name: {
|
||
title: 'Введите название',
|
||
desc: 'Например «Руководство продукта» или «FAQ поддержки». Описание необязательно.',
|
||
},
|
||
indexing: {
|
||
title: 'Возможности индексации',
|
||
desc: 'По умолчанию включены векторный и ключевой поиск. Можно включить Wiki или граф знаний. Оставьте хотя бы один режим поиска.',
|
||
},
|
||
navModels: {
|
||
title: 'Модели (обязательно)',
|
||
desc: 'Каждой базе нужна модель чата; для поиска также нужен Embedding. Откройте «Конфигурация моделей» слева.',
|
||
},
|
||
llm: {
|
||
title: 'Модель чата / сводки',
|
||
desc: 'Для сводок и ответов. Если список пуст, через выпадающий список откройте настройки и добавьте модель.',
|
||
},
|
||
embedding: {
|
||
title: 'Модель Embedding',
|
||
desc: 'Преобразует текст в векторы для семантического поиска. Работает с векторным/ключевым индексом выше.',
|
||
},
|
||
parser: {
|
||
title: 'Парсер (необязательно)',
|
||
desc: 'Как разбираются PDF и Office. По умолчанию подходит в большинстве случаев; меняйте при необходимости OCR.',
|
||
},
|
||
chunking: {
|
||
title: 'Разбиение (необязательно)',
|
||
desc: 'Как документ делится на фрагменты для поиска. Размеры по умолчанию подобраны для RAG.',
|
||
},
|
||
storage: {
|
||
title: 'Хранилище (необязательно)',
|
||
desc: 'Где хранятся исходные файлы (локально или объектное хранилище). Обычно достаточно значения арендатора.',
|
||
},
|
||
navMultimodal: {
|
||
title: 'Мультимодальность / изображения (необязательно)',
|
||
desc: 'Включите, если в документах много диаграмм, сканов или изображений, требующих визуального понимания.',
|
||
},
|
||
multimodalToggle: {
|
||
title: 'Включить мультимодальный разбор',
|
||
desc: 'При включении загрузки с изображениями обрабатываются VLM для лучшего поиска.',
|
||
},
|
||
multimodalVllm: {
|
||
title: 'Выберите модель VLM',
|
||
desc: 'Для мультимодальности нужна VLM. Если список пуст, добавьте модель в настройках.',
|
||
},
|
||
faq: {
|
||
title: 'Индексация FAQ',
|
||
desc: 'Выберите режим индексации пар вопрос–ответ. Записи FAQ можно добавить после создания.',
|
||
},
|
||
submit: {
|
||
title: 'Создать базу знаний',
|
||
desc: 'Проверьте тип, название и модели, затем нажмите выделенную кнопку «Создать». Далее подскажем загрузить первый документ.',
|
||
},
|
||
},
|
||
},
|
||
agentList: {
|
||
steps: {
|
||
create: {
|
||
title: 'Создайте агента',
|
||
desc: 'Агенты объединяют модели, базы знаний, инструменты и промпты в переиспользуемых помощников. Нажмите выделенную кнопку «Создать агента».',
|
||
},
|
||
},
|
||
},
|
||
agentCreate: {
|
||
steps: {
|
||
mode: {
|
||
title: 'Выберите режим работы',
|
||
desc: '«Быстрый ответ» для простого Q&A; «Умное рассуждение» — инструменты и многошаговое мышление для сложных задач.',
|
||
},
|
||
agentType: {
|
||
title: 'Выберите тип агента',
|
||
desc: 'Пресеты подставляют системный промпт, рекомендуемые инструменты и область знаний (например, построение Wiki, анализ данных). При смене типа обновляются имя и описание.',
|
||
},
|
||
name: {
|
||
title: 'Название и описание',
|
||
desc: 'Укажите узнаваемое имя. В режиме умного рассуждения может подставиться значение по умолчанию.',
|
||
},
|
||
navModel: {
|
||
title: 'Привязать модель чата',
|
||
desc: 'Каждому агенту нужна модель KnowledgeQA как движок рассуждений.',
|
||
},
|
||
model: {
|
||
title: 'Выбор модели',
|
||
desc: 'Выберите из настроенных моделей чата или сначала добавьте в системных настройках.',
|
||
},
|
||
navKnowledge: {
|
||
title: 'Связать базы знаний',
|
||
desc: 'Определите, к каким знаниям агент может обращаться. По умолчанию — все базы.',
|
||
},
|
||
knowledge: {
|
||
title: 'Область знаний',
|
||
desc: '«Все» — универсальный помощник; «Выбранные» — домен; «Нет» — только модель или веб-поиск.',
|
||
},
|
||
navWebsearch: {
|
||
title: 'Веб-поиск (необязательно)',
|
||
desc: 'Разрешить агенту вызывать внешний поиск для актуальной информации.',
|
||
},
|
||
navMultimodal: {
|
||
title: 'Загрузка изображений (необязательно)',
|
||
desc: 'Позволяет отправлять изображения в чате; нужна VLM в настройках.',
|
||
},
|
||
multimodal: {
|
||
title: 'Включить понимание изображений',
|
||
desc: 'Включите переключатель и выберите VLM ниже.',
|
||
},
|
||
navTools: {
|
||
title: 'Инструменты и MCP (необязательно)',
|
||
desc: 'В режиме умного рассуждения включите встроенные инструменты и MCP для поиска, кода и др.',
|
||
},
|
||
submit: {
|
||
title: 'Сохранить агента',
|
||
desc: 'Нажмите выделенную кнопку подтверждения. Затем выберите этого агента в чате.',
|
||
},
|
||
},
|
||
},
|
||
kbDetail: {
|
||
steps: {
|
||
intro: {
|
||
title: 'База знаний пуста',
|
||
desc: 'Добавьте первый материал, чтобы искать по нему и общаться в чате. Поддерживаемые файлы можно перетащить мышью.',
|
||
},
|
||
upload: {
|
||
title: 'Добавить документы',
|
||
desc: 'Здесь можно загрузить файлы или папки, импортировать URL или создать материал онлайн.',
|
||
},
|
||
done: {
|
||
title: 'Готово после индексации',
|
||
desc: 'После обработки документов укажите эту базу через @ в чате и получайте ответы со ссылками на источники.',
|
||
},
|
||
},
|
||
},
|
||
chat: {
|
||
steps: {
|
||
kb: {
|
||
title: 'Выберите область знаний',
|
||
desc: 'Нажмите @, чтобы выбрать одну или несколько баз знаний или файлов. Иначе используются настройки текущего агента.',
|
||
},
|
||
input: {
|
||
title: 'Введите вопрос',
|
||
desc: 'Опишите, что хотите узнать, или нажмите на рекомендуемый вопрос выше.',
|
||
},
|
||
send: {
|
||
title: 'Отправить, чтобы начать чат',
|
||
desc: 'После отправки создаётся новая сессия. ИИ отвечает на основе базы знаний и показывает цитаты.',
|
||
},
|
||
done: {
|
||
title: 'Можно исследовать',
|
||
desc: 'Задайте вопрос по загруженным документам и посмотрите ответы со ссылками на источники.',
|
||
},
|
||
},
|
||
},
|
||
},
|
||
batchManage: {
|
||
title: 'Управление диалогами',
|
||
selectAll: 'Выбрать все',
|
||
cancel: 'Отмена',
|
||
delete: 'Удалить диалоги',
|
||
deleteConfirmTitle: 'Удалить диалоги',
|
||
deleteConfirmBody: 'Вы уверены, что хотите удалить выбранные {count} диалог(ов)? Это действие необратимо.',
|
||
deleteAllConfirmBody: 'Вы уверены, что хотите удалить все диалоги? Это действие необратимо.',
|
||
deleteSuccess: 'Успешно удалено',
|
||
deleteFailed: 'Ошибка удаления, попробуйте позже',
|
||
noSelection: 'Выберите хотя бы один диалог',
|
||
loadFailed: 'Не удалось загрузить список диалогов'
|
||
},
|
||
knowledgeBase: {
|
||
title: 'База знаний',
|
||
list: 'Список баз знаний',
|
||
fileContent: 'Содержимое файла',
|
||
detail: 'Детали базы знаний',
|
||
create: 'Создать базу знаний',
|
||
edit: 'Редактировать базу знаний',
|
||
delete: 'Удалить базу знаний',
|
||
name: 'Название',
|
||
description: 'Описание',
|
||
files: 'Файлы',
|
||
settings: 'Настройки',
|
||
documentCategoryTitle: 'Теги документов',
|
||
faqCategoryTitle: 'Теги FAQ',
|
||
untagged: 'Без тега',
|
||
tagClearAction: 'Очистить выбор',
|
||
tagSearchTooltip: 'Поиск тегов',
|
||
tagUpdateSuccess: 'Тег успешно обновлен',
|
||
tagEditDialogHeading: 'Редактировать теги',
|
||
tagEditDialogTitle: 'Редактировать теги — {name}',
|
||
tagEditSearch: 'Поиск тегов...',
|
||
tagEditSelectedSection: 'Выбранные',
|
||
tagEditAvailableSection: 'Доступные',
|
||
tagEditNoSelected: 'Ничего не выбрано',
|
||
tagFilterAll: 'Все документы',
|
||
tagFilterTitle: 'Фильтр по тегу',
|
||
tagFilterPlaceholder: 'Теги',
|
||
tagFilterMulti: '{count} тегов',
|
||
tagManageTitle: 'Управление тегами',
|
||
tagManageDescription: 'Создание, переименование и удаление тегов базы знаний',
|
||
tagManageLink: 'Управление тегами…',
|
||
tagManageListSection: 'Список тегов',
|
||
tagManageDocCount: '{count} документов',
|
||
tagManageFaqCount: '{count} записей FAQ',
|
||
tagSelectedCount: 'Выбрано: {count}',
|
||
tagOverflowTip: 'Нажмите, чтобы изменить теги',
|
||
tagNewPlaceholder: 'Название нового тега, Enter для добавления',
|
||
category: 'Тег',
|
||
tagCreateAction: 'Создать тег',
|
||
tagSearchPlaceholder: 'Введите название тега',
|
||
tagNamePlaceholder: 'Введите название тега',
|
||
tagNameRequired: 'Пожалуйста, укажите название тега',
|
||
tagCreateSuccess: 'Тег создан',
|
||
tagEditSuccess: 'Тег обновлён',
|
||
tagDeleteTitle: 'Удаление тега',
|
||
tagDeleteDesc: 'Удалить тег «{name}»? Все записи FAQ под этим тегом также будут удалены.',
|
||
tagDeleteDescDoc: 'Удалить тег «{name}»? Все документы под этим тегом также будут удалены.',
|
||
tagDeleteSuccess: 'Тег удалён',
|
||
tagEditAction: 'Переименовать',
|
||
tagDeleteAction: 'Удалить',
|
||
tagEmptyResult: 'Подходящие теги не найдены',
|
||
tagLabel: 'Тег',
|
||
tagPlaceholder: 'Выберите теги',
|
||
noTags: 'Нет тегов',
|
||
upload: 'Загрузить файл',
|
||
uploadSuccess: 'Файл успешно загружен!',
|
||
uploadFailed: 'Ошибка загрузки файла!',
|
||
docActionUnsupported: 'Этот тип базы знаний не поддерживает данную операцию',
|
||
fileExists: 'Файл уже существует',
|
||
uploadingMultiple: 'Загрузка {total} файлов...',
|
||
uploadAllSuccess: 'Успешно загружено {count} файлов!',
|
||
uploadPartialSuccess: 'Загрузка завершена: успешно {success}, ошибка {fail}',
|
||
uploadAllFailed: 'Все файлы не удалось загрузить',
|
||
uploadingFolder: 'Загрузка {total} файлов из папки...',
|
||
uploadingValidFiles: 'Загрузка {valid}/{total} действительных файлов...',
|
||
noValidFiles: 'Нет действительных файлов',
|
||
noValidFilesInFolder: 'Все {total} файлов в папке не поддерживаются',
|
||
noValidFilesSelected: 'Все выбранные файлы не поддерживаются',
|
||
hiddenFilesFiltered: 'Отфильтровано {count} скрытых файлов',
|
||
imagesFilteredNoVLM: 'Отфильтровано {count} изображений (VLM не включен)',
|
||
videosFilteredNoVLM: 'Пропущено {count} видеофайлов (загрузка видео не поддерживается)',
|
||
audiosFilteredNoASR: 'Отфильтровано {count} аудиофайлов (ASR не включен)',
|
||
invalidFilesFiltered: 'Отфильтровано {count} неподдерживаемых файлов',
|
||
unsupportedFileType: 'Неподдерживаемый тип файла',
|
||
unsupportedTypesHint: 'Некоторые типы документов ({types}) не имеют доступного парсера и не могут быть обработаны',
|
||
goToParserSettings: 'Настроить',
|
||
failedFilesList: 'Неудавшиеся файлы:',
|
||
andMoreFiles: '...и ещё {count} файлов',
|
||
duplicateFilesSkipped: 'Пропущено {count} повторяющихся файлов',
|
||
uploadFile: 'Загрузить файл',
|
||
uploadFileDesc: 'Поддерживает PDF, Word, TXT, изображения, аудио и т.д.',
|
||
importURL: 'Импорт из URL',
|
||
importURLDesc: 'Импорт по ссылке URL',
|
||
importURLTitle: 'Импорт из URL',
|
||
manualCreate: 'Создать вручную',
|
||
manualCreateDesc: 'Написать содержимое документа напрямую',
|
||
urlRequired: 'Пожалуйста, введите URL',
|
||
invalidURL: 'Пожалуйста, введите корректный URL',
|
||
urlImportSuccess: 'URL успешно импортирован!',
|
||
urlImportFailed: 'Ошибка импорта URL!',
|
||
urlExists: 'Этот URL уже существует',
|
||
urlLabel: 'Адрес URL',
|
||
urlPlaceholder: 'Введите URL веб-страницы, например: https://example.com',
|
||
urlTip: 'Поддерживает импорт различного веб-содержимого. Система автоматически извлечет и проанализирует текстовое содержимое с веб-страницы',
|
||
typeURL: 'URL',
|
||
typeManual: 'Вручную',
|
||
typeFile: 'Файл',
|
||
channelLabel: 'Канал источника',
|
||
channelWeb: 'Веб',
|
||
channelApi: 'API',
|
||
channelBrowserExtension: 'Расширение браузера',
|
||
channelWechat: 'WeChat',
|
||
channelWecom: 'WeCom',
|
||
channelFeishu: 'Feishu',
|
||
channelDingtalk: 'DingTalk',
|
||
channelSlack: 'Slack',
|
||
channelIm: 'IM канал',
|
||
channelNotion: 'Notion',
|
||
channelYuque: 'Yuque',
|
||
channelUpload: 'Загрузка',
|
||
channelManual: 'Вручную',
|
||
channelUrl: 'Веб',
|
||
channelUnknown: 'Неизвестно',
|
||
urlSource: 'Исходный URL',
|
||
documentTitle: 'Название документа',
|
||
webContent: 'Веб-содержимое',
|
||
documentContent: 'Содержимое документа',
|
||
importTime: 'Время импорта',
|
||
createTime: 'Время создания',
|
||
characters: 'символов',
|
||
segment: 'Фрагмент',
|
||
chunkCount: 'Всего {count} фрагментов',
|
||
viewOriginal: 'Просмотр исходного файла',
|
||
viewChunks: 'Просмотр фрагментов',
|
||
viewMerged: 'Полный текст',
|
||
originalFileNotSupported: 'Этот тип файла не поддерживает просмотр исходного файла. Пожалуйста, загрузите для просмотра.',
|
||
loadOriginalFailed: 'Не удалось загрузить содержимое исходного файла',
|
||
questions: 'Вопросы',
|
||
generatedQuestions: 'Сгенерированные вопросы',
|
||
childChunk: 'Дочерний блок',
|
||
viewParentContext: 'Просмотр родительского контекста',
|
||
parentContextLoadFailed: 'Не удалось загрузить родительский контекст',
|
||
confirmDeleteQuestion: 'Вы уверены, что хотите удалить этот вопрос? Соответствующий векторный индекс также будет удален.',
|
||
legacyQuestionCannotDelete: 'Вопросы в устаревшем формате нельзя удалить. Пожалуйста, сгенерируйте вопросы заново.',
|
||
notInitialized: 'База знаний не инициализирована. Пожалуйста, настройте модели в разделе настроек перед загрузкой файлов',
|
||
missingStorageEngine: 'Для этой базы знаний не выбрано хранилище. Пожалуйста, настройте хранилище в параметрах перед загрузкой содержимого.',
|
||
missingStorageEngineUpload: 'Пожалуйста, настройте хранилище перед загрузкой содержимого',
|
||
goToStorageSettings: 'Перейти к настройкам',
|
||
getInfoFailed: 'Не удалось получить информацию о базе знаний, загрузка файла невозможна',
|
||
missingId: 'Отсутствует ID базы знаний',
|
||
deleteFailed: 'Не удалось удалить. Пожалуйста, попробуйте позже!',
|
||
quickActions: 'Быстрые действия',
|
||
createKnowledgeBase: 'Создать базу знаний',
|
||
knowledgeBaseName: 'Название базы знаний',
|
||
enterName: 'Введите название базы знаний',
|
||
embeddingModel: 'Модель встраивания',
|
||
selectEmbeddingModel: 'Выберите модель встраивания',
|
||
summaryModel: 'Модель суммаризации',
|
||
selectSummaryModel: 'Выберите модель суммаризации',
|
||
rerankModel: 'Модель ранжирования',
|
||
selectRerankModel: 'Выберите модель ранжирования (опционально)',
|
||
createSuccess: 'База знаний успешно создана',
|
||
createFailed: 'Не удалось создать базу знаний',
|
||
updateSuccess: 'База знаний успешно обновлена',
|
||
updateFailed: 'Не удалось обновить базу знаний',
|
||
deleteConfirm: 'Вы уверены, что хотите удалить эту базу знаний?',
|
||
fileName: 'Имя файла',
|
||
fileSize: 'Размер файла',
|
||
uploadTime: 'Время загрузки',
|
||
status: 'Статус',
|
||
actions: 'Действия',
|
||
processing: 'Обработка',
|
||
completed: 'Завершено',
|
||
failed: 'Ошибка',
|
||
noFiles: 'Нет файлов',
|
||
dragFilesHere: 'Перетащите файлы сюда или',
|
||
clickToUpload: 'нажмите для загрузки',
|
||
supportedFormats: 'Поддерживаемые форматы',
|
||
maxFileSize: 'Макс. размер файла',
|
||
viewDetails: 'Просмотр деталей',
|
||
downloadFile: 'Скачать файл',
|
||
deleteFile: 'Удалить файл',
|
||
confirmDeleteFile: 'Вы уверены, что хотите удалить этот файл?',
|
||
totalFiles: 'Всего файлов',
|
||
totalSize: 'Общий размер',
|
||
newSession: 'Новый диалог',
|
||
editDocument: 'Редактировать документ',
|
||
draft: 'Черновик',
|
||
draftTip: 'Временно сохранён, не участвует в поиске',
|
||
untitledDocument: 'Документ без названия',
|
||
deleteDocument: 'Удалить документ',
|
||
moveDocument: 'Переместить в...',
|
||
moveToKnowledgeBase: 'Переместить в базу знаний',
|
||
moveSelectTarget: 'Выберите целевую базу знаний',
|
||
moveNoTargets: 'Совместимые базы знаний не найдены (требуется одинаковый тип и модель эмбеддинга)',
|
||
moveMode: 'Режим перемещения',
|
||
moveModeReuseVectors: 'Повторное использование векторов (быстро)',
|
||
moveModeReuseVectorsDesc: 'Прямое перемещение чанков и векторных индексов. Используйте при одинаковой конфигурации разбиения.',
|
||
moveModeReparse: 'Повторный парсинг',
|
||
moveModeReparseDesc: 'Повторный парсинг документов с конфигурацией разбиения целевой базы знаний.',
|
||
moveConfirm: 'Подтвердить перемещение',
|
||
moveConfirmTitle: 'Подтвердите настройки перемещения',
|
||
moveStarted: 'Задача перемещения отправлена',
|
||
moveFailed: 'Перемещение не удалось',
|
||
moveCompleted: 'Перемещение завершено',
|
||
moveCompletedWithErrors: 'Перемещение завершено: {success} успешно, {failed} не удалось',
|
||
moveProgress: 'Перемещение...',
|
||
parsingFailed: 'Парсинг не удался',
|
||
parsingInProgress: 'Парсинг...',
|
||
generatingSummary: 'Генерация резюме...',
|
||
documentSummary: 'Резюме',
|
||
detailSectionMeta: 'Основная информация',
|
||
deleteConfirmation: 'Подтверждение удаления',
|
||
confirmDeleteDocument: 'Подтвердить удаление документа "{fileName}", после удаления восстановление невозможно',
|
||
cancel: 'Отмена',
|
||
confirmDelete: 'Подтвердить удаление',
|
||
viewModeGrid: 'Сетка',
|
||
viewModeList: 'Список',
|
||
viewModeToggle: 'Переключить вид',
|
||
columnName: 'Имя',
|
||
columnTag: 'Тег',
|
||
columnSize: 'Размер',
|
||
columnType: 'Тип',
|
||
columnSource: 'Источник',
|
||
columnStatus: 'Статус',
|
||
columnUpdatedAt: 'Обновлено',
|
||
columnActions: 'Действия',
|
||
selectAll: 'Выбрать все',
|
||
selectedCount: 'Выбрано: {count}',
|
||
clearSelection: 'Снять выделение',
|
||
batchDelete: 'Удалить выбранные',
|
||
batchDeleteConfirmation: 'Подтверждение пакетного удаления',
|
||
confirmBatchDeleteDocument: 'Удалить {count} выбранных документов? Это действие нельзя отменить.',
|
||
batchDeleteSuccess: 'Удалено документов: {count}',
|
||
batchDeleteFailed: 'Ошибка пакетного удаления',
|
||
confirmBatchReparseDocument: 'Пересобрать {count} выбранных документов? Существующее содержимое будет удалено, и каждый документ будет обработан заново.',
|
||
confirmBatchReparse: 'Подтвердить и обработать заново',
|
||
batchReparseSuccess: 'Отправлено задач пересборки: {count}',
|
||
batchReparseFailed: 'Ошибка пакетной пересборки',
|
||
batchReparseSkippedInFlight: 'Пропущено документов, которые ещё обрабатываются: {count}',
|
||
statusCompleted: 'Завершено',
|
||
statusProcessing: 'Обработка',
|
||
statusFinalizing: 'Оптимизация',
|
||
statusPending: 'Ожидание',
|
||
statusFailed: 'Ошибка',
|
||
statusCancelled: 'Отменено',
|
||
statusDraft: 'Черновик',
|
||
selectKnowledgeBaseFirst: 'Пожалуйста, сначала выберите базу знаний',
|
||
sessionCreationFailed: 'Не удалось создать диалог',
|
||
sessionCreationError: 'Ошибка создания диалога',
|
||
settingsParsingFailed: 'Не удалось разобрать настройки',
|
||
fileUploadEventReceived: 'Получено событие загрузки файла, загруженный ID базы знаний: {uploadedKbId}, текущий ID базы знаний: {currentKbId}',
|
||
matchingKnowledgeBase: 'Совпадающая база знаний, начинаем обновление списка файлов',
|
||
routeParamChange: 'Изменение параметров маршрута, повторное получение содержимого базы знаний',
|
||
fileUploadEventListening: 'Прослушивание события загрузки файла',
|
||
apiCallKnowledgeFiles: 'Прямой вызов API для получения списка файлов базы знаний',
|
||
responseInterceptorData: 'Поскольку перехватчик ответа уже вернул data, result является частью данных ответа',
|
||
hookProcessing: 'Обработка в соответствии со способом useKnowledgeBase hook',
|
||
errorHandling: 'Обработка ошибок',
|
||
priorityCurrentPageKbId: 'Приоритет использования ID базы знаний текущей страницы',
|
||
fallbackLocalStorageKbId: 'Если на текущей странице нет ID базы знаний, попытка получить ID базы знаний из настроек в localStorage',
|
||
createNewKnowledgeBase: 'Создать базу знаний',
|
||
uninitializedWarning: 'Некоторые базы знаний не инициализированы, необходимо сначала настроить информацию о моделях в настройках, чтобы добавить документы знаний',
|
||
initializedStatus: 'Инициализирована',
|
||
notInitializedStatus: 'Не инициализирована',
|
||
needSettingsFirst: 'Необходимо сначала настроить информацию о моделях в настройках, чтобы добавить знания',
|
||
documents: 'Документы',
|
||
configureModelsFirst: 'Пожалуйста, сначала настройте информацию о моделях в настройках',
|
||
confirmDeleteKnowledgeBase: 'Подтвердить удаление этой базы знаний?',
|
||
createKnowledgeBaseDialog: 'Создать базу знаний',
|
||
enterNameKb: 'Введите название',
|
||
enterDescriptionKb: 'Введите описание',
|
||
createKb: 'Создать',
|
||
deleted: 'Удалено',
|
||
deleteFailedKb: 'Не удалось удалить',
|
||
noDescription: 'Нет описания',
|
||
emptyKnowledgeDragDrop: 'База знаний пуста, перетащите файлы для загрузки',
|
||
pdfDocFormat: 'Файлы pdf, doc формата, не более 10 МБ',
|
||
textMarkdownFormat: 'Файлы text, markdown формата, не более 200 КБ',
|
||
dragFileNotText: 'Пожалуйста, перетащите файлы, а не текст или ссылки',
|
||
searchPlaceholder: 'Поиск по базам знаний...',
|
||
docSearchPlaceholder: 'Поиск документов...',
|
||
fileTypeFilter: 'Тип файла',
|
||
allFileTypes: 'Все типы',
|
||
allTags: 'Все теги',
|
||
parseStatusFilter: 'Статус',
|
||
allParseStatuses: 'Все статусы',
|
||
parseStatusPending: 'Ожидание',
|
||
parseStatusProcessing: 'Обработка',
|
||
parseStatusCompleted: 'Завершено',
|
||
parseStatusFailed: 'Ошибка',
|
||
sourceFilter: 'Источник',
|
||
allSources: 'Все источники',
|
||
sourceWeb: 'Веб',
|
||
sourceApi: 'API',
|
||
sourceBrowserExtension: 'Расширение браузера',
|
||
sourceUpload: 'Загрузка',
|
||
sourceUrl: 'URL импорт',
|
||
sourceManual: 'Создан вручную',
|
||
updatedTimeFilter: 'Обновлено',
|
||
updatedTimeFrom: 'С',
|
||
updatedTimeTo: 'По',
|
||
noMatch: 'Совпадающих баз знаний не найдено',
|
||
noKnowledge: 'Нет доступных баз знаний',
|
||
loadingFailed: 'Не удалось загрузить базы знаний',
|
||
operationNotSupportedForType: 'Эта операция не поддерживается для текущего типа базы знаний',
|
||
allFilesSkippedNoEngine: 'Все выбранные файлы были пропущены из-за отсутствия парсера',
|
||
filesSkippedNoEngine: '{count} файл(ов) пропущено из-за отсутствия парсера',
|
||
allUploadSuccess: 'Все файлы загружены ({count})',
|
||
partialUploadSuccess: 'Частичная загрузка (успешно: {success}, ошибки: {fail})',
|
||
allUploadFailed: 'Все файлы не удалось загрузить ({count})',
|
||
deleteSuccess: 'Знание удалено!',
|
||
chunkLoadFailed: 'Не удалось загрузить фрагменты',
|
||
accessInfo: {
|
||
myRole: 'Моя роль',
|
||
roleOwner: 'Создатель',
|
||
permissionOwner: 'Редактирование, управление настройками, удаление базы знаний',
|
||
permissionAdmin: 'Редактирование, управление общим доступом',
|
||
permissionEditor: 'Редактирование документов и тегов',
|
||
permissionViewer: 'Только просмотр',
|
||
fromOrg: 'Из пространства',
|
||
sharedAt: 'Дата общего доступа',
|
||
lastUpdated: 'Последнее обновление'
|
||
},
|
||
infoCard: {
|
||
tooltip: 'Просмотр информации о базе знаний',
|
||
title: 'Информация о базе знаний',
|
||
basic: 'Основное',
|
||
access: 'Доступ',
|
||
binding: 'Привязка хранилища',
|
||
capabilities: 'Возможности',
|
||
stats: 'Статистика',
|
||
type: 'Тип',
|
||
createdAt: 'Создано',
|
||
source: 'Источник',
|
||
sharedTo: 'Общий доступ',
|
||
enabled: 'Включено',
|
||
vectorStore: 'Векторное хранилище',
|
||
fileStorage: 'Файловое хранилище',
|
||
documentCount: 'Документы',
|
||
faqCount: 'FAQ',
|
||
supportedFileTypes: 'Допустимые форматы',
|
||
chunking: 'Разделение',
|
||
parentShort: 'родитель',
|
||
childShort: 'потомок',
|
||
},
|
||
addDocument: 'Добавить документ',
|
||
createdAt: 'Создано',
|
||
updatedAt: 'Обновлено',
|
||
clickToViewFull: 'Нажмите для полного просмотра',
|
||
rebuildDocument: 'Пересобрать документ',
|
||
rebuildConfirm: 'Подтвердить пересборку документа "{fileName}"? Существующие фрагменты будут удалены и документ будет повторно проанализирован.',
|
||
rebuildSubmitted: 'Задача пересборки отправлена',
|
||
rebuildFailed: 'Ошибка пересборки, попробуйте позже',
|
||
rebuildInProgress: 'Документ сейчас анализируется, попробуйте позже',
|
||
cancelParse: 'Остановить разбор',
|
||
cancelParseConfirmBody: 'Остановить разбор «{title}»? Уже записанные фрагменты сохранятся, и их можно будет разобрать заново через «Пересобрать». Ожидающие задачи оптимизации (резюме / вопросы и ответы / граф знаний) будут немедленно отменены.',
|
||
cancelParseSubmitted: 'Разбор остановлен',
|
||
cancelParseFailed: 'Не удалось остановить, попробуйте позже'
|
||
},
|
||
uploadConfirm: {
|
||
title: 'Подтверждение загрузки',
|
||
fileList: 'Файлы для загрузки',
|
||
parseConfig: 'Настройки разбора',
|
||
configNav: 'Навигация по настройкам разбора',
|
||
tabOverview: 'Обзор',
|
||
overviewTitle: 'Настройки разбора для этой партии',
|
||
overviewDesc: 'Нажмите на строку, чтобы изменить',
|
||
backToOverview: 'Вернуться к обзору',
|
||
summaryChunkOverlapShort: 'Перекрытие {overlap}',
|
||
summaryParentChildShort: 'Родительско-дочернее',
|
||
summaryParserMode: 'Режим',
|
||
summaryParserBuiltin: 'Встроенный движок (по умолчанию)',
|
||
summaryParserForceScanned: 'режим скана',
|
||
summaryChunkSize: 'Размер чанка',
|
||
summaryChunkOverlap: 'Перекрытие',
|
||
summaryStrategy: 'Стратегия',
|
||
summaryStrategyDefault: 'По умолчанию',
|
||
summaryParentChild: 'Родительско-дочернее',
|
||
summaryParentChildOn: 'Вкл. (родитель {parent} / дочерний {child})',
|
||
summaryParentChildOff: 'Выкл.',
|
||
summaryStatus: 'Статус',
|
||
summaryModel: 'Модель',
|
||
summaryQuestionCount: 'Вопросов на чанк',
|
||
summaryQuestionCountValue: '{count}',
|
||
summaryGraphTags: 'Типы связей',
|
||
summaryGraphTagsValue: '{count}',
|
||
navChunkingSummary: 'Чанк {size}',
|
||
statusOn: 'Вкл.',
|
||
statusOff: 'Выкл.',
|
||
notSet: 'Не задано',
|
||
confirm: 'Загрузить и обработать',
|
||
cancel: 'Отмена',
|
||
uploading: 'Загрузка {current}/{total}',
|
||
tabParser: 'Парсер',
|
||
tabChunking: 'Разбиение',
|
||
tabMultimodal: 'Мультимодальность',
|
||
tabAsr: 'Аудио',
|
||
tabQuestion: 'Генерация вопросов',
|
||
tabGraph: 'Граф знаний',
|
||
noFiles: 'Оставьте хотя бы один файл для загрузки',
|
||
noItems: 'Добавьте хотя бы один файл или URL',
|
||
urlItemLabel: 'URL',
|
||
urlAdded: 'URL добавлен',
|
||
urlDuplicate: 'Этот URL уже в списке',
|
||
addUrl: 'Добавить',
|
||
vlmModelRequired: 'В партии есть изображения. Включите мультимодальность и выберите модель VLM.',
|
||
multimodalRequiredForImages: 'Выкл. (в партии есть изображения)',
|
||
asrModelRequired: 'В партии есть аудио. Включите ASR и выберите модель распознавания речи.',
|
||
asrRequiredForAudio: 'Выкл. (в партии есть аудио)',
|
||
vlmModelSelectRequired: 'Мультимодальность включена. Выберите модель VLM.',
|
||
asrModelSelectRequired: 'Распознавание речи включено. Выберите модель ASR.',
|
||
pdfForceScanned: {
|
||
label: 'Разбор PDF как сканированного документа',
|
||
description: 'Подходит для PDF с веб-печати, сканов и документов с большим числом изображений. Каждая страница будет отрендерена в изображение и обработана через OCR/VLM. Может увеличить время обработки и расходы на модели.'
|
||
},
|
||
continueAdd: 'Добавить ещё',
|
||
addMoreFiles: 'Добавить файлы',
|
||
addMoreFolder: 'Добавить из папки',
|
||
filesAdded: 'Добавлено файлов: {count}',
|
||
filesAllDuplicate: 'Выбранные файлы уже в списке',
|
||
titleUrl: 'Подтверждение импорта URL',
|
||
titleManual: 'Подтверждение публикации',
|
||
overviewDescUrl: 'После подтверждения настроек URL будет загружен и обработан',
|
||
overviewDescManual: 'После подтверждения настроек документ будет опубликован и проиндексирован',
|
||
confirmUrl: 'Импортировать и обработать',
|
||
confirmManual: 'Опубликовать и обработать',
|
||
titleReparse: 'Подтверждение повторной обработки',
|
||
overviewDescReparse: 'После подтверждения настроек существующее содержимое будет удалено, а документ обработан заново',
|
||
confirmReparse: 'Подтвердить и обработать заново',
|
||
reparseSource: 'Документ для повторной обработки',
|
||
reparseHint: 'Используются настройки прошлой обработки; их можно изменить здесь',
|
||
urlSource: 'Источник импорта',
|
||
manualSource: 'Документ для публикации',
|
||
editUrl: 'Изменить URL',
|
||
manualCharCount: '{count} символов',
|
||
},
|
||
knowledgeStages: {
|
||
processConfig: {
|
||
title: 'Конфигурация обработки',
|
||
kbDefault: 'Используются настройки базы знаний по умолчанию',
|
||
chunking: 'Разбиение',
|
||
chunkSize: 'размер {n}',
|
||
parentChildOn: 'родитель-потомок вкл',
|
||
parentChildOff: 'родитель-потомок выкл',
|
||
parser: 'Движок парсера',
|
||
multimodal: 'Мультимодальность',
|
||
asr: 'Аудио (ASR)',
|
||
question: 'Генерация вопросов',
|
||
questionOn: 'вкл ({n} на фрагмент)',
|
||
graph: 'Граф знаний',
|
||
on: 'вкл',
|
||
off: 'выкл',
|
||
},
|
||
title: 'Конвейер обработки',
|
||
root: 'Обработка знаний',
|
||
attempt: 'Попытка {n}',
|
||
attemptLatest: 'Попытка {n} (последняя)',
|
||
retry: 'Повторить парсинг',
|
||
copyDetails: 'Скопировать детали',
|
||
copied: 'Скопировано в буфер обмена',
|
||
noActivity: 'Нет активности парсинга',
|
||
totalDuration: 'Всего: {d}',
|
||
total: 'Всего {d}',
|
||
detail: {
|
||
started: 'Начало',
|
||
finished: 'Окончание',
|
||
duration: 'Длительность',
|
||
input: 'Вход',
|
||
output: 'Выход',
|
||
metadata: 'Метаданные',
|
||
error: 'Ошибка',
|
||
showJson: 'Показать JSON',
|
||
hideJson: 'Скрыть JSON',
|
||
},
|
||
stage: {
|
||
docreader: 'Парсинг документа',
|
||
chunking: 'Разбиение',
|
||
embedding: 'Векторизация',
|
||
multimodal: 'Мультимодальное распознавание',
|
||
postprocess: 'Постобработка',
|
||
},
|
||
status: {
|
||
pending: 'Ожидание',
|
||
running: 'Выполняется',
|
||
finalizing: 'Оптимизация',
|
||
done: 'Готово',
|
||
failed: 'Ошибка',
|
||
skipped: 'Пропущено',
|
||
cancelled: 'Отменено',
|
||
},
|
||
errorCode: {
|
||
DOCREADER_TIMEOUT: 'Истекло время парсинга документа',
|
||
DOCREADER_TIMEOUT_SUGGESTION: 'Файл может быть слишком большим, или служба парсинга занята. Повторите позже или разделите документ.',
|
||
DOCREADER_UNAVAILABLE: 'Парсер документов недоступен',
|
||
DOCREADER_UNAVAILABLE_SUGGESTION: 'Служба парсинга отключена. Обратитесь к администратору.',
|
||
DOCREADER_PARSE_FAILED: 'Ошибка парсинга документа',
|
||
DOCREADER_PARSE_FAILED_SUGGESTION: 'Не удалось распарсить файл. Убедитесь, что он не повреждён.',
|
||
CHUNKING_FAILED: 'Ошибка разбиения',
|
||
CHUNKING_FAILED_SUGGESTION: 'Попробуйте изменить настройки разбиения базы знаний.',
|
||
EMBEDDING_RATE_LIMIT: 'Превышен лимит запросов к службе эмбеддингов',
|
||
EMBEDDING_RATE_LIMIT_SUGGESTION: 'Поставщик эмбеддингов ограничивает запросы. Повторите позже.',
|
||
EMBEDDING_PROVIDER_FAIL: 'Ошибка поставщика эмбеддингов',
|
||
EMBEDDING_PROVIDER_FAIL_SUGGESTION: 'Поставщик эмбеддингов вернул ошибку. Проверьте настройки поставщика.',
|
||
VECTORSTORE_WRITE_FAILED: 'Ошибка записи в векторное хранилище',
|
||
VECTORSTORE_WRITE_FAILED_SUGGESTION: 'Векторное хранилище отклонило запись. Проверьте доступность хранилища.',
|
||
MULTIMODAL_VLM_FAILED: 'Ошибка распознавания изображений',
|
||
MULTIMODAL_VLM_FAILED_SUGGESTION: 'Часть изображений не удалось обработать. Документ всё ещё может быть пригоден.',
|
||
MULTIMODAL_ALL_FAILED: 'Все изображения не прошли мультимодальную обработку',
|
||
MULTIMODAL_ALL_FAILED_SUGGESTION: 'Проверьте конфигурацию мультимодальной модели.',
|
||
TASK_TIMEOUT: 'Задача превысила максимальное время выполнения',
|
||
TASK_TIMEOUT_SUGGESTION: 'Задача выполнялась дольше допустимого. Повторите или обратитесь в поддержку.',
|
||
UPSTREAM_FAILED: 'Остановлено из-за ошибки на предыдущем этапе',
|
||
UPSTREAM_FAILED_SUGGESTION: 'Предыдущий этап завершился с ошибкой и заблокировал выполнение.',
|
||
UNKNOWN: 'Неизвестная ошибка',
|
||
UNKNOWN_SUGGESTION: 'Проверьте логи приложения для подробностей.',
|
||
},
|
||
},
|
||
agent: {
|
||
taskLabel: 'Задача:',
|
||
think: 'Размышление',
|
||
copy: 'Копировать',
|
||
addToKnowledgeBase: 'Добавить в базу знаний',
|
||
updatePlan: 'Обновить план',
|
||
webSearchFound: 'Найдено <strong>{count}</strong> результатов веб‑поиска',
|
||
argumentsLabel: 'Параметры',
|
||
toolFallback: 'Инструмент',
|
||
stepsCompleted: 'Выполнено <strong>{steps}</strong> шаг(ов)',
|
||
stepsCompletedWithDuration: 'Выполнено <strong>{steps}</strong> шаг(ов) за <strong>{duration}</strong>',
|
||
reasoningRounds: '<strong>{rounds}</strong> раунд(ов) рассуждений',
|
||
toolCalls: '<strong>{tools}</strong> вызов(ов) инструментов',
|
||
durationSuffix: '<strong>{duration}</strong>',
|
||
stepSummarySeparator: ' · ',
|
||
editor: {
|
||
skillsConfig: 'Skills',
|
||
skillsConfigDesc: 'Настройка предустановленных Skills для агента, предоставляющих специализированные знания и рабочие процессы',
|
||
skillsSelection: 'Выбор Skills',
|
||
skillsSelectionDesc: 'Выберите диапазон Skills, доступных агенту',
|
||
skillsAll: 'Все',
|
||
skillsSelected: 'Выбранные',
|
||
skillsNone: 'Отключено',
|
||
selectSkills: 'Выбрать Skills',
|
||
selectSkillsDesc: 'Выберите Skills для активации',
|
||
noSkillsAvailable: 'Нет доступных предустановленных Skills',
|
||
skillsInfoTitle: 'Что такое Skills?',
|
||
skillsInfoContent: 'Skills — это предустановленные модули профессиональных знаний, которые предоставляют агенту инструкции, рабочие процессы и инструменты для конкретных областей. При активации агент автоматически загружает соответствующие знания по мере необходимости.',
|
||
createTitle: 'Create Agent',
|
||
editTitle: 'Edit Agent',
|
||
basicInfo: 'Basic Info',
|
||
basicInfoDesc: 'Настройка имени, описания и режима работы агента',
|
||
promptsConfig: 'Промпты',
|
||
promptsConfigDesc: 'Настройка системных, контекстных, intent/rewrite/fallback промптов',
|
||
modelConfig: 'Model Config',
|
||
modelConfigDesc: 'Модель чата, вспомогательные модели (ReRank) и параметры генерации',
|
||
capabilities: 'Capabilities',
|
||
capabilitiesDesc: 'Configure agent capabilities and tools',
|
||
toolsConfig: 'Tools',
|
||
toolsConfigDesc: 'Configure tools available to the Agent',
|
||
knowledgeConfig: 'Knowledge Base',
|
||
knowledgeConfigDesc: 'Настройка области баз знаний и стратегии FAQ для агента',
|
||
webSearchConfig: 'Web Search',
|
||
webSearchConfigDesc: 'Configure web search capabilities for the agent',
|
||
configuration: 'Configuration',
|
||
agentId: 'Agent ID',
|
||
agentIdDesc: 'Use this ID to target the agent in API integrations',
|
||
name: 'Name',
|
||
namePlaceholder: 'Enter agent name',
|
||
nameRequired: 'Agent name is required',
|
||
disabled: 'Disable',
|
||
disabledDesc: 'When disabled, this agent will not appear in the conversation agent dropdown',
|
||
systemPromptRequired: 'System prompt is required',
|
||
modelRequired: 'Please select a model',
|
||
rerankModelRequired: 'ReRank model is required when using knowledge bases',
|
||
contextsMissing: "Context template must contain {'{{'}contexts{'}}'} placeholder when knowledge base is enabled",
|
||
queryMissingInContext: "Context template must contain {'{{'}query{'}}'} placeholder",
|
||
knowledgeBasesMissing: "It is recommended to include {'{{'}knowledge_bases{'}}'} placeholder in system prompt so the model knows available knowledge bases",
|
||
queryMissingInRewrite: "Rewrite user prompt must contain {'{{'}query{'}}'} placeholder",
|
||
conversationMissing: "Rewrite user prompt must contain {'{{'}conversation{'}}'} placeholder",
|
||
queryMissingInFallback: "Fallback prompt must contain {'{{'}query{'}}'} placeholder",
|
||
avatar: 'Avatar',
|
||
avatarPlaceholder: 'Enter Emoji or select',
|
||
description: 'Description',
|
||
descriptionPlaceholder: 'Enter agent description',
|
||
baseType: 'Base Type',
|
||
normalDesc: 'Quick response, direct answers',
|
||
agentDesc: 'Multi-step thinking, deep analysis for complex questions',
|
||
model: 'Model',
|
||
modelPlaceholder: 'Select Model',
|
||
systemPrompt: 'System Prompt',
|
||
systemPromptPlaceholder: "Custom system prompt to define agent behavior and role (use {'{{'}web_search_status{'}}'} placeholder for dynamic web search behavior)",
|
||
defaultPromptHint: 'Leave empty to use the following default system prompt:',
|
||
defaultContextTemplateHint: 'Leave empty to use the following default context template:',
|
||
contextTemplateRequired: 'Context template is required',
|
||
availablePlaceholders: 'Available Placeholders',
|
||
placeholderHint: "Type {'{{'} to trigger autocomplete",
|
||
temperature: 'Temperature',
|
||
thinking: 'Thinking Mode',
|
||
welcomeMessage: 'Welcome Message',
|
||
welcomeMessagePlaceholder: 'Message displayed when this agent is selected',
|
||
suggestedPrompts: 'Suggested Prompts',
|
||
mode: 'Running Mode',
|
||
webSearch: 'Web Search',
|
||
webSearchProvider: 'Поисковый движок',
|
||
webSearchProviderPlaceholder: 'Использовать поисковый движок по умолчанию',
|
||
webSearchMaxResults: 'Max Search Results',
|
||
webFetchEnabled: 'Автоматически загружать содержимое страниц',
|
||
webFetchTopN: 'Количество загружаемых страниц',
|
||
knowledgeBases: 'Knowledge Bases',
|
||
allKnowledgeBases: 'All Knowledge Bases',
|
||
allKnowledgeBasesDesc: 'Agent can access all knowledge bases',
|
||
selectedKnowledgeBases: 'Selected Knowledge Bases',
|
||
selectedKnowledgeBasesDesc: 'Only access selected knowledge bases',
|
||
noKnowledgeBase: 'No Knowledge Base',
|
||
noKnowledgeBaseDesc: 'Pure model conversation, no knowledge retrieval',
|
||
selectKnowledgeBases: 'Select Knowledge Bases',
|
||
selectKnowledgeBasesDesc: 'Select knowledge bases to associate (including collaborative ones)',
|
||
myKnowledgeBases: 'My Knowledge Bases',
|
||
sharedKnowledgeBases: 'Collaborative Knowledge Bases',
|
||
retrieveKBOnlyWhenMentioned: 'Retrieve Only When Mentioned',
|
||
retrieveKBOnlyWhenMentionedDesc: "Off: auto-retrieve configured KBs; On: retrieve only when user {'@'} mentions",
|
||
retrievalSectionTitle: 'Стратегия поиска',
|
||
rerankModel: 'ReRank Model',
|
||
rerankModelDesc: 'Used to rerank knowledge base retrieval results for better accuracy',
|
||
rerankModelPlaceholder: 'Select ReRank Model',
|
||
rerankModelOptionalHint: 'В текущей области нет RAG-базы знаний, поэтому поле необязательное. Если RAG-база будет добавлена позже, будет использоваться модель ReRank по умолчанию для тенанта; всё же рекомендуется настроить её явно.',
|
||
maxIterations: 'Max Iterations',
|
||
allowedTools: 'Allowed Tools',
|
||
multiTurn: 'Multi-turn Conversation',
|
||
historyTurns: 'History Turns',
|
||
retrievalStrategy: 'Retrieval Strategy',
|
||
embeddingTopK: 'Embedding Top K',
|
||
keywordThreshold: 'Keyword Threshold',
|
||
vectorThreshold: 'Vector Threshold',
|
||
rerankTopK: 'Rerank Top K',
|
||
rerankThreshold: 'Rerank Threshold',
|
||
conversationSettings: 'Conversation',
|
||
advancedSettings: 'Advanced Settings',
|
||
contextTemplate: 'Context Template',
|
||
contextTemplatePlaceholder: 'Custom context template...',
|
||
availableContextPlaceholders: 'Available Placeholders',
|
||
placeholderQuery: 'User query',
|
||
placeholderContexts: 'Retrieved content list',
|
||
placeholderCurrentTime: 'Current time (format: 2006-01-02 15:04:05)',
|
||
placeholderCurrentWeek: 'Current weekday (e.g., Monday)',
|
||
enableQueryExpansion: 'Query Expansion',
|
||
enableRewrite: 'Query Rewrite',
|
||
queryUnderstandModel: 'Модель понимания запроса',
|
||
queryUnderstandModelPlaceholder: 'Оставьте пустым, чтобы использовать основную модель чата',
|
||
rewritePromptSystem: 'Rewrite System Prompt',
|
||
rewritePromptSystemPlaceholder: 'Leave empty to use default prompt',
|
||
rewritePromptUser: 'Rewrite User Prompt',
|
||
rewritePromptUserPlaceholder: 'Leave empty to use default prompt',
|
||
maxCompletionTokens: 'Max Completion Tokens',
|
||
fallbackStrategy: 'Fallback Strategy',
|
||
fallbackResponse: 'Fixed Response',
|
||
fallbackResponsePlaceholder: 'Sorry, I cannot answer this question.',
|
||
fallbackPrompt: 'Fallback Prompt',
|
||
fallbackPromptPlaceholder: 'Leave empty to use default prompt'
|
||
},
|
||
title: 'Agents',
|
||
subtitle: 'Configure and manage your agents to customize conversation behavior and capabilities',
|
||
createAgent: 'Create Agent',
|
||
createAgentShort: 'New',
|
||
builtin: 'Built-in',
|
||
disabled: 'Disabled',
|
||
disable: 'Disable',
|
||
enable: 'Enable',
|
||
noDescription: 'No description',
|
||
selectAgent: 'Select Agent',
|
||
noAgents: 'No agents',
|
||
manageAgents: 'Manage',
|
||
builtinAgents: 'Built-in Agents',
|
||
customAgents: 'Custom Agents',
|
||
capabilities: {
|
||
normal: 'Quick response, direct answers',
|
||
agent: 'Multi-step thinking, deep analysis for complex questions',
|
||
modelSpecified: 'Model specified',
|
||
kbCount: '{count} knowledge base(s) specified',
|
||
kbAll: 'Access to all knowledge bases',
|
||
kbDisabled: 'Knowledge base disabled',
|
||
rerankSpecified: 'ReRank model specified',
|
||
webSearchOn: 'Web search enabled',
|
||
webSearchOff: 'Web search disabled',
|
||
hasPrompt: 'Custom prompt',
|
||
default: 'Default configuration',
|
||
mcpEnabled: 'MCP services enabled',
|
||
multiTurn: 'Multi-turn conversation'
|
||
},
|
||
type: {
|
||
normal: 'Quick Answer',
|
||
agent: 'Smart Reasoning',
|
||
custom: 'Custom'
|
||
},
|
||
mode: {
|
||
normal: 'Quick Answer',
|
||
agent: 'Smart Reasoning'
|
||
},
|
||
features: {
|
||
webSearch: 'Web Search Enabled',
|
||
knowledgeBase: 'Knowledge Base Linked',
|
||
mcp: 'MCP Services Enabled',
|
||
multiTurn: 'Multi-turn Conversation'
|
||
},
|
||
tabs: {
|
||
all: 'All',
|
||
mine: 'My Agents',
|
||
sharedToMe: 'Shared to Me'
|
||
},
|
||
sections: {
|
||
builtin: 'Встроенные',
|
||
mine: 'Созданные мной',
|
||
tenantReadonly: 'Рабочая область · Только просмотр',
|
||
tenantOthers: 'Рабочая область · Другие участники',
|
||
sharedByMe: 'Расшарено мной',
|
||
sharedEditable: 'Доступно мне · Можно редактировать',
|
||
sharedReadonly: 'Доступно мне · Только просмотр'
|
||
},
|
||
empty: {
|
||
title: 'No Custom Agents',
|
||
description: 'Click the button in the top right to create your first agent',
|
||
sharedTitle: 'No shared agents yet',
|
||
sharedDescription: 'You can join a space or ask others to share agents with you',
|
||
favoritesTitle: 'No favorites yet',
|
||
favoritesDescription: 'Star an agent from its card to add it here',
|
||
recentsTitle: 'Nothing here yet',
|
||
recentsDescription: 'Agents you recently used will show up here'
|
||
},
|
||
detail: {
|
||
title: 'Agent Details',
|
||
useInChat: 'Use in Chat'
|
||
},
|
||
shareScope: {
|
||
title: 'Share Scope',
|
||
desc: 'Space members have read-only access to this agent and will use it according to your current configuration; your changes to the agent will sync to shared spaces. To allow space members to edit knowledge base content, share the knowledge base to the space.',
|
||
knowledgeBase: 'Knowledge bases',
|
||
chatModel: 'Chat model',
|
||
rerankModel: 'Rerank model',
|
||
webSearch: 'Web search',
|
||
mcp: 'MCP services',
|
||
kbAll: 'All knowledge bases',
|
||
kbSelected: '{count} selected',
|
||
kbNone: 'None',
|
||
modelConfigured: 'Configured',
|
||
modelNotSet: 'Not set',
|
||
enabled: 'On',
|
||
disabled: 'Off',
|
||
mcpAll: 'All services',
|
||
mcpSelected: '{count} selected',
|
||
mcpNone: 'None'
|
||
},
|
||
delete: {
|
||
confirmTitle: 'Delete Agent',
|
||
confirmMessage: 'Are you sure you want to delete agent "{name}"? This action cannot be undone.',
|
||
confirmButton: 'Confirm Delete'
|
||
},
|
||
messages: {
|
||
created: 'Agent created successfully',
|
||
updated: 'Agent updated successfully',
|
||
deleted: 'Agent deleted',
|
||
deleteFailed: 'Delete failed',
|
||
saveFailed: 'Save failed',
|
||
builtinReadonly: 'Built-in agents cannot be edited',
|
||
copied: 'Agent copied successfully',
|
||
copyFailed: 'Copy failed',
|
||
disabled: 'Agent disabled',
|
||
enabled: 'Agent enabled'
|
||
},
|
||
selector: {
|
||
title: 'Select Agent',
|
||
builtinSection: 'Built-in Agents',
|
||
customSection: 'My Agents',
|
||
addNew: 'Add New Agent',
|
||
current: 'Current',
|
||
goToSettings: 'Settings',
|
||
sharedLabel: 'Shared',
|
||
notReadyHint: 'Still needs: {items}',
|
||
notReadyStatus: 'Setup needed',
|
||
notReadyMissing: 'Missing: {items}',
|
||
configureAction: 'Configure',
|
||
sharedNotReadyContact: 'Ask the sharing organization admin to finish setup',
|
||
},
|
||
builtinInfo: {
|
||
quickAnswer: {
|
||
name: 'Quick Answer',
|
||
description: 'Knowledge base RAG Q&A for fast and accurate answers'
|
||
},
|
||
smartReasoning: {
|
||
name: 'Smart Reasoning',
|
||
description: 'ReAct reasoning framework with multi-step thinking and tool calling'
|
||
},
|
||
deepResearcher: {
|
||
name: 'Deep Researcher',
|
||
description: 'Focused on in-depth research and comprehensive analysis, capable of creating research plans, multi-dimensional information retrieval, deep thinking and providing thorough analysis reports'
|
||
},
|
||
dataAnalyst: {
|
||
name: 'Data Analyst',
|
||
description: 'Focused on database queries and data analysis, capable of understanding business needs, building SQL queries, analyzing data and providing insights'
|
||
},
|
||
knowledgeGraphExpert: {
|
||
name: 'Knowledge Graph Expert',
|
||
description: 'Focused on knowledge graph queries and relationship analysis, capable of exploring entity relationships, discovering hidden connections and building knowledge networks'
|
||
},
|
||
documentAssistant: {
|
||
name: 'Document Assistant',
|
||
description: 'Focused on document retrieval and content organization, capable of quickly locating documents, extracting key information and generating summaries'
|
||
}
|
||
}
|
||
},
|
||
settings: {
|
||
title: 'Настройки',
|
||
modelConfig: 'Настройки модели',
|
||
modelManagement: 'Управление моделями',
|
||
agentConfig: 'Настройки агента',
|
||
webSearchConfig: 'Сетевой поиск',
|
||
enableMemory: 'Включить память',
|
||
enableMemoryDesc: 'При включении система будет записывать историю ваших разговоров и автоматически вспоминать соответствующий контент в будущих беседах для более персонализированных ответов.',
|
||
autoCheckUpdate: 'Автоматическая загрузка обновлений',
|
||
autoCheckUpdateDesc: 'При включении автоматически проверять и скачивать последнюю версию в фоновом режиме при запуске.',
|
||
memoryRequiresNeo4j: 'Функция памяти требует графовую базу данных Neo4j. Пожалуйста, настройте и включите Neo4j (установите NEO4J_ENABLE=true) перед активацией этой функции.',
|
||
memoryHowToEnable: 'Руководство по настройке Neo4j',
|
||
vectorStoreEngine: 'Движок векторной БД',
|
||
parserEngine: 'Движок парсинга',
|
||
storageEngine: 'Движок хранения',
|
||
mcpService: 'Сервис MCP',
|
||
conversationConfig: 'Настройки диалога',
|
||
conversationStrategy: 'Стратегия диалога',
|
||
versionInfo: 'Информация о версии',
|
||
tenantInfo: 'Информация о арендаторе',
|
||
apiInfo: 'Информация API',
|
||
navGroups: {
|
||
account: 'Аккаунт',
|
||
workspace: 'Пространство',
|
||
modelsRuntime: 'Модели',
|
||
dataExtensions: 'Данные и расширения',
|
||
platform: 'Платформа',
|
||
},
|
||
roleDenied: {
|
||
title: 'Недостаточно прав',
|
||
desc: 'Ваша роль не позволяет открыть этот раздел настроек. Обратитесь к администратору арендатора, чтобы запросить нужную роль.',
|
||
},
|
||
weknoraCloud: {
|
||
title: 'WeKnora Cloud',
|
||
description: 'Настройте учётные данные APPID и APPSECRET для WeKnora Cloud. Данные используются для модельных сервисов и движка парсинга документов.',
|
||
viewDocs: 'Документация',
|
||
unconfigured: 'Учётные данные не настроены. Заполните APPID и APPSECRET.',
|
||
configured: 'Учётные данные настроены, статус в норме.',
|
||
expired: 'Учётные данные WeKnora Cloud истекли',
|
||
expiredDefault: 'Ключ шифрования изменился после перезапуска. Сохранённые данные не могут быть расшифрованы. Введите данные заново.',
|
||
reconfigure: 'Перенастроить',
|
||
appIdLabel: 'APPID',
|
||
appIdDesc: 'ID приложения WeKnora Cloud',
|
||
appIdPlaceholder: 'Введите APPID',
|
||
appSecretLabel: 'APPSECRET',
|
||
appSecretDesc: 'Секрет приложения WeKnora Cloud',
|
||
appSecretPlaceholder: 'Введите APPSECRET',
|
||
saveHint: 'Данные будут проверены и зашифрованы перед сохранением.',
|
||
saveBtn: 'Сохранить',
|
||
usageTitle: 'Инструкция',
|
||
usageSteps: '1. Сохраните APPID и APPSECRET\n2. Добавьте chat, embedding, rerank и vlm в разделе «Облачные модели» ниже\n3. Парсинг: Настройки БЗ → Движок парсинга → WeKnora Cloud',
|
||
fillRequired: 'Заполните APPID и APPSECRET',
|
||
saveSuccess: 'Учётные данные сохранены',
|
||
saveFailed: 'Не удалось сохранить данные',
|
||
credentialConfigured: 'Учётные данные WeKnoraCloud настроены.',
|
||
credentialExpired: 'Данные истекли. Перенастройте.',
|
||
credentialUnconfigured: 'Учётные данные WeKnoraCloud не настроены. Заполните APPID и APPSECRET.',
|
||
checkingStatus: 'Проверка статуса...',
|
||
goToSettings: 'Перейти в настройки',
|
||
modelHintConfigured: 'Учётные данные WeKnoraCloud настроены. Поддерживаемые модели см. в',
|
||
modelHintDocsLink: 'документации API',
|
||
modelsSection: {
|
||
title: 'Облачные модели',
|
||
descReady: 'Зарегистрируйте четыре стандартные модели WeKnora Cloud для чата, поиска, реранкинга и зрения.',
|
||
descPending: 'Сначала сохраните учётные данные выше, затем добавьте модели здесь.',
|
||
statusAdded: 'Добавлена',
|
||
statusPending: 'Нужны учётные данные',
|
||
addOne: 'Добавить',
|
||
addAllBtn: 'Добавить все отсутствующие ({count})',
|
||
addAllConfirm: 'Подтвердить',
|
||
confirmAddOne: 'Добавить модель {type} «{name}»?',
|
||
confirmAddAll: 'Добавить все {count} отсутствующих облачных моделей сразу?',
|
||
allReady: 'Все четыре облачные модели готовы',
|
||
},
|
||
addModelsSuccess: 'Успешно добавлено моделей: {count}',
|
||
addModelsPartial: 'Добавлено: {success}, ошибок: {failed}',
|
||
addModelsFailed: 'Не удалось добавить модели',
|
||
addModelsEmbeddingFailed: 'Тест подключения Embedding не пройден; не удалось определить размерность вектора',
|
||
addModelsDisplayName: {
|
||
chat: 'WeKnoraCloud Chat',
|
||
embedding: 'WeKnoraCloud Embedding',
|
||
rerank: 'WeKnoraCloud ReRank',
|
||
vllm: 'WeKnoraCloud Vision',
|
||
},
|
||
},
|
||
system: 'Настройки системы',
|
||
systemConfig: 'Системная конфигурация',
|
||
knowledgeBaseSettings: 'Настройки базы знаний',
|
||
configureKbModels: 'Настройка моделей и параметров разделения документов для этой базы знаний',
|
||
manageSystemModels: 'Управление и обновление системных моделей и конфигураций сервисов',
|
||
basicInfo: 'Основная информация',
|
||
documentSplitting: 'Разделение документов',
|
||
apiEndpoint: 'API конечная точка',
|
||
enterApiEndpoint: 'Введите API конечную точку, например: http://localhost',
|
||
enterApiKey: 'Введите API ключ',
|
||
enterKnowledgeBaseId: 'Введите ID базы знаний',
|
||
saveConfig: 'Сохранить конфигурацию',
|
||
reset: 'Сбросить',
|
||
configSaved: 'Конфигурация сохранена успешно',
|
||
enterApiEndpointRequired: 'Введите API конечную точку',
|
||
enterApiKeyRequired: 'Введите API ключ',
|
||
enterKnowledgeBaseIdRequired: 'Введите ID базы знаний',
|
||
name: 'Название',
|
||
enterName: 'Введите название',
|
||
description: 'Описание',
|
||
chunkSize: 'Размер блока',
|
||
chunkOverlap: 'Перекрытие блоков',
|
||
save: 'Сохранить',
|
||
saving: 'Сохранение...',
|
||
saveSuccess: 'Сохранено успешно',
|
||
saveFailed: 'Не удалось сохранить',
|
||
model: 'Модель',
|
||
llmModel: 'LLM модель',
|
||
embeddingModel: 'Модель встраивания',
|
||
rerankModel: 'Модель ранжирования',
|
||
vlmModel: 'Мультимодальная модель',
|
||
modelName: 'Название модели',
|
||
modelUrl: 'URL модели',
|
||
apiKey: 'API ключ',
|
||
cancel: 'Отмена',
|
||
saveFailedSettings: 'Не удалось сохранить настройки',
|
||
enterNameRequired: 'Введите название',
|
||
parser: {
|
||
title: 'Парсер',
|
||
description: 'Состояние и конфигурация парсеров документов. Настройки здесь приоритетнее переменных окружения сервера. Оставьте пустым для значений по умолчанию.',
|
||
// Section / label keys for the redesigned drawer
|
||
supportedFileTypes: 'Поддерживаемые форматы',
|
||
statusSection: 'Статус',
|
||
configSection: 'Конфигурация',
|
||
featuresLabel: 'Опции',
|
||
loading: 'Загрузка...',
|
||
retry: 'Повторить',
|
||
noEngineDetected: 'Парсеры не обнаружены. Убедитесь, что сервис DocReader работает.',
|
||
disconnected: 'Отключено',
|
||
connected: 'Подключено',
|
||
available: 'Доступен',
|
||
unavailable: 'Недоступен',
|
||
builtinDesc: 'Встроенный парсер DocReader (docx/pdf/xlsx и другие сложные форматы)',
|
||
currentAddr: 'Текущий',
|
||
envVarHint: 'Для изменения установите переменные DOCREADER_ADDR и DOCREADER_TRANSPORT (grpc/http), затем перезапустите сервис.',
|
||
selfHostedEndpoint: 'Собственная конечная точка',
|
||
formulaRecognition: 'Распознавание формул',
|
||
tableRecognition: 'Распознавание таблиц',
|
||
sealRecognition: 'Распознавание печатей',
|
||
chartRecognition: 'Распознавание диаграмм',
|
||
language: 'Язык',
|
||
testConnection: 'Проверить с текущими параметрами',
|
||
saveConfig: 'Сохранить конфигурацию',
|
||
docs: 'Документация',
|
||
loadFailed: 'Не удалось загрузить список парсеров',
|
||
ensureDocreaderConnected: 'Убедитесь, что сервис DocReader настроен через переменные окружения и подключён',
|
||
checkDoneStatusUpdated: 'Проверка выполнена. Статус выше обновлён.',
|
||
checkSuccess: 'Тест подключения пройден успешно',
|
||
checkFailed: 'Проверка не пройдена',
|
||
saveSuccess: 'Сохранено',
|
||
saveFailed: 'Ошибка сохранения',
|
||
mineruEndpointPlaceholder: 'напр. https://your-mineru.example.com',
|
||
defaultPipeline: 'Pipeline по умолчанию',
|
||
languagePlaceholder: 'напр. ch, en, ja (по умолчанию ch)',
|
||
mineruCloudApiKeyPlaceholder: 'MinerU Cloud API Key',
|
||
vlmLabel: 'vlm (визуальная языковая модель)',
|
||
mineruHtmlLabel: 'MinerU-HTML (HTML парсинг)',
|
||
paddleocrVlEndpointPlaceholder: 'напр. http://your-paddleocr-vl:8080',
|
||
paddleocrVlEndpointHint: 'Адрес полного сервиса PaddleOCR-VL (pipeline); суффикс /layout-parsing не требуется',
|
||
paddleocrVlCloudTokenPlaceholder: 'Токен PaddleOCR-VL AI Studio'
|
||
},
|
||
storage: {
|
||
title: 'Хранилище',
|
||
description: 'Настройте хранение документов и изображений. Здесь задаются параметры хранилищ; в базе знаний выбирается только тип хранилища.',
|
||
// Section / label keys for the redesigned drawer
|
||
basicSection: 'Основное',
|
||
modeSection: 'Режим развёртывания',
|
||
credentialsSection: 'Учётные данные',
|
||
bucketSection: 'Bucket',
|
||
useSslDesc: 'Подключаться к MinIO по HTTPS',
|
||
loading: 'Загрузка...',
|
||
retry: 'Повторить',
|
||
defaultEngine: 'Хранилище по умолчанию',
|
||
defaultEngineDesc: 'Хранилище по умолчанию при создании новых баз знаний',
|
||
engineLocal: 'Локальное',
|
||
engineCos: 'Tencent Cloud COS',
|
||
engineTos: 'Volcengine TOS',
|
||
engineOss: 'Alibaba Cloud OSS',
|
||
engineS3: 'AWS S3',
|
||
localTitle: 'Локальное хранилище',
|
||
localDesc: 'Хранение файлов в локальной файловой системе сервера. Подходит только для однонодового развёртывания.',
|
||
available: 'Доступно',
|
||
needsConfig: 'Требует настройки',
|
||
configurable: 'Настраиваемое',
|
||
pathPrefix: 'Префикс пути (необязательно)',
|
||
pathPrefixPlaceholder: 'напр. weknora/images',
|
||
prefixPlaceholder: 'напр. weknora',
|
||
bucketName: 'Имя бакета',
|
||
bucketSelectPlaceholder: 'Выберите или введите имя бакета',
|
||
bucketPlaceholder: 'Имя бакета',
|
||
minioDesc: 'S3-совместимое самостоятельно размещаемое объектное хранилище для внутренних сетей и частного облака.',
|
||
minioDocker: 'Docker-развёртывание',
|
||
minioRemote: 'Удалённый MinIO',
|
||
detected: 'Обнаружено',
|
||
notDetected: 'Не обнаружено',
|
||
minioDockerDetected: 'Обнаружены переменные окружения MinIO из Docker. Информация о подключении предоставляется через переменные окружения.',
|
||
minioDockerNotDetected: 'Переменные окружения MinIO (MINIO_ENDPOINT и др.) не обнаружены. Проверьте конфигурацию Docker Compose.',
|
||
minioRemoteHint: 'Подключение к удалённому MinIO. Требуется ручной ввод параметров подключения.',
|
||
cosTitle: 'Tencent Cloud COS',
|
||
cosDesc: 'Объектное хранилище Tencent Cloud для публичного облака с поддержкой CDN-ускорения.',
|
||
cosSecretIdPlaceholder: 'Tencent Cloud API SecretId',
|
||
cosSecretKeyPlaceholder: 'Tencent Cloud API SecretKey',
|
||
cosAppIdPlaceholder: 'Tencent Cloud Account AppID',
|
||
tosTitle: 'Volcengine TOS',
|
||
tosDesc: 'Объектное хранилище Volcengine (TOS) для публичного облака.',
|
||
tosAccessKeyPlaceholder: 'Volcengine Access Key',
|
||
tosSecretKeyPlaceholder: 'Volcengine Secret Key',
|
||
s3Title: 'AWS S3',
|
||
s3Desc: 'AWS S3 и совместимые сервисы объектного хранилища для публичного облака.',
|
||
s3AccessKeyPlaceholder: 'AWS Access Key',
|
||
s3SecretKeyPlaceholder: 'AWS Secret Key',
|
||
ks3Title: 'Kingsoft Cloud KS3',
|
||
ks3Desc: 'Объектное хранилище Kingsoft Cloud (KS3), подходит для публичного облака.',
|
||
ks3AccessKeyPlaceholder: 'Kingsoft Cloud Access Key',
|
||
ks3SecretKeyPlaceholder: 'Kingsoft Cloud Secret Key',
|
||
ks3EndpointPlaceholder: 'e.g. ks3-cn-beijing.ksyuncs.com',
|
||
ks3RegionPlaceholder: 'e.g. BEIJING',
|
||
engineKs3: 'Kingsoft Cloud KS3',
|
||
obsTitle: 'Huawei Cloud OBS',
|
||
obsDesc: 'Объектное хранилище Huawei Cloud (OBS), подходит для публичного облака.',
|
||
obsAccessKeyPlaceholder: 'Huawei Cloud Access Key',
|
||
obsSecretKeyPlaceholder: 'Huawei Cloud Secret Key',
|
||
obsEndpointPlaceholder: 'e.g. obs.cn-north-4.myhuaweicloud.com',
|
||
obsRegionPlaceholder: 'e.g. cn-north-4',
|
||
engineObs: 'Huawei Cloud OBS',
|
||
ossTitle: 'Alibaba Cloud OSS',
|
||
ossDesc: 'Объектное хранилище Alibaba Cloud (OSS), подходит для публичного облака.',
|
||
ossAccessKeyPlaceholder: 'Alibaba Cloud Access Key',
|
||
ossSecretKeyPlaceholder: 'Alibaba Cloud Secret Key',
|
||
console: 'Консоль',
|
||
docs: 'Документация',
|
||
testConnection: 'Тест подключения',
|
||
saveConfig: 'Сохранить конфигурацию',
|
||
loadFailed: 'Ошибка загрузки',
|
||
saveSuccess: 'Сохранено',
|
||
saveFailed: 'Ошибка сохранения',
|
||
unknownError: 'Неизвестная ошибка',
|
||
requestFailed: 'Ошибка запроса',
|
||
cos: 'Tencent Cloud COS',
|
||
tos: 'Volcengine TOS',
|
||
oss: 'Alibaba Cloud OSS',
|
||
ks3: 'Kingsoft Cloud KS3',
|
||
obs: 'Huawei Cloud OBS',
|
||
}
|
||
},
|
||
webSearchSettings: {
|
||
title: 'Настройки веб-поиска',
|
||
description: 'Настройте веб-поиск, чтобы ответы могли включать актуальную информацию из интернета.',
|
||
// Section keys for the redesigned drawer
|
||
basicSection: 'Основное',
|
||
credentialsSection: 'Подключение',
|
||
optionsSection: 'Опции',
|
||
providersTitle: 'Поисковые провайдеры',
|
||
addProvider: 'Добавить провайдер',
|
||
editProvider: 'Редактировать провайдер',
|
||
noProviders: 'Поисковые провайдеры не настроены. Нажмите «Добавить провайдер», чтобы начать.',
|
||
deleteConfirm: 'Вы уверены, что хотите удалить этот провайдер?',
|
||
default: 'По умолчанию',
|
||
providerNameLabel: 'Название',
|
||
providerNamePlaceholder: 'Напр., Продакшн Bing Поиск',
|
||
providerTypeLabel: 'Тип провайдера',
|
||
providerDescLabel: 'Описание',
|
||
providerDescPlaceholder: 'Опционально, например: для тестовой среды',
|
||
engineIdLabel: 'ID движка',
|
||
setAsDefault: 'Установить по умолчанию',
|
||
free: 'Бесплатно',
|
||
viewDocs: 'Документация для получения ключа',
|
||
apiKeyUnchanged: 'Оставьте пустым, чтобы сохранить текущий ключ',
|
||
testConnection: 'Проверить соединение',
|
||
testing: 'Тестирование...',
|
||
noDescription: "Нет описания",
|
||
noProvidersDesc: "Добавьте провайдера веб-поиска, чтобы позволить вашим агентам получать информацию из Интернета в реальном времени.",
|
||
basicInfo: "Основная информация",
|
||
credentials: "Учетные данные",
|
||
setAsDefaultDesc: "Этот провайдер будет использоваться по умолчанию, если агент не укажет свой",
|
||
searchBehaviorTitle: 'Поведение поиска',
|
||
defaultProviderLabel: 'Провайдер по умолчанию',
|
||
defaultProviderDescription: 'Выберите провайдер поиска по умолчанию для агентов, не указавших собственный.',
|
||
providerLabel: 'Провайдер поиска',
|
||
providerDescription: 'Выберите поисковый сервис, используемый для веб-поиска',
|
||
providerPlaceholder: 'Выберите поисковую систему...',
|
||
proxyUrlLabel: 'HTTP-прокси',
|
||
proxyUrlPlaceholder: 'Напр. http://127.0.0.1:7890 (необязательно)',
|
||
proxyUrlHelp: 'Укажите, если доступ к API поиска нужен через прокси; иначе используются переменные HTTP_PROXY/HTTPS_PROXY.',
|
||
apiKeyLabel: 'API-ключ',
|
||
baseUrlLabel: 'URL экземпляра',
|
||
baseUrlPlaceholder: 'https://searxng.example.com',
|
||
apiKeyDescription: 'Введите API-ключ выбранного провайдера поиска',
|
||
apiKeyPlaceholder: 'Введите API-ключ',
|
||
maxResultsLabel: 'Максимум результатов',
|
||
maxResultsDescription: 'Максимальное количество результатов за один поиск (1-50)',
|
||
includeDateLabel: 'Включать дату публикации',
|
||
includeDateDescription: 'Добавлять информацию о дате публикации в результаты поиска',
|
||
compressionLabel: 'Метод сжатия',
|
||
compressionDescription: 'Выберите, как обрабатывать содержимое результатов поиска',
|
||
compressionNone: 'Без сжатия',
|
||
compressionSummary: 'LLM-конспект',
|
||
blacklistLabel: 'Чёрный список URL',
|
||
blacklistDescription: 'Исключите домены или URL из результатов. По одному в строке. Поддерживаются подстановки (*) и регулярные выражения (/pattern/).',
|
||
blacklistPlaceholder: `Например:
|
||
*://*.example.com/*
|
||
/example\.(net|org)/`,
|
||
errors: {
|
||
unknown: 'Неизвестная ошибка'
|
||
},
|
||
toasts: {
|
||
loadProvidersFailed: 'Не удалось загрузить список поисковых провайдеров: {message}',
|
||
saveSuccess: 'Настройки веб-поиска сохранены',
|
||
saveFailed: 'Не удалось сохранить настройки: {message}',
|
||
providerCreated: 'Поисковый провайдер создан',
|
||
providerUpdated: 'Поисковый провайдер обновлён',
|
||
providerDeleted: 'Поисковый провайдер удалён',
|
||
testSuccess: 'Подключение успешно',
|
||
testFailed: 'Подключение не удалось',
|
||
}
|
||
},
|
||
vectorStoreSettings: {
|
||
title: 'Движок векторной базы данных',
|
||
description: 'Регистрация и управление экземплярами векторных баз данных для поиска по базе знаний.',
|
||
// Section key for the redesigned drawer
|
||
basicSection: 'Основное',
|
||
storesTitle: 'Векторные базы данных',
|
||
addStore: 'Добавить базу данных',
|
||
editStore: 'Редактировать базу данных',
|
||
deleteConfirm: 'Вы уверены, что хотите удалить эту векторную базу данных?',
|
||
emptyDesc: 'Векторные базы данных не настроены. Нажмите "Добавить базу данных", чтобы начать.',
|
||
engineTypeLabel: 'Тип движка',
|
||
nameLabel: 'Название',
|
||
namePlaceholder: 'например, my-vector-store',
|
||
connectionInfo: 'Информация о подключении',
|
||
advancedIndexConfig: 'Расширенные настройки',
|
||
fields: {
|
||
addr: 'URL',
|
||
host: 'Хост',
|
||
port: 'Порт',
|
||
username: 'Имя пользователя',
|
||
password: 'Пароль',
|
||
api_key: 'API ключ',
|
||
use_tls: 'Использовать TLS',
|
||
scheme: 'Схема',
|
||
grpc_address: 'gRPC адрес',
|
||
database: 'Имя базы данных',
|
||
use_default_connection: 'Использовать подключение по умолчанию',
|
||
index_name: 'Имя индекса',
|
||
number_of_shards: 'Шарды',
|
||
number_of_replicas: 'Реплики',
|
||
collection_prefix: 'Префикс коллекции',
|
||
collection_name: 'Имя коллекции',
|
||
shard_number: 'Количество шардов',
|
||
replication_factor: 'Фактор репликации',
|
||
shards_num: 'Шарды',
|
||
replica_number: 'Реплики в памяти',
|
||
desired_shard_count: 'Количество шардов',
|
||
insecure_skip_verify: 'Пропустить проверку TLS',
|
||
hnsw_m: 'HNSW M (степень графа)',
|
||
hnsw_ef_construction: 'HNSW ef_construction',
|
||
hnsw_ef_search: 'HNSW ef_search',
|
||
knn_engine: 'Движок k-NN',
|
||
},
|
||
envTag: 'DEFAULT',
|
||
testConnection: 'Тест подключения',
|
||
testing: 'Тестирование...',
|
||
immutableNotice: 'Тип движка, подключение и настройки индекса нельзя изменить после создания.\nДля изменения удалите и создайте заново.',
|
||
insecureSkipVerifyWarning: 'Отключение проверки сертификата TLS делает соединение уязвимым для атак «человек посередине». Используйте только для dev-кластеров с самоподписанными сертификатами — никогда в продакшене.',
|
||
validation: {
|
||
nameRequired: 'Название обязательно',
|
||
engineTypeRequired: 'Тип движка обязателен',
|
||
fieldRequired: '{field} обязательно',
|
||
indexNamePattern: 'Должно начинаться с буквы. Допускаются только буквы, цифры, подчёркивание и дефис (макс. 128)',
|
||
},
|
||
toasts: {
|
||
storeCreated: 'Векторная база данных создана',
|
||
storeUpdated: 'Векторная база данных обновлена',
|
||
storeDeleted: 'Векторная база данных удалена',
|
||
testSuccess: 'Тест подключения успешен',
|
||
testFailed: 'Тест подключения не удался',
|
||
duplicateName: 'Векторная база данных с таким именем уже существует',
|
||
errorGeneric: 'Произошла ошибка. Попробуйте снова.',
|
||
},
|
||
},
|
||
chatHistorySettings: {
|
||
title: 'Управление сообщениями',
|
||
description: 'Настройте базу знаний истории чата для автоматической индексации сообщений и семантического поиска',
|
||
enableLabel: 'Включить индексацию сообщений',
|
||
enableDescription: 'При включении новые сообщения будут автоматически индексироваться в базу знаний для векторного поиска',
|
||
embeddingModelLabel: 'Модель Embedding',
|
||
embeddingModelDescription: 'Выберите модель встраивания для векторизации сообщений чата',
|
||
embeddingModelLocked: 'Сообщения уже индексированы; модель встраивания нельзя изменить (требуется очистка индексных данных)',
|
||
statsTitle: 'Статистика индексации',
|
||
statsIndexedMessages: 'Проиндексированные сообщения',
|
||
statsNotConfigured: 'Индексация сообщений не настроена',
|
||
statsNotConfiguredDesc: 'Включите и выберите модель Embedding для автоматической индексации сообщений',
|
||
toasts: {
|
||
saveSuccess: 'Конфигурация управления сообщениями сохранена',
|
||
saveFailed: 'Не удалось сохранить конфигурацию: {message}',
|
||
loadFailed: 'Не удалось загрузить конфигурацию: {message}',
|
||
},
|
||
},
|
||
retrievalSettings: {
|
||
title: 'Настройки поиска',
|
||
description: 'Настройте глобальные параметры поиска, общие для поиска по знаниям и сообщениям',
|
||
embeddingTopKLabel: 'Векторный поиск Top K',
|
||
embeddingTopKDescription: 'Максимальное количество результатов векторного поиска',
|
||
vectorThresholdLabel: 'Порог векторного сходства',
|
||
vectorThresholdDescription: 'Минимальная оценка сходства для векторного поиска (0-1, выше — точнее)',
|
||
keywordThresholdLabel: 'Порог совпадения ключевых слов',
|
||
keywordThresholdDescription: 'Минимальная оценка совпадения для поиска по ключевым словам (0-1)',
|
||
rerankTopKLabel: 'Rerank Top K',
|
||
rerankTopKDescription: 'Максимальное количество результатов после повторного ранжирования',
|
||
rerankThresholdLabel: 'Порог Rerank',
|
||
rerankThresholdDescription: 'Минимальный порог оценки для повторного ранжирования (от -10 до 10)',
|
||
rerankModelLabel: 'Модель Rerank',
|
||
rerankModelDescription: 'Выберите модель для повторного ранжирования результатов поиска',
|
||
rerankModelRequired: 'Пожалуйста, выберите модель Rerank. Функция поиска требует эту модель для ранжирования результатов.',
|
||
toasts: {
|
||
saveSuccess: 'Конфигурация поиска сохранена',
|
||
saveFailed: 'Не удалось сохранить конфигурацию: {message}',
|
||
},
|
||
},
|
||
graphSettings: {
|
||
title: 'Настройки графа знаний',
|
||
description: 'Настройте извлечение сущностей и отношений для автоматического построения графа знаний из текста (примечание: это не то же самое, что «граф ссылок страниц» внутри Wiki — там показаны связи между Wiki-страницами, а здесь строится граф сущностей и отношений на основе LLM)',
|
||
enableLabel: 'Включить извлечение сущностей и отношений',
|
||
enableDescription: 'Автоматически извлекать сущности и отношения из текста при включении',
|
||
tagsLabel: 'Типы отношений',
|
||
tagsDescription: 'Определите теги типов отношений для извлечения, разделённые запятыми',
|
||
tagsPlaceholder: 'Введите типы отношений, например: работает_в, коллега, друг',
|
||
generateRandomTags: 'Сгенерировать случайные теги',
|
||
sampleTextLabel: 'Образец текста',
|
||
sampleTextDescription: 'Образец текста для тестирования извлечения сущностей и отношений',
|
||
sampleTextPlaceholder: 'Введите текст, содержащий сущности и отношения...',
|
||
generateRandomText: 'Сгенерировать случайный текст',
|
||
entityListLabel: 'Список сущностей',
|
||
entityListDescription: 'Сущности и их атрибуты, извлечённые из текста',
|
||
nodeNamePlaceholder: 'Введите имя сущности',
|
||
attributePlaceholder: 'Введите значение атрибута',
|
||
addAttribute: 'Добавить атрибут',
|
||
manageEntitiesLabel: 'Управление сущностями',
|
||
manageEntitiesDescription: 'Добавить или удалить узлы сущностей',
|
||
addEntity: 'Добавить сущность',
|
||
relationListLabel: 'Список отношений',
|
||
relationListDescription: 'Определите связи отношений между сущностями',
|
||
selectEntity: 'Выберите сущность',
|
||
selectRelationType: 'Выберите тип отношения',
|
||
manageRelationsLabel: 'Управление отношениями',
|
||
manageRelationsDescription: 'Добавить или удалить отношения между сущностями',
|
||
addRelation: 'Добавить отношение',
|
||
extractActionsLabel: 'Действия извлечения',
|
||
extractActionsDescription: 'Выполнить извлечение сущностей и отношений или управлять образцами данных',
|
||
startExtraction: 'Начать извлечение',
|
||
extracting: 'Извлечение...',
|
||
defaultExample: 'Пример по умолчанию',
|
||
clearExample: 'Очистить пример',
|
||
completeModelConfig: 'Пожалуйста, сначала завершите настройку модели',
|
||
tagsGenerated: 'Теги успешно сгенерированы',
|
||
tagsGenerateFailed: 'Не удалось сгенерировать теги',
|
||
textGenerated: 'Текст успешно сгенерирован',
|
||
textGenerateFailed: 'Не удалось сгенерировать текст',
|
||
pleaseInputText: 'Пожалуйста, сначала введите образец текста',
|
||
extractSuccess: 'Извлечение сущностей и отношений выполнено успешно',
|
||
extractFailed: 'Не удалось извлечь сущности и отношения',
|
||
exampleLoaded: 'Пример загружен',
|
||
exampleCleared: 'Пример очищен',
|
||
disabledWarning: 'База данных графа знаний не включена, извлечение сущностей и отношений будет недоступно',
|
||
howToEnable: 'Как включить граф знаний?',
|
||
saveSuccess: 'Настройки графа сохранены',
|
||
saveFailed: 'Не удалось сохранить настройки: {message}',
|
||
errors: {
|
||
unknown: 'Неизвестная ошибка'
|
||
}
|
||
},
|
||
initialization: {
|
||
title: 'Инициализация',
|
||
welcome: 'Добро пожаловать в WeKnora',
|
||
description: 'Пожалуйста, настройте систему перед началом работы',
|
||
step1: 'Шаг 1: Настройка LLM модели',
|
||
step2: 'Шаг 2: Настройка модели встраивания',
|
||
step3: 'Шаг 3: Настройка дополнительных моделей',
|
||
complete: 'Завершить инициализацию',
|
||
skip: 'Пропустить',
|
||
next: 'Далее',
|
||
previous: 'Назад',
|
||
ollamaServiceStatus: 'Статус службы Ollama',
|
||
refreshStatus: 'Обновить статус',
|
||
ollamaServiceAddress: 'Адрес службы Ollama',
|
||
notConfigured: 'Не настроено',
|
||
notRunning: 'Не запущено',
|
||
normal: 'Нормально',
|
||
installedModels: 'Установленные модели',
|
||
none: 'Временно отсутствует',
|
||
knowledgeBaseInfo: 'Информация о базе знаний',
|
||
knowledgeBaseName: 'Название базы знаний',
|
||
knowledgeBaseNamePlaceholder: 'Введите название базы знаний',
|
||
knowledgeBaseDescription: 'Описание базы знаний',
|
||
knowledgeBaseDescriptionPlaceholder: 'Введите описание базы знаний',
|
||
llmModelConfig: 'Конфигурация LLM большой языковой модели',
|
||
modelSource: 'Источник модели',
|
||
local: 'Ollama (локальный)',
|
||
remote: 'Remote API (удаленный)',
|
||
modelName: 'Название модели',
|
||
modelNamePlaceholder: 'Например: qwen3:0.6b',
|
||
baseUrl: 'Base URL',
|
||
baseUrlPlaceholder: 'Например: https://api.openai.com/v1, удалите часть /chat/completions в конце URL',
|
||
apiKey: 'API Key (необязательно)',
|
||
apiKeyPlaceholder: 'Введите API Key (необязательно)',
|
||
downloadModel: 'Скачать модель',
|
||
installed: 'Установлено',
|
||
notInstalled: 'Не установлено',
|
||
notChecked: 'Не проверено',
|
||
checkConnection: 'Проверить соединение',
|
||
connectionNormal: 'Соединение в норме',
|
||
connectionFailed: 'Ошибка соединения',
|
||
checkingConnection: 'Проверка соединения',
|
||
embeddingModelConfig: 'Конфигурация модели встраивания',
|
||
embeddingWarning: 'В базе знаний уже есть файлы, невозможно изменить конфигурацию модели встраивания',
|
||
dimension: 'Размерность',
|
||
dimensionPlaceholder: 'Введите размерность вектора',
|
||
detectDimension: 'Определить размерность',
|
||
rerankModelConfig: 'Конфигурация модели ранжирования',
|
||
enableRerank: 'Включить модель ранжирования',
|
||
multimodalConfig: 'Мультимодальная конфигурация',
|
||
enableMultimodal: 'Включить извлечение информации из изображений',
|
||
visualLanguageModelConfig: 'Конфигурация визуально-языковой модели',
|
||
interfaceType: 'Тип интерфейса',
|
||
openaiCompatible: 'Совместимый с OpenAI интерфейс',
|
||
storageServiceConfig: 'Конфигурация службы хранения',
|
||
storageType: 'Тип хранения',
|
||
bucketName: 'Bucket Name',
|
||
bucketNamePlaceholder: 'Введите имя Bucket',
|
||
pathPrefix: 'Path Prefix',
|
||
pathPrefixPlaceholder: 'Например: images',
|
||
secretId: 'Secret ID',
|
||
secretIdPlaceholder: 'Введите COS Secret ID',
|
||
secretKey: 'Secret Key',
|
||
secretKeyPlaceholder: 'Введите COS Secret Key',
|
||
region: 'Region',
|
||
regionPlaceholder: 'Например: ap-beijing',
|
||
appId: 'App ID',
|
||
appIdPlaceholder: 'Введите App ID',
|
||
functionTest: 'Тест функции',
|
||
testDescription: 'Загрузите изображение для тестирования функций описания изображений и распознавания текста модели VLM',
|
||
selectImage: 'Выбрать изображение',
|
||
startTest: 'Начать тест',
|
||
testResult: 'Результат теста',
|
||
imageDescription: 'Описание изображения:',
|
||
textRecognition: 'Распознавание текста:',
|
||
processingTime: 'Время обработки:',
|
||
testFailed: 'Тест не удался',
|
||
multimodalProcessingFailed: 'Ошибка мультимодальной обработки',
|
||
documentSplittingConfig: 'Конфигурация разделения документов',
|
||
splittingStrategy: 'Стратегия разделения',
|
||
balancedMode: 'Сбалансированный режим',
|
||
balancedModeDesc: 'Размер блока: 1000 / Перекрытие: 200',
|
||
precisionMode: 'Точный режим',
|
||
precisionModeDesc: 'Размер блока: 512 / Перекрытие: 100',
|
||
contextMode: 'Контекстный режим',
|
||
contextModeDesc: 'Размер блока: 2048 / Перекрытие: 400',
|
||
custom: 'Пользовательский',
|
||
customDesc: 'Настроить параметры вручную',
|
||
chunkSize: 'Размер блока',
|
||
chunkOverlap: 'Перекрытие блоков',
|
||
separatorSettings: 'Настройки разделителей',
|
||
selectOrCustomSeparators: 'Выберите или настройте разделители',
|
||
characters: 'символов',
|
||
separatorParagraph: 'Разделитель абзацев (\\n\\n)',
|
||
separatorNewline: 'Перевод строки (\\n)',
|
||
separatorPeriod: 'Точка (。)',
|
||
separatorExclamation: 'Восклицательный знак (!)',
|
||
separatorQuestion: 'Вопросительный знак (?)',
|
||
separatorSemicolon: 'Точка с запятой (;)',
|
||
separatorChineseSemicolon: 'Китайская точка с запятой (;)',
|
||
separatorComma: 'Запятая (,)',
|
||
separatorChineseComma: 'Китайская запятая (,)',
|
||
entityRelationExtraction: 'Извлечение сущностей и отношений',
|
||
enableEntityRelationExtraction: 'Включить извлечение сущностей и отношений',
|
||
relationTypeConfig: 'Конфигурация типов отношений',
|
||
relationType: 'Тип отношения',
|
||
generateRandomTags: 'Сгенерировать случайные теги',
|
||
completeModelConfig: 'Пожалуйста, завершите конфигурацию модели',
|
||
systemWillExtract: 'Система будет извлекать соответствующие сущности и отношения из текста в соответствии с выбранными типами отношений',
|
||
extractionExample: 'Пример извлечения',
|
||
sampleText: 'Пример текста',
|
||
sampleTextPlaceholder: 'Введите текст для анализа, например: "Красный особняк", также известный как "Сон в красном тереме", является одним из четырех великих классических произведений китайской литературы, написанным Цинь Сюэцином в династии Цин...',
|
||
generateRandomText: 'Сгенерировать случайный текст',
|
||
entityList: 'Список сущностей',
|
||
nodeName: 'Имя узла',
|
||
nodeNamePlaceholder: 'Имя узла',
|
||
addAttribute: 'Добавить атрибут',
|
||
attributeValue: 'Значение атрибута',
|
||
attributeValuePlaceholder: 'Значение атрибута',
|
||
addEntity: 'Добавить сущность',
|
||
completeEntityInfo: 'Пожалуйста, завершите информацию о сущности',
|
||
relationConnection: 'Соединение отношений',
|
||
selectEntity: 'Выберите сущность',
|
||
addRelation: 'Добавить отношение',
|
||
completeRelationInfo: 'Пожалуйста, завершите информацию об отношении',
|
||
startExtraction: 'Начать извлечение',
|
||
extracting: 'Извлечение...',
|
||
defaultExample: 'Пример по умолчанию',
|
||
clearExample: 'Очистить пример',
|
||
updateKnowledgeBaseSettings: 'Обновить настройки базы знаний',
|
||
updateConfigInfo: 'Обновить информацию о конфигурации',
|
||
completeConfig: 'Завершить конфигурацию',
|
||
waitForDownloads: 'Пожалуйста, дождитесь завершения загрузки всех моделей Ollama перед обновлением конфигурации',
|
||
completeModelConfigInfo: 'Пожалуйста, завершите информацию о конфигурации модели',
|
||
knowledgeBaseIdMissing: 'Отсутствует ID базы знаний',
|
||
knowledgeBaseSettingsUpdateSuccess: 'Настройки базы знаний успешно обновлены',
|
||
configUpdateSuccess: 'Конфигурация успешно обновлена',
|
||
systemInitComplete: 'Инициализация системы завершена',
|
||
operationFailed: 'Операция не удалась',
|
||
updateKnowledgeBaseInfoFailed: 'Не удалось обновить базовую информацию о базе знаний',
|
||
knowledgeBaseIdMissingCannotSave: 'Отсутствует ID базы знаний, невозможно сохранить конфигурацию',
|
||
operationFailedCheckNetwork: 'Операция не удалась, проверьте сетевое соединение',
|
||
imageUploadSuccess: 'Изображение успешно загружено, можно начать тестирование',
|
||
multimodalConfigIncomplete: 'Мультимодальная конфигурация неполная, пожалуйста, завершите мультимодальную конфигурацию перед загрузкой изображения',
|
||
pleaseSelectImage: 'Пожалуйста, выберите изображение',
|
||
multimodalTestSuccess: 'Мультимодальный тест успешен',
|
||
multimodalTestFailed: 'Мультимодальный тест не удался',
|
||
pleaseEnterSampleText: 'Пожалуйста, введите текст примера',
|
||
pleaseEnterRelationType: 'Пожалуйста, введите тип отношения',
|
||
pleaseEnterLLMModelConfig: 'Пожалуйста, введите конфигурацию LLM большой языковой модели',
|
||
noValidNodesExtracted: 'Не извлечено допустимых узлов',
|
||
noValidRelationsExtracted: 'Не извлечено допустимых отношений',
|
||
extractionFailedCheckNetwork: 'Извлечение не удалось, проверьте сетевое соединение или формат текста',
|
||
generateFailedRetry: 'Генерация не удалась, попробуйте еще раз',
|
||
pleaseCheckForm: 'Пожалуйста, проверьте правильность заполнения формы',
|
||
detectionSuccessful: 'Обнаружение успешно, размерность автоматически заполнена как',
|
||
detectionFailed: 'Обнаружение не удалось',
|
||
detectionFailedCheckConfig: 'Обнаружение не удалось, проверьте конфигурацию',
|
||
modelDownloadSuccess: 'Модель успешно загружена',
|
||
modelDownloadFailed: 'Не удалось загрузить модель',
|
||
downloadStartFailed: 'Не удалось начать загрузку',
|
||
queryProgressFailed: 'Не удалось запросить прогресс',
|
||
checkOllamaStatusFailed: 'Не удалось проверить статус Ollama',
|
||
getKnowledgeBaseInfoFailed: 'Не удалось получить информацию о базе знаний',
|
||
textRelationExtractionFailed: 'Не удалось извлечь текстовые отношения',
|
||
pleaseEnterKnowledgeBaseName: 'Пожалуйста, введите название базы знаний',
|
||
knowledgeBaseNameLength: 'Длина названия базы знаний должна быть от 1 до 50 символов',
|
||
knowledgeBaseDescriptionLength: 'Длина описания базы знаний не может превышать 200 символов',
|
||
pleaseEnterLLMModelName: 'Пожалуйста, введите название LLM модели',
|
||
pleaseEnterBaseURL: 'Пожалуйста, введите BaseURL',
|
||
pleaseEnterEmbeddingModelName: 'Пожалуйста, введите название модели встраивания',
|
||
pleaseEnterEmbeddingDimension: 'Пожалуйста, введите размерность встраивания',
|
||
dimensionMustBeInteger: 'Размерность должна быть допустимым целым числом, обычно 768, 1024, 1536, 3584 и т.д.',
|
||
pleaseEnterTextContent: 'Пожалуйста, введите текстовое содержание',
|
||
textContentMinLength: 'Текстовое содержание должно содержать не менее 10 символов',
|
||
pleaseEnterValidTag: 'Пожалуйста, введите действительный тег',
|
||
tagAlreadyExists: 'Этот тег уже существует',
|
||
checkFailed: 'Проверка не удалась',
|
||
startingDownload: 'Запуск загрузки...',
|
||
downloadStarted: 'Загрузка началась',
|
||
model: 'Модель',
|
||
startModelDownloadFailed: 'Не удалось запустить загрузку модели',
|
||
downloadCompleted: 'Загрузка завершена',
|
||
downloadFailed: 'Загрузка не удалась',
|
||
knowledgeBaseSettingsModeMissingId: 'В режиме настроек базы знаний отсутствует ID базы знаний',
|
||
completeEmbeddingConfig: 'Пожалуйста, сначала полностью заполните конфигурацию встраивания',
|
||
detectionSuccess: 'Обнаружение успешно,',
|
||
dimensionAutoFilled: 'размерность автоматически заполнена:',
|
||
checkFormCorrectness: 'Пожалуйста, проверьте правильность заполнения формы',
|
||
systemInitializationCompleted: 'Инициализация системы завершена',
|
||
generationFailedRetry: 'Генерация не удалась, пожалуйста, попробуйте еще раз',
|
||
chunkSizeDesc: 'Размер каждого текстового блока. Большие блоки сохраняют больше контекста, но могут снизить точность поиска.',
|
||
chunkOverlapDesc: 'Количество символов, перекрывающихся между соседними блоками. Помогает сохранить контекст на границах блоков.',
|
||
selectRelationType: 'Выберите тип отношения'
|
||
},
|
||
auth: {
|
||
login: 'Вход',
|
||
logout: 'Выход',
|
||
oidcLogin: 'Войти через OIDC',
|
||
oidcLoginWithProvider: 'Войти через {provider}',
|
||
redirectingToOIDC: 'Перенаправление к поставщику удостоверений...',
|
||
orContinueWith: 'Или продолжить с помощью',
|
||
oidcLoginFailed: 'Ошибка входа через OIDC',
|
||
oidcStateMismatch: 'Не удалось проверить состояние OIDC, попробуйте снова',
|
||
username: 'Имя пользователя',
|
||
email: 'Почта Email',
|
||
password: 'Пароль',
|
||
confirmPassword: 'Подтвердите пароль',
|
||
rememberMe: 'Запомнить меня',
|
||
forgotPassword: 'Забыли пароль?',
|
||
loginSuccess: 'Вход выполнен успешно!',
|
||
loginSuccessTitle: 'Вход выполнен',
|
||
loginSuccessContent: 'С возвращением. Вы вошли в {name}',
|
||
loginSuccessContentWithRole: 'С возвращением. Вы вошли в {name} · роль {role}',
|
||
loginFailed: 'Ошибка входа',
|
||
loggingIn: 'Вход...',
|
||
register: 'Регистрация',
|
||
registering: 'Регистрация...',
|
||
createAccount: 'Создать аккаунт',
|
||
haveAccount: 'Уже есть аккаунт?',
|
||
noAccount: 'Ещё нет аккаунта?',
|
||
backToLogin: 'Вернуться ко входу',
|
||
registerNow: 'Зарегистрироваться',
|
||
loginHint: 'Войдите, чтобы продолжить, или создайте аккаунт ниже, если вы впервые здесь.',
|
||
firstTime: 'Впервые в WeKnora?',
|
||
registerSuccess: 'Регистрация успешна! Система создала для вас эксклюзивного арендатора, пожалуйста, войдите',
|
||
registerFailed: 'Ошибка регистрации',
|
||
subtitle: 'RAG, ReAct-агент и Wiki — корпоративный фреймворк знаний на основе больших моделей',
|
||
registerSubtitle: 'После регистрации система создаст для вас эксклюзивного арендатора',
|
||
emailPlaceholder: 'Введите адрес электронной почты',
|
||
passwordPlaceholder: 'Введите пароль (8-32 символа, включая буквы и цифры)',
|
||
confirmPasswordPlaceholder: 'Введите пароль ещё раз',
|
||
usernamePlaceholder: 'Введите имя пользователя',
|
||
emailRequired: 'Введите адрес электронной почты',
|
||
emailInvalid: 'Введите правильный формат электронной почты',
|
||
passwordRequired: 'Введите пароль',
|
||
passwordMinLength: 'Пароль должен быть не менее 8 символов',
|
||
passwordMaxLength: 'Пароль не может превышать 32 символа',
|
||
passwordMustContainLetter: 'Пароль должен содержать буквы',
|
||
passwordMustContainNumber: 'Пароль должен содержать цифры',
|
||
usernameRequired: 'Введите имя пользователя',
|
||
usernameMinLength: 'Имя пользователя должно быть не менее 2 символов',
|
||
usernameMaxLength: 'Имя пользователя не может превышать 20 символов',
|
||
usernameInvalid: 'Имя пользователя может содержать только буквы, цифры, подчёркивания и китайские иероглифы',
|
||
confirmPasswordRequired: 'Подтвердите пароль',
|
||
passwordMismatch: 'Введённые пароли не совпадают',
|
||
loginError: 'Ошибка входа, пожалуйста, проверьте электронную почту или пароль',
|
||
loginErrorRetry: 'Ошибка входа, пожалуйста, повторите попытку позже',
|
||
registerError: 'Ошибка регистрации, пожалуйста, повторите попытку позже',
|
||
forgotPasswordNotAvailable: 'Функция восстановления пароля временно недоступна, пожалуйста, свяжитесь с администратором'
|
||
},
|
||
authStore: {
|
||
errors: {
|
||
parseUserFailed: 'Не удалось разобрать данные пользователя',
|
||
parseTenantFailed: 'Не удалось разобрать данные арендатора',
|
||
parseKnowledgeBasesFailed: 'Не удалось разобрать список баз знаний',
|
||
parseCurrentKnowledgeBaseFailed: 'Не удалось разобрать текущую базу знаний'
|
||
}
|
||
},
|
||
common: {
|
||
confirm: 'Подтвердить',
|
||
cancel: 'Отмена',
|
||
save: 'Сохранить',
|
||
delete: 'Удалить',
|
||
edit: 'Редактировать',
|
||
default: 'По умолчанию',
|
||
create: 'Создать',
|
||
search: 'Поиск',
|
||
filter: 'Фильтр',
|
||
export: 'Экспорт',
|
||
import: 'Импорт',
|
||
upload: 'Загрузить',
|
||
download: 'Скачать',
|
||
refresh: 'Обновить',
|
||
loading: 'Загрузка...',
|
||
noData: 'Нет данных',
|
||
noMoreData: 'Весь контент загружен',
|
||
error: 'Ошибка',
|
||
success: 'Успешно',
|
||
failed: 'Ошибка',
|
||
warning: 'Предупреждение',
|
||
info: 'Информация',
|
||
selectAll: 'Выбрать все',
|
||
yes: 'Да',
|
||
no: 'Нет',
|
||
ok: 'OK',
|
||
close: 'Закрыть',
|
||
back: 'Назад',
|
||
next: 'Далее',
|
||
finish: 'Завершить',
|
||
all: 'Все',
|
||
reset: 'Сбросить',
|
||
clear: 'Очистить',
|
||
website: 'Официальный сайт',
|
||
chromeExtension: 'Расширение Chrome',
|
||
clawhubSkill: 'Claw Skill',
|
||
newBadge: 'New',
|
||
github: 'GitHub',
|
||
githubStarTip: 'Открыть репозиторий на GitHub — поставьте Star, если проект полезен',
|
||
on: 'Вкл',
|
||
off: 'Выкл',
|
||
resetToDefault: 'Сбросить по умолчанию',
|
||
confirmDelete: 'Подтвердить удаление',
|
||
deleteSuccess: 'Успешно удалено',
|
||
deleteFailed: 'Ошибка удаления',
|
||
saveSuccess: 'Успешно сохранено',
|
||
saveFailed: 'Ошибка сохранения',
|
||
file: 'Файл',
|
||
knowledgeBase: 'База знаний',
|
||
noResult: 'Нет результатов',
|
||
remove: 'Удалить',
|
||
defaultUser: 'Пользователь',
|
||
copyFailed: 'Ошибка копирования',
|
||
retry: 'Повторить',
|
||
expand: 'Развернуть',
|
||
collapse: 'Свернуть',
|
||
me: 'Я',
|
||
copy: 'Копировать',
|
||
copied: 'Скопировано'
|
||
},
|
||
mentionDetail: {
|
||
faqCount: '{count} вопросов и ответов',
|
||
kbCount: '{count} документов',
|
||
belongsToKb: 'База знаний: ',
|
||
belongsToOrg: 'Пространство: ',
|
||
readOnlyFromAgent: 'Только чтение (от агента)',
|
||
noCompatibleKbForAgent: 'Инструменты текущего агента не соответствуют возможностям ни одной базы знаний в области видимости — нечего упомянуть.'
|
||
},
|
||
file: {
|
||
upload: 'Загрузить файл',
|
||
uploadSuccess: 'Файл успешно загружен',
|
||
uploadFailed: 'Ошибка загрузки файла',
|
||
delete: 'Удалить файл',
|
||
deleteSuccess: 'Файл успешно удален',
|
||
deleteFailed: 'Ошибка удаления файла',
|
||
download: 'Скачать файл',
|
||
preview: 'Предпросмотр',
|
||
unsupportedFormat: 'Неподдерживаемый формат файла',
|
||
maxSizeExceeded: 'Превышен максимальный размер файла',
|
||
selectFile: 'Выберите файл'
|
||
},
|
||
tenant: {
|
||
title: 'Информация об арендаторе',
|
||
currentTenant: 'Текущий арендатор',
|
||
switchTenant: 'Переключить рабочее пространство',
|
||
switcher: {
|
||
menuLabel: 'Переключить рабочее пространство',
|
||
currentBadge: 'Текущий',
|
||
homeBadge: 'Home',
|
||
homeTooltip: 'Ваше основное рабочее пространство',
|
||
empty: 'Вы состоите только в одном рабочем пространстве',
|
||
},
|
||
currentChip: {
|
||
home: 'Основной арендатор',
|
||
},
|
||
sectionDescription: 'Просмотр детальной конфигурации арендатора',
|
||
apiDocument: 'Документация API',
|
||
name: 'Имя арендатора',
|
||
id: 'ID арендатора',
|
||
createdAt: 'Дата создания',
|
||
updatedAt: 'Дата обновления',
|
||
status: 'Статус',
|
||
active: 'Активен',
|
||
inactive: 'Неактивен',
|
||
systemInfo: 'Системная информация',
|
||
viewSystemInfo: 'Просмотр информации о версии системы и конфигурации учётной записи пользователя',
|
||
version: 'Версия',
|
||
buildTime: 'Время сборки',
|
||
goVersion: 'Версия Go',
|
||
userInfo: 'Информация о пользователе',
|
||
userId: 'ID пользователя',
|
||
username: 'Имя пользователя',
|
||
email: 'Электронная почта',
|
||
tenantInfo: 'Информация об арендаторе',
|
||
tenantId: 'ID арендатора',
|
||
tenantName: 'Название арендатора',
|
||
description: 'Описание',
|
||
business: 'Бизнес',
|
||
noDescription: 'Нет описания',
|
||
noBusiness: 'Нет',
|
||
statusActive: 'Активен',
|
||
statusInactive: 'Не активирован',
|
||
statusSuspended: 'Приостановлен',
|
||
statusUnknown: 'Неизвестен',
|
||
apiKey: 'API Key',
|
||
keepApiKeySafe: 'Пожалуйста, храните ваш API Key в безопасности, не раскрывайте его в общественных местах или репозиториях кода',
|
||
storageInfo: 'Информация о хранилище',
|
||
storageQuota: 'Квота хранилища',
|
||
used: 'Использовано',
|
||
usage: 'Использование',
|
||
apiDevDocs: 'Документация для разработчиков API',
|
||
useApiKey: 'Используйте ваш API Key для начала разработки, просмотрите полную документацию API и примеры кода.',
|
||
viewApiDoc: 'Просмотреть документацию API',
|
||
loadingAccountInfo: 'Загрузка информации об учётной записи...',
|
||
loadingInfo: 'Загрузка данных...',
|
||
loadFailed: 'Загрузка не удалась',
|
||
retry: 'Повторить',
|
||
apiKeyCopied: 'API Key скопирован в буфер обмена',
|
||
unknown: 'Неизвестно',
|
||
formatError: 'Ошибка формата',
|
||
searchPlaceholder: 'Поиск по имени или введите ID арендатора...',
|
||
searchHint: 'Поиск по имени или введите ID арендатора напрямую',
|
||
noMatch: 'Не найдено подходящих арендаторов',
|
||
switchSuccessTitle: 'Пространство переключено',
|
||
switchSuccessContent: 'Вы вошли в {name}',
|
||
switchSuccessContentWithRole: 'Вы вошли в {name} · роль {role}',
|
||
loadTenantsFailed: 'Не удалось загрузить список арендаторов',
|
||
loading: 'Загрузка...',
|
||
loadMore: 'Загрузить еще',
|
||
create: {
|
||
action: 'Создать новое рабочее пространство',
|
||
dialogTitle: 'Создать новое рабочее пространство',
|
||
dialogSubtitle: 'У рабочего пространства собственные базы знаний и участники. Вы станете его владельцем.',
|
||
nameLabel: 'Название',
|
||
namePlaceholder: 'Например: Мой новый проект',
|
||
nameRequired: 'Введите название рабочего пространства',
|
||
descriptionLabel: 'Описание (необязательно)',
|
||
descriptionPlaceholder: 'Кратко опишите назначение рабочего пространства',
|
||
submit: 'Создать',
|
||
cancel: 'Отмена',
|
||
success: 'Рабочее пространство создано',
|
||
failed: 'Не удалось создать рабочее пространство',
|
||
},
|
||
details: {
|
||
idLabel: 'ID арендатора',
|
||
idDescription: 'Уникальный идентификатор вашего арендатора',
|
||
nameLabel: 'Название арендатора',
|
||
nameDescription: 'Название арендатора, к которому вы принадлежите',
|
||
descriptionLabel: 'Описание арендатора',
|
||
descriptionDescription: 'Подробное описание арендатора',
|
||
businessLabel: 'Бизнес арендатора',
|
||
businessDescription: 'Бизнес-направление, к которому относится арендатор',
|
||
statusLabel: 'Статус арендатора',
|
||
statusDescription: 'Текущий рабочий статус арендатора',
|
||
createdAtLabel: 'Время создания арендатора',
|
||
createdAtDescription: 'Дата и время создания арендатора',
|
||
editName: 'Изменить имя',
|
||
editNamePlaceholder: 'Введите новое имя арендатора',
|
||
editNameConfirm: 'Сохранить',
|
||
editNameCancel: 'Отмена',
|
||
editNameRequired: 'Имя арендатора не может быть пустым',
|
||
editNameSuccess: 'Имя арендатора обновлено',
|
||
editNameFailed: 'Не удалось обновить имя арендатора',
|
||
editDescription: 'Изменить описание',
|
||
editDescriptionPlaceholder: 'Введите новое описание арендатора',
|
||
editDescriptionSuccess: 'Описание арендатора обновлено',
|
||
editDescriptionFailed: 'Не удалось обновить описание арендатора',
|
||
descriptionEmptyPlaceholder: 'Не указано'
|
||
},
|
||
storage: {
|
||
quotaLabel: 'Квота хранения',
|
||
quotaDescription: 'Общий объём хранилища, выделенный арендатору',
|
||
usedLabel: 'Использовано хранения',
|
||
usedDescription: 'Объём уже использованного пространства',
|
||
usageLabel: 'Использование хранения',
|
||
usageDescription: 'Процент использованного пространства'
|
||
},
|
||
leaveDangerZone: {
|
||
title: 'Покинуть это рабочее пространство',
|
||
desc: 'Завершает ваше членство в этом пространстве. Вы потеряете доступ к базам знаний и агентам. Позже вас можно снова пригласить.',
|
||
button: 'Покинуть пространство',
|
||
},
|
||
messages: {
|
||
fetchFailed: 'Не удалось получить информацию об арендаторе',
|
||
networkError: 'Ошибка сети, попробуйте позже'
|
||
},
|
||
api: {
|
||
title: 'Информация об API',
|
||
description: 'Просматривайте и управляйте своим API-ключом',
|
||
keyLabel: 'API Key',
|
||
keyDescription: 'Ключ для API-запросов. Храните его в безопасности.',
|
||
urlLabel: 'URL API',
|
||
urlDescription: 'Базовый путь REST API; при вызове добавляйте конкретный путь эндпоинта.',
|
||
copyUrlTitle: 'Скопировать URL API',
|
||
urlCopySuccess: 'URL API скопирован в буфер обмена',
|
||
copyTitle: 'Скопировать API Key',
|
||
resetTitle: 'Сбросить API Key',
|
||
resetConfirmTitle: 'Сбросить API Key?',
|
||
resetConfirmBody: 'После сброса прежний API Key немедленно перестаёт действовать. Все приложения, SDK и скрипты, использующие старый ключ, должны быть переведены на новый ключ. Это действие нельзя отменить.',
|
||
resetConfirmOk: 'Сбросить',
|
||
resetConfirmCancel: 'Отмена',
|
||
resetSuccess: 'API Key сброшен; новый ключ показан в поле выше',
|
||
resetFailed: 'Не удалось сбросить API Key',
|
||
docLabel: 'Документация API',
|
||
docDescription: 'Ознакомьтесь с полной документацией и примерами API,',
|
||
openDoc: 'Открыть документацию',
|
||
userSectionTitle: 'Информация о пользователе',
|
||
userIdLabel: 'ID пользователя',
|
||
userIdDescription: 'Ваш уникальный идентификатор пользователя',
|
||
usernameLabel: 'Имя пользователя',
|
||
usernameDescription: 'Имя, используемое для входа',
|
||
emailLabel: 'Электронная почта',
|
||
emailDescription: 'Ваш зарегистрированный адрес электронной почты',
|
||
createdAtLabel: 'Время регистрации',
|
||
createdAtDescription: 'Время создания учётной записи',
|
||
noKey: 'API Key отсутствует',
|
||
copySuccess: 'API Key скопирован в буфер обмена',
|
||
copyFailed: 'Не удалось скопировать, пожалуйста, сделайте это вручную',
|
||
desktopPortLabel: 'Локальный порт API (desktop)',
|
||
desktopPortDescription:
|
||
'Укажите фиксированный порт (например, 37841), чтобы расширение Chrome и другие инструменты всегда использовали один URL API. 0 — случайный порт при каждом запуске. После сохранения перезапустите приложение.',
|
||
desktopPortSave: 'Сохранить',
|
||
desktopPortSaved: 'Сохранено. Перезапустите приложение, чтобы применить.',
|
||
desktopPortSaveFailed: 'Не удалось сохранить',
|
||
desktopPortInvalid: 'Введите порт от 0 до 65535',
|
||
desktopBindPublicLabel: 'Разрешить доступ к API в LAN',
|
||
desktopBindPublicDescription:
|
||
'Встроенный сервер слушает 0.0.0.0 — другие устройства в локальной сети смогут обращаться к API по адресу ниже. Риски доступа выше; настройте брандмауэр и маршрутизацию. После изменения перезапустите приложение.',
|
||
desktopBindPublicSaved: 'Сохранено. Перезапустите приложение, чтобы применить.',
|
||
desktopBindPublicSaveFailed: 'Не удалось сохранить',
|
||
lanUrlLabel: 'Базовый URL API для LAN',
|
||
lanUrlDescription:
|
||
'Отображается после включения доступа в LAN и перезапуска. Если IP неверный, подставьте IPv4 из сетевых настроек системы.',
|
||
lanUrlCopyTitle: 'Копировать LAN URL API',
|
||
lanUrlCopySuccess: 'LAN URL API скопирован',
|
||
lanUrlUnavailable:
|
||
'API слушает все интерфейсы, но LAN IPv4 не удалось определить автоматически. Узнайте IPv4 в настройках сети и соберите http://ВАШ_IP:ПОРТ/api/v1 вручную.',
|
||
}
|
||
},
|
||
system: {
|
||
title: 'Системная информация',
|
||
sectionDescription: 'Просмотр сведений о версии системы и конфигурации учётной записи пользователя',
|
||
loadingInfo: 'Загрузка данных...',
|
||
retry: 'Повторить',
|
||
versionLabel: 'Версия приложения',
|
||
versionDescription: 'Версия сервиса приложения (weknora-app)',
|
||
frontendVersionLabel: 'Версия UI',
|
||
frontendVersionDescription: 'Версия сборки UI (weknora-ui)',
|
||
versionMismatch: 'Не совпадает с версией приложения',
|
||
buildTimeLabel: 'Время сборки',
|
||
buildTimeDescription: 'Время, когда система была собрана',
|
||
goVersionLabel: 'Версия Go',
|
||
goVersionDescription: 'Версия языка Go, используемая backend',
|
||
startedAtLabel: 'Время запуска сервиса',
|
||
startedAtDescription: 'Момент последнего запуска текущего процесса backend',
|
||
uptimeLabel: 'Время работы',
|
||
uptimeDescription: 'Непрерывное время работы с момента этого запуска',
|
||
uptimeDays: '{n} д',
|
||
uptimeHours: '{n} ч',
|
||
uptimeMinutes: '{n} мин',
|
||
uptimeSeconds: '{n} с',
|
||
dbVersionLabel: 'Версия базы данных',
|
||
dbVersionDescription: 'Текущая версия миграции базы данных',
|
||
dbMigrationFailedTag: 'Миграция не удалась',
|
||
dbMigrationFailedTitle: 'Сбой миграции базы данных',
|
||
dbMigrationFailedDesc: 'Миграция базы данных при запуске не завершилась успешно. Часть таблиц или индексов могла не создаться, из-за чего Wiki, граф знаний и другие функции могут не работать. Сначала ознакомьтесь с руководством по диагностике ниже; если проблема сохраняется, сообщите о ней по ссылке.',
|
||
dbMigrationViewDocs: 'Открыть руководство по диагностике',
|
||
dbMigrationReportIssue: 'Не удаётся починить? Создать issue',
|
||
keywordIndexEngineLabel: 'Движок индексации ключевых слов',
|
||
keywordIndexEngineDescription: 'Используемый в настоящее время движок индексации ключевых слов',
|
||
vectorStoreEngineLabel: 'Движок векторного хранилища',
|
||
vectorStoreEngineDescription: 'Используемый в настоящее время движок векторного хранилища',
|
||
graphDatabaseEngineLabel: 'Движок графовой базы данных',
|
||
graphDatabaseEngineDescription: 'Используемый в настоящее время движок графовой базы данных',
|
||
unknown: 'Неизвестно',
|
||
messages: {
|
||
fetchFailed: 'Не удалось получить информацию о системе',
|
||
networkError: 'Ошибка сети, попробуйте позже'
|
||
},
|
||
globalSettings: {
|
||
title: 'Системные настройки',
|
||
description: 'Настройки платформы, применяемые в режиме реального времени. Изменения сразу действуют для всех тенантов. Доступны только системным администраторам.',
|
||
loading: 'Загрузка...',
|
||
empty: 'Нет доступных для настройки параметров',
|
||
badgeRequiresRestart: 'Нужен перезапуск',
|
||
badgeSecret: 'Конфиденциально',
|
||
badgeOverride: 'Переопределено',
|
||
badgeOverrideTooltip: 'Это значение сохранено администратором в БД и переопределяет переменную окружения и значение по умолчанию.',
|
||
modifiedAt: 'Последнее изменение: {value}',
|
||
tagInputPlaceholder: 'Нажмите Enter, чтобы добавить запись, например: example.com / *.foo.com / 10.0.0.0/8',
|
||
priorityHint: {
|
||
title: 'О приоритете',
|
||
tier1: 'Параметры, сохранённые на этой странице (с пометкой «Переопределено»), всегда имеют приоритет — переменная окружения для них игнорируется.',
|
||
tier2: 'Параметры, не сохранённые здесь, берутся из переменной окружения, а если её нет — из встроенного значения по умолчанию.',
|
||
tier3: 'Чтобы вернуть параметр под управление переменной окружения, нажмите кнопку «Сбросить» в его строке.',
|
||
},
|
||
keyLabels: {
|
||
auth: {
|
||
registration_mode: 'Режим самостоятельной регистрации',
|
||
},
|
||
ssrf: {
|
||
whitelist: 'Белый список SSRF-защиты',
|
||
},
|
||
tenant: {
|
||
max_owned_per_user: 'Максимум тенантов на пользователя',
|
||
default_storage_quota_gb: 'Квота хранилища для новых тенантов по умолчанию (ГБ)',
|
||
},
|
||
asynq: {
|
||
concurrency: 'Параллелизм воркеров асинхронных задач',
|
||
},
|
||
},
|
||
keyDescriptions: {
|
||
auth: {
|
||
registration_mode:
|
||
'Режим самостоятельной регистрации. self_serve = любой может создать аккаунт; invite_only = открытая регистрация отключена, приглашать могут только Owner/Admin. Вступает в силу сразу после сохранения; используйте self_serve осторожно (в публичном интернете появятся спам-регистрации).',
|
||
},
|
||
ssrf: {
|
||
whitelist:
|
||
'Белый список SSRF-защиты. Можно указать example.com / *.foo.com / 10.0.0.0/8 / 2001:db8::1. Вступает в силу сразу после сохранения. Переменная окружения SSRF_WHITELIST_EXTRA по-прежнему задаётся при развёртывании и здесь не переопределяется.',
|
||
},
|
||
tenant: {
|
||
max_owned_per_user:
|
||
'Максимальное число тенантов, которыми может владеть обычный (не супер) пользователь через самостоятельное создание. Читается при каждом создании тенанта и вступает в силу сразу после сохранения. 0 — встроенное значение по умолчанию 10; отрицательное значение полностью снимает ограничение (не рекомендуется для публичных развёртываний).',
|
||
default_storage_quota_gb:
|
||
'Квота хранилища по умолчанию (ГБ) для нового тенанта: векторы, оригиналы, текст, индексы и т.д. Читается только при создании — изменения применяются только к новым тенантам и не перезаписывают существующие. 0 или отрицательное значение — встроенное значение по умолчанию 10 ГБ.',
|
||
},
|
||
asynq: {
|
||
concurrency:
|
||
'Параллелизм воркеров асинхронных задач (размер пула потоков asynq). Парсинг документов, эмбеддинги и подобные задачи в основном ждут I/O, поэтому увеличение значения сокращает очередь при массовой загрузке. Для применения требуется перезапуск процесса сервиса.',
|
||
},
|
||
},
|
||
enumLabels: {
|
||
auth: {
|
||
registration_mode: {
|
||
self_serve: 'Самостоятельная (любой может зарегистрироваться)',
|
||
invite_only: 'Только по приглашению (открытая регистрация отключена)',
|
||
},
|
||
},
|
||
},
|
||
confirm: {
|
||
header: 'Подтверждение опасного действия',
|
||
confirmBtn: 'Подтвердить сохранение',
|
||
cancelBtn: 'Отмена',
|
||
emptyValue: '(пусто)',
|
||
defaultBody: 'Вы собираетесь изменить «{label}» на: {value}',
|
||
bodyAuthRegistrationMode: 'Вы собираетесь изменить «{label}» на: {value}\n\nЕсли переключить на self_serve, любой пользователь публичного интернета сможет создать аккаунт — убедитесь, что это ожидаемое поведение.',
|
||
},
|
||
listConfirm: {
|
||
ssrf: {
|
||
whitelist: {
|
||
add: {
|
||
header: 'Добавить запись в белый список SSRF',
|
||
body: 'Добавить {entry} в белый список SSRF? Соответствующие хосты / IP / подсети будут обходить защиту от SSRF и смогут обращаться к внутренним сервисам через агентов. Добавляйте только полностью доверенные записи.',
|
||
confirmBtn: 'Добавить',
|
||
},
|
||
remove: {
|
||
header: 'Удалить запись из белого списка SSRF',
|
||
body: 'Удалить {entry} из белого списка SSRF? После удаления запись снова будет блокироваться защитой от SSRF.',
|
||
confirmBtn: 'Удалить',
|
||
},
|
||
},
|
||
},
|
||
},
|
||
messages: {
|
||
loadFailed: 'Не удалось загрузить системные настройки',
|
||
saveSuccess: 'Сохранено',
|
||
saveFailed: 'Ошибка сохранения'
|
||
},
|
||
reset: {
|
||
label: 'Сбросить',
|
||
tooltip: 'Очистить переопределение из UI и вернуться к переменной окружения или встроенному значению по умолчанию',
|
||
confirmBtn: 'Подтвердить сброс',
|
||
confirmBody: 'Сбросить «{label}»? Это удалит запись переопределения в БД и вернёт значение из переменной окружения или встроенное по умолчанию.',
|
||
success: 'Сброшено к значению по умолчанию',
|
||
failed: 'Ошибка сброса'
|
||
},
|
||
admins: {
|
||
label: 'Системные администраторы',
|
||
description: 'Пользователи с правами уровня платформы. Введите email и нажмите Enter, чтобы повысить пользователя до администратора; нажмите × на теге, чтобы отозвать права. Вы (текущий пользователь) являетесь администратором и не отображаетесь в списке — отозвать собственные права нельзя.',
|
||
placeholder: 'Введите email пользователя и нажмите Enter',
|
||
loadFailed: 'Не удалось загрузить системных администраторов',
|
||
saveSuccess: 'Системные администраторы обновлены',
|
||
saveFailed: 'Ошибка обновления системных администраторов',
|
||
confirm: {
|
||
promote: {
|
||
header: 'Повысить до системного администратора',
|
||
body: 'Повысить пользователя {email} до системного администратора? Пользователь получит права уровня платформы: доступ ко всем тенантам, изменение системных настроек и управление списком администраторов.',
|
||
confirmBtn: 'Повысить',
|
||
},
|
||
revoke: {
|
||
header: 'Отозвать права администратора',
|
||
body: 'Отозвать права системного администратора у {email}? После отзыва пользователь потеряет доступ ко всем системным функциям.',
|
||
confirmBtn: 'Отозвать',
|
||
},
|
||
},
|
||
},
|
||
bulkApply: {
|
||
label: 'Применить ко всем существующим тенантам',
|
||
tooltip: 'По умолчанию сохранённое значение применяется только к новым тенантам. Нажмите, чтобы также перезаписать всех существующих.',
|
||
confirmBtn: 'Подтвердить применение',
|
||
confirmBody: 'Перезаписать квоту хранилища всех существующих тенантов значением {value} ГБ. Тенанты, чью квоту вручную правили эксплуатация, также будут перезаписаны. Продолжить?',
|
||
success: 'Обновлена квота хранилища у {count} тенантов: {gb} ГБ',
|
||
failed: 'Ошибка применения ко всем тенантам'
|
||
},
|
||
audit: {
|
||
tabLabel: 'Журнал аудита',
|
||
description:
|
||
'События уровня платформы: изменения системных настроек, выдача/отзыв роли системного администратора, массовая синхронизация квот. Сортировка от новых к старым.',
|
||
refresh: 'Обновить',
|
||
retry: 'Повторить',
|
||
loading: 'Загрузка…',
|
||
end: 'Конец списка.',
|
||
empty: 'Событий аудита платформы пока нет.',
|
||
forbidden: 'Нет прав на просмотр журнала аудита платформы.',
|
||
systemActor: 'Система',
|
||
errors: {
|
||
generic: 'Не удалось загрузить журнал аудита'
|
||
},
|
||
actorRole: {
|
||
system_admin: 'Системный администратор'
|
||
},
|
||
columns: {
|
||
time: 'Время',
|
||
actor: 'Кто',
|
||
action: 'Событие',
|
||
target: 'Цель',
|
||
path: 'Запрос',
|
||
outcome: 'Результат'
|
||
},
|
||
action: {
|
||
'system.setting_changed': 'Изменена системная настройка',
|
||
'system.admin_promoted': 'Выдан системный администратор',
|
||
'system.admin_revoked': 'Отозван системный администратор'
|
||
},
|
||
outcome: {
|
||
success: 'Успешно',
|
||
denied: 'Отказано'
|
||
},
|
||
target: {
|
||
bulkQuota: 'Массовая синхронизация: квота хранилища по умолчанию',
|
||
bulkQuotaDiff: 'Применено к {count} тенантам ({gb} ГБ)',
|
||
promoteIdempotent: 'Уже системный администратор (идемпотентно)',
|
||
revokeNoop: 'И так не был системным администратором (идемпотентно)',
|
||
requiredRole: 'Требуемая роль: {role}',
|
||
valueNull: '(не задано)'
|
||
},
|
||
expanded: {
|
||
actorId: 'ID инициатора',
|
||
targetUserId: 'ID целевого пользователя',
|
||
targetType: 'Тип цели',
|
||
targetId: 'ID цели',
|
||
details: 'Сырые детали'
|
||
}
|
||
}
|
||
}
|
||
},
|
||
mcp: {
|
||
testResult: {
|
||
title: 'Результат теста: {name}',
|
||
connectionSuccess: 'Соединение установлено',
|
||
connectionFailed: 'Соединение не удалось',
|
||
toolsTitle: 'Доступные инструменты',
|
||
resourcesTitle: 'Доступные ресурсы',
|
||
descriptionLabel: 'Описание',
|
||
schemaLabel: 'Структура параметров',
|
||
emptyDescription: 'Сервис не предоставил инструменты или ресурсы',
|
||
requireApproval: 'Требуется подтверждение',
|
||
requireApprovalTip: 'При включении агент ждёт подтверждения перед вызовом инструмента.',
|
||
approvalSaveFailed: 'Не удалось сохранить настройку'
|
||
}
|
||
},
|
||
error: {
|
||
network: 'Ошибка сети',
|
||
server: 'Ошибка сервера',
|
||
notFound: 'Не найдено',
|
||
unauthorized: 'Не авторизован',
|
||
forbidden: 'Доступ запрещен',
|
||
unknown: 'Неизвестная ошибка',
|
||
tryAgain: 'Пожалуйста, попробуйте еще раз',
|
||
networkError: 'Ошибка сети, проверьте подключение',
|
||
invalidCredentials: 'Неверное имя пользователя или пароль',
|
||
tokenRefreshFailed: 'Не удалось обновить токен',
|
||
pleaseRelogin: 'Пожалуйста, войдите снова',
|
||
fileSizeExceeded: 'Размер файла не может превышать {size}МБ!',
|
||
unsupportedFileType: 'Неподдерживаемый тип файла!',
|
||
invalidFileType: 'Неверный тип файла!',
|
||
missingKbId: 'Отсутствует ID базы знаний',
|
||
tokenNotFound: 'Токен входа не найден, войдите снова',
|
||
streamFailed: 'Ошибка потокового соединения',
|
||
auth: {
|
||
loginFailed: 'Ошибка входа',
|
||
registerFailed: 'Ошибка регистрации',
|
||
getUserFailed: 'Не удалось получить информацию о пользователе',
|
||
getTenantFailed: 'Не удалось получить информацию о тенанте',
|
||
updatePreferencesFailed: 'Не удалось обновить настройки',
|
||
refreshTokenFailed: 'Не удалось обновить токен',
|
||
logoutFailed: 'Ошибка выхода',
|
||
validateTokenFailed: 'Ошибка проверки токена'
|
||
},
|
||
model: {
|
||
createFailed: 'Не удалось создать модель',
|
||
getFailed: 'Не удалось получить модель',
|
||
updateFailed: 'Не удалось обновить модель',
|
||
deleteFailed: 'Не удалось удалить модель'
|
||
},
|
||
tenant: {
|
||
listFailed: 'Не удалось получить список тенантов',
|
||
searchFailed: 'Не удалось выполнить поиск тенантов',
|
||
resetApiKeyFailed: 'Не удалось сбросить API Key',
|
||
updateFailed: 'Не удалось обновить информацию об арендаторе'
|
||
},
|
||
initialization: {
|
||
checkFailed: 'Проверка не пройдена',
|
||
testFailed: 'Тест не пройден'
|
||
},
|
||
invalidImageLink: 'Invalid image link'
|
||
},
|
||
model: {
|
||
llmModel: 'LLM модель',
|
||
embeddingModel: 'Модель встраивания',
|
||
rerankModel: 'Модель ранжирования',
|
||
vlmModel: 'Мультимодальная модель',
|
||
modelName: 'Название модели',
|
||
modelProvider: 'Поставщик модели',
|
||
modelUrl: 'URL модели',
|
||
apiKey: 'API ключ',
|
||
testConnection: 'Проверить соединение',
|
||
connectionSuccess: 'Соединение успешно',
|
||
connectionFailed: 'Ошибка соединения',
|
||
dimension: 'Размерность',
|
||
maxTokens: 'Макс. токенов',
|
||
temperature: 'Температура',
|
||
topP: 'Top P',
|
||
selectModel: 'Выберите модель',
|
||
customModel: 'Пользовательская модель',
|
||
builtinModel: 'Встроенная модель',
|
||
defaultTag: 'По умолчанию',
|
||
addModelInSettings: 'Перейти в общие настройки для добавления моделей',
|
||
loadFailed: 'Не удалось загрузить список моделей',
|
||
selectModelPlaceholder: 'Выберите модель',
|
||
searchPlaceholder: 'Поиск моделей...',
|
||
editor: {
|
||
addTitle: 'Добавить модель',
|
||
editTitle: 'Редактировать модель',
|
||
sectionType: 'Тип модели',
|
||
typeLabel: 'Тип модели',
|
||
sectionSource: 'Источник',
|
||
sectionProvider: 'Настройки провайдера',
|
||
sectionAdvanced: 'Дополнительные параметры',
|
||
sourceLabel: 'Источник модели',
|
||
sourceLocal: 'Ollama',
|
||
sourceRemote: 'API',
|
||
description: {
|
||
chat: 'Настройте языковую модель для диалогов',
|
||
embedding: 'Настройте модель встраивания для текстовой векторизации',
|
||
rerank: 'Настройте модель для повторного ранжирования результатов',
|
||
vllm: 'Настройте визуально-языковую модель для мультимодального понимания',
|
||
asr: 'Настройте модель распознавания речи для транскрибации аудио',
|
||
default: 'Настройте информацию о модели'
|
||
},
|
||
modelNamePlaceholder: {
|
||
local: 'например: llama2:latest',
|
||
remote: 'например: gpt-4, claude-3-opus',
|
||
localVllm: 'например: llava:latest',
|
||
remoteVllm: 'например: gpt-4-vision-preview',
|
||
remoteAsr: 'например: whisper-1'
|
||
},
|
||
baseUrlLabel: 'Base URL',
|
||
displayNameLabel: 'Отображаемое имя (опционально)',
|
||
displayNamePlaceholder: 'например: модель поддержки',
|
||
displayNameDesc: 'Используется только в интерфейсе. Для вызовов по-прежнему используется имя модели выше.',
|
||
baseUrlPlaceholder: 'например: https://api.openai.com/v1',
|
||
baseUrlPlaceholderVllm: 'например: http://localhost:11434/v1',
|
||
baseUrlPlaceholderAsr: 'например: https://api.openai.com/v1',
|
||
apiKeyOptional: 'API Key (опционально)',
|
||
apiKeyPlaceholder: 'Введите API Key',
|
||
customHeadersLabel: 'Пользовательские заголовки запроса (опционально)',
|
||
customHeadersDesc: 'Дополнительные HTTP-заголовки, добавляемые к запросам к удалённому API модели (например, для авторизации корпоративного шлюза или трассировки). Зарезервированные заголовки, такие как Authorization / Content-Type, игнорируются.',
|
||
customHeadersAdd: 'Добавить заголовок',
|
||
customHeadersKeyPlaceholder: 'Имя заголовка',
|
||
customHeadersValuePlaceholder: 'Значение заголовка',
|
||
connectionTest: 'Проверка соединения',
|
||
testing: 'Проверка...',
|
||
testConnection: 'Проверить соединение',
|
||
searchPlaceholder: 'Поиск моделей...',
|
||
downloadLabel: 'Скачать: {keyword}',
|
||
refreshList: 'Обновить список',
|
||
dimensionLabel: 'Размерность вектора',
|
||
dimensionPlaceholder: 'например: 1536',
|
||
checkDimension: 'Определить размерность',
|
||
dimensionDetected: 'Определение выполнено, размерность: {value}',
|
||
dimensionFailed: 'Не удалось определить, введите размерность вручную',
|
||
remoteDimensionDetected: 'Обнаружена размерность: {value}',
|
||
dimensionOverrideLabel: 'Пользовательская выходная размерность',
|
||
dimensionOverrideDesc: 'Включайте только если документация провайдера подтверждает поддержку параметра dimensions.',
|
||
supportsVisionLabel: 'Поддержка визуального / мультимодального ввода',
|
||
supportsVisionDesc: 'Поддерживает ли модель изображения и другой мультимодальный ввод',
|
||
thinkingControlLabel: 'Формат параметров режима размышления',
|
||
thinkingControlDesc:
|
||
'Определяет, как переключатель «Режим размышления» агента записывается в API. При возможности выбирается по поставщику/модели; при несоответствии измените по документации API. При выборе «Не отправлять» переключатель «Режим размышления» агента не действует.',
|
||
thinkingControl: {
|
||
none: {
|
||
label: 'Не отправлять параметры размышления',
|
||
hint: 'Переключатель «Режим размышления» агента не действует; параметры размышления не отправляются в запросе',
|
||
},
|
||
chatTemplateKwargs: {
|
||
label: 'chat_template_kwargs',
|
||
hint: 'Пользовательские OpenAI-совместимые шлюзы, NVIDIA NIM, vLLM / локальный Qwen',
|
||
},
|
||
enableThinking: {
|
||
label: 'enable_thinking',
|
||
hint: 'Alibaba DashScope: qwen3, qwen-plus, qwen-max, qwen-turbo',
|
||
},
|
||
thinkingType: {
|
||
label: 'thinking.type',
|
||
hint: 'Volcengine Ark; Tencent LKEAP (DeepSeek V3 и др.; по умолчанию для LKEAP; для R1 — «Не отправлять»)',
|
||
},
|
||
},
|
||
dimensionHint: 'Модель выбрана. Нажмите «Определить размерность», чтобы автоматически получить значение.',
|
||
loadModelListFailed: 'Не удалось загрузить список моделей',
|
||
listRefreshed: 'Список обновлён',
|
||
fillModelAndUrl: 'Сначала заполните идентификатор модели и Base URL',
|
||
remoteBaseUrlRequired: 'Для Remote API необходимо указать Base URL',
|
||
unsupportedModelType: 'Неподдерживаемый тип модели',
|
||
connectionSuccess: 'Соединение установлено',
|
||
connectionFailed: 'Соединение не установлено',
|
||
connectionConfigError: 'Соединение не установлено, проверьте конфигурацию',
|
||
downloadStarted: 'Начата загрузка {name}',
|
||
downloadCompleted: '{name} успешно загружена',
|
||
downloadFailed: 'Не удалось загрузить {name}',
|
||
downloadStartFailed: 'Не удалось запустить загрузку',
|
||
ollamaUnavailable: 'Сервис Ollama недоступен, локальные модели недоступны для выбора',
|
||
ollamaNotSupportRerank: 'Ollama не поддерживает модели ReRank, используйте удалённый API',
|
||
goToOllamaSettings: 'Открыть настройки',
|
||
validation: {
|
||
modelNameRequired: 'Введите название модели',
|
||
modelNameEmpty: 'Название модели не может быть пустым',
|
||
modelNameMax: 'Название модели не может превышать 100 символов',
|
||
baseUrlRequired: 'Введите Base URL',
|
||
baseUrlEmpty: 'Base URL не может быть пустым',
|
||
baseUrlInvalid: 'Недопустимый Base URL, введите корректный адрес'
|
||
},
|
||
providerLabel: 'Провайдер',
|
||
providerPlaceholder: 'Выберите провайдера модели',
|
||
providers: {
|
||
openai: {
|
||
label: 'OpenAI',
|
||
description: 'gpt-5.2, gpt-5-mini, etc.'
|
||
},
|
||
azure_openai: {
|
||
label: 'Azure OpenAI',
|
||
description: 'Сервис OpenAI на платформе Microsoft Azure',
|
||
},
|
||
aliyun: {
|
||
label: 'Aliyun DashScope',
|
||
description: 'qwen-plus, tongyi-embedding-vision-plus, qwen3-rerank, etc.'
|
||
},
|
||
zhipu: {
|
||
label: 'Zhipu BigModel',
|
||
description: 'glm-4.7, embedding-3, rerank, etc.'
|
||
},
|
||
openrouter: {
|
||
label: 'OpenRouter',
|
||
description: 'openai/gpt-5.2-chat, google/gemini-3-flash-preview, etc.'
|
||
},
|
||
generic: {
|
||
label: 'Пользовательский (OpenAI-совместимый)',
|
||
description: 'Generic API endpoint'
|
||
},
|
||
siliconflow: {
|
||
label: 'SiliconFlow',
|
||
description: 'deepseek-ai/DeepSeek-V3.1, etc.'
|
||
},
|
||
jina: {
|
||
label: 'Jina',
|
||
description: 'jina-clip-v1, jina-embeddings-v2-base-zh, etc.'
|
||
},
|
||
volcengine: {
|
||
label: 'Volcengine',
|
||
description: 'doubao-1-5-pro-32k-250115, doubao-embedding-vision-250615, etc.'
|
||
},
|
||
deepseek: {
|
||
label: 'DeepSeek',
|
||
description: 'deepseek-chat, deepseek-reasoner, etc.'
|
||
},
|
||
hunyuan: {
|
||
label: 'Hunyuan',
|
||
description: 'hunyuan-pro, hunyuan-standard, hunyuan-embedding, etc.'
|
||
},
|
||
minimax: {
|
||
label: 'MiniMax',
|
||
description: 'MiniMax-M3, MiniMax-M2.7, MiniMax-M2.7-highspeed, etc.'
|
||
},
|
||
mimo: {
|
||
label: 'MiMo',
|
||
description: 'mimo-v2-flash'
|
||
},
|
||
gemini: {
|
||
label: 'Google Gemini',
|
||
description: 'gemini-3-flash-preview, gemini-2.5-pro, etc.'
|
||
},
|
||
gpustack: {
|
||
label: 'GPUStack',
|
||
description: 'Choose your deployed model on GPUStack'
|
||
},
|
||
modelscope: {
|
||
label: 'ModelScope',
|
||
description: 'Qwen/Qwen3-8B, Qwen/Qwen3-Embedding-8B, etc.'
|
||
},
|
||
qiniu: {
|
||
label: 'Qiniu Cloud',
|
||
description: 'deepseek/deepseek-v3.2-251201, z-ai/glm-4.7, etc.'
|
||
},
|
||
moonshot: {
|
||
label: 'Moonshot',
|
||
description: 'kimi-k2-turbo-preview, moonshot-v1-8k-vision-preview, etc.'
|
||
},
|
||
qianfan: {
|
||
label: 'Baidu Qianfan',
|
||
description: 'ernie-5.0-thinking-preview, embedding-v1, bce-reranker-base, etc.'
|
||
},
|
||
longcat: {
|
||
label: 'LongCat AI',
|
||
description: 'LongCat-Flash-Chat, LongCat-Flash-Thinking, etc.'
|
||
},
|
||
lkeap: {
|
||
label: 'Tencent Cloud LKEAP',
|
||
description: 'DeepSeek-R1, DeepSeek-V3, lke-reranker-base и др.'
|
||
},
|
||
nvidia: {
|
||
label: "NVIDIA",
|
||
description: "deepseek-ai-deepseek-v3_1, nv-embed-v1, rerank-qa-mistral-4b, etc.",
|
||
},
|
||
novita: {
|
||
label: "Novita AI",
|
||
description: "moonshotai/kimi-k2.5, zai-org/glm-5, minimax/minimax-m2.7, qwen/qwen3-embedding-0.6b, etc.",
|
||
},
|
||
}
|
||
},
|
||
builtinTag: 'Built-in'
|
||
},
|
||
createChat: {
|
||
title: 'Привет, я WeKnora — ваши знания всегда под рукой',
|
||
newSessionTitle: 'Новая сессия',
|
||
messages: {
|
||
selectKnowledgeBase: 'Сначала выберите базу знаний',
|
||
createFailed: 'Не удалось создать сессию',
|
||
createError: 'Не удалось создать сессию, попробуйте позже'
|
||
}
|
||
},
|
||
knowledgeList: {
|
||
create: 'Создать базу знаний',
|
||
createFAQ: 'Создать FAQ-базу',
|
||
subtitle: 'Управляйте и организуйте свои базы знаний, поддерживаются документные и FAQ-базы знаний',
|
||
uninitializedBanner: 'Некоторые базы знаний не инициализированы. Сначала настройте модели в разделе настроек, чтобы добавлять документы.',
|
||
empty: {
|
||
title: 'Базы знаний отсутствуют',
|
||
description: 'Нажмите «Создать базу знаний» в левом быстром действии, чтобы добавить первую базу.',
|
||
sharedTitle: 'No shared knowledge bases',
|
||
sharedDescription: 'You can join a shared space or request others to share knowledge bases with you',
|
||
favoritesTitle: 'No favorites yet',
|
||
favoritesDescription: 'Star a knowledge base from its card to add it here',
|
||
recentsTitle: 'Nothing here yet',
|
||
recentsDescription: 'Knowledge bases you recently opened will show up here'
|
||
},
|
||
delete: {
|
||
confirmTitle: 'Подтверждение удаления',
|
||
confirmMessage: 'Удалить базу знаний «{name}»? Отменить действие будет невозможно.',
|
||
confirmButton: 'Удалить'
|
||
},
|
||
pin: {
|
||
pin: 'Закрепить',
|
||
unpin: 'Открепить',
|
||
pinSuccess: 'Закреплено',
|
||
unpinSuccess: 'Откреплено',
|
||
failed: 'Операция не удалась'
|
||
},
|
||
sections: {
|
||
pinned: 'Закреплённые',
|
||
mine: 'Созданные мной',
|
||
tenantReadonly: 'Рабочая область · Только просмотр',
|
||
tenantOthers: 'Рабочая область · Другие участники',
|
||
sharedByMe: 'Расшарено мной',
|
||
sharedEditable: 'Доступно мне · Можно редактировать',
|
||
sharedReadonly: 'Доступно мне · Только просмотр'
|
||
},
|
||
messages: {
|
||
deleted: 'База знаний удалена',
|
||
deleteFailed: 'Не удалось удалить базу знаний',
|
||
file: '文件',
|
||
knowledgeBase: '知识库',
|
||
noResult: '无结果'
|
||
},
|
||
features: {
|
||
knowledgeGraph: 'Граф знаний включен',
|
||
multimodal: 'Мультимодальность включена',
|
||
questionGeneration: 'Генерация вопросов включена'
|
||
},
|
||
processing: 'Обработка задачи импорта',
|
||
processingDocuments: 'Обработка {count} документов',
|
||
stats: {
|
||
documents: 'Количество документов',
|
||
faqEntries: 'FAQ записи',
|
||
chunks: 'Количество фрагментов'
|
||
},
|
||
uploadProgress: {
|
||
uploadingTitle: 'Загрузка документов папки в «{name}»',
|
||
detail: 'Готово {completed} из {total} файлов',
|
||
keepPageOpen: 'Пожалуйста, не закрывайте страницу, пока идет загрузка.',
|
||
completedTitle: 'Загрузка для «{name}» завершена',
|
||
completedDetail: 'Загружено {total} файлов. Обновляем список, чтобы показать статус разбора...',
|
||
refreshing: 'Обновляем список и статусы разбора...',
|
||
errorTip: 'Часть файлов загрузить не удалось. Проверьте уведомления.',
|
||
unknownKb: 'База знаний {id}'
|
||
},
|
||
createShort: 'New',
|
||
myKnowledgeBases: 'My Knowledge Bases',
|
||
sharedKnowledgeBases: 'Shared Knowledge Bases',
|
||
sharedToOrgs: 'Shared to {count} space(s)',
|
||
sharedLabel: 'Shared',
|
||
myLabel: 'Mine',
|
||
fromAgent: 'From agent {name}',
|
||
fromAgentShort: 'Agent: {name}',
|
||
tabs: {
|
||
all: 'All',
|
||
myKnowledgeBases: 'My Knowledge Bases',
|
||
sharedToMe: 'Shared with me'
|
||
},
|
||
emptyShared: 'No collaborative knowledge bases yet. Join a shared space to access knowledge bases from others.',
|
||
menu: {
|
||
viewDetails: 'View Details'
|
||
},
|
||
detail: {
|
||
title: 'Shared Knowledge Base',
|
||
overview: 'Overview',
|
||
overviewDesc: 'View knowledge base information and source',
|
||
permission: 'Permission',
|
||
permissionDesc: 'View your permissions for this knowledge base',
|
||
sourceType: 'Source',
|
||
sourceTypeKbShare: 'KB shared directly to this space',
|
||
sourceTypeAgent: 'Visible via shared agent',
|
||
sourceOrg: 'Space',
|
||
sourceFromAgent: 'Agent',
|
||
agentKbStrategy: 'Agent KB strategy',
|
||
agentKbStrategyAll: 'All knowledge bases',
|
||
agentKbStrategySelected: 'Selected knowledge bases',
|
||
agentKbStrategyNone: 'No knowledge bases',
|
||
sharedAt: 'Shared At',
|
||
myPermission: 'My Permission',
|
||
canEdit: 'Can edit knowledge base content',
|
||
canView: 'Can view knowledge base content',
|
||
canSearch: 'Can search and use knowledge base',
|
||
goToKb: 'Go to Knowledge Base',
|
||
enabled: 'Enabled',
|
||
disabled: 'Disabled'
|
||
}
|
||
},
|
||
embedPublish: {
|
||
title: 'Встраивание на веб-страницу',
|
||
description: 'Встройте агента на свою веб-страницу: посетители смогут общаться через встроенное окно чата или плавающую кнопку.',
|
||
create: 'Новый канал встраивания',
|
||
channelsTitle: 'Каналы встраивания',
|
||
disabled: 'Отключено',
|
||
empty: 'Каналов встраивания пока нет',
|
||
unnamed: 'Без названия',
|
||
agent: 'Агент',
|
||
rateLimit: 'Лимит',
|
||
rateLimitUnit: '/мин',
|
||
allowedOrigins: 'Разрешённые домены',
|
||
embedCode: 'Код встраивания',
|
||
widgetCode: 'Скрипт виджета',
|
||
copyCode: 'Копировать код',
|
||
rotateToken: 'Сменить токен',
|
||
rotatePublishToken: 'Сменить токен публикации',
|
||
channelKey: 'Ключ канала',
|
||
channelKeyDesc: 'Долгоживущий секрет для интеграции на сторонних сайтах — храните в безопасности',
|
||
channelKeyHint: 'Не удалось загрузить ключ канала. Закройте и снова откройте канал или обновите страницу.',
|
||
channelKeyLoadFailed: 'Не удалось загрузить ключ канала',
|
||
channelKeyUnavailable: 'Ключ недоступен',
|
||
resetKeyTitle: 'Сбросить ключ канала',
|
||
resetKeyConfirmOk: 'Сбросить',
|
||
resetKeyConfirmBody: 'После сброса старый ключ канала немедленно отзывается. Все развёрнутые фрагменты встраивания должны использовать новый ключ. Отменить нельзя.',
|
||
resetKeySuccess: 'Ключ канала сброшен — новый ключ показан в поле ввода',
|
||
resetKeyFailed: 'Не удалось сбросить ключ канала',
|
||
copyChannelKeyTitle: 'Копировать ключ канала',
|
||
revealKey: 'Показать ключ',
|
||
hideKey: 'Скрыть ключ',
|
||
delete: 'Удалить',
|
||
edit: 'Редактировать',
|
||
createTitle: 'Новый канал встраивания',
|
||
editTitle: 'Редактировать канал встраивания',
|
||
name: 'Название',
|
||
nameDesc: 'Для админ-списков и идентификации канала',
|
||
namePlaceholder: 'напр. Поддержка на сайте',
|
||
nameDefaultHint: 'По умолчанию «{agent} · Встраивание на сайт». Можно изменить; при пустом поле при сохранении используется имя по умолчанию.',
|
||
defaultChannelName: 'Встраивание на сайт',
|
||
defaultChannelNameWithAgent: '{agent} · Встраивание на сайт',
|
||
welcomeMessage: 'Приветствие',
|
||
welcomePlaceholder: 'Здравствуйте! Чем могу помочь?',
|
||
welcomeMessageDesc: 'Показывается во встроенном чате до первого сообщения посетителя; оставьте пустым, чтобы скрыть',
|
||
showSuggestedQuestions: 'Рекомендуемые вопросы',
|
||
showSuggestedQuestionsDesc: 'Показывать быстрые вопросы до первого сообщения посетителя — из настроек агента и связанных баз знаний',
|
||
originsLabel: 'Разрешённые домены (по одному в строке, минимум один)',
|
||
originsHint: 'Один полный origin в строке (напр. https://shop.example.com), минимум один; поддерживаются поддомены *.example.com',
|
||
originsRequired: 'Укажите хотя бы один разрешённый домен',
|
||
originsInvalid: 'Неверный домен: {origin}',
|
||
originsWildcardProd: "В production запрещён wildcard '*'",
|
||
originsCount: '{n} дом.',
|
||
originsPlaceholder: 'https://shop.example.com',
|
||
rateLimitLabel: 'Запросов в минуту',
|
||
rateLimitDesc: 'На IP посетителя, макс. запросов к API встраивания в минуту; избыток временно отклоняется. По умолчанию 30.',
|
||
rateLimitDayLabel: 'Дневной лимит запросов',
|
||
rateLimitDayDesc: 'Суточный лимит запросов канала (все IP); ограничивает злоупотребление при утечке токена публикации. По умолчанию 10000.',
|
||
publishTokenWarning: 'Токен публикации виден в исходном коде страницы встраивания — любой посетитель сайта может его прочитать. Считайте его публикуемым ключом, а не секретом: не встраивайте агентов с чувствительными данными, настройте whitelist доменов и лимиты, при утечке немедленно смените токен.',
|
||
debug: 'Отладочный предпросмотр',
|
||
createdDebugHint: 'Канал создан — откройте отладочный предпросмотр в новой вкладке',
|
||
primaryColor: 'Основной цвет',
|
||
pageTitle: 'Заголовок страницы',
|
||
pageTitleDesc: 'В шапке чата и вкладке браузера; приоритетнее названия',
|
||
pageTitlePlaceholder: 'AI-ассистент',
|
||
headerTitleMode: 'Заголовок шапки',
|
||
headerTitleModeChannel: 'Фиксированный заголовок канала',
|
||
headerTitleModeSession: 'Следовать заголовку сессии',
|
||
headerTitleModeDesc: 'Фиксированный: всегда заголовок страницы. Сессия: авто-заголовок из первого сообщения; до генерации — заголовок страницы.',
|
||
tokenHint: 'Не удалось загрузить ключ канала. Закройте и снова откройте канал.',
|
||
createdWithToken: 'Канал создан — ключ канала показан ниже',
|
||
created: 'Канал встраивания создан',
|
||
updated: 'Канал встраивания обновлён',
|
||
saveFailed: 'Не удалось сохранить',
|
||
deleted: 'Удалено',
|
||
tokenRotated: 'Ключ канала сброшен',
|
||
copied: 'Код встраивания скопирован',
|
||
loadError: 'Не удалось загрузить',
|
||
missingChannel: 'Отсутствует канал встраивания или токен',
|
||
invalidChannel: 'Недействительный канал встраивания',
|
||
sessionFailed: 'Не удалось создать сессию чата, попробуйте позже',
|
||
channelDisabled: 'Канал встраивания отключён. Включите в редакторе агента → Встраивание на веб-страницу',
|
||
loading: 'Загрузка...',
|
||
tabIframe: 'iframe',
|
||
tabWidget: 'Виджет',
|
||
tabSecure: 'Безопасный режим',
|
||
widgetPosition: 'Позиция виджета',
|
||
widgetPreview: 'Предпросмотр виджета',
|
||
positionBottomRight: 'Справа внизу',
|
||
positionBottomLeft: 'Слева внизу',
|
||
positionTopRight: 'Справа вверху',
|
||
positionTopLeft: 'Слева вверху',
|
||
publishToken: 'Ключ канала',
|
||
publishTokenHelp: 'Ключ канала (em_…) — долгоживущий секрет канала, как API Key. Откройте детали канала, чтобы просмотреть и скопировать; сброс немедленно аннулирует предыдущий ключ.',
|
||
sessionTokenHelp: 'После открытия чата iframe обменивает ключ канала на краткосрочный сеансовый (ems_…, ~30 мин). Дальнейшие запросы используют сеансовый, ключ не остаётся в URL.',
|
||
rotateTokenHelp: 'Сброс отзывает предыдущий ключ. Обновите все развёрнутые фрагменты встраивания.',
|
||
revealToken: 'Показать',
|
||
hideToken: 'Скрыть',
|
||
copyToken: 'Копировать ключ канала',
|
||
tokenCopied: 'Ключ канала скопирован',
|
||
awaitingToken: 'Ожидание токена от страницы-хоста…',
|
||
preview: 'Предпросмотр',
|
||
previewIframeHint: 'Как iframe выглядит на сторонней странице (как в скопированном коде).',
|
||
previewWidgetHint: 'Плавающий виджет на mock-странице. На реальном сайте токен передаётся через postMessage.',
|
||
previewMockPage: 'Mock-страница хоста',
|
||
previewLoading: 'Загрузка предпросмотра…',
|
||
previewUnavailable: 'Предпросмотр недоступен. Убедитесь, что канал включён и Redis доступен.',
|
||
defaultChatTitle: 'AI-ассистент',
|
||
newChat: 'Новый чат',
|
||
channelsPanelIntro: 'Создайте каналы встраивания для агента, настройте внешний вид и безопасность, затем разверните на сторонних сайтах.',
|
||
sectionChannel: 'Информация о канале',
|
||
sectionSecurity: 'Безопасность и лимиты',
|
||
sectionCapabilities: 'Возможности чата',
|
||
allowWebSearch: 'Показывать переключатель веб-поиска',
|
||
allowWebSearchDesc: 'При включении посетители видят кнопку веб-поиска в поле ввода и могут включать или выключать его сами; по умолчанию выключен. Кнопка появляется только если у привязанного агента включён веб-поиск.',
|
||
allowMemory: 'Разрешить память',
|
||
allowMemoryDesc: 'При включении анонимные посетители сохраняют контекст в рамках одной сессии; память теряется при очистке данных браузера или новом чате. По умолчанию выключено.',
|
||
allowFileUpload: 'Показывать кнопку загрузки изображений',
|
||
allowFileUploadDesc: 'При включении посетители видят кнопку загрузки изображений в поле ввода. Кнопка появляется только если у привязанного агента включена загрузка изображений.',
|
||
agentWebSearchDisabledHint: 'У этого агента не включён веб-поиск. Посетители не увидят кнопку веб-поиска, пока вы не включите его в настройках агента.',
|
||
agentImageUploadDisabledHint: 'У этого агента не включена загрузка изображений. Посетители не увидят кнопку загрузки, пока вы не включите её в настройках агента.',
|
||
sectionAppearance: 'Внешний вид',
|
||
sectionDeploy: 'Развернуть на сайте',
|
||
stepChannel: 'Канал',
|
||
stepSecurity: 'Безопасность',
|
||
stepCapabilities: 'Возможности',
|
||
stepAppearance: 'Внешний вид',
|
||
stepWebhook: 'Webhook',
|
||
stepDeploy: 'Развёртывание',
|
||
deployIntro: 'Выберите способ встраивания и скопируйте код ниже на сайт. Ключ канала внизу — для аутентификации и сброса.',
|
||
deployStepToken: 'Ключ канала',
|
||
deployStepTokenDesc: 'Долгоживущий секрет (em_…), как API Key. Только на этой странице при создании/сбросе — храните надёжно.',
|
||
deployStepEmbed: 'Копировать код встраивания',
|
||
deployStepEmbedDesc: 'Выберите способ встраивания и вставьте код на сайт.',
|
||
embedIframeDesc: 'Встроить полный чат в фиксированную область страницы.',
|
||
embedWidgetDesc: 'Плавающая кнопка в углу; по клику открывается панель чата.',
|
||
embedSecureDesc: 'Рекомендуется: токен публикации только на вашем backend, страница получает краткосрочные токены — долгоживущий секрет не попадает в браузер.',
|
||
deployAfterSaveHint: 'После сохранения здесь можно скопировать ключ канала и код встраивания.',
|
||
widgetTokenNote: 'Скрипт виджета должен содержать ключ канала; iframe обменивает учётные данные при загрузке.',
|
||
secureTokenNote: 'На странице нет токена публикации — только endpoint вашего backend (data-token-endpoint). Backend обменивает токен на 30-минутный; виджет обновляет до истечения.',
|
||
secureServerLabel: 'Пример server-side endpoint токена (токен публикации только на сервере)',
|
||
secureServerCode: 'Пример для сервера',
|
||
tabServerNode: 'Node.js',
|
||
tabServerGo: 'Go',
|
||
sectionBasic: 'Основные настройки',
|
||
sectionToken: 'Ключ канала',
|
||
sectionEmbed: 'Код встраивания',
|
||
enabled: 'Включить канал',
|
||
deleteConfirm: 'Удалить этот канал? Развёрнутые фрагменты перестанут работать.',
|
||
rotateConfirmTitle: 'Сбросить ключ канала?',
|
||
rotateConfirmBody: 'Старый ключ немедленно перестанет работать. Обновите все развёрнутые фрагменты.',
|
||
defaultLocale: 'Язык по умолчанию',
|
||
defaultLocaleDesc: 'Язык интерфейса при открытии чата; пусто — браузер или setLocale() виджета.',
|
||
defaultLocaleBrowser: 'Браузер / хост',
|
||
sessionCountLabel: '{n} сессий',
|
||
},
|
||
|
||
knowledgeEditor: {
|
||
titleCreate: 'Создать базу знаний',
|
||
titleEdit: 'Настройки базы знаний',
|
||
navGroups: {
|
||
basic: 'Основное',
|
||
processing: 'Индексация и разбор',
|
||
data: 'Хранение и данные',
|
||
integration: 'Публикация',
|
||
},
|
||
sidebar: {
|
||
basic: 'Основная информация',
|
||
models: 'Конфигурация моделей',
|
||
vectorStore: 'Vector Store',
|
||
chunking: 'Настройки разбиения',
|
||
advanced: 'Дополнительные настройки',
|
||
faq: 'FAQ настройки',
|
||
wiki: 'Wiki настройки',
|
||
graph: 'Граф знаний',
|
||
multimodal: 'Обработка изображений',
|
||
asr: 'Аудио',
|
||
storage: 'Storage Engine',
|
||
datasource: 'Источники данных',
|
||
share: 'Sharing',
|
||
indexing: 'Стратегия индексации',
|
||
},
|
||
errors: {
|
||
vectorStoreBindingInvalid:
|
||
'The selected vector store cannot be used. Choose a different store or use the system default.',
|
||
vectorStoreUnavailable:
|
||
'The selected vector store is currently unavailable. Check its connection configuration in Settings → Vector Stores.',
|
||
},
|
||
basic: {
|
||
title: 'Основная информация',
|
||
description: 'Укажите название и описание базы знаний',
|
||
kbId: 'ID базы знаний',
|
||
kbIdDesc: 'Используйте этот ID для указания базы знаний в API-интеграциях',
|
||
typeLabel: 'Тип базы знаний',
|
||
typeDocument: 'Документальная',
|
||
typeFAQ: 'FAQ (вопрос-ответ)',
|
||
typeDescription: 'FAQ подходит для структурированных Q&A; документальный тип поддерживает загрузку файлов и разбиение; Wiki автоматически создает связанные страницы знаний через LLM.',
|
||
nameLabel: 'Название базы знаний',
|
||
namePlaceholder: 'Введите название базы знаний',
|
||
descriptionLabel: 'Описание базы знаний',
|
||
descriptionPlaceholder: 'Введите описание базы знаний (необязательно)'
|
||
},
|
||
wiki: {
|
||
title: 'Wiki настройки',
|
||
description: 'Настройте автоматическую генерацию Wiki',
|
||
synthesisModelLabel: 'Модель синтеза',
|
||
synthesisModelPlaceholder: 'Выберите LLM модель для генерации Wiki',
|
||
synthesisModelTip: 'Если не указано, используется модель суммаризации',
|
||
languageLabel: 'Язык Wiki',
|
||
maxPagesLabel: 'Макс. страниц за Ingest',
|
||
maxPagesTip: 'Максимальное количество страниц для создания/обновления за одну операцию (0 = без ограничения)',
|
||
extractionGranularityLabel: 'Детализация извлечения',
|
||
extractionGranularityTip: 'Управляет количеством извлекаемых сущностей/концепций на документ. Точнее — компактный индекс, грубее — более полный',
|
||
granularityFocused: 'Фокус',
|
||
granularityStandard: 'Стандарт',
|
||
granularityExhaustive: 'Полный',
|
||
granularityFocusedHint: 'Извлекает только главные темы документа (например, резюме → человек и его проекты). Самый чистый результат, возможны пропуски.',
|
||
granularityStandardHint: 'Главные темы плюс подробно обсуждаемые сущности/концепции. Пропускает упомянутые вскользь. Рекомендуемое значение.',
|
||
granularityExhaustiveHint: 'Извлекает все именованные сущности и концепции, включая мимоходом упомянутые технологии. Подходит для глоссария.',
|
||
},
|
||
indexing: {
|
||
title: 'Стратегия индексации',
|
||
description: 'Настройте конвейер обработки после загрузки документов. Каждый способ индексации можно включить или выключить независимо',
|
||
searchTitle: 'RAG-поиск',
|
||
searchDesc: 'Разбивает документы на чанки, векторизует и индексирует ключевые слова, поддерживая гибридный поиск',
|
||
wikiTitle: 'Wiki-база знаний',
|
||
wikiDesc: 'Автоматически создаёт взаимосвязанные Wiki-страницы и формирует структурированную систему знаний',
|
||
graphTitle: 'Граф знаний',
|
||
graphDesc: 'Извлекает сущности и связи, строит граф знаний и поддерживает поиск по графу',
|
||
atLeastOne: 'Должна быть включена хотя бы одна стратегия индексации',
|
||
embeddingRequired: 'RAG-поиск требует настройки модели Embedding',
|
||
wikiModelRequired: 'Wiki-база знаний требует настройки модели синтеза',
|
||
lockedTip: 'В базе знаний уже есть содержимое, изменение стратегии индексации недоступно. Чтобы изменить, сначала очистите базу знаний.',
|
||
rebuildConfirmTitle: 'Перестроить индекс',
|
||
rebuildConfirmBody: 'Стратегия индексации изменена. Переобработать существующие {count} документов? Это может занять некоторое время.',
|
||
rebuildSuccess: 'Задача перестроения отправлена, всего {count} документов',
|
||
rebuildSkip: 'Перестроение можно запустить вручную позже в источниках данных',
|
||
},
|
||
wikiBrowser: {
|
||
viewInGraph: 'Открыть в графе',
|
||
tabDocuments: 'Документы',
|
||
tabWiki: 'Wiki',
|
||
tabGraph: 'Граф',
|
||
tabGraphTip: 'Граф связей между Wiki-страницами (граф ссылок страниц). Это НЕ то же самое, что граф знаний на основе сущностей и отношений, настраиваемый в «Настройки БЗ → Граф знаний».',
|
||
searchPlaceholder: 'Поиск Wiki-страниц...',
|
||
searchNoResults: 'Страницы не найдены',
|
||
viewModeToggle: 'Переключить вид каталога',
|
||
viewTree: 'Дерево',
|
||
viewList: 'Список',
|
||
loadMore: 'Загрузить ещё (осталось {remaining})',
|
||
filterAll: 'Все типы',
|
||
newFolder: 'Новый каталог',
|
||
newRootFolder: 'Новый каталог',
|
||
newSubfolder: 'Новый подкаталог',
|
||
folderActions: 'Действия с каталогом',
|
||
folderNamePlaceholder: 'Введите название каталога',
|
||
createFolderSuccess: 'Каталог создан',
|
||
createFolderFailed: 'Не удалось создать каталог',
|
||
movePageSuccess: 'Страница перемещена',
|
||
movePageFailed: 'Не удалось переместить страницу',
|
||
renameFolder: 'Переименовать каталог',
|
||
renameFolderSuccess: 'Каталог переименован',
|
||
renameFolderFailed: 'Не удалось переименовать каталог',
|
||
deleteFolder: 'Удалить каталог',
|
||
deleteFolderConfirm: 'Удалить каталог «{name}»?',
|
||
deleteFolderSuccess: 'Каталог удалён',
|
||
deleteFolderFailed: 'Не удалось удалить каталог',
|
||
deleteFolderNotEmpty: 'Каталог не пуст. Сначала удалите страницы и подкаталоги.',
|
||
moveFolderSuccess: 'Каталог перемещён',
|
||
moveFolderFailed: 'Не удалось переместить каталог',
|
||
moveFolderIntoSelf: 'Нельзя переместить каталог в себя или свой подкаталог',
|
||
moveConfirm: 'Переместить в «{target}»?',
|
||
moveConfirmTitle: 'Подтвердить перемещение',
|
||
rootFolderLabel: 'Корень',
|
||
dropToRoot: 'Перетащите сюда, чтобы переместить в корень',
|
||
filterSummary: 'Резюме',
|
||
filterKnowledge: 'Знания',
|
||
filterEntity: 'Сущности',
|
||
filterConcept: 'Концепции',
|
||
filterSynthesis: 'Синтез',
|
||
filterComparison: 'Сравнения',
|
||
viewReader: 'Читатель',
|
||
viewGraph: 'Граф',
|
||
stats: '{pages} страниц · {links} ссылок',
|
||
emptyTitle: 'Wiki-страниц пока нет',
|
||
emptyDesc: 'Загрузите документы с включённым Wiki для автоматической генерации страниц',
|
||
selectPageHint: 'Выберите страницу слева для просмотра',
|
||
version: 'v{ver}',
|
||
aliases: 'Псевдонимы',
|
||
linksTo: 'Ссылается на',
|
||
linkedFrom: 'Цитируется',
|
||
sources: 'Исходные документы',
|
||
recentActivity: 'Последняя активность',
|
||
graphEmpty: 'Загрузка графа...',
|
||
fitView: 'По размеру экрана',
|
||
logTitle: 'Журнал активности',
|
||
indexTitle: 'Индекс',
|
||
logFeedTag: 'Лента событий',
|
||
logEmpty: 'Записей журнала пока нет',
|
||
logLoading: 'Загрузка…',
|
||
logLoadMore: 'Загрузить ещё',
|
||
indexOverviewTag: 'Каталог',
|
||
indexEmpty: 'Пока нет wiki-страниц. Сначала загрузите документы.',
|
||
graphNoData: 'Нет данных графа. Сначала загрузите документы. (Здесь показаны связи между Wiki-страницами, что отличается от графа сущностей и отношений в «Настройки БЗ → Граф знаний».)',
|
||
showArrows: 'Показать стрелки',
|
||
hideArrows: 'Скрыть стрелки',
|
||
expandNeighbors: 'Развернуть соседей',
|
||
bloomNeighbors: 'Добавить соседей',
|
||
growFrontier: 'Расширить границу ({count})',
|
||
growFrontierTitle: 'Развернуть все {count} узлов с пунктирным кольцом за один клик',
|
||
cardEgoTitle: 'Текущий фокус',
|
||
cardOverviewTitle: 'Обзор БЗ',
|
||
cardOverviewPrimary: '{returned} / {total} узлов',
|
||
cardOverviewHintTruncated: 'Дважды щёлкните узел, чтобы сфокусироваться на его подграфе',
|
||
cardOverviewHintFull: 'Показаны все узлы базы знаний',
|
||
cardRelatedNodes: '{count} связанных узлов',
|
||
helpButtonTitle: 'Справка',
|
||
helpTitle: 'Действия на холсте',
|
||
helpClickAction: 'Клик',
|
||
helpClickDesc: 'Открыть детали узла',
|
||
helpDblClickAction: 'Двойной клик',
|
||
helpDblClickDesc: 'Сфокусироваться на узле',
|
||
helpShiftClickAction: 'Shift + клик',
|
||
helpShiftClickDesc: 'Добавить соседей на холст',
|
||
helpHoverPlusAction: 'Наведение → ⊕',
|
||
helpHoverPlusDesc: 'То же, что Shift + клик',
|
||
helpDragAction: 'Перетащить узел',
|
||
helpDragDesc: 'Изменить положение узла',
|
||
helpPanAction: 'Перетащить пустое место',
|
||
helpPanDesc: 'Переместить холст',
|
||
helpZoomAction: 'Колесо мыши',
|
||
helpZoomDesc: 'Масштабировать холст',
|
||
neighborsProgress: 'Показано {visible} из {total} соседей (еще {hidden} не загружено)',
|
||
neighborsAllShown: 'Все {total} соседей уже на холсте (нажмите «Развернуть», чтобы сфокусироваться на подграфе этого узла)',
|
||
neighborsNone: 'У этой страницы нет связанных соседей',
|
||
neighborsCenterUnreachable: 'Показано {visible} из {total} соседей ({hidden} недоступны: мёртвые ссылки, отфильтрованы или удалены)',
|
||
neighborsOverviewHidden: 'Показано {visible} из {total} соседей ({hidden} вне обзора — нажмите «Развернуть», чтобы переключиться сюда)',
|
||
backToOverview: 'Вернуться к обзору',
|
||
healthCheck: 'Проверка здоровья',
|
||
queueStatus: '{count} ожидающих задач в очереди Wiki',
|
||
issueTitle: 'На этой странице есть {count} неразрешенных конфликтов или ошибок знаний',
|
||
issueFixBtn: 'AI Автоисправление',
|
||
issueMixed: 'Смешанная инфо',
|
||
issueConflict: 'Фактический конфликт',
|
||
issueOutdated: 'Устарело',
|
||
issueAttention: 'Требует внимания',
|
||
issueReportedBy: 'Сообщил {reporter}',
|
||
issueAiLinter: 'AI Линтер',
|
||
issueIgnore: 'Игнорировать',
|
||
globalIssuesTitle: 'Глобальные проблемы содержимого',
|
||
globalIssuesCount: 'Ожидающие проблемы содержимого: {count}',
|
||
globalIssuesEmpty: 'Нет ожидающих проблем содержимого',
|
||
issuePagePrefix: 'Страница: ',
|
||
issueGoFix: 'Исправить',
|
||
fixAssistantTitle: 'Wiki Умный помощник исправления',
|
||
issueFixSuggestions: 'Предложения по оптимизации ({count})',
|
||
issueFixSingle: 'Исправить',
|
||
fixStartError: 'Не удалось запустить помощник исправления',
|
||
issueFixPromptSingle: 'Пожалуйста, исправьте проблему (ID: {id}) на странице [[{slug}]].',
|
||
issueFixPromptAutoStart: 'Пожалуйста, исправьте следующие проблемы на странице [[{slug}]]:',
|
||
issueFixPromptAutoEnd: '',
|
||
},
|
||
buttons: {
|
||
create: 'Создать базу знаний',
|
||
save: 'Сохранить настройки'
|
||
},
|
||
messages: {
|
||
loadModelsFailed: 'Не удалось загрузить список моделей',
|
||
loadDataFailed: 'Не удалось загрузить данные базы знаний',
|
||
notFound: 'База знаний не найдена',
|
||
nameRequired: 'Пожалуйста, введите название базы знаний',
|
||
embeddingRequired: 'Пожалуйста, выберите модель встраивания',
|
||
summaryRequired: 'Пожалуйста, выберите модель суммаризации',
|
||
multimodalInvalid: 'Проверка мультимодальной конфигурации не удалась',
|
||
createSuccess: 'База знаний успешно создана',
|
||
createFailed: 'Не удалось создать базу знаний',
|
||
missingId: 'Отсутствует ID базы знаний',
|
||
buildDataFailed: 'Не удалось сформировать данные для отправки',
|
||
updateSuccess: 'Настройки сохранены',
|
||
indexModeRequired: 'Выберите режим индексации для FAQ базы знаний',
|
||
storageChangeConfirm: 'В базе знаний уже есть файлы. Смена хранилища может сделать старые файлы недоступными. Продолжить?'
|
||
},
|
||
document: {
|
||
title: 'Управление документами',
|
||
subtitle: 'Загружайте файлы кликом или перетаскиванием — поддерживается автоматический разбор разных форматов и умное разбиение на фрагменты для быстрого поиска'
|
||
},
|
||
faq: {
|
||
title: 'Настройки FAQ',
|
||
subtitle: 'Управление записями FAQ с пакетным импортом, редактированием и тестированием поиска',
|
||
description: 'Определите стратегию индексации и общие правила для FAQ-базы знаний',
|
||
indexModeLabel: 'Режим индексации',
|
||
indexModeDescription: 'Только вопросы дают более высокую точность, вопросы+ответы повышают полноту выдачи.',
|
||
questionIndexModeLabel: 'Режим индексации вопросов',
|
||
questionIndexModeDescription: 'Объединенная: стандартные и похожие вопросы индексируются вместе. Раздельная: каждый вопрос индексируется независимо для более точного поиска, но требует больше места.',
|
||
entryGuide: 'Каждый FAQ включает основной вопрос, похожие вопросы, негативные примеры и несколько ответов. Управляйте ими в деталях FAQ-базы.',
|
||
tagDesc: 'Выберите теги для записей FAQ',
|
||
tagPlaceholder: 'Выберите теги',
|
||
modes: {
|
||
questionOnly: 'Только вопросы',
|
||
questionAnswer: 'Вопрос + ответ',
|
||
combined: 'Объединенная',
|
||
separate: 'Раздельная'
|
||
},
|
||
standardQuestion: 'Основной вопрос',
|
||
answers: 'Ответы',
|
||
similarQuestions: 'Похожие вопросы',
|
||
negativeQuestions: 'Негативные примеры',
|
||
categoryLabel: 'Тег FAQ',
|
||
categoryButton: 'Сменить тег',
|
||
editorCreate: 'Создать FAQ запись',
|
||
editorEdit: 'Редактировать FAQ запись',
|
||
addAnswer: 'Добавить ответ',
|
||
answerPlaceholder: 'Введите содержимое ответа, поддерживается многострочный текст, нажмите Ctrl+Enter или нажмите кнопку для добавления',
|
||
similarPlaceholder: 'Введите похожий вопрос и нажмите значок плюса для добавления',
|
||
negativePlaceholder: 'Введите негативный пример и нажмите значок плюса для добавления',
|
||
answerRequired: 'Добавьте хотя бы один ответ',
|
||
noAnswer: 'Ответы отсутствуют',
|
||
noSimilar: 'Похожие вопросы отсутствуют',
|
||
noNegative: 'Нет негативных примеров',
|
||
emptyTitle: 'Нет записей FAQ',
|
||
emptyDesc: 'Нажмите "Создать FAQ запись" выше, чтобы начать',
|
||
searchPlaceholder: 'Поиск стандартных вопросов...',
|
||
searchTest: 'Тест поиска',
|
||
searchTestTitle: 'Тест поиска FAQ',
|
||
queryLabel: 'Запрос',
|
||
queryPlaceholder: 'Введите вопрос для поиска',
|
||
vectorThresholdLabel: 'Порог векторного сходства',
|
||
vectorThresholdDesc: 'Диапазон 0-1, по умолчанию 0.7',
|
||
keywordThresholdLabel: 'Порог совпадения ключевых слов',
|
||
keywordThresholdDesc: 'Диапазон 0-1, по умолчанию 0.5',
|
||
matchCountLabel: 'Количество результатов',
|
||
matchCountDesc: 'Диапазон 1-50, по умолчанию 10',
|
||
searchButton: 'Начать поиск',
|
||
searching: 'Поиск...',
|
||
searchResults: 'Результаты поиска',
|
||
noResults: 'Совпадающих записей FAQ не найдено',
|
||
score: 'Сходство',
|
||
matchType: 'Тип совпадения',
|
||
matchedQuestion: 'Совпавший вопрос',
|
||
matchTypeEmbedding: 'Векторное совпадение',
|
||
matchTypeKeywords: 'Совпадение ключевых слов',
|
||
similarityThresholdLabel: 'Порог сходства',
|
||
statusEnabled: 'Включено',
|
||
statusDisabled: 'Выключено',
|
||
statusEnableSuccess: 'Запись FAQ включена',
|
||
statusDisableSuccess: 'Запись FAQ отключена',
|
||
statusUpdateFailed: 'Не удалось обновить статус',
|
||
recommended: 'Рекомендовать',
|
||
recommendedEnabled: 'Рекомендация включена',
|
||
recommendedDisabled: 'Рекомендация отключена',
|
||
recommendedEnableSuccess: 'Рекомендация записи FAQ включена',
|
||
recommendedDisableSuccess: 'Рекомендация записи FAQ отключена',
|
||
recommendedUpdateFailed: 'Не удалось обновить статус рекомендации',
|
||
batchOperations: 'Пакетные операции',
|
||
batchUpdateTag: 'Пакетная установка тегов',
|
||
batchUpdateTagTip: 'Установить теги для {count} выбранных записей',
|
||
batchEnable: 'Пакетное включение',
|
||
batchDisable: 'Пакетное отключение',
|
||
batchEnableRecommended: 'Пакетное включение рекомендации',
|
||
batchDisableRecommended: 'Пакетное отключение рекомендации',
|
||
standardQuestionDesc: 'Set the standard phrasing of the question — this is the most common way users ask it.',
|
||
answersDesc: 'Provide complete and accurate answer content. Multiple answers can be added to cover different scenarios.',
|
||
similarQuestionsDesc: 'Add questions with the same meaning but different phrasing to help the system better match user queries.',
|
||
negativeQuestionsDesc: 'Add questions that should not match this answer, to exclude false positives.',
|
||
addFaq: 'Add FAQ',
|
||
manageFaq: 'FAQ Actions',
|
||
createGroup: 'New'
|
||
},
|
||
faqImport: {
|
||
title: 'Пакетный импорт FAQ',
|
||
modeLabel: 'Режим импорта',
|
||
appendMode: 'Добавить',
|
||
replaceMode: 'Заменить существующие записи',
|
||
fileLabel: 'Выберите файл',
|
||
fileTip: 'Поддерживаются JSON / CSV / Excel. Заголовки CSV/Excel: 标签(必填), 问题(必填), 相似问题(选填-多个用##分隔), 反例问题(选填-多个用##分隔), 机器人回答(必填-多个用##分隔), 是否全部回复(选填-默认FALSE), 是否停用(选填-默认FALSE), 是否禁止被推荐(选填-默认False 可被推荐). Также поддерживаются старый заголовок «分类» и формат: standard_question, answers, similar_questions, negative_questions',
|
||
clickToUpload: 'Нажмите для загрузки файла',
|
||
dragDropTip: 'или перетащите файл сюда',
|
||
importButton: 'Импортировать FAQ',
|
||
deleteSelected: 'Удалить выбранные',
|
||
deleteSuccess: 'Выбранные записи удалены',
|
||
previewCount: 'Разобрано записей: {count}',
|
||
previewMore: 'Ещё {count} записей не показано',
|
||
importSuccess: 'Импорт завершён',
|
||
parseFailed: 'Не удалось разобрать файл',
|
||
invalidJSON: 'Неверный формат JSON',
|
||
unsupportedFormat: 'Формат файла не поддерживается',
|
||
selectFile: 'Сначала выберите файл для импорта',
|
||
downloadExample: 'Скачать пример',
|
||
downloadExampleJSON: 'Скачать пример JSON',
|
||
downloadExampleCSV: 'Скачать пример CSV',
|
||
downloadExampleExcel: 'Скачать пример Excel'
|
||
},
|
||
faqExport: {
|
||
exportButton: 'Экспорт CSV',
|
||
exportSuccess: 'Экспорт успешен',
|
||
exportFailed: 'Ошибка экспорта'
|
||
},
|
||
models: {
|
||
title: 'Конфигурация моделей',
|
||
description: 'Выберите подходящие AI-модели для базы знаний',
|
||
llmLabel: 'LLM модель',
|
||
llmDesc: 'Большая языковая модель для диалогов и вопросов-ответов',
|
||
llmPlaceholder: 'Выберите LLM модель',
|
||
embeddingLabel: 'Модель встраивания',
|
||
embeddingDesc: 'Модель встраивания для векторизации текста',
|
||
embeddingPlaceholder: 'Выберите модель встраивания',
|
||
embeddingLocked: 'В базе знаний уже есть файлы. Модель встраивания нельзя изменить',
|
||
embeddingOptional: '(необязательно)',
|
||
embeddingWikiOptionalDesc: 'Необязательно. Если задано, используется для сопоставления по сходству при классификации каталога Wiki, чтобы новые страницы лучше повторно использовали существующие папки; иначе классификация выполняется по полному дереву каталога.',
|
||
rerankLabel: 'Модель ReRank',
|
||
rerankDesc: 'Модель для переранжирования результатов поиска (необязательно)',
|
||
rerankPlaceholder: 'Выберите модель ReRank (необязательно)'
|
||
},
|
||
chunking: {
|
||
title: 'Настройки разбиения',
|
||
description: 'Управляет тем, как загруженные документы разбиваются перед эмбеддингом. Значения по умолчанию подходят для большинства случаев — настройте только если качество поиска плохое.',
|
||
sizeLabel: 'Размер блока',
|
||
sizeDescription: 'Максимальное количество символов в блоке (100–4000). По умолчанию 512 ≈ 100–130 английских токенов. Меньше для FAQ (200–400), больше для повествовательных документов (1000–2000).',
|
||
characters: 'символов',
|
||
overlapLabel: 'Перекрытие блоков',
|
||
overlapDescription: 'Количество символов, общих для соседних блоков (0–500). По умолчанию 80 ≈ 15% размера — оптимум по текущим исследованиям. 0 для FAQ/структурированных данных, 150–200 для длинных повествований.',
|
||
separatorsLabel: 'Разделители',
|
||
separatorsDescription: 'Символы или строки, которые сплиттер предпочитает при резке. Разделители более высокого приоритета пробуются первыми; порядок по умолчанию: абзацы → предложения → пунктуация.',
|
||
separatorsPlaceholder: 'Выберите или настройте разделители',
|
||
separators: {
|
||
doubleNewline: 'Двойной перевод строки (\\n\\n)',
|
||
singleNewline: 'Одинарный перевод строки (\\n)',
|
||
periodCn: 'Китайская точка (。)',
|
||
exclamationCn: 'Восклицательный знак (!)',
|
||
questionCn: 'Вопросительный знак (?)',
|
||
semicolonCn: 'Китайская точка с запятой (;)',
|
||
semicolonEn: 'Точка с запятой (;)',
|
||
space: 'Пробел ( )'
|
||
},
|
||
parentChildLabel: 'Родительско-дочернее разбиение',
|
||
parentChildDescription: 'Двухуровневое разбиение: маленькие дочерние блоки используются для векторного матчинга (точные совпадения), большой родительский блок возвращается LLM (более богатый контекст). Рекомендуется для длинных документов (>10 страниц); пропустите для коротких FAQ для экономии хранилища.',
|
||
parentChunkSizeLabel: 'Размер родительского блока',
|
||
parentChunkSizeDescription: 'Размер контекстного блока, возвращаемого LLM (512–8192). По умолчанию 4096 ≈ 1000 английских токенов, комфортно вписывается в любое современное контекстное окно.',
|
||
childChunkSizeLabel: 'Размер дочернего блока',
|
||
childChunkSizeDescription: 'Размер встроенного блока для векторного матчинга (64–2048). По умолчанию 384 ≈ 80 токенов — оптимум для эмбеддеров уровня sentence-transformer / BGE.',
|
||
strategyLabel: 'Стратегия разбиения',
|
||
strategyDescription: 'Выберите способ разбиения документов на блоки. Автоматический режим анализирует каждый документ и выбирает оптимальную стратегию.',
|
||
strategyPlaceholder: 'Выберите стратегию разбиения (по длине, если не указано)',
|
||
strategies: {
|
||
auto: {
|
||
label: 'Автоматически',
|
||
tooltip: 'Профилировщик документа сам выбирает между «По заголовкам», «По структуре» и «По длине» разбиением для каждой загрузки.'
|
||
},
|
||
heading: {
|
||
label: 'По заголовкам',
|
||
tooltip: 'Разбивает по границам заголовков Markdown (#, ##, ###); каждый фрагмент получает свой путь заголовков. Подходит для хорошо структурированного Markdown.'
|
||
},
|
||
heuristic: {
|
||
label: 'По структуре',
|
||
tooltip: 'Разбивает по обнаруженным структурным признакам: разрывы страниц, нумерованные разделы, многоязычные маркеры глав (DE/EN/ZH), заголовки в верхнем регистре. Идеально для PDF без заголовков Markdown.'
|
||
},
|
||
legacy: {
|
||
label: 'По длине',
|
||
tooltip: 'Игнорирует структуру и разбивает рекурсивно по числу символов и разделителям — оригинальное поведение. Используйте, если стратегии с учётом структуры работают некорректно.'
|
||
}
|
||
},
|
||
overlapWarning: 'Перекрытие велико по сравнению с размером блока — блоки будут содержать большую часть одинакового контента.',
|
||
advancedLabel: 'Расширенные параметры',
|
||
tokenLimitLabel: 'Лимит токенов на блок',
|
||
tokenLimitDescription: 'Жёсткий лимит токенов на блок (0–8192). 0 = выкл (только символы). Активируйте, когда у вашего эмбеддера небольшой токен-лимит: 200 для MiniLM (256 ток), 400 для BGE/Cohere (512 ток). Современные эмбеддеры (OpenAI, Voyage, Jina-v3) поддерживают >2000 токенов — оставьте 0.',
|
||
languagesLabel: 'Языковые подсказки',
|
||
languagesDescription: 'Ограничивает эвристические паттерны выбранными языками (DE/EN/ZH). Пусто = автоопределение из образца. Установите явно для однородных корпусов, чтобы избежать ложных срабатываний между языками.',
|
||
languagesPlaceholder: 'Автоопределение',
|
||
languageOptions: {
|
||
de: 'Немецкий',
|
||
en: 'Английский',
|
||
zh: 'Китайский'
|
||
},
|
||
debug: {
|
||
toggle: 'Проверить разбиение',
|
||
toggleHint: 'Запустить разбиение для примера текста без повторной загрузки',
|
||
sampleLabel: 'Пример текста',
|
||
samplePlaceholder: 'Вставьте фрагмент Markdown / простого текста, чтобы увидеть, как его разобьет текущая конфигурация…',
|
||
presetLabel: 'Загрузить пример:',
|
||
samples: {
|
||
markdown: 'Markdown-документ',
|
||
faq: 'Список FAQ',
|
||
chapter: 'Главы PDF',
|
||
plain: 'Обычный текст'
|
||
},
|
||
runButton: 'Запустить предпросмотр',
|
||
loading: 'Запуск разбиения на примере…',
|
||
errorPrefix: 'Ошибка предпросмотра',
|
||
selectedTier: 'Выбранная стратегия',
|
||
rejected: 'Отклоненные уровни',
|
||
contextHeader: 'Контекстный заголовок',
|
||
fallbackWarning: 'Цепочка стратегий полностью исчерпана — текущие настройки не позволяют разумно разбить контент',
|
||
profile: {
|
||
lines: 'строк',
|
||
chars: 'символов',
|
||
headings: 'заголовков Markdown',
|
||
pageBreaks: 'разрывов страниц',
|
||
chapterMarkers: 'маркеров глав',
|
||
languages: 'языки'
|
||
},
|
||
stats: {
|
||
chunks: 'блоков',
|
||
truncated: 'обрезано; всего {total}'
|
||
}
|
||
}
|
||
},
|
||
multimodal: {
|
||
title: 'Обработка изображений',
|
||
description: 'Настройте понимание изображений для парсинга и поиска нетекстового контента',
|
||
},
|
||
asr: {
|
||
title: 'Распознавание речи для аудио',
|
||
description:
|
||
'Настройте ASR (речь → текст). При включении можно загружать аудиофайлы и транскрибировать их в текст (mp3, wav, m4a, flac, ogg и др.). Загрузка видео не поддерживается.',
|
||
label: 'Включить распознавание речи для аудио',
|
||
desc: 'При включении в базу можно загружать аудио; речь транскрибируется в текст для парсинга и поиска',
|
||
modelLabel: 'Модель ASR',
|
||
modelDescription: 'Модель распознавания речи для транскрибации аудио (например, OpenAI Whisper)',
|
||
modelPlaceholder: 'Выберите модель ASR',
|
||
},
|
||
advanced: {
|
||
title: 'Расширенные настройки',
|
||
description: 'Настройте генерацию вопросов и мультимодальные возможности',
|
||
questionGeneration: {
|
||
label: 'AI генерация вопросов',
|
||
description: 'Генерация связанных вопросов для каждого фрагмента с помощью LLM при парсинге документа для улучшения полноты поиска. Включение увеличит время парсинга документа.',
|
||
countLabel: 'Количество вопросов',
|
||
countDescription: 'Количество вопросов для генерации на фрагмент документа (1-10)'
|
||
},
|
||
multimodal: {
|
||
label: 'Мультимодальная функция',
|
||
description: 'Включите понимание мультимедийного контента, такого как изображения',
|
||
vllmLabel: 'VLLM модель для зрения',
|
||
vllmDescription: 'Визуально-языковая модель, необходимая для мультимодального понимания',
|
||
vllmPlaceholder: 'Выберите VLLM модель (обязательно)',
|
||
storageTitle: 'Конфигурация хранилища',
|
||
storageTypeLabel: 'Тип хранилища',
|
||
storageTypeDescription: 'Выберите способ хранения мультимодальных файлов (MinIO или Tencent Cloud COS)',
|
||
storageTypeOptions: {
|
||
minio: 'MinIO',
|
||
cos: 'Tencent Cloud COS'
|
||
},
|
||
minioDisabledWarning: 'MinIO не включен. Автоматически переключено на Tencent Cloud COS. Чтобы использовать MinIO, сначала включите его в конфигурации системы.',
|
||
minio: {
|
||
bucketLabel: 'Имя Bucket',
|
||
bucketDescription: 'Название бакета MinIO (обязательно)',
|
||
bucketPlaceholder: 'Введите имя Bucket (обязательно)',
|
||
useSslLabel: 'Использовать SSL',
|
||
useSslDescription: 'Определяет, использовать ли SSL-соединение',
|
||
pathPrefixLabel: 'Префикс пути',
|
||
pathPrefixDescription: 'Необязательный префикс для путей хранения файлов',
|
||
pathPrefixPlaceholder: 'Введите префикс пути',
|
||
bucketHint: 'Select an existing bucket with public read access, or enter a new name to create automatically',
|
||
policyLabels: {
|
||
public: 'Public Read',
|
||
private: 'Private',
|
||
custom: 'Custom'
|
||
}
|
||
},
|
||
cos: {
|
||
secretIdLabel: 'SecretId',
|
||
secretIdDescription: 'ID секретного ключа Tencent Cloud API (обязательно)',
|
||
secretIdPlaceholder: 'Введите SecretId (обязательно)',
|
||
secretKeyLabel: 'SecretKey',
|
||
secretKeyDescription: 'Секретный ключ Tencent Cloud API (обязательно)',
|
||
secretKeyPlaceholder: 'Введите SecretKey (обязательно)',
|
||
regionLabel: 'Регион',
|
||
regionDescription: 'Регион, в котором находится бакет COS (обязательно)',
|
||
regionPlaceholder: 'Например: ap-guangzhou (обязательно)',
|
||
bucketLabel: 'Имя Bucket',
|
||
bucketDescription: 'Название бакета COS (обязательно)',
|
||
bucketPlaceholder: 'Введите имя Bucket (обязательно)',
|
||
appIdLabel: 'AppId',
|
||
appIdDescription: 'ID приложения Tencent Cloud (обязательно)',
|
||
appIdPlaceholder: 'Введите AppId (обязательно)',
|
||
pathPrefixLabel: 'Префикс пути',
|
||
pathPrefixDescription: 'Необязательный префикс для путей хранения файлов',
|
||
pathPrefixPlaceholder: 'Введите префикс пути'
|
||
}
|
||
}
|
||
},
|
||
share: {
|
||
description: 'Share the knowledge base with spaces so members can access and use it',
|
||
addShare: 'Share',
|
||
unshareConfirm: 'Are you sure you want to unshare from "{name}"?',
|
||
tip1: 'After sharing, space members will access this knowledge base based on the assigned permissions',
|
||
tip2: 'Editable permission allows members to modify content; Read-only permission only allows retrieval and Q&A'
|
||
}
|
||
},
|
||
chat: {
|
||
title: 'Диалог',
|
||
newChat: 'Новый чат',
|
||
suggestedQuestions: 'Вы можете спросить меня',
|
||
suggestedQuestionsLoading: 'Загрузка предложений...',
|
||
refreshSuggestedQuestions: 'Обновить предложения',
|
||
inputPlaceholder: 'Введите ваше сообщение...',
|
||
send: 'Отправить',
|
||
thinking: 'Думаю...',
|
||
regenerate: 'Сгенерировать заново',
|
||
copy: 'Копировать',
|
||
delete: 'Удалить',
|
||
reference: 'Ссылка',
|
||
noMessages: 'Нет сообщений',
|
||
waitingForAnswer: 'Ожидание ответа...',
|
||
cannotAnswer: 'Извините, я не могу ответить на этот вопрос.',
|
||
summarizingAnswer: 'Подведение итогов ответа...',
|
||
loading: 'Загрузка...',
|
||
enterDescription: 'Введите описание',
|
||
referencedContent: 'Использовано {count} связанных материалов',
|
||
deepThinking: 'Глубокое мышление завершено',
|
||
knowledgeBaseQandA: 'Вопросы и ответы на основе базы знаний',
|
||
askKnowledgeBase: 'Задайте вопрос базе знаний',
|
||
sourcesCount: '{count} источников',
|
||
pleaseEnterContent: 'Пожалуйста, введите содержимое!',
|
||
pleaseUploadKnowledgeBase: 'Пожалуйста, сначала загрузите базу знаний!',
|
||
replyingPleaseWait: 'Идёт ответ, пожалуйста, попробуйте позже!',
|
||
createSessionFailed: 'Не удалось создать сеанс',
|
||
createSessionError: 'Ошибка создания сеанса',
|
||
unableToGetKnowledgeBaseId: 'Невозможно получить ID базы знаний',
|
||
summaryInProgress: 'Идёт подготовка ответа…',
|
||
referencesTitle: 'Использовано {count} связанного материала',
|
||
referencesDocCount: 'Использовано {count} документ(ов)',
|
||
referencesDocAndWebCount: 'Использовано {docCount} документ(ов) и {webCount} веб-страниц(ы)',
|
||
referenceChunkCount: '{count} фрагмент(ов)',
|
||
fallbackHint: 'В базе знаний не найдено релевантного содержимого. Выше представлен прямой ответ модели.',
|
||
channelWeb: 'Веб',
|
||
channelApi: 'API',
|
||
channelIm: 'IM',
|
||
chunkLabel: 'Фрагмент {index}:',
|
||
navigateToDocument: 'Просмотр документа',
|
||
referenceIconAlt: 'Иконка ссылок на материалы',
|
||
chunkIdLabel: 'ID фрагмента:',
|
||
documentIdLabel: 'ID документа:',
|
||
chunkOrdinal: 'Фрагмент {index}',
|
||
previewContent: 'Предпросмотр содержимого',
|
||
noPlanSteps: 'Подробные шаги не предоставлены',
|
||
chunkIndexLabel: 'Фрагмент №{index}',
|
||
chunkPositionLabel: '(позиция: {position})',
|
||
noRelatedChunks: 'Связанные фрагменты не найдены',
|
||
noSearchResults: 'Результаты поиска не найдены',
|
||
relevanceHigh: 'Высокая релевантность',
|
||
relevanceMedium: 'Средняя релевантность',
|
||
relevanceLow: 'Низкая релевантность',
|
||
relevanceWeak: 'Слабая релевантность',
|
||
webSearchNoResults: 'Результаты веб-поиска не найдены',
|
||
otherSource: 'Другие источники',
|
||
webGroupIntro: 'Следующие {count} записей получены из',
|
||
graphConfigTitle: 'Настройки графа',
|
||
entityTypesLabel: 'Типы сущностей:',
|
||
relationTypesLabel: 'Типы связей:',
|
||
graphResultsHeader: 'Найдено {count} связанных результатов',
|
||
graphNoResults: 'Данные графа не найдены',
|
||
unknownLink: 'Неизвестная ссылка',
|
||
contentLengthLabel: 'Длина {value}',
|
||
notProvided: 'Не указано',
|
||
promptLabel: 'Промпт',
|
||
errorMessageLabel: 'Сообщение об ошибке',
|
||
summaryLabel: 'Сводка',
|
||
rawTextLabel: 'Исходный текст',
|
||
collapseRaw: 'Свернуть оригинал',
|
||
expandRaw: 'Развернуть оригинал',
|
||
noWebContent: 'Содержимое страницы не получено',
|
||
lengthChars: '{value} символов',
|
||
lengthThousands: '{value} тыс. символов',
|
||
lengthTenThousands: '{value} ×10⁴ символов',
|
||
sqlQueryExecuted: 'Выполненный SQL-запрос:',
|
||
sqlResultsLabel: 'Результаты:',
|
||
rowsLabel: 'строк',
|
||
columnsLabel: 'столбцов',
|
||
noDatabaseRecords: 'Совпадающих записей не найдено',
|
||
nullValuePlaceholder: '<NULL>',
|
||
documentTitleLabel: 'Название документа:',
|
||
chunkCountLabel: 'Количество фрагментов:',
|
||
chunkCountValue: '{count} фрагментов',
|
||
documentDescriptionLabel: 'Описание:',
|
||
documentStatusLabel: 'Статус:',
|
||
documentSourceLabel: 'Источник:',
|
||
documentFileLabel: 'Файл:',
|
||
documentMetadataLabel: 'Метаданные',
|
||
documentInfoSummaryLabel: 'Информация о документах',
|
||
documentInfoCount: '{count} из {requested} документов получено',
|
||
documentInfoErrors: 'Ошибки',
|
||
documentInfoEmpty: 'Нет данных о документах',
|
||
statusDescription: 'Информация о статусе',
|
||
statusIndexed: 'Документ проиндексирован и доступен для поиска',
|
||
statusSearchable: 'Можно искать содержимое документа с помощью инструментов',
|
||
statusChunkDetailAvailable: 'Используйте get_chunk_detail для просмотра фрагментов',
|
||
positionLabel: 'Позиция:',
|
||
chunkPositionValue: 'Фрагмент №{index}',
|
||
contentLengthLabelSimple: 'Длина содержимого:',
|
||
fullContentLabel: 'Полный текст',
|
||
copyContent: 'Скопировать содержимое',
|
||
knowledgeBaseCount: '{count} баз знаний',
|
||
noKnowledgeBases: 'Нет доступных баз знаний',
|
||
rawOutputLabel: 'Исходный вывод',
|
||
wikiWritePageTitle: 'Запись страницы Wiki',
|
||
wikiReplaceTextTitle: 'Замена текста Wiki',
|
||
wikiRenamePageTitle: 'Переименование страницы Wiki',
|
||
wikiDeletePageTitle: 'Удаление страницы Wiki',
|
||
wikiActionCreated: 'Создано',
|
||
wikiActionUpdated: 'Обновлено',
|
||
wikiActionRenamed: 'Переименовано',
|
||
wikiActionDeleted: 'Удалено',
|
||
wikiFieldSlug: 'Путь страницы',
|
||
wikiFieldTitle: 'Заголовок',
|
||
wikiFieldPageType: 'Тип',
|
||
wikiFieldSummary: 'Резюме',
|
||
wikiFieldOldText: 'Исходный текст',
|
||
wikiFieldNewText: 'Новый текст',
|
||
wikiFieldOldSlug: 'Исходный путь',
|
||
wikiFieldNewSlug: 'Новый путь',
|
||
wikiFieldAffectedPages: 'Затронутые страницы',
|
||
wikiAffectedCount: 'Ссылки на {count} страницах обновлены',
|
||
selectKnowledgeBaseWarning: 'Пожалуйста, выберите хотя бы одну базу знаний',
|
||
processError: 'Ошибка обработки',
|
||
sessionExcerpt: 'Выдержка из сессии',
|
||
noAnswerContent: '(Нет содержимого ответа)',
|
||
noMatchFound: 'Совпадений не найдено',
|
||
deleteSessionFailed: 'Ошибка удаления, попробуйте позже!',
|
||
imageTooMany: 'Максимум 5 изображений',
|
||
imageTypeSizeError: 'Поддерживаются только JPG/PNG/GIF/WEBP до 10 МБ',
|
||
imageUploadTooltip: 'Загрузить изображение (вставка/перетаскивание)',
|
||
attachmentUploadTooltip: 'Загрузить вложение (документы, аудио и т.д.)',
|
||
attachmentWithCount: 'Загружено файлов: {count}',
|
||
attachmentTooMany: 'Максимум {max} файлов',
|
||
attachmentTooLarge: 'Файл {name} превышает лимит {max} МБ',
|
||
attachmentTypeNotSupported: 'Неподдерживаемый тип файла: {name}',
|
||
thinkingAlt: 'Обдумывание...',
|
||
deepThoughtCompleted: 'Глубокий анализ завершён',
|
||
deepThoughtAlt: 'Глубокий анализ'
|
||
},
|
||
language: {
|
||
zhCN: '简体中文',
|
||
enUS: 'English',
|
||
ruRU: 'Русский',
|
||
koKR: '한국어',
|
||
selectLanguage: 'Выбрать язык',
|
||
language: 'Язык',
|
||
languageDescription: 'Выберите язык отображения интерфейса',
|
||
languageSaved: 'Настройки языка сохранены'
|
||
},
|
||
general: {
|
||
title: 'Общие настройки',
|
||
allSettings: 'Все настройки',
|
||
description: 'Настройка языка, внешнего вида и других базовых параметров',
|
||
settings: 'Настройки',
|
||
close: 'Закрыть настройки'
|
||
},
|
||
theme: {
|
||
theme: 'Тема',
|
||
themeDescription: 'Выберите тему оформления интерфейса, поддерживается автоматическое переключение в зависимости от системных настроек',
|
||
light: 'Светлая',
|
||
dark: 'Тёмная',
|
||
system: 'Системная',
|
||
selectTheme: 'Выбрать тему'
|
||
},
|
||
font: {
|
||
uiFont: 'Шрифт интерфейса',
|
||
uiFontDescription: 'Шрифт для меню, основного текста, кнопок и большинства элементов интерфейса',
|
||
monoFont: 'Шрифт для кода',
|
||
monoFontDescription: 'Используется для блоков кода, команд терминала, API-ключей, путей к файлам и других технических текстов. Все символы одной ширины, чтобы 0 не путался с O, а 1 — с l.',
|
||
selectFont: 'Выбрать шрифт',
|
||
sansPreview: 'Образец Sample Шрифт — Aa Gg Oo 0123',
|
||
monoPreview: "const msg = 'Hello'; // 0O1l",
|
||
sans: {
|
||
system: 'Системный по умолчанию',
|
||
// macOS
|
||
pingfang: 'PingFang SC',
|
||
georgia: 'Georgia (с засечками)',
|
||
// Windows
|
||
yahei: 'Microsoft YaHei',
|
||
times: 'Times New Roman (с засечками)',
|
||
// Linux
|
||
'noto-cjk': 'Noto Sans CJK',
|
||
'dejavu-serif': 'DejaVu Serif (с засечками)',
|
||
// cross-platform
|
||
'sans-serif': 'Стандартный без засечек',
|
||
},
|
||
mono: {
|
||
system: 'Системный по умолчанию',
|
||
// macOS
|
||
menlo: 'Menlo',
|
||
monaco: 'Monaco',
|
||
// Windows
|
||
consolas: 'Consolas',
|
||
cascadia: 'Cascadia Code',
|
||
// Linux
|
||
'dejavu-mono': 'DejaVu Sans Mono',
|
||
'liberation-mono': 'Liberation Mono',
|
||
// cross-platform
|
||
monospace: 'Стандартный моноширинный',
|
||
},
|
||
fontSize: 'Размер шрифта',
|
||
fontSizeDescription: 'Масштабирует весь интерфейс (текст, иконки, отступы) и применяется немедленно',
|
||
size: {
|
||
small: 'Маленький',
|
||
normal: 'Обычный',
|
||
large: 'Крупный',
|
||
},
|
||
},
|
||
platform: {
|
||
subtitle: 'Корпоративная платформа знаний на базе больших языковых моделей',
|
||
description: 'RAG-поиск, агентные рассуждения и Wiki-базы знаний — чтобы документы действительно понимались и приносили пользу',
|
||
rag: 'RAG расширенная генерация',
|
||
agent: 'ReAct агент',
|
||
wiki: 'Wiki-база знаний',
|
||
hybridSearch: 'Гибридный поиск',
|
||
localDeploy: 'Локальное развертывание',
|
||
multimodalParsing: 'Мультимодальный анализ документов',
|
||
hybridSearchEngine: 'Гибридный поиск + граф знаний',
|
||
ragQandA: 'Вопрос-ответ с ReAct агентом',
|
||
independentTenant: 'Независимое пространство арендатора',
|
||
fullApiAccess: 'Полный доступ к API',
|
||
knowledgeBaseManagement: 'Управление базой знаний',
|
||
carousel: {
|
||
agenticRagTitle: 'Agentic RAG',
|
||
agenticRagDesc: 'ReAct-рассуждения + вызов инструментов + многошаговое мышление',
|
||
hybridSearchTitle: 'Гибридная стратегия поиска',
|
||
hybridSearchDesc: 'BM25 + Вектор + Граф знаний',
|
||
wikiTitle: 'Wiki-база знаний',
|
||
wikiDesc: 'Дистилляция документов в структурированные связанные знания',
|
||
smartDocRetrievalTitle: 'Интеллектуальный поиск документов',
|
||
smartDocRetrievalDesc: 'Многоформатный разбор PDF/Word/изображений'
|
||
}
|
||
},
|
||
time: {
|
||
today: 'Сегодня',
|
||
yesterday: 'Вчера',
|
||
last7Days: 'Последние 7 дней',
|
||
last30Days: 'Последние 30 дней',
|
||
lastYear: 'Последний год',
|
||
earlier: 'Ранее',
|
||
pinned: 'Закреплено',
|
||
},
|
||
upload: {
|
||
uploadDocument: 'Загрузить документ',
|
||
uploadFolder: 'Загрузить папку',
|
||
onlineEdit: 'Онлайн редактирование',
|
||
deleteRecord: 'Удалить запись'
|
||
},
|
||
agentSettings: {
|
||
title: 'Настройки Agent',
|
||
description: 'Настройте поведение и параметры AI Agent. Эти параметры применяются ко всем чатам с включённым режимом Agent.',
|
||
globalConfigNotice: 'Это глобальные настройки по умолчанию. Новые агенты унаследуют эти настройки. Вы также можете настроить каждого агента индивидуально в списке агентов.',
|
||
loadConfigFailed: 'Не удалось загрузить конфигурацию Agent',
|
||
loadModelsFailed: 'Не удалось загрузить список моделей',
|
||
status: {
|
||
label: 'Статус Agent',
|
||
ready: 'Готов',
|
||
notReady: 'Не готов',
|
||
hint: 'После завершения конфигурации статус автоматически изменится на «Готов». Затем можно включить режим Agent в диалоге.',
|
||
missingThinkingModel: 'модель мышления',
|
||
missingRerankModel: 'модель ранжирования',
|
||
missingAllowedTools: 'разрешённые инструменты',
|
||
pleaseConfigure: 'Пожалуйста, настройте: {items}',
|
||
goConfigureModels: 'Перейти к настройке моделей →',
|
||
missingSummaryModel: 'Chat Model (Summary Model)',
|
||
goToConfig: 'Go to configure chat model'
|
||
},
|
||
maxIterations: {
|
||
label: 'Макс. число итераций',
|
||
desc: 'Максимальное число шагов рассуждений при выполнении задач'
|
||
},
|
||
thinkingModel: {
|
||
label: 'Модель мышления',
|
||
desc: 'LLM для рассуждений и планирования',
|
||
hint: 'Требуется модель с поддержкой function call'
|
||
},
|
||
rerankModel: {
|
||
label: 'Модель Rerank',
|
||
desc: 'Повторная ранжировка результатов поиска и нормализация релевантности'
|
||
},
|
||
model: {
|
||
placeholder: 'Поиск моделей...',
|
||
addChat: 'Добавить новую модель диалога',
|
||
addRerank: 'Добавить новую модель Rerank'
|
||
},
|
||
temperature: {
|
||
label: 'Температура',
|
||
desc: 'Контролирует случайность ответа. 0 — детерминированно, 1 — максимально случайно'
|
||
},
|
||
allowedTools: {
|
||
label: 'Разрешённые инструменты',
|
||
desc: 'Список инструментов, доступных Agent',
|
||
placeholder: 'Выберите инструменты...',
|
||
empty: 'Инструменты не настроены'
|
||
},
|
||
systemPrompt: {
|
||
label: 'Системный промпт',
|
||
desc: 'Настройте системный промпт Agent. Подстановки будут заменены во время выполнения.',
|
||
availablePlaceholders: 'Доступные подстановки:',
|
||
hintPrefix: 'Подсказка: при вводе',
|
||
hintSuffix: 'откроется список доступных подстановок',
|
||
custom: 'Пользовательский промпт',
|
||
disabledHint: 'Сейчас используется промпт по умолчанию. Включите пользовательский, чтобы применить содержимое ниже.',
|
||
placeholder: 'Введите системный промпт или оставьте пустым для значения по умолчанию...',
|
||
tabHintDetail: "Единый системный промпт (оставьте пустым для значения по умолчанию, используйте {'{{'}web_search_status{'}}'} для динамического управления веб-поиском)",
|
||
tabHint: 'Настройте разные промпты для режимов с включённым и отключённым веб-поиском.'
|
||
},
|
||
reset: {
|
||
header: 'Сбросить к промпту по умолчанию',
|
||
body: 'Сбросить к значению по умолчанию? Текущий пользовательский промпт будет перезаписан.'
|
||
},
|
||
errors: {
|
||
selectThinkingModel: 'Выберите модель мышления перед включением режима Agent',
|
||
selectAtLeastOneTool: 'Выберите хотя бы один инструмент',
|
||
iterationsRange: 'Макс. число итераций должно быть от 1 до 20',
|
||
temperatureRange: 'Температура должна быть от 0 до 2',
|
||
validationFailed: 'Ошибка проверки конфигурации'
|
||
},
|
||
toasts: {
|
||
iterationsSaved: 'Макс. число итераций сохранено',
|
||
thinkingModelSaved: 'Модель мышления сохранена',
|
||
rerankModelSaved: 'Модель Rerank сохранена',
|
||
temperatureSaved: 'Температура сохранена',
|
||
toolsUpdated: 'Инструменты обновлены',
|
||
customPromptEnabled: 'Пользовательский промпт включён',
|
||
defaultPromptEnabled: 'Включён промпт по умолчанию',
|
||
resetToDefault: 'Восстановлено значение по умолчанию',
|
||
systemPromptSaved: 'Системный промпт сохранён',
|
||
autoDisabled: 'Конфигурация Agent неполная. Режим Agent автоматически выключен'
|
||
},
|
||
modelRecommendation: {
|
||
title: 'Model Recommendation',
|
||
content: 'For better Agent experience, we recommend using large language models with FunctionCalling support and long context windows, such as deepseek-v3.1-terminus'
|
||
}
|
||
},
|
||
conversationSettings: {
|
||
enableQueryExpansion: {
|
||
label: 'Включить расширение запросов',
|
||
desc: 'При низкой выдаче обращаться к LLM для генерации дополнительных запросов (дороже и медленнее)'
|
||
},
|
||
toasts: {
|
||
enableQueryExpansionSaved: 'Настройка расширения запросов сохранена',
|
||
chatModelSaved: 'LLM model saved',
|
||
rerankModelSaved: 'ReRank model saved',
|
||
contextTemplateSaved: 'Retrieval result summary prompt saved',
|
||
systemPromptSaved: 'System prompt saved',
|
||
temperatureSaved: 'Temperature saved',
|
||
maxTokensSaved: 'Max tokens saved',
|
||
maxRoundsSaved: 'History rounds saved',
|
||
embeddingSaved: 'Embedding TopK saved',
|
||
keywordThresholdSaved: 'Keyword threshold saved',
|
||
vectorThresholdSaved: 'Vector threshold saved',
|
||
rerankTopKSaved: 'ReRank TopK saved',
|
||
rerankThresholdSaved: 'ReRank threshold saved',
|
||
enableRewriteSaved: 'Query rewrite preference saved',
|
||
fallbackStrategySaved: 'Fallback strategy saved',
|
||
fallbackResponseSaved: 'Fallback response saved',
|
||
fallbackPromptSaved: 'Fallback prompt saved',
|
||
rewritePromptSystemSaved: 'Rewrite system prompt saved',
|
||
rewritePromptUserSaved: 'Rewrite user prompt saved',
|
||
customPromptEnabled: 'Custom prompt enabled',
|
||
defaultPromptEnabled: 'Using default prompt',
|
||
customContextTemplateEnabled: 'Custom summary prompt enabled',
|
||
defaultContextTemplateEnabled: 'Using default summary prompt',
|
||
resetSystemPromptSuccess: 'Reset to default system prompt',
|
||
resetContextTemplateSuccess: 'Reset to default summary prompt'
|
||
},
|
||
contextTemplate: {
|
||
label: 'Шаблон контекста',
|
||
desc: 'Шаблон промпта для генерации ответов на основе результатов поиска в обычном режиме',
|
||
descWithDefault: 'Шаблон промпта для генерации ответов на основе результатов поиска в обычном режиме (оставьте пустым для значения по умолчанию)',
|
||
placeholder: 'Введите шаблон промпта для суммирования результатов поиска...',
|
||
custom: 'Пользовательский шаблон',
|
||
disabledHint: 'Сейчас используется промпт по умолчанию. Включите пользовательский для редактирования.'
|
||
},
|
||
systemPrompt: {
|
||
label: 'Системный промпт',
|
||
desc: 'Системный промпт для обычного режима диалога',
|
||
descWithDefault: 'Системный промпт для обычного режима диалога (оставьте пустым для значения по умолчанию)',
|
||
placeholder: 'Введите системный промпт...',
|
||
custom: 'Пользовательский промпт',
|
||
disabledHint: 'Сейчас используется промпт по умолчанию. Включите пользовательский для редактирования.'
|
||
},
|
||
description: 'Configure default behavior and parameters for conversation modes, including prompts for Agent and normal modes',
|
||
agentMode: 'Agent Mode',
|
||
normalMode: 'Normal Mode',
|
||
menus: {
|
||
modes: 'Mode Settings',
|
||
models: 'Model Mapping',
|
||
thresholds: 'Retrieval Thresholds',
|
||
advanced: 'Advanced Settings'
|
||
},
|
||
models: {
|
||
description: 'Manage thinking/chat models and re-rank models for both Agent and normal modes',
|
||
chatGroupLabel: 'Thinking / Chat Models',
|
||
chatGroupDesc: 'Includes Agent reasoning/planning model and the default chat/summary model for normal mode',
|
||
chatModel: {
|
||
label: 'Default chat model (normal mode)',
|
||
desc: 'Used when a conversation does not specify its own model',
|
||
placeholder: 'Select default chat model'
|
||
},
|
||
rerankModel: {
|
||
label: 'Default ReRank model (normal mode)',
|
||
desc: 'Used for re-ranking when a session does not override it',
|
||
placeholder: 'Select default rerank model'
|
||
},
|
||
rerankGroupLabel: 'ReRank Models',
|
||
rerankGroupDesc: 'Includes Agent rerank model and the default rerank model for normal mode'
|
||
},
|
||
thresholds: {
|
||
description: 'Tune retrieval and re-ranking thresholds to balance accuracy and performance'
|
||
},
|
||
maxRounds: {
|
||
label: 'History Rounds',
|
||
desc: 'Number of rounds kept for context and query rewrite'
|
||
},
|
||
embeddingTopK: {
|
||
label: 'Embedding TopK',
|
||
desc: 'Number of documents kept after vector retrieval'
|
||
},
|
||
keywordThreshold: {
|
||
label: 'Keyword Threshold',
|
||
desc: 'Minimum score for keyword retrieval'
|
||
},
|
||
vectorThreshold: {
|
||
label: 'Vector Threshold',
|
||
desc: 'Minimum similarity for vector retrieval'
|
||
},
|
||
rerankTopK: {
|
||
label: 'ReRank TopK',
|
||
desc: 'Documents kept after re-ranking'
|
||
},
|
||
rerankThreshold: {
|
||
label: 'ReRank Threshold',
|
||
desc: 'Minimum score required after re-ranking'
|
||
},
|
||
enableRewrite: {
|
||
label: 'Enable Query Rewrite',
|
||
desc: 'Automatically rewrite multi-turn queries for better recall'
|
||
},
|
||
fallbackStrategy: {
|
||
label: 'Fallback Strategy',
|
||
desc: 'How to respond when no relevant documents are found',
|
||
fixed: 'Fixed response',
|
||
model: 'Let the model continue answering'
|
||
},
|
||
fallbackResponse: {
|
||
label: 'Fixed fallback response',
|
||
desc: 'Text returned when using the fixed fallback strategy'
|
||
},
|
||
fallbackPrompt: {
|
||
label: 'Fallback Prompt',
|
||
desc: 'Prompt used when fallback strategy is "model"'
|
||
},
|
||
advanced: {
|
||
description: 'Configure query rewrite, fallback strategy and other advanced settings'
|
||
},
|
||
rewritePrompt: {
|
||
system: 'Rewrite System Prompt',
|
||
user: 'Rewrite User Prompt',
|
||
desc: 'System prompt used during query rewrite',
|
||
userDesc: 'User prompt used during query rewrite'
|
||
},
|
||
chatModel: {
|
||
label: 'LLM Model',
|
||
desc: 'Large language model used for summarization and abstract generation'
|
||
},
|
||
rerankModel: {
|
||
label: 'ReRank Model',
|
||
desc: 'Model for re-ranking search results (optional)'
|
||
},
|
||
temperature: {
|
||
label: 'Temperature',
|
||
desc: 'Controls randomness in outputs. 0 is most deterministic; 1 is most random'
|
||
},
|
||
maxTokens: {
|
||
label: 'Max Tokens',
|
||
desc: 'Maximum number of tokens to generate in the response'
|
||
},
|
||
resetSystemPrompt: {
|
||
header: 'Reset to Default System Prompt',
|
||
body: 'Are you sure you want to reset to the default system prompt?'
|
||
},
|
||
resetContextTemplate: {
|
||
header: 'Reset to Default Summary Prompt',
|
||
body: 'Are you sure you want to reset to the default summary prompt?'
|
||
}
|
||
},
|
||
mcpSettings: {
|
||
title: 'Сервисы MCP',
|
||
description: 'Управление внешними сервисами MCP (Model Context Protocol) для использования инструментов и ресурсов в режиме Agent',
|
||
// Drawer subtitle chip
|
||
enabled: 'Включён',
|
||
disabled: 'Отключён',
|
||
configuredServices: 'Настроенные сервисы',
|
||
manageAndTest: 'Управляйте и тестируйте подключения MCP',
|
||
addService: 'Добавить сервис',
|
||
empty: 'Сервисы MCP отсутствуют',
|
||
addFirst: 'Добавить первый сервис MCP',
|
||
actions: {
|
||
test: 'Тест соединения'
|
||
},
|
||
toasts: {
|
||
loadFailed: 'Не удалось загрузить список MCP сервисов',
|
||
enabled: 'Сервис MCP включён',
|
||
disabled: 'Сервис MCP выключен',
|
||
updateStateFailed: 'Не удалось обновить статус сервиса MCP',
|
||
testing: 'Тестируем {name}...',
|
||
noResponse: 'Тест не удался: нет ответа от сервера',
|
||
testFailed: 'Не удалось протестировать сервис MCP',
|
||
deleted: 'Сервис MCP удалён',
|
||
deleteFailed: 'Не удалось удалить сервис MCP'
|
||
},
|
||
deleteConfirmBody: 'Удалить сервис MCP «{name}»? Действие необратимо.',
|
||
unnamed: 'Без названия',
|
||
builtin: 'Встроенный'
|
||
},
|
||
modelSettings: {
|
||
title: 'Настройки моделей',
|
||
description: 'Управление типами AI‑моделей: локальные (Ollama) и удалённые API',
|
||
typeShort: {
|
||
chat: 'Чат',
|
||
embedding: 'Embedding',
|
||
rerank: 'ReRank',
|
||
vllm: 'Зрение',
|
||
asr: 'Речь',
|
||
},
|
||
actions: {
|
||
addModel: 'Добавить модель',
|
||
debugModel: 'Тест модели',
|
||
setDefault: 'Сделать по умолчанию'
|
||
},
|
||
chat: {
|
||
title: 'Модели диалога',
|
||
desc: 'Модели для диалога',
|
||
empty: 'Нет моделей диалога'
|
||
},
|
||
source: {
|
||
remote: 'Удалённая',
|
||
openaiCompatible: 'Совместимо с OpenAI',
|
||
custom: 'Своё',
|
||
},
|
||
rawModelName: 'Имя модели',
|
||
embedding: {
|
||
title: 'Модели встраивания',
|
||
desc: 'Модели для векторизации текста',
|
||
empty: 'Нет моделей встраивания'
|
||
},
|
||
rerank: {
|
||
title: 'Модели ReRank',
|
||
desc: 'Модели для повторной ранжировки результатов',
|
||
empty: 'Нет моделей ReRank'
|
||
},
|
||
vllm: {
|
||
title: 'VLLM модели зрения',
|
||
desc: 'Визуально-языковые модели для мультимодального понимания',
|
||
empty: 'Нет VLLM моделей'
|
||
},
|
||
asr: {
|
||
title: 'ASR модели речи',
|
||
desc: 'Модели распознавания речи для транскрибации аудио (например, OpenAI Whisper)',
|
||
empty: 'Нет ASR моделей'
|
||
},
|
||
toasts: {
|
||
nameRequired: 'Название модели не может быть пустым',
|
||
nameTooLong: 'Название модели не может превышать 100 символов',
|
||
displayNameTooLong: 'Отображаемое имя не может превышать 100 символов',
|
||
baseUrlRequired: 'Для удалённых API требуется Base URL',
|
||
baseUrlInvalid: 'Некорректный Base URL, укажите правильный адрес',
|
||
dimensionInvalid: 'Размерность встраивания должна быть 128–4096',
|
||
updated: 'Модель обновлена',
|
||
added: 'Модель добавлена',
|
||
saveFailed: 'Не удалось сохранить модель',
|
||
deleted: 'Модель удалена',
|
||
deleteFailed: 'Не удалось удалить модель',
|
||
setDefault: 'Установлено по умолчанию',
|
||
setDefaultFailed: 'Не удалось установить по умолчанию',
|
||
builtinCannotEdit: 'Встроенные модели нельзя редактировать',
|
||
builtinCannotDelete: 'Встроенные модели нельзя удалить',
|
||
builtinCannotCopy: 'Встроенные модели нельзя копировать',
|
||
copied: 'Модель скопирована',
|
||
copyFailed: 'Не удалось скопировать модель'
|
||
},
|
||
copySuffix: ' копия',
|
||
builtinModels: {
|
||
title: 'Встроенные модели',
|
||
description: 'Встроенные модели видны всем тенантам. Конфиденциальная информация скрыта, их нельзя редактировать или удалять.',
|
||
viewGuide: 'Посмотреть руководство по управлению встроенными моделями'
|
||
},
|
||
builtinTag: 'Встроенная',
|
||
confirmDelete: 'Удалить модель «{name}»?',
|
||
debug: {
|
||
title: 'Тест модели',
|
||
description: 'Отправьте реальный запрос к настроенной модели и проверьте ответ и время выполнения',
|
||
groupModel: 'Выбор модели',
|
||
groupInput: 'Тестовый ввод',
|
||
groupResult: 'Результат',
|
||
modelType: 'Тип модели',
|
||
model: 'Модель',
|
||
modelPlaceholder: 'Выберите модель для теста',
|
||
noModelsForType: 'Нет сохранённых моделей этого типа',
|
||
query: 'Ввод',
|
||
queryPlaceholder: 'Введите текст для отправки модели',
|
||
embeddingInput: 'Текст для векторизации',
|
||
embeddingPlaceholder: 'Введите текст для создания embedding',
|
||
vlmPrompt: 'Промпт для изображения',
|
||
vlmPromptPlaceholder: 'Например: подробно опишите это изображение',
|
||
documents: 'Кандидаты документов',
|
||
documentsPlaceholder: 'Введите один документ на строку',
|
||
documentsHint: 'Каждая непустая строка отправляется в модель ReRank как отдельный документ',
|
||
imageFile: 'Файл изображения',
|
||
audioFile: 'Аудиофайл',
|
||
chooseFile: 'Выбрать файл',
|
||
parameters: 'Параметры запроса',
|
||
thinking: 'Режим размышления',
|
||
thinkingDesc: 'Применяется только к моделям с поддержкой размышления',
|
||
systemPrompt: 'System Prompt',
|
||
systemPromptPlaceholder: 'Необязательно: системный промпт',
|
||
run: 'Запустить тест',
|
||
copyResult: 'Копировать результат',
|
||
history: 'История',
|
||
thinkOn: 'Размышление вкл.',
|
||
thinkOff: 'Размышление выкл.',
|
||
runLabel: 'Запуск №{n}',
|
||
success: 'Запрос выполнен',
|
||
failed: 'Запрос не выполнен',
|
||
rawResponse: 'Ответ',
|
||
requestPreview: 'Просмотр запроса',
|
||
requestFailed: 'Не удалось выполнить тест модели',
|
||
metrics: {
|
||
dimension: 'Размерность вектора',
|
||
resultCount: 'Количество результатов',
|
||
answerChars: 'Символов в ответе',
|
||
reasoningChars: 'Символов рассуждения',
|
||
reasoningReturned: 'Рассуждение возвращено',
|
||
textChars: 'Символов транскрипции',
|
||
segmentCount: 'Количество сегментов',
|
||
},
|
||
},
|
||
},
|
||
ollamaSettings: {
|
||
title: 'Настройки Ollama',
|
||
description: 'Управление локальным сервисом Ollama и моделями',
|
||
status: {
|
||
label: 'Статус Ollama',
|
||
desc: 'Автоматическая проверка доступности локального сервиса Ollama. При ошибке адреса или остановке сервиса статус будет «Недоступно».',
|
||
testing: 'Проверка',
|
||
available: 'Доступно',
|
||
unavailable: 'Недоступно',
|
||
untested: 'Не проверено',
|
||
retest: 'Проверить снова'
|
||
},
|
||
address: {
|
||
label: 'Адрес сервиса',
|
||
desc: 'API‑адрес локального сервиса Ollama, определяется автоматически. Чтобы изменить, задайте значение в .env',
|
||
placeholder: 'http://localhost:11434',
|
||
failed: 'Ошибка подключения. Проверьте, запущен ли Ollama и корректен ли адрес'
|
||
},
|
||
download: {
|
||
title: 'Загрузка моделей',
|
||
descPrefix: 'Введите имя модели для загрузки,',
|
||
browse: 'Открыть каталог моделей Ollama',
|
||
placeholder: 'например: qwen2.5:0.5b',
|
||
download: 'Скачать',
|
||
downloading: 'Загрузка: {name}'
|
||
},
|
||
installed: {
|
||
title: 'Установленные модели',
|
||
desc: 'Список моделей, установленных в Ollama',
|
||
empty: 'Установленные модели отсутствуют'
|
||
},
|
||
toasts: {
|
||
connected: 'Соединение установлено',
|
||
connectFailed: 'Не удалось подключиться. Проверьте, запущен ли Ollama',
|
||
listFailed: 'Не удалось получить список моделей',
|
||
downloadFailed: 'Не удалось загрузить. Попробуйте позже',
|
||
downloadStarted: 'Начата загрузка модели {name}',
|
||
downloadCompleted: 'Модель {name} загружена',
|
||
progressFailed: 'Не удалось получить прогресс загрузки'
|
||
},
|
||
unknown: 'Неизвестно',
|
||
today: 'Сегодня',
|
||
yesterday: 'Вчера',
|
||
daysAgo: '{days} дней назад'
|
||
},
|
||
mcpServiceDialog: {
|
||
addTitle: 'Добавить сервис MCP',
|
||
editTitle: 'Редактировать сервис MCP',
|
||
// Section + drawer-only keys
|
||
basicSection: 'Основное',
|
||
connectionSection: 'Подключение',
|
||
enableServiceDesc: 'При выключении сервис не будет вызываться',
|
||
testAfterSaveHint: 'Сохраните, чтобы протестировать подключение',
|
||
unitSecond: 'с',
|
||
unitTimes: '×',
|
||
name: 'Название сервиса',
|
||
namePlaceholder: 'Введите название сервиса',
|
||
description: 'Описание',
|
||
descriptionPlaceholder: 'Введите описание сервиса',
|
||
transportType: 'Тип транспорта',
|
||
transport: {
|
||
sse: 'SSE (Server-Sent Events)',
|
||
httpStreamable: 'HTTP Streamable',
|
||
stdio: 'Stdio'
|
||
},
|
||
serviceUrl: 'URL сервиса',
|
||
serviceUrlPlaceholder: 'https://example.com/mcp',
|
||
command: 'Команда',
|
||
args: 'Аргументы',
|
||
argPlaceholder: 'Аргумент {index}',
|
||
addArg: 'Добавить аргумент',
|
||
envVars: 'Переменные окружения',
|
||
envKeyPlaceholder: 'Имя переменной',
|
||
envValuePlaceholder: 'Значение',
|
||
addEnvVar: 'Добавить переменную',
|
||
enableService: 'Включить сервис',
|
||
authConfig: 'Аутентификация',
|
||
authType: 'Способ аутентификации',
|
||
authTypeNone: 'Нет / Свой заголовок',
|
||
authTypeApiKey: 'API Key / Token',
|
||
authTypeOAuth: 'OAuth 2.0 (авторизация при первом подключении)',
|
||
oauthAuthorizeHint: 'Нажатие «Авторизоваться» сначала сохранит текущую конфигурацию, затем запустит авторизацию (каждый пользователь авторизуется отдельно).',
|
||
apiKeyHeader: 'Имя заголовка',
|
||
apiKeyHeaderDesc: 'По умолчанию X-API-Key. Для Bearer укажите Authorization и впишите "Bearer <token>" в значение ниже; для «сырого» токена используйте Authorization и сам токен.',
|
||
credentialValue: 'Секрет / Токен',
|
||
apiKey: 'API Key',
|
||
bearerToken: 'Bearer Token',
|
||
optional: 'Необязательно',
|
||
advancedConfig: 'Дополнительно',
|
||
timeoutSec: 'Таймаут (с)',
|
||
retryCount: 'Число попыток',
|
||
retryDelaySec: 'Задержка (с)',
|
||
rules: {
|
||
nameRequired: 'Введите название сервиса',
|
||
transportRequired: 'Выберите тип транспорта',
|
||
urlRequired: 'Введите URL сервиса',
|
||
urlInvalid: 'Введите корректный URL',
|
||
commandRequired: 'Выберите команду (uvx или npx)',
|
||
argsRequired: 'Введите хотя бы один аргумент'
|
||
},
|
||
toasts: {
|
||
created: 'Сервис MCP создан',
|
||
updated: 'Сервис MCP обновлён',
|
||
createFailed: 'Не удалось создать сервис MCP',
|
||
updateFailed: 'Не удалось обновить сервис MCP',
|
||
oauthRequired: 'Сервис требует OAuth. Переключено на OAuth 2.0 — сохраните и нажмите «Авторизоваться».'
|
||
},
|
||
customHeaders: {
|
||
label: 'Пользовательские заголовки (необязательно)',
|
||
desc: 'HTTP-заголовки, добавляемые к каждому запросу MCP; обычно используются для аутентификации на корпоративном шлюзе, трассировки и т. п.',
|
||
add: 'Добавить заголовок',
|
||
keyPlaceholder: 'Имя заголовка',
|
||
valuePlaceholder: 'Значение заголовка'
|
||
},
|
||
codeImport: {
|
||
toggle: 'Импорт из кода',
|
||
hint: 'Вставьте стандартную JSON-конфигурацию mcpServers для автозаполнения формы',
|
||
placeholder:
|
||
'{\n "mcpServers": {\n "my-server": {\n "url": "https://example.com/sse"\n }\n }\n}',
|
||
parse: 'Разобрать и заполнить',
|
||
editOverwriteHint: 'Импорт перезапишет текущую форму (сохранённые учётные данные не затрагиваются; нажмите «Сохранить», чтобы применить)',
|
||
errors: {
|
||
empty: 'Сначала вставьте конфигурацию',
|
||
invalidJson: 'Не удалось разобрать, проверьте формат JSON',
|
||
noServer: 'Конфигурация сервиса MCP не найдена',
|
||
missingUrl: 'В конфигурации отсутствует url',
|
||
stdioUnsupported: 'Конфигурации stdio (command/args) не поддерживаются; используйте удалённую конфигурацию с url'
|
||
},
|
||
toasts: {
|
||
filled: 'Форма заполнена, проверьте и сохраните',
|
||
multipleServers: 'Обнаружено несколько сервисов, импортирован первый: {name}'
|
||
}
|
||
}
|
||
},
|
||
manualEditor: {
|
||
placeholders: {
|
||
heading: 'Заголовок {level}',
|
||
listItem: 'Элемент списка',
|
||
taskItem: 'Задача',
|
||
quote: 'Текст цитаты',
|
||
code: 'Содержимое кода',
|
||
linkText: 'Текст ссылки',
|
||
imageAlt: 'Описание',
|
||
bold: 'Жирный текст',
|
||
italic: 'Курсив',
|
||
strike: 'Зачеркнутый текст',
|
||
inlineCode: 'code'
|
||
},
|
||
table: {
|
||
column1: 'Колонка 1',
|
||
column2: 'Колонка 2',
|
||
cell: 'Содержимое'
|
||
},
|
||
toolbar: {
|
||
bold: 'Жирный',
|
||
italic: 'Курсив',
|
||
strike: 'Зачёркнутый',
|
||
inlineCode: 'Встроенный код',
|
||
heading1: 'Заголовок 1',
|
||
heading2: 'Заголовок 2',
|
||
heading3: 'Заголовок 3',
|
||
bulletList: 'Маркированный список',
|
||
orderedList: 'Нумерованный список',
|
||
taskList: 'Список задач',
|
||
blockquote: 'Цитата',
|
||
codeBlock: 'Блок кода',
|
||
link: 'Вставить ссылку',
|
||
image: 'Вставить изображение',
|
||
table: 'Вставить таблицу',
|
||
horizontalRule: 'Горизонтальная линия'
|
||
},
|
||
view: {
|
||
toggleToEdit: 'Переключить в режим редактирования',
|
||
toggleToPreview: 'Переключить в режим предпросмотра',
|
||
editLabel: 'Вернуться к редактированию',
|
||
previewLabel: 'Предпросмотр'
|
||
},
|
||
preview: {
|
||
empty: 'Пока нет содержимого'
|
||
},
|
||
title: {
|
||
edit: 'Редактировать Markdown-знание',
|
||
create: 'Создать Markdown-знание'
|
||
},
|
||
description: 'Пишите знания в Markdown с предпросмотром в реальном времени',
|
||
section: {
|
||
basic: 'Основная информация',
|
||
content: 'Содержимое'
|
||
},
|
||
labels: {
|
||
currentKnowledgeBase: 'Текущая база знаний'
|
||
},
|
||
defaultTitlePrefix: 'Новый документ',
|
||
error: {
|
||
fetchDetailFailed: 'Не удалось получить сведения о знании',
|
||
saveFailed: 'Не удалось сохранить, попробуйте позже'
|
||
},
|
||
warning: {
|
||
selectKnowledgeBase: 'Пожалуйста, выберите целевую базу знаний',
|
||
enterTitle: 'Введите заголовок знания',
|
||
enterContent: 'Введите содержимое знания',
|
||
contentTooShort: 'Контент слишком короткий. Добавьте больше информации перед публикацией'
|
||
},
|
||
success: {
|
||
draftSaved: 'Черновик сохранён',
|
||
published: 'Знание опубликовано и начата индексация'
|
||
},
|
||
form: {
|
||
knowledgeBaseLabel: 'Целевая база знаний',
|
||
knowledgeBasePlaceholder: 'Выберите базу знаний',
|
||
titleLabel: 'Заголовок знания',
|
||
titlePlaceholder: 'Введите заголовок',
|
||
contentPlaceholder: 'Поддерживается Markdown. Используйте # заголовки, списки, блоки кода и т.д.'
|
||
},
|
||
noDocumentKnowledgeBases: 'Нет доступных баз знаний типа "документ". Пожалуйста, создайте одну сначала',
|
||
status: {
|
||
draftTag: 'Статус: Черновик',
|
||
publishedTag: 'Статус: Опубликовано',
|
||
lastUpdated: 'Последнее обновление: {time}'
|
||
},
|
||
loading: {
|
||
content: 'Загрузка содержимого...',
|
||
preparing: 'Подготовка редактора...'
|
||
},
|
||
actions: {
|
||
cancel: 'Отмена',
|
||
saveDraft: 'Сохранить черновик',
|
||
publish: 'Опубликовать'
|
||
}
|
||
},
|
||
input: {
|
||
addModel: 'Добавить модель',
|
||
placeholder: 'Задайте вопрос напрямую модели',
|
||
placeholderWithContext: 'Введите вопрос, ответ будет основан на выбранных выше базах знаний/файлах',
|
||
placeholderWebOnly: 'Введите вопрос, ответ будет основан на веб-поиске',
|
||
placeholderKbAndWeb: 'Введите вопрос, ответ будет основан на базе знаний и веб-поиске',
|
||
placeholderAgent: 'Спросить {name}',
|
||
agentMode: 'Умный анализ',
|
||
normalMode: 'Быстрый ответ',
|
||
normalModeDesc: 'RAG-вопросы и ответы по базе знаний',
|
||
agentModeDesc: 'Многошаговое мышление, глубокий анализ',
|
||
agentNotReadyTooltip: 'Agent не готов. Пожалуйста, завершите настройку.',
|
||
agentNotReadyDetail: 'Agent не готов. Пожалуйста, настройте следующее: {reasons}',
|
||
sharedAgentNotReadyDetail: 'Общий agent «{agentName}» не готов (отсутствует: {reasons}). Обратитесь к администратору организации, которая поделилась agent.',
|
||
agentMissingAllowedTools: 'Разрешённые инструменты',
|
||
agentMissingSummaryModel: 'Модель беседы',
|
||
agentMissingRerankModel: 'Модель переранжирования',
|
||
goToSettings: 'Перейти к настройкам →',
|
||
webSearch: {
|
||
toggleOn: 'Включить веб-поиск',
|
||
toggleOff: 'Выключить веб-поиск',
|
||
notConfigured: 'Веб-поиск не настроен'
|
||
},
|
||
knowledgeBase: 'База знаний',
|
||
knowledgeBaseWithCount: 'База знаний ({count})',
|
||
notConfigured: 'Не настроено',
|
||
sharedAgentModelLabel: 'Модель из общего агента',
|
||
model: 'Модель',
|
||
remote: 'Удалённая',
|
||
noModel: 'Нет доступных моделей',
|
||
stopGeneration: 'Остановить генерацию',
|
||
send: 'Отправить',
|
||
thinkingLabel: 'Thinking:',
|
||
messages: {
|
||
enterContent: 'Сначала введите содержимое!',
|
||
selectKnowledge: 'Пожалуйста, выберите базу знаний!',
|
||
replying: 'Ответ формируется, попробуйте позже!',
|
||
agentSwitchedOn: 'Переключено в Agent режим',
|
||
agentSwitchedOff: 'Переключено в обычный режим',
|
||
agentEnabled: 'Agent режим включён',
|
||
agentDisabled: 'Agent режим отключён',
|
||
agentNotReadyDetail: 'Agent не готов. Пожалуйста, настройте следующее: {reasons}',
|
||
webSearchNotConfigured: 'Веб-поиск не настроен. Сначала выберите провайдера и настройте ключи в разделе настроек.',
|
||
webSearchEnabled: 'Веб-поиск включён',
|
||
webSearchDisabled: 'Веб-поиск выключен',
|
||
sessionMissing: 'ID сессии не существует',
|
||
messageMissing: 'Не удалось получить ID сообщения. Обновите страницу и попробуйте снова.',
|
||
stopSuccess: 'Генерация остановлена',
|
||
stopFailed: 'Не удалось остановить. Попробуйте ещё раз.',
|
||
agentSelected: 'Selected agent "{name}"'
|
||
},
|
||
customAgentNotReadyTooltip: 'Agent is not ready. Please finish configuration first.',
|
||
customAgentNotReadyDetail: 'Agent is not ready. Please configure the following: {reasons}',
|
||
customAgentMissingSummaryModel: 'Модель беседы',
|
||
customAgentMissingRerankModel: 'Модель переранжирования',
|
||
goToAgentEditor: 'Go to configure →',
|
||
builtinAgentNotReadyDetail: 'Built-in agent "{agentName}" is not ready. Please configure: {reasons}',
|
||
builtinAgentSettingName: 'Intelligent Reasoning',
|
||
builtinNormalSettingName: 'Quick Q&A',
|
||
webSearchDisabledByAgent: 'Web search is disabled by the current agent',
|
||
webSearchForcedByAgent: 'Web search is enabled by the current agent and cannot be turned off',
|
||
kbLockedByAgent: 'Knowledge base configuration is locked by the current agent',
|
||
kbDisabledByAgent: 'Knowledge base is disabled by the current agent',
|
||
cannotRemoveAgentKb: 'Cannot remove knowledge base configured by agent',
|
||
agentConfiguredKb: 'Configured by agent, cannot be removed',
|
||
modelLockedByAgent: 'Model selection is locked by the current agent',
|
||
imageUploadDisabledByAgent: 'Image upload is not enabled for this agent',
|
||
goToAgentSettings: 'Go to agent settings'
|
||
},
|
||
preview: {
|
||
tab: 'Предпросмотр',
|
||
loading: 'Загрузка предпросмотра документа...',
|
||
loadFailed: 'Не удалось загрузить предпросмотр документа',
|
||
retry: 'Повторить',
|
||
unsupported: 'Этот тип файла не поддерживает онлайн-просмотр',
|
||
unsupportedHint: 'Скачайте файл и откройте локально',
|
||
fullscreen: 'Полноэкранный режим',
|
||
exitFullscreen: 'Выйти из полноэкранного режима',
|
||
audioLoading: 'Загрузка аудио…',
|
||
audioNotSupported: 'Ваш браузер не поддерживает воспроизведение аудио',
|
||
},
|
||
commandPalette: {
|
||
placeholder: 'Поиск по базам знаний, файлам, диалогам…',
|
||
searching: 'Поиск…',
|
||
clearRecent: 'Очистить',
|
||
retrieval: 'Параметры поиска',
|
||
untitledSession: 'Безымянный диалог',
|
||
scope: {
|
||
placeholder: 'Поиск в этой базе знаний…',
|
||
remove: 'Убрать область (Backspace)',
|
||
},
|
||
group: {
|
||
chunks: 'Файлы базы знаний',
|
||
messages: 'Сообщения',
|
||
kbs: 'Базы знаний',
|
||
agents: 'Агенты',
|
||
sessionsByTitle: 'Диалоги (по названию)',
|
||
commands: 'Команды',
|
||
recent: 'Недавние',
|
||
quickActions: 'Быстрые действия',
|
||
},
|
||
match: {
|
||
vector: 'Вектор',
|
||
keyword: 'Ключ.',
|
||
},
|
||
quick: {
|
||
newChat: 'Новый диалог',
|
||
knowledgeBases: 'Открыть базы знаний',
|
||
agents: 'Открыть агенты',
|
||
organizations: 'Открыть общие пространства',
|
||
settings: 'Открыть настройки',
|
||
productTour: 'Обучение',
|
||
},
|
||
empty: {
|
||
noResults: 'Совпадений не найдено',
|
||
askAi: 'Спросить ИИ',
|
||
adjustRetrieval: 'Настроить поиск',
|
||
},
|
||
hotkey: {
|
||
select: 'Навигация',
|
||
enter: 'Открыть',
|
||
cmdNumber: 'Быстрый переход',
|
||
cmdEnter: 'Начать диалог',
|
||
esc: 'Закрыть',
|
||
},
|
||
},
|
||
knowledgeSearch: {
|
||
title: 'Поиск',
|
||
subtitle: 'Семантический поиск по базам знаний и истории сообщений для быстрого нахождения релевантного контента',
|
||
tabKnowledge: 'Поиск по знаниям',
|
||
tabMessages: 'Поиск по сообщениям',
|
||
placeholder: 'Введите поисковый запрос...',
|
||
messagePlaceholder: 'Поиск по истории сообщений...',
|
||
searchBtn: 'Поиск',
|
||
selectKb: 'Выбрать базу знаний',
|
||
allKb: 'Все базы знаний',
|
||
noResults: 'Результаты не найдены',
|
||
resultCount: 'Найдено {count} результатов',
|
||
score: 'Релевантность',
|
||
matchType: 'Тип совпадения',
|
||
matchTypeVector: 'Векторное совпадение',
|
||
matchTypeKeyword: 'Совпадение по ключевым словам',
|
||
untitledSession: 'Без названия',
|
||
matchCount: 'совпадений',
|
||
emptyHint: 'Введите ключевые слова для поиска релевантного контента в базах знаний',
|
||
messageEmptyHint: 'Введите ключевые слова для поиска по истории сообщений',
|
||
searching: 'Поиск...',
|
||
source: 'Источник',
|
||
chunk: 'фрагм.',
|
||
expand: 'Развернуть',
|
||
collapse: 'Свернуть',
|
||
fileCount: 'файлов',
|
||
viewDetail: 'Подробнее',
|
||
startChat: 'Начать чат',
|
||
chatWithFile: 'Чат',
|
||
newChatTitle: 'Поиск: {query}'
|
||
},
|
||
tools: {
|
||
multiKbSearch: 'Кросс-КБ поиск',
|
||
knowledgeSearch: 'Поиск по базе знаний',
|
||
grepChunks: 'Поиск по текстовому шаблону',
|
||
getChunkDetail: 'Получить детали фрагмента',
|
||
listKnowledgeChunks: 'Список фрагментов знаний',
|
||
listKnowledgeBases: 'Список баз знаний',
|
||
getDocumentInfo: 'Получить информацию о документе',
|
||
queryKnowledgeGraph: 'Запрос к графу знаний',
|
||
think: 'Глубокое размышление',
|
||
todoWrite: 'Составить план'
|
||
},
|
||
vectorStoreBadge: {
|
||
systemDefault: 'System default',
|
||
sharedFromOrg: 'Shared from another organization',
|
||
unknownStore: 'Unknown store',
|
||
unavailable: 'Unavailable',
|
||
},
|
||
kbSettings: {
|
||
vectorStore: {
|
||
title: 'Vector Store',
|
||
description:
|
||
'Choose which vector store this knowledge base writes to. The binding is permanent — to move an existing KB to a different store, create a new KB and re-index.',
|
||
loading: 'Loading vector stores...',
|
||
engineLabel: 'Vector store',
|
||
engineDesc:
|
||
'Pick a store from the global Vector Stores configuration, or leave as System default to use the tenant-wide RETRIEVE_DRIVER engine.',
|
||
boundLabel: 'Bound vector store',
|
||
systemDefault: 'System default',
|
||
immutableHint:
|
||
'Cannot be changed after creation. To migrate later, create a new KB bound to the desired store and re-index.',
|
||
immutableEdit: 'Vector store binding cannot be changed after creation.',
|
||
unavailableHint:
|
||
'The bound vector store is currently unavailable; check its connection configuration in Settings → Vector Stores.',
|
||
goGlobalSettings: 'Go to Vector Store Settings',
|
||
},
|
||
storage: {
|
||
title: 'Хранилище',
|
||
description: 'Выберите хранилище файлов. Это влияет на способ хранения загруженных документов и изображений в документах. Параметры настраиваются в глобальных настройках.',
|
||
loading: 'Загрузка...',
|
||
engineLabel: 'Хранилище',
|
||
engineDesc: 'Выберите хранилище для этой базы знаний. Соответствующее хранилище должно быть настроено в глобальных настройках.',
|
||
selectPlaceholder: 'Выберите хранилище',
|
||
notConfigured: 'Не настроено',
|
||
unavailable: 'Недоступно',
|
||
lockedHint: 'В базе знаний уже есть файлы. Невозможно сменить хранилище. Для смены сначала удалите все файлы.',
|
||
changeWarning: 'Смена хранилища влияет только на новые загружаемые файлы. Существующие файлы по-прежнему будут читаться из прежнего хранилища, но некоторые старые файлы могут стать недоступными.',
|
||
goGlobalSettings: 'Перейти в глобальные настройки',
|
||
engineLocal: 'Локальное хранилище',
|
||
engineLocalDesc: 'Для однонодового развёртывания, простое и лёгкое',
|
||
engineMinioDesc: 'S3-совместимое, для внутренних сетей или частного облака',
|
||
engineCos: 'Tencent Cloud COS',
|
||
engineCosDesc: 'Публичное облако, поддержка CDN-ускорения',
|
||
engineTos: 'Volcengine TOS',
|
||
engineTosDesc: 'Объектное хранилище Volcengine, для публичного облака',
|
||
engineS3: 'AWS S3',
|
||
engineS3Desc: 'AWS S3 и совместимые хранилища, для публичного облака',
|
||
engineOss: 'Alibaba Cloud OSS',
|
||
engineOssDesc: 'Объектное хранилище Alibaba Cloud, для публичного облака',
|
||
engineKs3: 'Kingsoft Cloud KS3',
|
||
engineKs3Desc: 'Объектное хранилище Kingsoft Cloud, для публичного облака',
|
||
engineObs: 'Huawei Cloud OBS',
|
||
engineObsDesc: 'Объектное хранилище Huawei Cloud, для публичного облака',
|
||
},
|
||
parser: {
|
||
title: 'Парсер',
|
||
description: 'Выберите парсеры для разных типов файлов. Для ненастроенных типов будет использован встроенный парсер.',
|
||
loading: 'Загрузка...',
|
||
noEngineAvailable: 'Нет доступных парсеров или сервис парсинга не настроен.',
|
||
default: 'По умолчанию',
|
||
unavailable: 'Недоступен',
|
||
goSettings: 'Перейти в настройки →',
|
||
goConfig: 'Перейти к настройке →',
|
||
noEngine: 'Нет доступных парсеров',
|
||
fileTypePdf: 'Документы PDF',
|
||
fileTypeWord: 'Документы Word',
|
||
fileTypePpt: 'Презентации',
|
||
fileTypeExcel: 'Таблицы Excel',
|
||
fileTypeEbook: 'Электронные книги',
|
||
fileTypeWebArchive: 'Веб-архивы',
|
||
fileTypeCsv: 'Файлы CSV',
|
||
fileTypeText: 'Текстовые файлы',
|
||
fileTypeJson: 'Файлы JSON',
|
||
fileTypeImage: 'Изображения',
|
||
fileTypeAudiovisual: 'Аудио',
|
||
engines: {
|
||
builtin: {
|
||
name: 'Встроенный',
|
||
desc: 'Встроенный парсер DocReader (docx/pdf/xlsx и другие сложные форматы)',
|
||
},
|
||
simple: {
|
||
name: 'Simple',
|
||
desc: 'Простой формат и анализ изображений (внешний сервис не требуется)',
|
||
},
|
||
mineru: {
|
||
name: 'MinerU',
|
||
desc: 'Самостоятельно развёрнутый сервис MinerU',
|
||
},
|
||
mineru_cloud: {
|
||
name: 'MinerU Cloud',
|
||
desc: 'MinerU Cloud API',
|
||
},
|
||
paddleocr_vl: {
|
||
name: 'PaddleOCR-VL',
|
||
desc: 'Самостоятельно развёрнутый сервис PaddleOCR-VL',
|
||
},
|
||
paddleocr_vl_cloud: {
|
||
name: 'PaddleOCR-VL Cloud',
|
||
desc: 'PaddleOCR-VL Cloud API',
|
||
},
|
||
weknoracloud: {
|
||
name: 'WeKnora Cloud',
|
||
desc: 'Парсинг документов через WeKnora Cloud',
|
||
},
|
||
markitdown: {
|
||
name: 'MarkItDown',
|
||
desc: 'Конвертер Microsoft MarkItDown (PDF/Office/HTML и др.)',
|
||
},
|
||
opendataloader: {
|
||
name: 'OpenDataLoader',
|
||
desc: 'Парсер OpenDataLoader PDF (анализ вёрстки; требуются Java 11+ и opendataloader-pdf)',
|
||
},
|
||
},
|
||
},
|
||
supportedFormats: 'Поддерживаемые форматы'
|
||
},
|
||
agentStream: {
|
||
toolApproval: {
|
||
banner: 'Этот инструмент MCP требует подтверждения. Проверьте параметры.',
|
||
waiting: 'Ожидание проверки · {target}',
|
||
targetWithTool: '{service} › {tool}',
|
||
titleWithTarget: 'Проверка · {service} › {tool}',
|
||
resolvedApproved: 'Подтверждено · {target}',
|
||
resolvedRejected: 'Отклонено · {target}',
|
||
service: 'Сервис',
|
||
tool: 'Инструмент',
|
||
argsLabel: 'Аргументы',
|
||
argsModified: 'Изменено',
|
||
countdown: 'Осталось около {seconds} с',
|
||
countdownShort: '{seconds} с',
|
||
approve: 'Подтвердить и выполнить',
|
||
reject: 'Отклонить',
|
||
approvedTag: 'Подтверждено',
|
||
rejectedTag: 'Отклонено',
|
||
invalidJson: 'Некорректный JSON',
|
||
submitted: 'Отправлено',
|
||
submitFailed: 'Ошибка отправки',
|
||
userRejected: 'Отклонено пользователем',
|
||
},
|
||
mcpOAuth: {
|
||
banner: 'Этот MCP-сервис требует авторизации OAuth перед использованием',
|
||
waiting: 'Ожидание авторизации · {target}',
|
||
targetWithTool: '{service} › {tool}',
|
||
titleWithService: 'OAuth · {service}',
|
||
titleWithTool: 'OAuth · {service} › {tool}',
|
||
resolvedAuthorized: 'Авторизовано · {target}',
|
||
resolvedTimedOut: 'Тайм-аут · {target}',
|
||
resolvedCanceled: 'Пропущено · {target}',
|
||
desc: 'Авторизация откроет новое окно для входа. После успешной авторизации вызов инструмента продолжится автоматически.',
|
||
authorize: 'Авторизовать',
|
||
skip: 'Пропустить',
|
||
countdown: 'Осталось примерно {seconds}с',
|
||
countdownShort: '{seconds} с',
|
||
authorizedTag: 'Авторизовано',
|
||
timedOutTag: 'Время авторизации истекло',
|
||
canceledTag: 'Отменено',
|
||
authorizedToast: 'Авторизация успешна, продолжаем',
|
||
startFailed: 'Не удалось начать авторизацию',
|
||
resumeFailed: 'Не удалось возобновить выполнение, повторите попытку',
|
||
skipFailed: 'Не удалось пропустить, повторите попытку',
|
||
},
|
||
tools: {
|
||
searchKnowledge: 'Поиск по базе знаний',
|
||
grepChunks: 'Поиск по текстовому шаблону',
|
||
webSearch: 'Веб-поиск',
|
||
webFetch: 'Загрузка веб-страницы',
|
||
getDocumentInfo: 'Получение информации о документе',
|
||
listKnowledgeChunks: 'Список фрагментов знаний',
|
||
getRelatedDocuments: 'Поиск связанных документов',
|
||
getDocumentContent: 'Получение содержимого документа',
|
||
wikiReadSourceDoc: 'Читать исходный документ',
|
||
todoWrite: 'Управление планами',
|
||
knowledgeGraphExtract: 'Извлечение графа знаний',
|
||
thinking: 'Размышление',
|
||
imageAnalysis: 'Анализ изображения',
|
||
queryUnderstand: 'Понимание запроса',
|
||
queryKnowledgeGraph: 'Запрос графа знаний',
|
||
readSkill: 'Чтение навыка',
|
||
executeSkillScript: 'Выполнение скрипта навыка',
|
||
dataAnalysis: 'Анализ данных',
|
||
dataSchema: 'Структура данных',
|
||
databaseQuery: 'Запрос к базе данных'
|
||
},
|
||
summary: {
|
||
searchKb: 'Поиск по базе знаний <strong>{count}</strong> раз(а)',
|
||
thinking: 'Размышление <strong>{count}</strong> раз(а)',
|
||
callTool: 'Вызов {name}',
|
||
callTools: 'Вызов инструментов {names}',
|
||
intermediateSteps: '<strong>{count}</strong> промежуточных шагов',
|
||
separator: ', ',
|
||
comma: ', '
|
||
},
|
||
citation: {
|
||
loading: 'Загрузка...',
|
||
notFound: 'Содержимое не найдено',
|
||
loadFailed: 'Ошибка загрузки',
|
||
chunkId: 'ID фрагмента',
|
||
noKbForWiki: 'Не удалось определить связанную базу знаний, Wiki не может быть открыта',
|
||
},
|
||
toolSummary: {
|
||
getDocument: 'Получить документ: {title}',
|
||
document: 'Документ',
|
||
listChunks: 'Просмотр {title}',
|
||
deepThinking: 'Глубокое размышление'
|
||
},
|
||
plan: {
|
||
inProgress: 'В процессе',
|
||
pending: 'Ожидание',
|
||
completed: 'Завершено'
|
||
},
|
||
search: {
|
||
noResults: 'Совпадения не найдены',
|
||
foundResultsFromFiles: 'Найдено {count} результат(ов) из {files} файл(ов)',
|
||
foundResults: 'Найдено {count} результат(ов)',
|
||
webResults: 'Найдено {count} результат(ов) веб-поиска',
|
||
grepSummary: 'Найдено фрагментов: {chunks}, в документах: {docs}',
|
||
},
|
||
grepResults: {
|
||
chunkHits: '{count} фрагм.',
|
||
keywordHits: '{count} вх.',
|
||
titleMatch: 'заголовок',
|
||
},
|
||
knowledgeChunksList: {
|
||
chunkRange: 'Загружено {fetched} / {total} фрагментов',
|
||
page: 'Стр. {page}, по {pageSize} на странице',
|
||
},
|
||
ragPipeline: {
|
||
understanding: 'Анализ запроса...',
|
||
understandDone: 'Запрос понят',
|
||
searching: 'Поиск в базе знаний...',
|
||
searchingWithQuery: 'Поиск в базе знаний: «{query}»',
|
||
searchDone: 'Поиск завершён',
|
||
searchDoneWithQuery: 'Поиск в базе знаний: «{query}»',
|
||
},
|
||
toolStatus: {
|
||
calling: 'Вызов {name}...',
|
||
searchKb: 'Поиск по базе знаний',
|
||
searchKbFailed: 'Ошибка поиска по базе знаний',
|
||
webSearch: 'Веб-поиск',
|
||
webSearchFailed: 'Ошибка веб-поиска',
|
||
grepSearch: 'Поиск по ключевым словам',
|
||
grepSearchFailed: 'Ошибка поиска по ключевым словам',
|
||
getDocInfo: 'Получение информации о документе',
|
||
getDocInfoFailed: 'Ошибка получения информации о документе',
|
||
thinkingDone: 'Размышление завершено',
|
||
thinkingFailed: 'Ошибка размышления',
|
||
updateTodos: 'Обновление списка задач',
|
||
updateTodosFailed: 'Ошибка обновления списка задач',
|
||
imageAnalyzing: 'Анализ изображения...',
|
||
imageAnalysisDone: 'Анализ изображения завершён',
|
||
imageAnalysisFailed: 'Ошибка анализа изображения',
|
||
queryUnderstanding: 'Анализ запроса...',
|
||
queryUnderstandDone: 'Запрос понят',
|
||
called: 'Вызван {name}',
|
||
calledFailed: 'Ошибка вызова {name}'
|
||
},
|
||
copy: {
|
||
emptyContent: 'Текущий ответ пуст, копирование невозможно',
|
||
success: 'Скопировано в буфер обмена',
|
||
failed: 'Ошибка копирования, скопируйте вручную'
|
||
},
|
||
saveToKb: {
|
||
emptyContent: 'Текущий ответ пуст, сохранение в базу знаний невозможно',
|
||
editorOpened: 'Редактор открыт, выберите базу знаний и сохраните'
|
||
}
|
||
},
|
||
agentEditor: {
|
||
builtinHint: 'Это встроенный агент. Имя и описание нельзя изменить, но можно настроить параметры конфигурации.',
|
||
navGroups: {
|
||
basic: 'Основное',
|
||
knowledge: 'Знания и поиск',
|
||
capability: 'Расширения',
|
||
integration: 'Публикация и интеграция',
|
||
},
|
||
placeholders: {
|
||
available: 'Доступные переменные: ',
|
||
clickToInsert: '(нажмите для вставки)',
|
||
hint: "(нажмите для вставки или введите {'{{'} для списка)"
|
||
},
|
||
intentPrompts: {
|
||
title: 'Промпты намерений',
|
||
sectionDesc: 'Настройте системные промпты для разных намерений запроса; по умолчанию используются шаблоны системы',
|
||
intentLabel: 'Намерение',
|
||
intentDescription: 'Выберите системный промпт для редактирования',
|
||
promptPlaceholder: 'Введите пользовательский системный промпт...',
|
||
customized: 'Настроено',
|
||
empty: 'Нет доступных шаблонов намерений',
|
||
},
|
||
promptNav: {
|
||
ariaLabel: 'Оглавление промптов',
|
||
itemCount: '{n} разделов',
|
||
groupCore: 'Основные промпты',
|
||
groupConversation: 'Понимание диалога',
|
||
groupFallback: 'Запасной ответ при поиске',
|
||
system: 'Системный промпт',
|
||
context: 'Шаблон контекста',
|
||
intent: 'Промпты намерений',
|
||
rewriteSystem: 'Перефраз · Система',
|
||
rewriteUser: 'Перефраз · Пользователь',
|
||
fallback: 'Запасной ответ',
|
||
},
|
||
selection: {
|
||
all: 'Все',
|
||
selected: 'Выбранные',
|
||
disabled: 'Отключено'
|
||
},
|
||
desc: {
|
||
name: 'Задайте легко узнаваемое имя для агента',
|
||
description: 'Кратко опишите назначение и особенности агента',
|
||
systemPrompt: 'Пользовательский системный промпт для определения поведения и роли агента',
|
||
leaveEmptyDefault: '(оставьте пустым для системного значения по умолчанию)',
|
||
contextTemplate: 'Определите формат передачи найденного контента модели',
|
||
model: 'Выберите LLM, используемую агентом',
|
||
temperature: 'Контроль случайности выхода: 0 — наиболее детерминированный, 1 — наиболее случайный',
|
||
maxTokens: 'Максимальное количество токенов в ответе модели',
|
||
thinking: 'Включить расширенное мышление модели (требуется поддержка модели)',
|
||
conversationSection: 'Настройка параметров многооборотного диалога и перефразирования вопросов',
|
||
multiTurn: 'При включении сохраняется контекст истории диалога',
|
||
historyRounds: 'Количество последних раундов диалога для сохранения в контексте',
|
||
rewrite: 'Автоматическое перефразирование вопросов в многооборотном диалоге для разрешения ссылок и дополнения',
|
||
queryUnderstandModel: 'Модель для понимания запроса (перефразирование и распознавание намерения). Пустое значение — использовать основную модель чата.',
|
||
rewriteSystemPrompt: 'Системный промпт для перефразирования вопросов (пустое = по умолчанию)',
|
||
rewriteUserPrompt: 'Шаблон пользовательского промпта для перефразирования (пустое = по умолчанию)',
|
||
selectTools: 'Выберите инструменты, доступные агенту',
|
||
maxIterations: 'Максимальное количество шагов рассуждения при выполнении задач',
|
||
kbScope: 'Выберите область баз знаний, доступных агенту',
|
||
webSearch: 'При включении агент может искать информацию в интернете',
|
||
webSearchProvider: 'Укажите поисковый движок для этого агента. Если оставить пустым, будет использоваться движок по умолчанию',
|
||
webSearchMaxResults: 'Максимальное количество результатов на один поиск',
|
||
webFetchEnabled: 'Автоматически загружать полное содержимое лучших страниц после Rerank для повышения качества ответов',
|
||
webFetchTopN: 'Максимальное количество страниц для загрузки полного содержимого после Rerank',
|
||
retrievalSection: 'Настройка поиска, ранжирования и стратегии приоритета FAQ',
|
||
queryExpansion: 'Автоматическое расширение поисковых запросов для улучшения полноты',
|
||
embeddingTopK: 'Максимальное количество результатов векторного поиска',
|
||
keywordThreshold: 'Минимальная оценка релевантности для поиска по ключевым словам',
|
||
vectorThreshold: 'Минимальная оценка сходства для векторного поиска',
|
||
rerankTopK: 'Максимальное количество результатов после переранжирования',
|
||
rerankThreshold: 'Минимальная оценка релевантности для переранжирования',
|
||
fallbackStrategy: 'Действие при отсутствии релевантного контента в базе знаний',
|
||
fallbackResponse: 'Фиксированный текст при невозможности ответить',
|
||
fallbackPrompt: 'Промпт для генерации ответа модели, когда ответ не найден в базе знаний'
|
||
},
|
||
tools: {
|
||
thinking: 'Размышление',
|
||
thinkingDesc: 'Динамический инструмент рефлексивного решения проблем',
|
||
todoWrite: 'Планирование',
|
||
todoWriteDesc: 'Создание структурированных исследовательских планов',
|
||
grepChunks: 'Поиск по ключевым словам',
|
||
grepChunksDesc: 'Быстрый поиск документов и фрагментов с определёнными ключевыми словами',
|
||
knowledgeSearch: 'Семантический поиск',
|
||
knowledgeSearchDesc: 'Понимание вопросов и поиск семантически связанного контента',
|
||
listChunks: 'Просмотр фрагментов документа',
|
||
listChunksDesc: 'Получение полного содержимого фрагментов документа',
|
||
queryGraph: 'Запрос графа знаний',
|
||
queryGraphDesc: 'Запрос связей из графа знаний',
|
||
getDocInfo: 'Информация о документе',
|
||
getDocInfoDesc: 'Просмотр метаданных документа',
|
||
dbQuery: 'Запрос к базе данных',
|
||
dbQueryDesc: 'Запрос информации из базы данных',
|
||
dataAnalysis: 'Анализ данных',
|
||
dataAnalysisDesc: 'Понимание файлов данных и проведение анализа',
|
||
dataSchema: 'Схема данных',
|
||
dataSchemaDesc: 'Получение метаинформации табличных файлов',
|
||
requiresKb: '(требуется настройка базы знаний)',
|
||
requiresRagKb: '(требуется база знаний с включённым векторным/ключевым индексом)',
|
||
requiresWikiKb: '(требуется база знаний с включённой Wiki)',
|
||
// Wiki чтение
|
||
wikiSearch: 'Поиск по Wiki',
|
||
wikiSearchDesc: 'Поиск страниц Wiki по ключевым словам / семантике',
|
||
wikiReadPage: 'Читать страницу Wiki',
|
||
wikiReadPageDesc: 'Прочитать полное содержимое указанной Wiki-страницы',
|
||
wikiReadSourceDoc: 'Читать исходный документ',
|
||
wikiReadSourceDocDesc: 'Глубокое чтение исходных документов, на которых построена Wiki-страница',
|
||
wikiFlagIssue: 'Отметить проблему в Wiki',
|
||
wikiFlagIssueDesc: 'Отметить фактические ошибки или конфликты слияния',
|
||
// Wiki редактирование (разрушительное)
|
||
wikiWritePage: 'Создать/перезаписать Wiki',
|
||
wikiWritePageDesc: 'Создать новую или полностью перезаписать существующую страницу',
|
||
wikiReplaceText: 'Заменить текст в Wiki',
|
||
wikiReplaceTextDesc: 'Заменить конкретный текст на Wiki-странице',
|
||
wikiRenamePage: 'Переименовать Wiki',
|
||
wikiRenamePageDesc: 'Переименовать страницу Wiki и автоматически обновить перекрёстные ссылки',
|
||
wikiDeletePage: 'Удалить Wiki',
|
||
wikiDeletePageDesc: 'Удалить страницу Wiki и автоматически очистить битые ссылки',
|
||
// Wiki проверки
|
||
wikiReadIssue: 'Просмотр проблемы Wiki',
|
||
wikiReadIssueDesc: 'Просмотр деталей конкретной проблемы страницы Wiki',
|
||
wikiUpdateIssue: 'Обновить проблему Wiki',
|
||
wikiUpdateIssueDesc: 'Обновить статус проблемы страницы Wiki',
|
||
// Служебные (только предпросмотр)
|
||
webSearch: 'Поиск в сети',
|
||
webFetch: 'Загрузка веб-страницы',
|
||
// Группы
|
||
groupBase: 'Базовые',
|
||
groupRag: 'Поиск в базе знаний (RAG)',
|
||
groupWikiRead: 'Чтение Wiki',
|
||
groupWikiEdit: 'Редактирование Wiki',
|
||
groupWikiIssue: 'Проверка Wiki',
|
||
groupData: 'Анализ данных',
|
||
writeWarning: 'Изменяет содержимое Wiki',
|
||
dangerTag: 'Запись',
|
||
// Строка состояния
|
||
statusNoKb: 'База знаний не подключена',
|
||
statusKb: 'В области: {rag} RAG баз · {wiki} Wiki баз',
|
||
kbMetricRag: 'RAG баз',
|
||
kbMetricWiki: 'Wiki баз',
|
||
statusInactive: '{count} отмеченных инструментов не смогут работать при текущей конфигурации',
|
||
// Предпросмотр итоговых инструментов
|
||
effectiveLabel: 'Итоговые активные инструменты',
|
||
effectiveDesc: 'Рассчитано на основе текущей конфигурации — это набор инструментов, которые агент сможет вызывать после сохранения',
|
||
effectiveEmpty: 'Нет доступных инструментов — агент перейдёт к простому чату с моделью'
|
||
},
|
||
embed: {
|
||
title: 'Встраивание на веб-страницу',
|
||
description: 'Встройте агента на свою веб-страницу: посетители смогут общаться через встроенное окно чата или плавающую кнопку. Область баз знаний следует настройкам этого агента.',
|
||
},
|
||
im: {
|
||
title: 'Интеграция IM',
|
||
description: 'Подключите агента к платформам мгновенных сообщений, таким как Feishu, Slack, Telegram, DingTalk, Mattermost и QQBot',
|
||
wecom: 'WeCom',
|
||
feishu: 'Feishu',
|
||
slack: 'Slack',
|
||
telegram: 'Telegram',
|
||
dingtalk: 'DingTalk',
|
||
mattermost: 'Mattermost',
|
||
wechat: 'WeChat',
|
||
qqbot: 'QQBot',
|
||
addChannel: 'Добавить канал',
|
||
channelsTitle: 'IM-каналы',
|
||
disabled: 'Отключено',
|
||
editChannel: 'Редактировать канал',
|
||
deleteConfirm: 'Вы уверены, что хотите удалить этот канал? Это действие не может быть отменено.',
|
||
channelName: 'Имя канала',
|
||
channelNamePlaceholder: 'Введите имя для легкой идентификации',
|
||
channelNameDefaultHint: 'По умолчанию используется название платформы; можно изменить. Если оставить пустым, при сохранении подставится название платформы',
|
||
platform: 'Платформа',
|
||
mode: 'Режим подключения',
|
||
outputMode: 'Режим вывода',
|
||
outputStream: 'Стриминг',
|
||
outputFull: 'Полное выходное значение',
|
||
callbackUrl: 'URL обратного вызова',
|
||
empty: 'Нет IM-каналов',
|
||
unnamed: 'Неименованный канал',
|
||
docLink: 'Руководство по интеграции',
|
||
wecomConsole: 'Консоль WeCom',
|
||
feishuConsole: 'Платформа Feishu',
|
||
slackConsole: 'Консоль Slack API',
|
||
telegramConsole: 'Telegram BotFather',
|
||
dingtalkConsole: 'Платформа DingTalk',
|
||
dingtalkCardTemplateId: 'ID шаблона карточки (необязательно)',
|
||
dingtalkCardTemplateIdHint: 'Создайте шаблон AI-карточки на open-dev.dingtalk.com/fe/card для потоковой передачи с эффектом печатной машинки',
|
||
mattermostConsole: 'Интеграции Mattermost',
|
||
qqbotConsole: 'QQ Open Platform',
|
||
qqbotAPIBaseURLHint: 'Необязательно. Оставьте пустым, чтобы использовать стандартный production API endpoint.',
|
||
qqbotGatewayURLHint: 'Необязательно. Оставьте пустым, чтобы автоматически получить общий WebSocket gateway.',
|
||
mattermostModeHint: 'Mattermost поддерживает только режим Webhook (исходящий вебхук + токен бота).',
|
||
mattermostPostToMain: 'Ответы в основной ленте канала',
|
||
mattermostPostToMainHint:
|
||
'Включено — ответы бота как новые сообщения в канале. Выключено (по умолчанию) — ответы в ветке, в основном окне только «N ответов».',
|
||
modeHint: 'Рекомендуется WebSocket — проще настроить',
|
||
consoleTip: 'для получения учётных данных',
|
||
wecomWSEndpointHint: 'Необязательно. Для приватного развёртывания WeCom укажите пользовательский адрес WebSocket. Оставьте пустым для публичного облака. Для адресов внутренней сети добавьте имя хоста в переменную SSRF_WHITELIST.',
|
||
wecomAPIBaseURLHint: 'Необязательно. Для приватного развёртывания WeCom укажите пользовательский базовый URL API. Оставьте пустым для публичного облака. Для адресов внутренней сети добавьте имя хоста в переменную SSRF_WHITELIST.',
|
||
fileKnowledgeBase: 'База знаний для файлов',
|
||
fileKnowledgeBasePlaceholder: 'Выберите базу знаний (необязательно)',
|
||
fileKnowledgeBaseHint: 'При настройке файлы, отправленные пользователями, автоматически сохраняются в эту базу знаний',
|
||
sessionMode: 'Режим сессии',
|
||
sessionModeUser: 'По пользователю (по умолчанию)',
|
||
sessionModeThread: 'По потоку',
|
||
sessionModeHint: 'Режим пользователя: отдельный диалог для каждого пользователя. /clear для нового диалога. Режим потока: отдельный диалог для каждого потока. Несколько человек могут общаться в одном потоке.',
|
||
wechatScanBind: 'Сканировать QR-код для привязки WeChat',
|
||
wechatScanning: 'Отсканируйте QR-код в WeChat',
|
||
wechatBindSuccess: 'WeChat успешно привязан',
|
||
wechatRebind: 'Перепривязать',
|
||
wechatHint: 'Требуется iOS WeChat 8.0.70+, поддерживаются только сообщения 1:1',
|
||
wechatQRExpired: 'Срок действия QR-кода истёк, получите новый',
|
||
wechatBinding: 'Привязка...',
|
||
sectionChannel: 'Информация о канале',
|
||
sectionConnection: 'Подключение',
|
||
sectionCredentials: 'Учётные данные платформы',
|
||
selectPlatform: 'Выберите платформу',
|
||
selectPlatformDesc: 'Выберите платформу обмена сообщениями для подключения',
|
||
enabled: 'Включить канал',
|
||
stepBasic: 'Основное',
|
||
stepConnection: 'Подключение',
|
||
stepKnowledge: 'Хранение файлов',
|
||
stepCredentials: 'Учётные данные',
|
||
sectionAccess: 'Доступ и вывод',
|
||
sectionSession: 'Сессии',
|
||
sectionCallback: 'URL обратного вызова',
|
||
sectionKnowledge: 'Хранение файлов',
|
||
sectionStatus: 'Статус',
|
||
},
|
||
agentType: {
|
||
label: 'Тип агента',
|
||
desc: 'Выбор пресета автоматически заполняет системный промпт, список инструментов и рекомендуемую область баз знаний.',
|
||
defaultNamePattern: 'Мой {label}',
|
||
kbMismatch: {
|
||
ragQa: 'RAG-поиск отключён',
|
||
wikiQa: 'Wiki отключён',
|
||
hybridRagWiki: 'Поиск не включён',
|
||
dataAnalysis: 'Требуется RAG (не FAQ)',
|
||
quickAnswer: 'Быстрый ответ требует RAG-поиск',
|
||
generic: 'Несовместимо с типом',
|
||
},
|
||
kbIncompatibleWarn: 'Выбранные базы знаний ({count}) несовместимы с текущим типом. Настройте вручную.'
|
||
},
|
||
mcp: {
|
||
label: 'MCP-сервисы',
|
||
desc: 'Выберите MCP-сервисы, доступные агенту',
|
||
selectLabel: 'Выбор MCP-сервисов',
|
||
selectDesc: 'Выберите MCP-сервисы для включения',
|
||
selectPlaceholder: 'Выберите MCP-сервисы'
|
||
},
|
||
llmCallTimeout: {
|
||
label: 'Таймаут вызова LLM',
|
||
desc: 'Максимальное время ожидания одного вызова LLM (в секундах). По истечении этого времени вызов прерывается',
|
||
hint: 'Оставьте пустым или 0, чтобы использовать значение по умолчанию (120 секунд)',
|
||
placeholder: 'Введите количество секунд, рекомендуемый диапазон 60-1800',
|
||
},
|
||
imageUpload: {
|
||
navLabel: 'Мультимодальность',
|
||
sectionTitle: 'Настройка мультимодальности',
|
||
sectionDesc: 'Настройте загрузку изображений/аудио и соответствующие модели VLM и ASR',
|
||
label: 'Загрузка изображений',
|
||
desc: 'Разрешить пользователям загружать изображения для мультимодальных вопросов и ответов',
|
||
vlmModel: 'Модель VLM',
|
||
vlmModelDesc: 'Визуально-языковая модель для анализа изображений',
|
||
vlmModelPlaceholder: 'Выберите модель VLM',
|
||
vlmModelRequired: 'Модель VLM обязательна при включённой загрузке изображений',
|
||
storageProvider: 'Хранилище изображений',
|
||
storageProviderDesc: 'Хранилище для загруженных изображений. Оставьте пустым для системного значения по умолчанию',
|
||
storageProviderPlaceholder: 'Выберите хранилище',
|
||
storageDefault: 'Системное значение',
|
||
notConfigured: 'Не настроено',
|
||
goStorageSettings: 'Перейти к настройкам хранилища'
|
||
},
|
||
audioUpload: {
|
||
label: 'Загрузка аудио',
|
||
desc: 'Позволяет пользователям загружать аудиофайлы в чате. Система автоматически транскрибирует их с помощью ASR-модели.',
|
||
asrModel: 'ASR-модель',
|
||
asrModelDesc: 'Модель распознавания речи. Если не настроена, аудиофайлы передаются как заглушки.',
|
||
asrModelPlaceholder: 'Выберите ASR-модель',
|
||
},
|
||
faq: {
|
||
title: 'Стратегия приоритета FAQ',
|
||
tooltip: 'Если база знаний содержит FAQ (пары вопрос-ответ), включите эту стратегию для приоритета ответов FAQ над обычными документами',
|
||
enableLabel: 'Включить приоритет FAQ',
|
||
enableDesc: 'Ответы FAQ будут приоритетнее обычных документов, повышая точность ответов',
|
||
thresholdLabel: 'Порог прямого ответа',
|
||
thresholdDesc: 'Если сходство вопроса с FAQ превышает это значение, ответ FAQ используется напрямую',
|
||
boostLabel: 'Коэффициент FAQ',
|
||
boostDesc: 'Умножение оценки релевантности FAQ на этот коэффициент для повышения ранга'
|
||
},
|
||
dataAnalysis: {
|
||
enableLabel: 'Включить анализ табличных данных',
|
||
enableDesc: 'Если извлечённые фрагменты относятся к файлу CSV/Excel, перед ответом LLM сгенерирует SQL-запрос DuckDB. Это добавляет ещё один вызов LLM и несколько секунд задержки, поэтому включайте только при действительной необходимости SQL-анализа.'
|
||
},
|
||
fallback: {
|
||
fixed: 'Фиксированный ответ',
|
||
model: 'Генерация моделью'
|
||
},
|
||
fileTypes: {
|
||
label: 'Поддерживаемые типы файлов',
|
||
desc: 'Ограничение выбираемых типов файлов. Пустое поле — все типы поддерживаются.',
|
||
allTypes: 'Все типы',
|
||
pdf: 'PDF-документы',
|
||
word: 'Документы Word (.docx/.doc)',
|
||
textLabel: 'Текст',
|
||
text: 'Текстовые файлы (.txt)',
|
||
markdown: 'Документы Markdown',
|
||
csv: 'Файлы CSV',
|
||
excel: 'Таблицы Excel (.xlsx/.xls)',
|
||
imageLabel: 'Изображения',
|
||
image: 'Изображения (.jpg/.jpeg/.png)'
|
||
}
|
||
},
|
||
faqManager: {
|
||
import: {
|
||
recentResult: 'Последние результаты импорта',
|
||
totalData: 'Данные импорта',
|
||
success: 'Успешно',
|
||
failed: 'Ошибка',
|
||
skipped: 'Пропущено',
|
||
unit: 'запись(ей)',
|
||
downloadReasons: 'Скачать причины',
|
||
appendMode: 'Режим добавления',
|
||
replaceMode: 'Режим замены',
|
||
importing: 'Импорт...',
|
||
importDone: 'Импорт завершён',
|
||
importFailed: 'Ошибка импорта',
|
||
waiting: 'Ожидание...',
|
||
importInProgress: 'Импорт выполняется, дождитесь завершения',
|
||
noFailedRecords: 'Нет записей с ошибками для скачивания'
|
||
},
|
||
retry: 'Повторить'
|
||
},
|
||
mermaid: {
|
||
diagram: 'Диаграмма',
|
||
expand: 'На весь экран',
|
||
zoomIn: 'Увеличить',
|
||
zoomOut: 'Уменьшить',
|
||
reset: 'Сброс',
|
||
download: 'Скачать изображение',
|
||
close: 'Закрыть',
|
||
downloading: 'Загрузка...'
|
||
},
|
||
ollama: {
|
||
unknown: 'Неизвестно',
|
||
today: 'Сегодня',
|
||
yesterday: 'Вчера',
|
||
daysAgo: '{days} дней назад'
|
||
},
|
||
listSpaceSidebar: {
|
||
title: 'Фильтр',
|
||
all: 'Все',
|
||
workspace: 'Рабочая область',
|
||
mine: 'Мои',
|
||
spaces: 'Доступно мне',
|
||
favorites: 'Избранное',
|
||
recents: 'Недавние'
|
||
},
|
||
listFilter: {
|
||
creator: 'Автор',
|
||
allCreators: 'Все',
|
||
createdByMe: 'Созданные мной',
|
||
createdByOthers: 'Созданные другими'
|
||
},
|
||
resourceOrigin: {
|
||
mine: 'Мои',
|
||
mineTooltip: 'Создано вами',
|
||
tenant: 'Рабочая область',
|
||
tenantTooltip: 'Создано другим участником рабочей области',
|
||
tenantTooltipWithCreator: 'Создано {creator}',
|
||
space: 'Пространство',
|
||
spaceTooltip: 'Через пространство "{space}"',
|
||
spaceTooltipWithTenant: 'Через пространство "{space}" · от {tenant}',
|
||
shared: 'Внешнее',
|
||
sharedTooltip: 'Доступ из внешнего арендатора через общее пространство'
|
||
},
|
||
promptTemplate: {
|
||
noTemplates: 'No templates available',
|
||
selectTemplate: 'Select Template',
|
||
useTemplate: 'Use Template',
|
||
resetDefault: 'Reset Default',
|
||
default: 'Default',
|
||
withKnowledgeBase: 'KB',
|
||
withWebSearch: 'Web Search',
|
||
},
|
||
organization: {
|
||
title: 'Shared Spaces',
|
||
subtitle: 'Create or join shared spaces so multiple workspaces can collaborate and share knowledge bases and agents',
|
||
createOrg: 'Create Space',
|
||
createOrgShort: 'New',
|
||
joinOrg: 'Join Space',
|
||
joinOrgShort: 'Join',
|
||
name: 'Space Name',
|
||
namePlaceholder: 'Enter space name',
|
||
nameRequired: 'Please enter space name',
|
||
avatar: 'Space Avatar',
|
||
avatarClear: 'Clear',
|
||
avatarPickerHint: 'Choose an emoji as space avatar',
|
||
description: 'Description',
|
||
descriptionPlaceholder: 'Enter space description (optional)',
|
||
noDescription: 'No description',
|
||
members: 'members',
|
||
memberCount: 'Member count',
|
||
owner: 'Creator',
|
||
inviteCode: 'Invite Code',
|
||
inviteCodePlaceholder: 'Enter invite code',
|
||
inviteCodeRequired: 'Please enter invite code',
|
||
inviteCodeTip: 'Share this invite code with others to let them join your space',
|
||
refreshInviteCode: 'Refresh Invite Code',
|
||
inviteCodeRefreshed: 'Invite code refreshed',
|
||
inviteCodeRefreshFailed: 'Failed to refresh invite code',
|
||
rbac: {
|
||
needTenantAdmin: 'Требуется роль администратора тенанта',
|
||
needTenantAdminTip: 'Для этого действия требуется роль admin или выше в текущем тенанте. Обратитесь к владельцу тенанта.',
|
||
cannotCreate: 'Недостаточно прав в текущем тенанте для создания общего пространства',
|
||
cannotJoin: 'Недостаточно прав в текущем тенанте для присоединения к общему пространству',
|
||
cannotManage: 'Недостаточно прав в текущем тенанте для управления общим пространством',
|
||
},
|
||
join: {
|
||
title: 'Join Space',
|
||
joining: 'Joining space...',
|
||
success: 'Successfully joined space!',
|
||
failed: 'Failed to join space',
|
||
noCode: 'Invite code not found',
|
||
goToOrganizations: 'Go to Spaces',
|
||
confirmTitle: 'Confirm Join Space',
|
||
confirm: 'Confirm Join',
|
||
preview: 'Preview & Join',
|
||
memberCount: '{count} members',
|
||
shareCount: '{count} shared knowledge bases',
|
||
agentShareCount: '{count} agents',
|
||
alreadyMember: 'You are already a member of this space',
|
||
invalidCode: 'Invalid invite code',
|
||
byInviteCode: 'Enter invite code',
|
||
searchSpaces: 'Search spaces',
|
||
searchSpacesDesc: 'Browse or search spaces that are open for discovery; join without an invite code',
|
||
searchSpacesPlaceholder: 'Search by space name, description or space ID',
|
||
spaceId: 'Space ID',
|
||
noSearchResult: 'No matching spaces',
|
||
noSearchableSpaces: 'No discoverable spaces yet, or try a search',
|
||
membersWithLimit: '{current}/{limit} members',
|
||
memberLimitReached: 'Full',
|
||
backToSearch: 'Back to search'
|
||
},
|
||
invite: {
|
||
loading: 'Loading...',
|
||
previewTitle: 'Join Space',
|
||
previewInfo: 'Space Overview',
|
||
inputDesc: 'Enter the invite code (or paste from an invite link) to view the space and join',
|
||
previewAction: 'View',
|
||
primaryJoin: 'Join',
|
||
invalidTitle: 'Invalid Invitation',
|
||
invalidCode: 'Invite code is invalid or expired',
|
||
previewFailed: 'Preview failed, please try again',
|
||
members: 'Members',
|
||
knowledgeBases: 'Knowledge Bases',
|
||
agents: 'Agents',
|
||
alreadyMember: 'You are already a member of this space',
|
||
confirmJoin: 'Confirm Join',
|
||
submitRequest: 'Request to Join',
|
||
requireApprovalTip: 'This space requires admin approval to join',
|
||
approvalLabel: 'Join method',
|
||
needApproval: 'Requires approval',
|
||
noApproval: 'No approval required',
|
||
defaultRoleAfterJoin: 'Default role after joining: {role}',
|
||
requestRole: 'Requested role',
|
||
selectRole: 'Select role',
|
||
messagePlaceholder: 'Optional: message (e.g. intro or reason to join)',
|
||
applicationNote: 'Application note (optional)',
|
||
joinSuccess: 'Successfully joined space!',
|
||
joinFailed: 'Failed to join, please try again',
|
||
requestSubmitted: 'Request submitted, please wait for admin approval',
|
||
requestFailed: 'Failed to submit request, please try again',
|
||
viewOrganization: 'View Space'
|
||
},
|
||
leave: 'Leave Space',
|
||
leaveConfirm: 'Are you sure you want to leave this space?',
|
||
leaveConfirmTitle: 'Leave Space',
|
||
leaveConfirmMessage: 'Are you sure you want to leave "{name}"? You will lose access to shared knowledge bases.',
|
||
leaveSuccess: 'Left space successfully',
|
||
leaveFailed: 'Failed to leave space',
|
||
deleteConfirm: 'Are you sure you want to delete this space? This action cannot be undone.',
|
||
deleteConfirmTitle: 'Delete Space',
|
||
deleteConfirmMessage: 'Are you sure you want to delete "{name}"? All members will be removed. This action cannot be undone.',
|
||
deleteSuccess: 'Space deleted',
|
||
deleteFailed: 'Failed to delete space',
|
||
createSuccess: 'Space created successfully',
|
||
createFailed: 'Failed to create space',
|
||
joinSuccess: 'Joined space successfully',
|
||
joinFailed: 'Failed to join space',
|
||
manageMembers: 'Manage Members',
|
||
noMembers: 'No members',
|
||
roleUpdated: 'Role updated',
|
||
roleUpdateFailed: 'Failed to update role',
|
||
memberRemoved: 'Member removed',
|
||
memberRemoveFailed: 'Failed to remove member',
|
||
empty: 'You have not joined any shared space yet',
|
||
emptyDesc: 'Create a space or join an existing one with an invite code',
|
||
all: 'All',
|
||
createdByMe: 'Created by me',
|
||
joinedByMe: 'Joined',
|
||
createdTag: 'Created',
|
||
joinedTag: 'Joined',
|
||
joinedLabel: 'Joined',
|
||
emptyCreated: 'You have not created any space yet',
|
||
emptyCreatedDesc: 'Click "Create Space" to create one',
|
||
emptyJoined: 'You have not joined any space yet',
|
||
emptyJoinedDesc: 'Join an existing space with an invite code',
|
||
role: {
|
||
admin: 'Admin',
|
||
editor: 'Editor',
|
||
viewer: 'Viewer'
|
||
},
|
||
detail: {
|
||
myRole: 'My Role',
|
||
removeMemberTitle: 'Remove Member',
|
||
removeMemberConfirm: 'Are you sure you want to remove "{name}"?',
|
||
removeMember: 'Remove Member',
|
||
shareKBTip: 'Go to knowledge base list, select a knowledge base and click share to share it to this space'
|
||
},
|
||
settings: {
|
||
editTitle: 'Space Settings',
|
||
detailTitle: 'Space Details',
|
||
myRoleDesc: 'Your role in this space determines your permissions',
|
||
membersDesc: 'Просмотр и управление участниками пространства и их ролями. Каждый участник — это один тенант: все пользователи внутри тенанта получают одинаковый доступ к пространству.',
|
||
sharedDesc: 'View all knowledge bases shared to this space',
|
||
noSharedKB: 'No shared knowledge bases yet',
|
||
noSharedKBTip: 'Knowledge base owners can share their knowledge bases to this space in KB settings',
|
||
sharedAgents: 'Shared Agents',
|
||
noSharedAgents: 'No shared agents yet',
|
||
sharedAgentsDesc: 'Agents shared to this space; members can use them in chat',
|
||
sharedAgentsKbHint: "Knowledge bases linked to an agent are only available (read-only) when members use that agent in a conversation (via {'@'}). They do not appear in the Knowledge Base list. To let members see or edit a knowledge base in the list, share that knowledge base to this space separately.",
|
||
sharedAgentsKbHintShort: 'Agent-linked knowledge is read-only in chat; share the KB to this space if members should see or edit it in the list.',
|
||
noSharedAgentsTip: 'Admins can share agents to this space from agent settings',
|
||
sharePermissionLabel: 'Space permission',
|
||
myPermissionLabel: 'My actual permission',
|
||
permissionCalcFormula: 'Space permission is what was set when the KB was shared to this space; my actual permission = min(space permission, my role in this space)',
|
||
permissionCalcTip: 'My actual permission = min(space permission, my role in this space). As a viewer in the space, I have at most read-only on this KB; as editor or admin, my permission is capped by the space permission.',
|
||
inviteMembers: 'Invite Members',
|
||
inviteMembersDesc: 'Invite others to join the space via code or link',
|
||
inviteLink: 'Invite Link',
|
||
inviteLinkValidity: 'Invite link validity',
|
||
inviteLinkValidityDesc: 'Validity period for newly generated invite links',
|
||
validity1Day: '1 day',
|
||
validity7Days: '7 days',
|
||
validity30Days: '30 days',
|
||
validityNever: 'Never expire',
|
||
remainingValidity: 'Expires in {n} days',
|
||
remainingValidityNever: 'Never expire',
|
||
remainingValidityExpired: 'Expired',
|
||
removeShareFromOrg: 'Remove from space',
|
||
removeShareConfirm: 'Remove "{name}" from this space? Members will no longer have access to this knowledge base.',
|
||
removeAgentShareConfirm: 'Remove "{name}" from this space? Members will no longer have access to this agent.',
|
||
removeShareSuccess: 'Removed from space',
|
||
removeShareFailed: 'Failed to remove, please try again',
|
||
requireApproval: 'Require Approval',
|
||
requireApprovalDesc: 'When enabled, new members need admin approval to join',
|
||
searchable: 'Open for search',
|
||
searchableDesc: 'When enabled, this space appears in the "Join Space" search list; others can search and request to join without an invite code',
|
||
memberLimit: 'Member limit',
|
||
memberLimitDesc: 'No new members can be added when the limit is reached; 0 means unlimited',
|
||
memberLimitPlaceholder: '0 = unlimited',
|
||
memberLimitHint: 'Current members: {count}',
|
||
joinRequests: 'Join Requests',
|
||
joinRequestsDesc: 'Review pending requests to join the space',
|
||
noPendingRequests: 'No pending requests',
|
||
pendingJoinRequestsBadge: 'Pending join requests to review',
|
||
pendingReview: 'Pending',
|
||
assignRole: 'Assign role',
|
||
approve: 'Approve',
|
||
reject: 'Reject',
|
||
approveSuccess: 'Request approved',
|
||
rejectSuccess: 'Request rejected',
|
||
reviewFailed: 'Operation failed, please try again'
|
||
},
|
||
editor: {
|
||
navBasic: 'Basic Info',
|
||
navPermissions: 'Permissions',
|
||
navJoin: 'Join Space',
|
||
basicTitle: 'Basic Information',
|
||
basicDesc: 'Set the space name and description for easy identification',
|
||
nameTip: 'Use your team or project name for easy identification',
|
||
descriptionTip: 'Describe the purpose and goals of the space',
|
||
permissionsTitle: 'Member Permissions',
|
||
permissionsDesc: 'Understand the permission scope of different roles for knowledge bases and agents in the space',
|
||
permissionFeature: 'Permission Feature',
|
||
fullAccess: 'Full Access',
|
||
editAccess: 'Edit Access',
|
||
viewAccess: 'View Only',
|
||
adminPerm1: 'Manage space settings, members, and knowledge base & agent sharing',
|
||
adminPerm2: 'Share and manage knowledge bases and agents',
|
||
adminPerm3: 'Edit shared knowledge base content',
|
||
adminPerm4: 'View and search knowledge bases',
|
||
useSharedAgentsPerm: 'Use shared agents',
|
||
shareKBPerm: 'Share knowledge bases to space',
|
||
editorPerm1: 'Edit shared knowledge base content',
|
||
editorPerm2: 'View and search knowledge bases',
|
||
editorPerm3: 'Manage space settings and members',
|
||
viewerPerm1: 'View and search knowledge bases',
|
||
viewerPerm2: 'Edit knowledge base content',
|
||
viewerPerm3: 'Manage space settings',
|
||
ownerNote: 'As the space creator, you will automatically become an admin with full permissions.',
|
||
joinTitle: 'Join Space',
|
||
joinDesc: 'Join an existing space with an invite code to access shared knowledge bases and agents',
|
||
joinIllustration: 'Enter the invite code provided by the space admin to join',
|
||
inviteCodeTip: 'The invite code is generated by space admins, please ask them for it',
|
||
howToGetCode: 'How to get an invite code?',
|
||
step1: 'Contact the admin of the space you want to join',
|
||
step2: 'Ask them to share the space invite code',
|
||
step3: 'Paste the invite code in the input field above'
|
||
},
|
||
upgrade: {
|
||
requestUpgrade: 'Request Permission Upgrade',
|
||
pending: 'Request Submitted',
|
||
dialogTitle: 'Request Permission Upgrade',
|
||
currentRole: 'Current Role',
|
||
selectRole: 'Request Role',
|
||
reason: 'Reason (Optional)',
|
||
reasonPlaceholder: 'Please briefly explain why you need higher permissions...',
|
||
submitSuccess: 'Upgrade request submitted, waiting for admin approval',
|
||
submitFailed: 'Failed to submit request',
|
||
upgradeRequest: 'Permission Upgrade'
|
||
},
|
||
addMember: {
|
||
button: 'Add Member',
|
||
dialogTitle: 'Add Member',
|
||
tip: 'Added users will immediately become space members and can access shared knowledge bases.',
|
||
tipTenant: 'Членство задаётся на уровне тенанта: после присоединения тенанта все его пользователи получают доступ к этому пространству. Результаты ниже сгруппированы по тенанту.',
|
||
searchUser: 'Select User',
|
||
searchTenant: 'Выбрать тенант',
|
||
searchPlaceholder: 'Search by username or email...',
|
||
searchTenantPlaceholder: 'Поиск по имени тенанта, пользователя или email...',
|
||
searchHint: 'Type at least 2 characters to search',
|
||
searchTenantHint: 'Введите не менее 2 символов; результаты сгруппированы по тенанту и не включают уже добавленных.',
|
||
selectRole: 'Assign Role',
|
||
confirmBtn: 'Add',
|
||
success: 'Member added successfully',
|
||
failed: 'Failed to add member',
|
||
roleHint: {
|
||
viewer: 'Can view and search',
|
||
editor: 'Can edit content',
|
||
admin: 'Full management access'
|
||
}
|
||
},
|
||
share: {
|
||
title: 'Share Knowledge Base',
|
||
shareToSpace: 'Share to space',
|
||
shareModelToSpace: 'Share "{name}" to space',
|
||
shareAgentToSpace: 'Share "{name}" to space',
|
||
modelShareDesc: 'Share this model to a space so members can use it',
|
||
agentShareDesc: 'Share this agent to a space so members can use it',
|
||
spaceAgentShareCountTip: 'Number of agents shared to this space',
|
||
selectOrg: 'Select Space',
|
||
selectOrgPlaceholder: 'Select a space to share with',
|
||
permission: 'Permission',
|
||
permissionTip: 'Editable permission allows members to modify knowledge base content, Read-only permission only allows search and Q&A',
|
||
shareSuccess: 'Knowledge base shared',
|
||
shareFailed: 'Failed to share',
|
||
unshareSuccess: 'Share cancelled',
|
||
unshareFailed: 'Failed to cancel share',
|
||
sharedTo: 'Shared to',
|
||
noShares: 'Not shared to any space yet',
|
||
sharedKnowledgeBase: 'Shared Knowledge Base',
|
||
sharedFrom: 'From',
|
||
sharedBadge: 'Shared',
|
||
permissionReadonly: 'Read-only',
|
||
permissionEditable: 'Editable',
|
||
sharedKBs: ' knowledge bases',
|
||
sharedAgents: ' agents'
|
||
}
|
||
},
|
||
datasource: {
|
||
title: 'Источники данных',
|
||
description: 'Настройте внешние источники данных для автоматической синхронизации контента',
|
||
channelsTitle: 'Источники данных',
|
||
add: 'Добавить источник',
|
||
addFirst: 'Добавить первый источник данных',
|
||
empty: 'Источники данных не настроены',
|
||
edit: 'Редактировать',
|
||
delete: 'Удалить',
|
||
deleteConfirm: 'Удалить этот источник данных? Синхронизированные знания не будут удалены.',
|
||
deleteSuccess: 'Источник данных удалён',
|
||
deleteFailed: 'Не удалось удалить',
|
||
syncNow: 'Синхронизировать',
|
||
syncTriggered: 'Задача синхронизации отправлена',
|
||
syncFailed: 'Не удалось запустить синхронизацию',
|
||
pause: 'Пауза',
|
||
resume: 'Возобновить',
|
||
paused: 'Приостановлено',
|
||
resumed: 'Возобновлено',
|
||
pauseFailed: 'Не удалось приостановить',
|
||
logs: 'Журнал',
|
||
moreActions: 'Дополнительные действия',
|
||
lastSync: 'Последняя синхронизация',
|
||
lastStatus: 'Результат',
|
||
schedule: 'Расписание',
|
||
syncModeLabel: 'Режим синхронизации',
|
||
syncMode: {
|
||
incremental: 'Инкрементная',
|
||
full: 'Полная',
|
||
},
|
||
status: {
|
||
active: 'Подключено',
|
||
paused: 'Приостановлено',
|
||
error: 'Ошибка',
|
||
},
|
||
createTitle: 'Добавить источник данных',
|
||
editTitle: 'Редактировать источник данных',
|
||
nameLabel: 'Название',
|
||
namePlaceholder: 'Введите название источника данных',
|
||
sectionBasic: 'Основная информация',
|
||
testConnection: 'Проверить подключение',
|
||
testSuccess: 'Подключение успешно',
|
||
testFailed: 'Подключение не удалось',
|
||
connected: 'Подключено',
|
||
connectionFailed: 'Подключение не удалось',
|
||
isRequired: 'обязательно для заполнения',
|
||
credentialsLabel: 'учётные данные',
|
||
resourceHint: 'Выберите пространства или папки для синхронизации',
|
||
untitled: 'Без названия',
|
||
resourceLoadFailed: 'Не удалось загрузить список ресурсов',
|
||
noResources: 'Пространства вики не найдены',
|
||
noResourcesDesc: 'Приложению требуется доступ к вики через групповой чат для получения контента',
|
||
noResourcesDesc_notion: 'Приложению требуются права доступа к странице Notion для получения контента',
|
||
retryLoadResources: 'Повторить',
|
||
guideStep1: 'Создайте групповой чат в Feishu, затем добавьте ваше приложение как бота в настройках группы',
|
||
guideStep2: 'Откройте вики "Настройки" > "Управление участниками" > "Добавить участника", найдите групповой чат и добавьте его',
|
||
guideStep3: 'Убедитесь, что роль группового чата как минимум "Может читать", затем вернитесь и нажмите Повторить',
|
||
guideStep1_notion: 'Откройте страницу или базу данных, которую хотите синхронизировать в Notion',
|
||
guideStep2_notion: 'Нажмите меню «···» в правом верхнем углу, выберите «Connect to» или «Add connections»',
|
||
guideStep3_notion: 'Найдите и выберите ваше интеграционное приложение, затем вернитесь и нажмите Повторить',
|
||
permissionDocLink: 'Документация по настройке прав доступа',
|
||
syncScheduleLabel: 'Расписание синхронизации',
|
||
conflictLabel: 'Стратегия конфликтов',
|
||
conflict: {
|
||
overwrite: 'Перезаписать',
|
||
skip: 'Пропустить существующие',
|
||
},
|
||
syncDeletions: 'Синхронизировать удаления (удалять знания при удалении в источнике)',
|
||
createAndSync: 'Создать и синхронизировать',
|
||
createSuccess: 'Источник данных создан',
|
||
createAndSyncSuccess: 'Источник данных создан, задача синхронизации поставлена в очередь',
|
||
createButSyncFailed: 'Источник данных создан, но не удалось запустить синхронизацию',
|
||
updateSuccess: 'Источник данных обновлён',
|
||
updateSuccessSyncHint: 'Источник данных обновлён. Редактирование не запускает синхронизацию автоматически; нажмите «Синхронизировать», чтобы импортировать изменения.',
|
||
saveFailed: 'Не удалось сохранить',
|
||
step: {
|
||
selectType: 'Выберите тип',
|
||
credentials: 'Учётные данные',
|
||
resources: 'Ресурсы',
|
||
strategy: 'Стратегия',
|
||
},
|
||
syncHistory: 'История синхронизации',
|
||
refreshLogs: 'Обновить журнал',
|
||
noLogs: 'Нет записей синхронизации',
|
||
logStatus: {
|
||
running: 'Синхронизация',
|
||
success: 'Успешно',
|
||
partial: 'Частично',
|
||
failed: 'Ошибка',
|
||
canceled: 'Отменено',
|
||
},
|
||
logMetric: {
|
||
total: 'Всего',
|
||
created: 'Добавлено',
|
||
updated: 'Обновлено',
|
||
deleted: 'Удалено',
|
||
skipped: 'Пропущено',
|
||
failed: 'ошибок',
|
||
},
|
||
logSummary: {
|
||
total: 'Всего запусков',
|
||
success: 'Успешно',
|
||
failed: 'Ошибки',
|
||
items: 'Элементов синхронизации',
|
||
},
|
||
logLatest: 'Последняя',
|
||
logDetail: {
|
||
startTime: 'Время начала',
|
||
endTime: 'Время окончания',
|
||
duration: 'Длительность',
|
||
},
|
||
connector: {
|
||
feishu: 'Feishu (Фэйшу)',
|
||
notion: 'Notion',
|
||
yuque: 'Yuque (Юйцюэ)',
|
||
rss: 'RSS / Atom лента',
|
||
},
|
||
connectorDesc: {
|
||
feishu: 'Синхронизация документов, таблиц и файлов из Feishu Wiki',
|
||
notion: 'Синхронизация страниц и баз данных из Notion',
|
||
yuque: 'Синхронизация документов из баз знаний Yuque',
|
||
rss: 'Синхронизация статей из лент RSS / Atom',
|
||
},
|
||
field: {
|
||
appId: 'App ID',
|
||
appSecret: 'App Secret',
|
||
integrationToken: 'Integration Token',
|
||
baseUrl: 'Base URL',
|
||
apiToken: 'API Token',
|
||
baseUrlHint: 'Оставьте пустым, чтобы использовать публичное облако Yuque https://www.yuque.com. Если вы используете Yuque Enterprise или приватное развёртывание, укажите корпоративный домен (например, https://your-company.yuque.com)',
|
||
feedUrls: 'Адреса лент',
|
||
feedUrlsHint: 'По одному адресу ленты RSS / Atom в строке; можно указать несколько.',
|
||
authHeaders: 'Пользовательские заголовки (необязательно)',
|
||
authHeadersHint: 'Для приватных лент. По одному в строке в формате «Имя: Значение», например Authorization: Bearer xxxx',
|
||
},
|
||
comingSoon: 'Скоро',
|
||
docHint: 'Получить учётные данные можно здесь:',
|
||
openDoc: 'Открыть документацию',
|
||
copyUrl: 'Копировать URL',
|
||
copied: 'Скопировано',
|
||
pleaseTestFirst: 'Сначала проверьте подключение',
|
||
prereqTitle: 'Перед использованием выполните все следующие настройки (обязательно)',
|
||
prereqBarText: 'Используете впервые? Нажмите, чтобы открыть руководство по настройке приложения Feishu',
|
||
prereqBarText_yuque: 'Используете впервые? Нажмите, чтобы открыть руководство по настройке Yuque Token',
|
||
prereqStep1Brief_yuque: 'Создайте персональный Yuque Token',
|
||
prereqStep1Desc_yuque: 'Войдите в Yuque → значок профиля → Настройки → Token → Создать новый Token',
|
||
prereqStep2Brief_yuque: 'Назначьте Token необходимые права',
|
||
prereqStep2Desc_yuque: 'Выберите как минимум repo:read и doc:read (чтение баз знаний и содержимого документов)',
|
||
prereqStep3Brief_yuque: '(Опционально) Для Enterprise укажите Base URL',
|
||
prereqStep3Desc_yuque: 'Пользователям публичного облака указывать не нужно. Для Yuque Enterprise или приватного развёртывания укажите корпоративный домен',
|
||
prereqOpenConsole_yuque: 'Перейти к настройкам Yuque Token',
|
||
prereqBotBrief: 'Добавьте приложению возможность «Бот»',
|
||
prereqBotDesc: 'Открытая платформа → Добавить возможность приложения → Бот → Создать версию и опубликовать',
|
||
prereqBotLabel: '1. Добавьте приложению возможность «Бот» (иначе приложение не будет найдено в базе знаний):',
|
||
prereqBotStep1: 'Откройте ваше приложение в Feishu Open Platform и нажмите «Добавить возможность приложения» слева',
|
||
prereqBotStep2: 'Выберите «Бот» и подтвердите добавление',
|
||
prereqBotStep3: 'Создайте новую версию и опубликуйте (или выполняйте отладку в тестовой компании)',
|
||
prereqPermBrief: 'Включите права API',
|
||
prereqPermLabel: '2. Включите для приложения следующие права API:',
|
||
prereqOpenConsole: 'Открыть настройки Feishu Open Platform',
|
||
prereqMemberBrief: 'Добавьте через групповой чат как участника базы знаний',
|
||
prereqMemberDesc: 'Создайте групповой чат → добавьте приложение как группового бота → добавьте групповой чат как участника базы знаний',
|
||
prereqMemberLabel: '3. Добавьте приложение как участника базы знаний через групповой чат (приложение нельзя найти в базе знаний напрямую):',
|
||
back: 'Назад',
|
||
next: 'Далее',
|
||
save: 'Сохранить',
|
||
schedule30min: 'Каждые 30 мин',
|
||
schedule1h: 'Каждый час',
|
||
schedule6h: 'Каждые 6 часов',
|
||
schedule12h: 'Каждые 12 часов',
|
||
schedule24h: 'Ежедневно',
|
||
scheduleHuman: {
|
||
'30min': 'Каждые 30 мин',
|
||
'1h': 'Каждый час',
|
||
'6h': 'Каждые 6 часов',
|
||
'12h': 'Каждые 12 часов',
|
||
'24h': 'Ежедневно',
|
||
},
|
||
addCard: 'Добавить источник данных',
|
||
wikiSpace: 'Пространство вики',
|
||
resourceType: {
|
||
wikiSpace: 'Пространство вики',
|
||
docCategory: 'Тег документа',
|
||
book: 'База знаний Yuque',
|
||
},
|
||
neverSynced: 'Не синхронизировано',
|
||
justNow: 'Только что',
|
||
minutesAgo: '{n} мин назад',
|
||
hoursAgo: '{n} ч назад',
|
||
daysAgo: '{n} д назад',
|
||
syncResultCreated: '+{n}',
|
||
syncResultUpdated: '~{n}',
|
||
syncResultDeleted: '-{n}',
|
||
},
|
||
integrations: {
|
||
title: 'Публикация и интеграция',
|
||
subtitle: 'Публикуйте агентов в IM, на сайтах, в браузере и AI-ассистентах',
|
||
tabs: {
|
||
im: 'IM-интеграция',
|
||
embed: 'Веб-встраивание',
|
||
chrome: 'Расширение Chrome',
|
||
claw: 'Claw Skill',
|
||
},
|
||
manageSectionTitle: 'Настройка каналов',
|
||
manageSectionDesc: 'Выберите агента, чтобы создать или изменить каналы интеграции для него',
|
||
selectAgent: 'Выберите агента',
|
||
selectAgentDesc: 'Каждый канал интеграции привязан к одному агенту. Выберите агента для настройки.',
|
||
selectAgentPlaceholder: 'Выберите агента',
|
||
selectAgentHint: 'Сначала выберите агента',
|
||
boundAgent: 'Привязанный агент',
|
||
filterByAgent: 'Фильтр по агенту',
|
||
filterByAgentWithName: 'Фильтр по агенту: {name}',
|
||
filterAllAgents: 'Все агенты',
|
||
manageChannel: 'Управлять каналом',
|
||
goToCenter: 'Открыть интеграции',
|
||
imOverview: {
|
||
title: 'Подключённые IM-каналы',
|
||
subtitle: 'Все IM-каналы агентов в этом пространстве. Быстро включайте/выключайте или настраивайте ниже.',
|
||
},
|
||
embedOverview: {
|
||
title: 'Каналы веб-встраивания',
|
||
subtitle: 'Все каналы веб-встраивания агентов в этом пространстве. Быстро включайте/выключайте или настраивайте ниже.',
|
||
empty: 'Каналы веб-встраивания ещё не настроены',
|
||
loadFailed: 'Не удалось загрузить каналы веб-встраивания',
|
||
},
|
||
agentEditor: {
|
||
label: 'Каналы публикации',
|
||
desc: 'Публикуйте агента в IM или на сайт. Управление — в разделе «Интеграции».',
|
||
manage: 'Управлять',
|
||
},
|
||
chrome: {
|
||
title: 'Помощник по знаниям',
|
||
subtitle:
|
||
'Для self-hosted WeKnora: вопросы в боковой панели, клиппинг страниц и Markdown-заметки в базы знаний прямо при просмотре.',
|
||
capabilitiesTitle: 'Возможности',
|
||
capabilities: {
|
||
qa: {
|
||
title: 'Q&A по базе знаний',
|
||
desc: 'Боковая панель, несколько БЗ, режимы быстрый/глубокий/точный — без смены вкладки.',
|
||
},
|
||
clip: {
|
||
title: 'Сбор веб-контента',
|
||
desc: 'Сохранение URL, AI-извлечение текста или выбор области на странице.',
|
||
},
|
||
notes: {
|
||
title: 'Markdown-заметки',
|
||
desc: 'Встроенный редактор Markdown с сохранением в базу знаний в один клик.',
|
||
},
|
||
shortcuts: {
|
||
title: 'Горячие клавиши',
|
||
desc: 'Настраиваемые сочетания для вопросов, панели и ускорения работы.',
|
||
},
|
||
},
|
||
scenariosTitle: 'Сценарии',
|
||
scenarios: {
|
||
research: 'Исследования',
|
||
learning: 'Учёба',
|
||
tech: 'Техдокументация',
|
||
work: 'Рабочие знания',
|
||
},
|
||
stepsTitle: 'Шаги настройки',
|
||
steps: {
|
||
api: {
|
||
title: 'Получите API-учётные данные',
|
||
desc: 'Скопируйте API Key и базовый URL в «Настройки → API-информация».',
|
||
},
|
||
port: {
|
||
title: 'Десктоп: фиксированный порт',
|
||
desc: 'В WeKnora Desktop задайте фиксированный порт API (например 37841) в API-информации.',
|
||
},
|
||
install: {
|
||
title: 'Установите расширение',
|
||
desc: 'Установите «Помощник по знаниям» из Chrome Web Store.',
|
||
},
|
||
connect: {
|
||
title: 'Подключите в расширении',
|
||
desc: 'В настройках расширения выберите режим enterprise/developer и введите API URL и API Key. Ниже — текущий URL сервиса.',
|
||
},
|
||
},
|
||
openApiSettings: 'Открыть API-информацию',
|
||
copy: 'Копировать',
|
||
copySuccess: 'URL API скопирован',
|
||
installCta: 'Chrome Web Store',
|
||
installCtaHint: 'Официальное расширение · откроется в новой вкладке',
|
||
storeMeta: 'Chrome Web Store · v1.0.0',
|
||
},
|
||
claw: {
|
||
title: 'WeKnora Skill',
|
||
subtitle:
|
||
'Импорт документов и гибридный поиск (вектор + ключевые слова) через REST API WeKnora — загрузки, URL, Markdown и поиск.',
|
||
capabilitiesTitle: 'Возможности Skill',
|
||
capabilities: {
|
||
upload: { title: 'Загрузка файлов', desc: 'PDF, Word, Excel и др. с автоматическим разбором.' },
|
||
url: { title: 'Импорт URL', desc: 'Загрузка веб-страниц по URL с отслеживанием parse_status.' },
|
||
manual: { title: 'Markdown', desc: 'Создание и правка записей в формате Markdown.' },
|
||
search: { title: 'Гибридный поиск', desc: 'hybrid-search по одной БЗ и knowledge-search по нескольким.' },
|
||
browse: { title: 'Просмотр знаний', desc: 'Списки БЗ и записей, детали и управление контентом.' },
|
||
},
|
||
stepsTitle: 'Шаги настройки',
|
||
steps: {
|
||
api: { title: 'API-учётные данные', desc: 'Скопируйте API Key и URL в «Настройки → API-информация».' },
|
||
env: {
|
||
title: 'Переменные окружения',
|
||
desc: 'Задайте WEKNORA_BASE_URL и WEKNORA_API_KEY в shell или ~/.zshrc / ~/.bashrc. Пример ниже использует текущий API URL — замените API Key на фактическое значение.',
|
||
},
|
||
install: {
|
||
title: 'Установка Skill',
|
||
desc: 'Выполните команду ниже в среде с OpenClaw CLI или следуйте инструкциям на ClawHub.',
|
||
},
|
||
verify: { title: 'Проверка', desc: 'Попросите агента вывести список БЗ или выполнить поиск.' },
|
||
},
|
||
openApiSettings: 'Открыть API-информацию',
|
||
copy: 'Копировать',
|
||
copyEnvSuccess: 'Пример переменных скопирован',
|
||
copyCmdSuccess: 'Команда установки скопирована',
|
||
ecosystemNote:
|
||
'Skill размещён на ClawHub ({\'@\'}lyingbug/weknora). Полная документация API — на странице ClawHub.',
|
||
installCta: 'Открыть ClawHub',
|
||
installCtaHint: 'Установка WeKnora Skill · откроется в новой вкладке',
|
||
hubMeta: 'ClawHub · {\'@\'}lyingbug/weknora · MIT-0',
|
||
},
|
||
},
|
||
imOverview: {
|
||
menuTitle: 'Подключённые IM',
|
||
pageTitle: 'Подключённые IM',
|
||
subtitle: 'Все IM-каналы агентов этого арендатора — переключение состояния или переход к владеющему агенту',
|
||
totalCount: 'Всего: {count}',
|
||
empty: 'В этом арендаторе пока не настроены IM-боты',
|
||
loadFailed: 'Не удалось загрузить список IM-ботов',
|
||
builtinAgent: 'Встроенный агент',
|
||
liveIndicator: 'IM-каналы работают',
|
||
detailsTitle: 'Детали IM-бота',
|
||
gotoAgentEditor: 'Открыть в редакторе агента',
|
||
outputMode: 'Режим вывода',
|
||
sessionMode: 'Режим сессии',
|
||
updatedAt: 'Обновлено',
|
||
channelId: 'ID канала',
|
||
columns: {
|
||
platform: 'Платформа',
|
||
name: 'Имя',
|
||
agent: 'Агент',
|
||
mode: 'Режим',
|
||
enabled: 'Включено',
|
||
botIdentity: 'Идентификатор бота',
|
||
createdAt: 'Создано',
|
||
},
|
||
},
|
||
credential: {
|
||
configured: 'Настроено',
|
||
unconfigured: 'Не настроено',
|
||
configure: 'Настроить',
|
||
update: 'Заменить',
|
||
remove: 'Удалить',
|
||
inputPlaceholder: 'Введите значение',
|
||
savedToast: 'Учётные данные сохранены',
|
||
saveFailed: 'Не удалось сохранить учётные данные',
|
||
removedToast: 'Учётные данные удалены',
|
||
removeFailed: 'Не удалось удалить учётные данные',
|
||
confirmRemovePrompt: 'Удалить учётные данные? Действие необратимо.',
|
||
confirmRemove: 'Подтвердить удаление',
|
||
confirmRemoveTitle: 'Удалить {field}?',
|
||
confirmRemoveBody:
|
||
'Сохранённые учётные данные будут безвозвратно удалены. Интеграции, использующие их, перестанут работать до настройки нового значения.',
|
||
},
|
||
userProfile: {
|
||
title: 'Информация о пользователе',
|
||
description: 'Просмотр базовых данных аккаунта (ID пользователя, имя, email, дата регистрации).',
|
||
},
|
||
tenantMember: {
|
||
title: 'Участники',
|
||
sectionDescription: 'Приглашайте коллег в тенант и управляйте их ролями. Добавлять и удалять участников может только Владелец.',
|
||
learnRbacGuide: 'Подробнее о RBAC',
|
||
totalCount: 'Участников: {n}',
|
||
listTitle: 'Участники пространства',
|
||
filterMatched: 'найдено: {n}',
|
||
loading: 'Загрузка участников…',
|
||
retry: 'Повторить',
|
||
empty: 'Участников пока нет. Пригласите коллегу, чтобы начать.',
|
||
emptySearch: 'Нет участников по запросу "{q}".',
|
||
searchPlaceholder: 'Поиск по имени или email',
|
||
permissions: {
|
||
title: 'Права ролей',
|
||
desc: 'Что может делать каждая роль внутри этого тенанта. Контролируется сервером; элементы UI лишь отражают правила.',
|
||
iconHint: 'Наведите курсор, чтобы открыть описание прав ролей',
|
||
manageMembers: 'Управление участниками',
|
||
manageTenantConfig: 'Изменение настроек тенанта',
|
||
manageInfra: 'Настройка моделей / векторных хранилищ / IM-каналов',
|
||
createOwnKB: 'Создание и редактирование своих БЗ и агентов',
|
||
readAll: 'Чтение содержимого тенанта',
|
||
},
|
||
columns: {
|
||
member: 'Имя и email',
|
||
username: 'Имя',
|
||
email: 'Email',
|
||
role: 'Роль',
|
||
joinedAt: 'Дата вступления',
|
||
operations: 'Действия',
|
||
},
|
||
role: {
|
||
owner: 'Владелец',
|
||
admin: 'Администратор',
|
||
contributor: 'Участник',
|
||
viewer: 'Наблюдатель',
|
||
},
|
||
add: {
|
||
button: 'Пригласить',
|
||
dialogTitle: 'Пригласить участника',
|
||
emailLabel: 'Email',
|
||
emailPlaceholder: "invitee{'@'}example.com",
|
||
roleLabel: 'Роль',
|
||
submit: 'Пригласить',
|
||
success: 'Участник добавлен',
|
||
},
|
||
remove: {
|
||
button: 'Удалить',
|
||
confirmTitle: 'Удалить участника?',
|
||
confirmBody: 'Вы уверены, что хотите удалить {name} из этого тенанта? Доступ будет отозван немедленно.',
|
||
confirm: 'Удалить',
|
||
success: 'Участник удалён',
|
||
},
|
||
leave: {
|
||
button: 'Покинуть тенант',
|
||
confirmTitle: 'Покинуть этот тенант?',
|
||
confirmBody: 'Вы потеряете доступ ко всем базам знаний и агентам в этом тенанте. Позже вас можно будет пригласить снова.',
|
||
confirm: 'Покинуть',
|
||
success: 'Вы покинули тенант',
|
||
},
|
||
roleChange: {
|
||
success: 'Роль обновлена',
|
||
},
|
||
errors: {
|
||
emailRequired: 'Укажите email',
|
||
emailFormat: 'Неверный формат email',
|
||
roleRequired: 'Выберите роль',
|
||
userNotFound: 'Пользователь с таким email не зарегистрирован. Попросите его зарегистрироваться.',
|
||
alreadyMember: 'Этот пользователь уже участник тенанта.',
|
||
lastOwner: 'Нельзя понизить, удалить или покинуть как последний Владелец. Сначала повысьте кого-то ещё до Владельца.',
|
||
notFound: 'Участник не найден.',
|
||
noTenant: 'Нет активного тенанта.',
|
||
invalidRole: 'Роль должна быть owner / admin / contributor / viewer.',
|
||
generic: 'Что-то пошло не так. Попробуйте ещё раз.',
|
||
},
|
||
tabs: {
|
||
members: 'Участники',
|
||
audit: 'Журнал аудита',
|
||
},
|
||
audit: {
|
||
tabLabel: 'Журнал аудита',
|
||
description:
|
||
'Регистрирует все изменения участников и отказы в доступе в этом тенанте, в обратном хронологическом порядке. Повторные отказы в течение минуты дедуплицируются.',
|
||
refresh: 'Обновить',
|
||
loadMore: 'Показать ещё',
|
||
end: 'Конец журнала.',
|
||
empty: 'Событий аудита пока нет.',
|
||
forbidden: 'Нет прав для просмотра журнала аудита.',
|
||
systemActor: 'Система',
|
||
requiredRole: 'Требуемая роль: {role}',
|
||
columns: {
|
||
time: 'Время',
|
||
actor: 'Инициатор',
|
||
action: 'Событие',
|
||
target: 'Цель',
|
||
path: 'Запрос',
|
||
outcome: 'Результат',
|
||
},
|
||
action: {
|
||
'rbac.member_added': 'Добавлен участник',
|
||
'rbac.member_removed': 'Удалён участник',
|
||
'rbac.member_role_changed': 'Изменение роли',
|
||
'rbac.member_left': 'Участник вышел',
|
||
'rbac.access_denied': 'Доступ запрещён',
|
||
},
|
||
outcome: {
|
||
success: 'Успех',
|
||
denied: 'Отказ',
|
||
},
|
||
expanded: {
|
||
actorId: 'ID инициатора',
|
||
targetUserId: 'ID целевого пользователя',
|
||
targetType: 'Тип цели',
|
||
targetId: 'ID цели',
|
||
details: 'Сырые детали',
|
||
},
|
||
},
|
||
},
|
||
}
|