C2MV's picture
Deploy Open Notebook to HuggingFace Spaces
bd0c393
Raw
History Blame Contribute Delete
69 kB
export const ruRU = {
common: {
search: "Поиск...",
create: "Создать",
new: "Новый",
cancel: "Отмена",
delete: "Удалить",
edit: "Редактировать",
theme: "Тема",
signOut: "Выйти",
noMatches: "Совпадений не найдено",
tryDifferentSearch: "Попробуйте другой поисковый запрос.",
light: "Светлая",
dark: "Тёмная",
system: "Системная",
loading: "Загрузка...",
note: "Заметка",
insight: "Инсайт",
newSource: "Новый источник",
newNotebook: "Новый блокнот",
newPodcast: "Новый подкаст",
language: "Язык",
english: "English",
chinese: "简体中文",
japanese: "日本語",
french: "Français",
russian: "Русский",
bengali: "বাংলা",
catalan: "Català",
spanish: "Español",
german: "Deutsch",
polish: "Polski",
source: "Источник",
notebook: "Блокнот",
podcast: "Подкаст",
quickActions: "Быстрые действия",
quickActionsDesc: "Навигация, поиск, запрос, тема",
appName: "Open Notebook",
add: "Добавить",
remove: "Удалить",
confirm: "Подтвердить",
warning: "Предупреждение",
error: "Ошибка",
success: "Успешно",
model: "Модель",
back: "Назад",
next: "Далее",
done: "Готово",
processing: "Обработка...",
creating: "Создание...",
linked: "Связано",
adding: "Добавление...",
addSelected: "Добавить выбранное",
customModel: "Своя модель",
failed: "не удалось",
current: "Текущий",
save: "Сохранить",
writeNote: "Написать заметку",
batchMode: "Пакетный режим",
optional: "Необязательно",
type: "Тип",
title: "Название",
created: "Создано {time}",
updated: "Обновлено {time}",
actions: "Действия",
noResults: "Нет результатов",
references: "Ссылки",
refreshPage: "Попробуйте обновить страницу",
refresh: "Обновить",
aiGenerated: "Сгенерировано ИИ",
human: "Человек",
unknown: "Неизвестно",
notes: "Заметки",
chat: "Чат",
deleteForever: "Удалить навсегда",
connectionError: "Ошибка подключения",
unableToConnect: "Не удаётся подключиться к API-серверу",
retryConnection: "Повторить подключение",
diagnosticInfo: "Диагностическая информация",
version: "Версия",
built: "Сборка",
apiUrl: "URL API",
frontendUrl: "URL фронтенда",
checkConsoleLogs: "Проверьте консоль браузера для подробных логов (ищите сообщения 🔧 [Config])",
yes: "Да",
no: "Нет",
saving: "Сохранение...",
description: "Описание",
saveToNote: "Сохранить в заметку",
copyToClipboard: "Копировать в буфер обмена",
close: "Закрыть",
insights: "Инсайты",
progress: "Прогресс",
deleting: "Удаление...",
created_label: "Создано",
updated_label: "Обновлено",
download: "Скачать",
saveChanges: "Сохранить изменения",
name: "Название",
default: "По умолчанию",
nameRequired: "Название обязательно",
modelConfiguration: "Настройка модели",
resetToDefault: "Сбросить по умолчанию",
reasoning: "Рассуждение",
searchTerms: "Поисковые запросы",
strategy: "Стратегия",
individualAnswers: "Отдельные ответы ({count})",
finalAnswer: "Итоговый ответ",
notebookLabel: "Блокнот: {name}",
itemNotFound: "Этот {type} не найден",
accessibility: {
transformationViews: "Представления трансформаций",
searchKB: "Спросить или найти в базе знаний",
enterQuestion: "Введите вопрос для базы знаний",
enterSearch: "Введите поисковый запрос",
searchKBBtn: "Поиск по базе знаний",
podcastViews: "Представления подкастов",
ytVideo: "Видео YouTube",
askResponse: "Ответ на запрос",
searchNotebooks: "Поиск блокнотов",
},
url: "URL",
errorDetails: "Детали ошибки",
editTransformation: "Редактировать трансформацию",
retry: "Повторить",
traditionalChinese: "繁體中文",
portuguese: "Português",
completed: "завершено",
saveSuccess: "Успешно сохранено",
contextModes: {
off: "Не включено в чат",
insights: "Только инсайты",
full: "Полное содержимое",
clickToCycle: "Нажмите для переключения",
},
clickToEdit: "Нажмите для редактирования",
},
apiErrors: {
notebookNotFound: "Блокнот не найден",
sourceNotFound: "Источник не найден",
transformationNotFound: "Трансформация не найдена",
fileUploadFailed: "Не удалось загрузить файл",
urlRequired: "URL обязателен для типа «ссылка»",
contentRequired: "Содержимое обязательно для типа «текст»",
invalidSourceType: "Недопустимый тип источника",
processingFailed: "Обработка не удалась",
failedToQueue: "Не удалось поставить в очередь обработки",
invalidSortBy: "Поле сортировки должно быть 'created' или 'updated'",
invalidSortOrder: "Порядок сортировки должен быть 'asc' или 'desc'",
accessDenied: "Доступ к файлу запрещён",
fileNotFoundOnServer: "Файл не найден на сервере",
searchFailed: "Поиск не удался",
askFailed: "Запрос не удался",
pleaseEnterQuestion: "Пожалуйста, введите вопрос",
pleaseConfigureModels: "Пожалуйста, настройте все необходимые модели",
failedToCreateSession: "Не удалось создать сессию",
failedToUpdateSession: "Не удалось обновить сессию",
failedToDeleteSession: "Не удалось удалить сессию",
failedToSendMessage: "Не удалось отправить сообщение",
unauthorized: "Неавторизованный доступ, проверьте пароль",
invalidPassword: "Неверный пароль",
embeddingModelRequired: "Для этой функции требуется модель эмбеддингов. Настройте её в разделе «Модели».",
strategyModelNotFound: "Модель стратегии не найдена",
answerModelNotFound: "Модель ответов не найдена",
finalAnswerModelNotFound: "Модель итогового ответа не найдена",
noAnswerGenerated: "Не удалось сгенерировать ответ",
genericError: "Произошла непредвиденная ошибка",
},
connectionErrors: {
apiTitle: "Не удаётся подключиться к API-серверу",
apiDesc: "API-сервер Open Notebook недоступен",
dbTitle: "Ошибка подключения к базе данных",
dbDesc: "API-сервер работает, но база данных недоступна",
troubleshooting: "Обычно это означает:",
apiUnreachable1: "API-сервер не запущен",
apiUnreachable2: "API-сервер работает по другому адресу",
apiUnreachable3: "Проблемы с сетевым подключением",
dbFailed1: "SurrealDB не запущен",
dbFailed2: "Неверные настройки подключения к базе данных",
dbFailed3: "Сетевые проблемы между API и базой данных",
quickFixes: "Быстрые решения:",
setApiUrl: "Установите переменную окружения API_URL:",
checkSurreal: "Проверьте, запущен ли SurrealDB:",
seeDocumentation: "Подробные инструкции по настройке см. в:",
docLink: "Документация Open Notebook",
showTechnical: "Показать техническую информацию",
attemptedUrl: "Использованный URL",
message: "Сообщение",
technicalDetails: "Технические детали",
stackTrace: "Стек вызовов",
retryLabel: "Повторить подключение",
retryHint: "Нажмите R или кнопку для повторной попытки",
dockerLabel: "Для Docker",
localDevLabel: "Для локальной разработки",
},
auth: {
loginTitle: "Open Notebook",
loginDesc: "Введите пароль для доступа к приложению",
passwordPlaceholder: "Пароль",
signingIn: "Вход...",
signIn: "Войти",
connectErrorHint: "Не удаётся подключиться к серверу. Проверьте, запущен ли API.",
},
navigation: {
collect: "Собрать",
process: "Обработать",
create: "Создать",
manage: "Управление",
sources: "Источники",
notebooks: "Блокноты",
askAndSearch: "Запрос и поиск",
podcasts: "Подкасты",
models: "Модели",
transformations: "Трансформации",
transformation: "Трансформация",
settings: "Настройки",
advanced: "Дополнительно",
nav: "Навигация",
language: "Переключить язык",
theme: "Тема",
ask: "Запрос",
},
notebooks: {
title: "Блокноты",
newNotebook: "Новый блокнот",
searchPlaceholder: "Поиск блокнотов...",
archived: "Архивные",
archive: "Архивировать",
unarchive: "Разархивировать",
deleteNotebook: "Удалить блокнот",
deleteNotebookDesc: "Вы уверены, что хотите удалить «{name}»? Это действие нельзя отменить.",
deleteNotebookLoading: "Загрузка предварительного просмотра удаления...",
deleteNotebookNotes: "Будет удалено заметок: {count}.",
deleteNotebookNoNotes: "Нет заметок для удаления.",
deleteNotebookExclusiveSources: "Источников только в этом блокноте: {count}.",
deleteNotebookSharedSources: "Источников, связанных с другими блокнотами (будут отвязаны): {count}.",
deleteNotebookNoSources: "В этом блокноте нет источников.",
deleteExclusiveSourcesLabel: "Удалить эксклюзивные источники",
keepExclusiveSourcesLabel: "Отвязать и сохранить",
activeNotebooks: "Активные блокноты",
archivedNotebooks: "Архивные блокноты",
notFound: "Блокнот не найден",
notFoundDesc: "Запрошенный блокнот не существует.",
updated: "Обновлено",
namePlaceholder: "Название блокнота",
addDescription: "Добавить описание...",
noNotesYet: "Пока нет заметок",
deleteNote: "Удалить заметку",
deleteNoteConfirm: "Вы уверены, что хотите удалить эту заметку? Это действие нельзя отменить.",
noteCreatedSuccess: "Заметка успешно создана",
failedToCreateNote: "Не удалось создать заметку",
noteUpdatedSuccess: "Заметка успешно обновлена",
failedToUpdateNote: "Не удалось обновить заметку",
noteDeletedSuccess: "Заметка успешно удалена",
failedToDeleteNote: "Не удалось удалить заметку",
createNew: "Создать новый блокнот",
createNewDesc: "Введите название и необязательное описание для начала.",
descPlaceholder: "Добавьте дополнительную информацию о блокноте...",
createSuccess: "Блокнот успешно создан",
updateSuccess: "Блокнот успешно обновлён",
deleteSuccess: "Блокнот успешно удалён",
},
sources: {
title: "Источники",
add: "Добавить источник",
addNew: "Добавить новый источник",
addExisting: "Добавить существующий источник",
delete: "Удалить источник",
statusPreparing: "Подготовка",
statusQueued: "В очереди",
statusProcessing: "Обработка",
statusCompleted: "Завершено",
statusFailed: "Ошибка",
statusPreparingDesc: "Подготовка к обработке",
statusQueuedDesc: "Ожидание обработки",
statusProcessingDesc: "Выполняется обработка",
statusCompletedDesc: "Успешно обработано",
statusFailedDesc: "Обработка не удалась",
failedToLoad: "Не удалось загрузить источники",
allSourcesDesc: "Просмотр всех источников. Вы можете добавлять новые или управлять существующими.",
allSources: "Все источники",
insights: "Инсайты",
yes: "Да",
no: "Нет",
loadingMore: "Загрузка...",
noSourcesYet: "Пока нет источников",
allSourcesDescShort: "Просмотр всех ваших источников.",
cannotSaveNoteNoNotebook: "Невозможно сохранить заметку: ID блокнота недоступен",
createFirstSource: "Добавьте первый источник, чтобы начать создание базы знаний.",
deleteSourceConfirm: "Вы уверены, что хотите удалить этот источник?",
deleteConfirm: "Вы уверены, что хотите удалить это?",
deleteConfirmWithTitle: "Вы уверены, что хотите удалить «{title}»?",
deleteSuccess: "Источник успешно удалён. Примечание: Чтобы удалить файл из хранилища, необходимо включить опцию «Удалить файл» в настройках.",
failedToDelete: "Не удалось удалить источник",
sourceQueued: "Источник в очереди",
sourceQueuedDesc: "Источник отправлен на фоновую обработку. Отслеживайте прогресс в списке источников.",
sourceAddedSuccess: "Источник успешно добавлен",
failedToAddSource: "Не удалось добавить источник",
sourceUpdatedSuccess: "Источник успешно обновлён",
failedToUpdateSource: "Не удалось обновить источник",
sourceDeletedSuccess: "Источник успешно удалён",
failedToDeleteSource: "Не удалось удалить источник",
fileUploadedSuccess: "Файл успешно загружен",
failedToUploadFile: "Не удалось загрузить файл",
sourceRequeued: "Повторная обработка в очереди",
sourceRequeuedDesc: "Источник поставлен в очередь на повторную обработку.",
failedToRetry: "Повтор не удался",
sourcesAddedToNotebook: "Добавлено источников в блокнот: {count}",
failedToAddSourcesToNotebook: "Не удалось добавить источники в блокнот",
partialAddSuccess: "Добавлено: {success}, не удалось: {failed}",
sourceRemovedFromNotebook: "Источник успешно удалён из блокнота",
failedToRemoveSourceFromNotebook: "Не удалось удалить источник из блокнота",
removeConfirm: "Вы уверены, что хотите удалить это из блокнота?",
checking: "Проверка...",
untitledSource: "Без названия",
maxItems: "макс. {count}",
insightsCount: "Инсайтов: {count}",
details: "Детали",
detailsTitle: "Детали источника",
content: "Содержимое",
metadata: "Метаданные",
type: {
link: "Ссылка",
file: "Файл",
text: "Текст",
},
id: "ID источника",
topics: "Темы",
embedded: "С эмбеддингом",
notEmbedded: "Без эмбеддинга",
embedContent: "Создать эмбеддинг",
embedding: "Создание эмбеддинга...",
alreadyEmbedded: "Эмбеддинг уже создан",
downloadFile: "Скачать файл",
fileUnavailable: "Файл недоступен",
preparing: "Подготовка...",
generateNewInsight: "Сгенерировать новый инсайт",
selectTransformation: "Выберите трансформацию...",
noInsightsYet: "Пока нет инсайтов",
createFirstInsight: "Создайте первый инсайт с помощью трансформации выше",
viewInsight: "Просмотреть инсайт",
deleteInsight: "Удалить инсайт",
deleteInsightConfirm: "Вы уверены, что хотите удалить этот инсайт? Это действие нельзя отменить.",
insightGenerationStarted: "Генерация инсайта запущена. Скоро он появится.",
editNote: "Редактировать заметку",
createNote: "Создать заметку",
addTitle: "Добавьте название...",
untitledNote: "Без названия",
writeNotePlaceholder: "Напишите содержимое заметки здесь...",
saveNote: "Сохранить заметку",
createNoteBtn: "Создать заметку",
createFirstNote: "Создайте первую заметку для записи идей и наблюдений.",
urlLabel: "URL(ы) *",
fileLabel: "Файл(ы) *",
textContentLabel: "Текстовое содержимое *",
enterUrlsPlaceholder: "Введите URL-адреса, по одному на строку\nhttps://example.com/article1\nhttps://example.com/article2",
batchUrlHint: "Вставьте несколько URL (по одному на строку) для пакетного импорта",
invalidUrlsDetected: "Обнаружены недопустимые URL:",
lineLabel: "Строка {line}",
fixInvalidUrls: "Исправьте или удалите недопустимые URL для продолжения",
selectMultipleFilesHint: "Выберите несколько файлов для пакетного импорта. Поддерживаются: Документы (PDF, DOC, DOCX, PPT, XLS, EPUB, TXT, MD), Медиа (MP4, MP3, WAV, M4A), Изображения (JPG, PNG), Архивы (ZIP)",
selectedFiles: "Выбранные файлы:",
textPlaceholder: "Вставьте или введите содержимое здесь...",
htmlDetected: "Обнаружено HTML-содержимое. После обработки оно будет преобразовано в Markdown.",
titlePlaceholder: "Дайте источнику понятное название",
batchTitlesAuto: "Названия будут автоматически сгенерированы для каждого источника.",
batchCommonSettings: "Одинаковые блокноты и трансформации будут применены ко всем элементам.",
urlsCount: "URL: {count}",
filesCount: "Файлов: {count}",
addSource: "Добавить источник",
notEmbeddedAlert: "Содержимое без эмбеддинга",
notEmbeddedDesc: "Для этого содержимого не создан эмбеддинг для векторного поиска. Эмбеддинг обеспечивает расширенные возможности поиска и лучшее обнаружение контента.",
openOnYoutube: "Открыть на YouTube",
urlCopied: "URL скопирован в буфер обмена",
viewSource: "Просмотреть источник",
noInsightSelected: "Инсайт не выбран",
sourceInsight: "Инсайт источника",
manageNotebooks: "Управление блокнотами",
manageNotebooksDesc: "Управление блокнотами, содержащими этот источник",
noNotebooksAvailable: "Нет доступных блокнотов",
loadFailed: "Не удалось загрузить детали источника",
removeFromNotebook: "Удалить из блокнота",
retryProcessing: "Повторить обработку",
deleteSource: "Удалить источник",
retry: "Повторить",
addExistingTitle: "Добавить существующие источники",
addExistingDesc: "Выберите существующие источники из всех блокнотов для добавления в текущий.",
searchPlaceholder: "Поиск источников по названию или URL...",
noNotebooksFound: "Блокноты не найдены.",
showingFirst100: "Показаны первые 100 источников. Используйте поиск для конкретных результатов.",
selectedCount: "Выбрано источников: {count}",
added: "Добавлено {date}",
addUrl: "Добавить URL",
uploadFile: "Загрузить файл",
enterText: "Ввести текст",
processDescription: "Содержимое будет обработано и проанализировано ИИ.",
processingFiles: "Обработка файлов...",
titleRequired: "Для текстового содержимого требуется название",
titleGenerated: "Если оставить пустым, название будет сгенерировано из содержимого",
batchCount: "{count} {type} будет обработано",
enableEmbedding: "Включить эмбеддинг для поиска",
embeddingDesc: "Позволяет находить этот источник в векторном поиске и запросах ИИ",
embeddingAlways: "Эмбеддинг включён автоматически",
embeddingAlwaysDesc: "В ваших настройках включено автоматическое создание эмбеддинга для векторного поиска.",
embeddingNever: "Эмбеддинг отключён",
embeddingNeverDesc: "В ваших настройках отключено создание эмбеддинга. Векторный поиск будет недоступен для этого источника.",
changeInSettings: "Вы можете изменить это в Настройках",
notFound: "Источник не найден",
noContent: "Содержимое недоступно",
insightsDesc: "Инсайты, сгенерированные анализом модели",
uploadedFile: "Загруженный файл",
fileUnavailableDesc: "Этот файл временно недоступен из-за проблем с хранилищем.",
batchSuccess: "Успешно создано источников: {count}",
batchFailed: "Не удалось создать все источники: {count}",
batchPartial: "Успешно: {success}, не удалось: {failed}",
submittingSource: "Отправка источника на обработку...",
processingBatchSources: "Обработка источников: {count}. Это может занять некоторое время.",
processingSource: "Источник обрабатывается. Это может занять некоторое время.",
maxFilesAllowed: "Максимальное количество файлов в пакете: {count}",
},
chat: {
sessions: "Сессии",
sessionTitlePlaceholder: "Введите название...",
noSessions: "Пока нет сессий чата",
deleteSession: "Удалить сессию",
deleteSessionDesc: "Вы уверены, что хотите удалить эту сессию чата? Это действие нельзя отменить.",
sendPlaceholder: "Задайте вопрос о ваших источниках...",
sessionsTitle: "Сессии чата",
chatWith: "Чат с {name}",
startConversation: "Начните разговор об этом {type}",
askQuestions: "Задавайте вопросы, чтобы лучше понять содержимое",
pressToSend: "Нажмите {key} для отправки",
model: "Модель",
createToStart: "Создайте сессию для начала.",
chatWithNotebook: "Чат с блокнотом",
unableToLoadChat: "Не удалось загрузить чат",
noDescription: "Без описания",
startByCreating: "Начните с создания первого блокнота для организации исследований.",
messagesCount: "Сообщений: {count}",
sessionCreated: "Сессия чата создана",
sessionUpdated: "Сессия обновлена",
sessionDeleted: "Сессия удалена",
},
searchPage: {
askAndSearch: "Запрос и поиск",
chooseAMode: "Выберите режим",
askBeta: "Запрос (бета)",
search: "Поиск",
askYourKb: "Спросите базу знаний (бета)",
askYourKbDesc: "LLM ответит на ваш запрос на основе документов в базе знаний.",
question: "Вопрос",
enterQuestionPlaceholder: "Введите ваш вопрос...",
pressToSubmit: "Нажмите Cmd/Ctrl+Enter для отправки",
noEmbeddingModel: "Вы не можете использовать эту функцию, потому что не выбрана модель эмбеддинга. Настройте её на странице «Модели».",
usingCustomModels: "Используются пользовательские модели",
usingDefaultModels: "Используются модели по умолчанию",
advanced: "Расширенные",
strategy: "Стратегия",
answer: "Ответ",
final: "Итоговый",
ask: "Спросить",
processing: "Обработка...",
saveToNotebooks: "Сохранить в блокноты",
searchDesc: "Поиск в базе знаний по ключевым словам или концепциям",
enterSearchPlaceholder: "Введите поисковый запрос...",
pressToSearch: "Нажмите Enter для поиска",
searchType: "Тип поиска",
vectorSearchWarning: "Векторный поиск требует модель эмбеддинга. Доступен только текстовый поиск.",
textSearch: "Текстовый поиск",
vectorSearch: "Векторный поиск",
searchIn: "Искать в",
searchSources: "Искать в источниках",
searchNotes: "Искать в заметках",
resultsFound: "Найдено результатов: {count}",
matches: "Совпадения ({count})",
noResultsFor: "Нет результатов для «{query}»",
notSet: "Не задано",
saveToNotebook: "Сохранить в блокнот",
saveSuccess: "Успешно сохранено в блокнот",
saveError: "Не удалось сохранить в блокнот",
selectNotebook: "Выберите блокнот",
searchAndAsk: "Поиск и запрос",
searchResultsFor: "Результаты поиска для «{query}»",
askAbout: "Спросить о «{query}»",
orSearchKb: "Или выполнить поиск по базе знаний",
saving: "Сохранение...",
advancedModelTitle: "Расширенный выбор моделей",
advancedModelDesc: "Выберите конкретные модели для каждого этапа процесса запроса",
strategyModel: "Модель стратегии",
answerModel: "Модель ответа",
finalAnswerModel: "Модель итогового ответа",
selectStrategyPlaceholder: "Выберите модель стратегии",
selectAnswerPlaceholder: "Выберите модель ответа",
selectFinalPlaceholder: "Выберите модель итогового ответа",
saveChanges: "Сохранить изменения",
processingQuestion: "Обработка вашего вопроса...",
},
podcasts: {
generateEpisode: "Сгенерировать эпизод подкаста",
generateEpisodeDesc: "Выберите контент для включения и настройте параметры эпизода перед генерацией.",
content: "Контент",
contentDesc: "Выберите блокноты, источники и заметки для этого эпизода.",
itemsSelected: "Выбрано элементов: {count}",
tokens: "Токенов: {count}",
chars: "Символов: {count}",
loadingNotebooks: "Загрузка блокнотов...",
noNotebooksFoundInPodcasts: "Блокноты не найдены. Создайте блокнот и добавьте контент перед генерацией подкаста.",
noContentSelected: "Контент не выбран",
summary: "Краткое содержание",
fullContent: "Полное содержимое",
untitledSource: "Без названия",
untitledNote: "Без названия",
episodeSettings: "Настройки эпизода",
episodeProfile: "Профиль эпизода",
episodeProfilePlaceholder: "Выберите профиль эпизода",
episodeName: "Название эпизода",
episodeNamePlaceholder: "напр., ИИ и будущее работы",
additionalInstructions: "Дополнительные инструкции",
instructionsPlaceholder: "Любые дополнительные указания для брифинга эпизода...",
generating: "Генерация...",
generate: "Сгенерировать",
hostPlaceholder: "Ведущий {number}",
profileRequired: "Требуется профиль эпизода",
profileRequiredDesc: "Выберите профиль эпизода перед генерацией подкаста.",
nameRequired: "Требуется название эпизода",
nameRequiredDesc: "Укажите название эпизода.",
addContext: "Добавить контекст",
addContextDesc: "Выберите хотя бы один источник или заметку для включения в эпизод.",
generationFailed: "Генерация подкаста не удалась",
speakerProfile: "Профиль говорящего",
usesSpeakerProfile: "Использует профиль говорящего",
sources: "Источники",
notes: "Заметки",
noSources: "В этом блокноте нет доступных источников.",
noNotes: "В этом блокноте нет доступных заметок.",
selectMode: "Выберите режим",
buildContextFailed: "Не удалось построить контекст. Проверьте выбранные элементы.",
podcastTaskStarted: "Задача подкаста запущена",
loadingProfiles: "Загрузка профилей эпизодов...",
noProfilesFound: "Профили эпизодов не найдены. Создайте профиль перед генерацией подкаста.",
listTitle: "Подкасты",
listDesc: "Отслеживайте сгенерированные эпизоды и управляйте профилями.",
chooseAView: "Выберите представление",
episodesTab: "Эпизоды",
templatesTab: "Профили",
overviewTitle: "Обзор эпизодов",
overviewDesc: "Отслеживайте задачи генерации подкастов и просматривайте готовые материалы.",
generateBtn: "Сгенерировать подкаст",
total: "Всего",
processingLabel: "В обработке",
completedLabel: "Завершено",
failedLabel: "Ошибка",
pendingLabel: "Ожидание",
loadErrorTitle: "Не удалось загрузить эпизоды",
loadErrorDesc: "Не удалось получить последние эпизоды подкастов. Попробуйте позже.",
loadingEpisodes: "Загрузка эпизодов…",
noEpisodesYet: "Пока нет эпизодов подкастов. Сгенерируйте первый из интерфейса чата блокнота или источника.",
statusRunningTitle: "В процессе",
statusRunningDesc: "Эпизоды, для которых активно генерируются материалы.",
statusPendingTitle: "В очереди / Ожидание",
statusPendingDesc: "Отправленные эпизоды, ожидающие начала обработки.",
statusCompletedTitle: "Завершённые эпизоды",
statusCompletedDesc: "Готовы к просмотру, загрузке или публикации.",
statusFailedTitle: "Неудачные эпизоды",
statusFailedDesc: "Эпизоды с ошибками во время генерации.",
templatesWorkspaceTitle: "Рабочее пространство профилей",
templatesWorkspaceDesc: "Создавайте переиспользуемые конфигурации эпизодов и говорящих для быстрого производства подкастов.",
howTemplatesPowerTitle: "Как профили ускоряют генерацию подкастов",
howTemplatesPowerDesc: "Профили разделяют процесс на два переиспользуемых компонента. Комбинируйте их при генерации нового эпизода.",
episodeProfilesSetFormat: "Профили эпизодов задают формат",
episodeProfilesList1: "Определяют количество сегментов и структуру повествования",
episodeProfilesList2: "Выбирают языковые модели для брифинга, планирования и написания сценария",
episodeProfilesList3: "Хранят стандартные брифинги для единообразного стиля эпизодов",
speakerProfilesBringVoices: "Профили говорящих оживляют голоса",
speakerProfilesList1: "Выбирают провайдера и модель озвучивания",
speakerProfilesList2: "Фиксируют личность, биографию и заметки о произношении для каждого говорящего",
speakerProfilesList3: "Переиспользуют одни и те же голоса ведущих или гостей в разных форматах эпизодов",
recommendedWorkflow: "Рекомендуемый рабочий процесс",
workflowStep1: "Создайте профили говорящих для каждого нужного голоса",
workflowStep2: "Создайте профили эпизодов со ссылками на говорящих по имени",
workflowStep3: "Генерируйте подкасты, выбирая подходящий профиль эпизода",
workflowHint: "Профили эпизодов ссылаются на профили говорящих по имени, поэтому начинайте с говорящих, чтобы избежать пропущенных назначений голосов.",
failedToLoadTemplates: "Не удалось загрузить данные профилей",
failedToLoadTemplatesDesc: "Убедитесь, что API работает, и попробуйте снова. Некоторые разделы могут быть неполными.",
loadingTemplates: "Загрузка профилей…",
speakerProfilesTitle: "Профили говорящих",
speakerProfilesDesc: "Настройте голоса и личности для генерируемых эпизодов.",
createSpeaker: "Создать говорящего",
noSpeakerProfiles: "Пока нет профилей говорящих. Создайте один, чтобы профили эпизодов стали доступны.",
noDescription: "Описание не указано.",
usedByCount_one: "Используется в 1 эпизоде",
usedByCount_other: "Используется в {count} эпизодах",
usedByCount: "Используется в {count} эпизодах",
unused: "Не используется",
voiceId: "ID голоса",
backstory: "Биография",
personality: "Личность",
edit: "Редактировать",
duplicate: "Дублировать",
deleteSpeakerProfileTitle: "Удалить профиль говорящего?",
deleteSpeakerProfileDesc: "Удаление «{name}» нельзя отменить.",
deleteSpeakerDisabledHint: "Сначала удалите этого говорящего из профилей эпизодов.",
deleting: "Удаление…",
episodeProfilesTitle: "Профили эпизодов",
episodeProfilesDesc: "Определите переиспользуемые настройки генерации для ваших шоу.",
createProfile: "Создать профиль",
createSpeakerFirst: "Сначала создайте профиль говорящего перед добавлением профиля эпизода.",
noEpisodeProfiles: "Пока нет профилей эпизодов. Создайте один для запуска генерации подкастов.",
speakerCreated: "Говорящий создан",
speakerCreatedDesc: "Говорящий «{name}» успешно добавлен.",
failedToCreateSpeaker: "Не удалось создать профиль говорящего",
speakerUpdated: "Говорящий обновлён",
speakerUpdatedDesc: "Говорящий «{name}» успешно обновлён.",
failedToUpdateSpeaker: "Не удалось обновить профиль говорящего",
speakerDeleted: "Говорящий удалён",
speakerDeletedDesc: "Говорящий «{name}» успешно удалён.",
failedToDeleteSpeaker: "Не удалось удалить профиль говорящего",
speakerDuplicated: "Говорящий дублирован",
speakerDuplicatedDesc: "Говорящий «{name}» успешно дублирован.",
failedToDuplicateSpeaker: "Не удалось дублировать профиль говорящего",
generationStarted: "Генерация запущена",
generationStartedDesc: "Генерация подкаста поставлена в очередь.",
failedToStartGeneration: "Не удалось запустить генерацию",
tryAgainMoment: "Попробуйте ещё раз через некоторое время.",
deleteProfileTitle: "Удалить профиль?",
deleteProfileDesc: "Это удалит «{name}». Существующие эпизоды сохранят свои данные, но новые больше не смогут использовать эту конфигурацию.",
profileCreated: "Профиль создан",
profileCreatedDesc: "Профиль эпизода «{name}» успешно создан.",
failedToCreateProfile: "Не удалось создать профиль",
profileUpdated: "Профиль обновлён",
profileUpdatedDesc: "Профиль эпизода «{name}» успешно обновлён.",
failedToUpdateProfile: "Не удалось обновить профиль",
profileDeleted: "Профиль удалён",
profileDeletedDesc: "Профиль эпизода «{name}» успешно удалён.",
failedToDeleteProfile: "Не удалось удалить профиль",
failedToDeleteProfileDesc: "Не удалось удалить профиль эпизода.",
profileDuplicated: "Профиль дублирован",
profileDuplicatedDesc: "Профиль эпизода «{name}» успешно дублирован.",
failedToDuplicateProfile: "Не удалось дублировать профиль",
episodeDeleted: "Эпизод удалён",
episodeDeletedDesc: "Эпизод успешно удалён.",
failedToDeleteEpisode: "Не удалось удалить эпизод",
failedToDeleteSpeakerDesc: "Не удалось удалить профиль говорящего.",
outlineModel: "Модель плана",
transcriptModel: "Модель транскрипта",
segments: "Сегменты",
defaultBriefingTitle: "Брифинг по умолчанию",
created: "Создано {time}",
details: "Детали",
summaryTab: "Краткое",
outlineTab: "План",
transcriptTab: "Транскрипт",
briefing: "Брифинг",
noOutline: "План недоступен.",
noTranscript: "Транскрипт недоступен.",
deleteEpisodeTitle: "Удалить эпизод?",
deleteEpisodeDesc: "Это навсегда удалит «{name}» и его аудиофайл.",
audioUnavailable: "Аудио недоступно",
segment: "Сегмент",
speaker: "Говорящий",
profile: "Профиль",
link: "Ссылка",
file: "Файл",
embedded: "С эмбеддингом",
notEmbedded: "Без эмбеддинга",
noSpeakerProfilesAvailable: "Нет доступных профилей говорящих",
editEpisodeProfile: "Редактировать профиль эпизода",
createEpisodeProfile: "Создать профиль эпизода",
episodeProfileFormDesc: "Определите, как должны генерироваться эпизоды и какую конфигурацию говорящих использовать по умолчанию.",
noSpeakerProfilesDesc: "Создайте профиль говорящего перед настройкой профиля эпизода.",
profileName: "Название профиля",
profileNamePlaceholder: "напр., Техническая дискуссия",
descriptionPlaceholder: "Краткое описание, когда использовать этот профиль",
speakerConfig: "Конфигурация говорящих",
selectSpeakerProfile: "Выберите профиль говорящего",
outlineGeneration: "Генерация плана",
transcriptGeneration: "Генерация транскрипта",
defaultBriefingPlaceholder: "Опишите структуру, тон и цели для этого формата эпизода",
editSpeakerProfile: "Редактировать профиль говорящего",
createSpeakerProfile: "Создать профиль говорящего",
speakerProfileFormDesc: "Настройте параметры озвучивания и определите до четырёх говорящих.",
speakers: "Говорящие",
speakersDesc: "Настройте от одного до четырёх голосов для этого профиля.",
addSpeaker: "Добавить говорящего",
speakerNumber: "Говорящий {number}",
backstoryPlaceholder: "Краткая биография или контекст для говорящего",
personalityPlaceholder: "Опишите стиль и тон",
outlineModelRequired: "Требуется модель плана",
transcriptModelRequired: "Требуется модель транскрипта",
defaultBriefingRequired: "Требуется брифинг по умолчанию",
segmentsInteger: "Должно быть целым числом",
segmentsMin: "Минимум 3 сегмента",
segmentsMax: "Максимум 20 сегментов",
voiceIdRequired: "Требуется ID голоса",
backstoryRequired: "Требуется биография",
personalityRequired: "Требуется описание личности",
speakerCountMin: "Требуется минимум один говорящий",
speakerCountMax: "Можно настроить до 4 говорящих",
delete: "Удалить",
failedToDelete: "Не удалось удалить подкаст",
retry: "Повторить",
retrying: "Повтор…",
retryStarted: "Повтор запущен",
retryStartedDesc: "Новое задание на генерацию подкаста отправлено.",
failedToRetry: "Не удалось повторить",
errorDetails: "Подробности ошибки",
language: "Язык",
languagePlaceholder: "Выберите язык (необязательно)",
podcastLanguage: "Язык подкаста",
selectOutlineModel: "Выберите модель плана",
selectTranscriptModel: "Выберите модель транскрипта",
voiceModel: "Голосовая модель",
voiceModelRequired: "Требуется голосовая модель",
selectVoiceModel: "Выберите голосовую модель",
perSpeakerTtsOverride: "Переопределение TTS для говорящего (необязательно)",
useProfileDefault: "Использовать настройки профиля",
setupRequired: "Требуется настройка",
setupRequiredDesc: "Некоторые профили ещё не имеют настроенных моделей. Отредактируйте их для выбора моделей перед генерацией подкастов.",
notConfigured: "Не настроено",
},
settings: {
contentProcessing: "Обработка контента",
contentProcessingDesc: "Настройте обработку документов и URL",
docEngine: "Движок обработки документов",
docEnginePlaceholder: "Выберите движок обработки документов",
urlEngine: "Движок обработки URL",
urlEnginePlaceholder: "Выберите движок обработки URL",
autoRecommended: "Авто (рекомендуется)",
simple: "Простой",
docling: "Docling",
helpMeChoose: "Помогите выбрать",
docHelp: "· Docling немного медленнее, но точнее, особенно для документов с таблицами и изображениями. · Simple извлекает содержимое без форматирования. · Авто (рекомендуется) попробует Docling и переключится на Simple при необходимости.",
firecrawl: "Firecrawl",
jina: "Jina",
urlHelp: "· Firecrawl — платный сервис (есть бесплатный уровень), очень мощный. · Jina тоже хороший вариант с бесплатным уровнем. · Simple использует базовое HTTP-извлечение и пропустит контент на JavaScript-сайтах. · Авто (рекомендуется) попробует Firecrawl, затем Jina, затем Simple.",
embeddingAndSearch: "Эмбеддинг и поиск",
embeddingAndSearchDesc: "Настройте параметры поиска и эмбеддинга",
defaultEmbeddingOption: "Опция эмбеддинга по умолчанию",
embeddingOptionPlaceholder: "Выберите опцию эмбеддинга",
ask: "Спрашивать",
always: "Всегда",
never: "Никогда",
embeddingHelp: "Эмбеддинг контента упрощает поиск для вас и ИИ-агентов. Если вы используете локальную модель эмбеддинга (например, Ollama), можно не беспокоиться о стоимости и создавать эмбеддинг для всего.",
fileManagement: "Управление файлами",
fileManagementDesc: "Настройте обработку и хранение файлов",
autoDeleteFiles: "Автоудаление файлов",
autoDeletePlaceholder: "Выберите опцию автоудаления",
filesHelp: "После загрузки и обработки файлы больше не нужны. Большинству пользователей следует разрешить Open Notebook автоматически удалять загруженные файлы из папки загрузок.",
loadFailed: "Не удалось загрузить настройки",
},
advanced: {
title: "Дополнительные инструменты",
desc: "Расширенные инструменты и утилиты для опытных пользователей",
systemInfo: "Информация о системе",
rebuildEmbeddings: "Пересоздать эмбеддинги",
rebuildEmbeddingsDesc: "Пересоздать индекс векторного поиска для всех источников",
currentVersion: "Текущая версия",
latestVersion: "Последняя версия",
status: "Статус",
updateAvailable: "Доступна версия {version}",
updateAvailableDesc: "Доступна новая версия Open Notebook.",
upToDate: "Актуальная версия",
unknown: "Неизвестно",
viewOnGithub: "Посмотреть на GitHub",
updateCheckFailed: "Не удалось проверить обновления. GitHub может быть недоступен.",
rebuild: {
mode: "Режим пересоздания",
existing: "Существующие",
all: "Все",
existingDesc: "Пересоздать эмбеддинги только для элементов с существующими эмбеддингами (быстрее, для смены модели)",
allDesc: "Пересоздать существующие + создать эмбеддинги для элементов без них (медленнее, полный охват)",
include: "Включить в пересоздание",
selectOneError: "Выберите хотя бы один тип элементов для пересоздания",
starting: "Запуск пересоздания...",
startBtn: "🚀 Начать пересоздание",
queued: "В очереди",
running: "Отправка задач...",
completed: "Задачи отправлены!",
failed: "Ошибка",
leavePageHint: "Вы можете покинуть эту страницу — процесс выполняется в фоне",
startNew: "Начать новое пересоздание",
itemsProcessed: "Отправлено задач: {processed}/{total} ({percent}%)",
failedItems: "Не удалось отправить задач: {count}",
time: "Время",
whenToRebuild: "Когда нужно пересоздавать эмбеддинги?",
whenToRebuildAns: "При смене модели, обновлении версии, исправлении повреждений или после массового импорта.",
howLong: "Сколько времени занимает пересоздание?",
howLongAns: "Время зависит от количества элементов, скорости модели и лимитов API. Локальные модели обычно очень быстрые.",
isSafe: "Безопасно ли пересоздавать во время работы с приложением?",
isSafeAns: "Да, пересоздание безопасно! Оно не удаляет контент, только заменяет эмбеддинги, и корректно обрабатывает ошибки.",
},
},
transformations: {
title: "Трансформации",
desc: "Трансформации — это промпты, которые LLM использует для обработки источника и извлечения инсайтов, резюме и т.д.",
workspace: "Выберите рабочее пространство",
playground: "Песочница",
defaultPrompt: "Промпт трансформации по умолчанию",
defaultPromptDesc: "Этот текст будет добавлен ко всем промптам трансформаций",
defaultPromptPlaceholder: "Введите инструкции трансформации по умолчанию...",
listTitle: "Пользовательские трансформации",
createNew: "Создать новую",
inputLabel: "Входной текст",
inputPlaceholder: "Введите текст для трансформации...",
outputLabel: "Результат",
runTest: "Запустить трансформацию",
running: "Выполнение...",
selectToStart: "Выберите трансформацию для начала",
name: "Название",
namePlaceholder: "Уникальный идентификатор, напр. key_topics",
titlePlaceholder: "Отображаемое название, по умолчанию совпадает с именем",
promptPlaceholder: "Напишите промпт для этой трансформации...",
descriptionPlaceholder: "Опишите, что делает эта трансформация.",
suggestDefault: "Предлагать по умолчанию для новых источников",
promptHint: "Промпты должны учитывать содержимое источника. Вы можете попросить модель резюмировать, извлечь инсайты или создать структурированный вывод, например таблицы.",
createSuccess: "Трансформация успешно создана",
updateSuccess: "Трансформация успешно обновлена",
deleteSuccess: "Трансформация успешно удалена",
noTransformations: "Пока нет трансформаций",
createOne: "Создайте трансформацию для начала",
selectModel: "Выберите модель",
deleteConfirm: "Вы уверены, что хотите удалить эту трансформацию?",
model: "Модель",
systemPrompt: "Системный промпт",
overrideModelDesc: "Переопределить модель по умолчанию для этой сессии чата. Оставьте пустым для использования системной модели.",
sessionUseReplacement: "Эта сессия будет использовать {name} вместо модели по умолчанию.",
systemDefault: "Системная по умолчанию",
},
models: {
embedding: "Модели эмбеддинга",
tts: "Озвучивание (TTS)",
stt: "Распознавание речи (STT)",
apiKey: "API-ключ",
deleteSuccess: "Модель успешно удалена",
saveSuccess: "Модель успешно сохранена",
noModels: "Нет моделей",
discoverModels: "Обнаружение моделей",
noModelsFound: "Модели от этого провайдера не найдены",
modelType: "Тип модели",
modelTypeHint: "Выберите тип для добавляемых моделей. Если нужны разные типы, добавляйте их отдельными партиями.",
deleteModel: "Удалить модель",
defaultAssignments: "Назначение моделей по умолчанию",
defaultAssignmentsDesc: "Настройте, какие модели использовать для различных задач в Open Notebook",
missingRequiredModels: "Отсутствуют необходимые модели: {models}. Open Notebook может работать некорректно без них.",
selectModelPlaceholder: "Выберите модель",
requiredModelPlaceholder: "⚠️ Обязательно — выберите модель",
chatModelLabel: "Модель чата",
chatModelDesc: "Используется для чат-разговоров",
transformationModelLabel: "Модель трансформаций",
transformationModelDesc: "Используется для резюме, инсайтов и трансформаций",
toolsModelLabel: "Модель инструментов",
toolsModelDesc: "Используется для вызова функций — рекомендуется OpenAI или Anthropic",
largeContextModelLabel: "Модель для большого контекста",
largeContextModelDesc: "Используется для обработки больших документов — рекомендуется Gemini",
embeddingModelLabel: "Модель эмбеддинга",
embeddingModelDesc: "Используется для семантического поиска и векторных эмбеддингов",
ttsModelLabel: "Модель озвучивания",
ttsModelDesc: "Используется для генерации подкастов",
sttModelLabel: "Модель распознавания речи",
sttModelDesc: "Используется для транскрибации аудио",
embeddingChangeTitle: "Изменение модели эмбеддинга",
embeddingChangeConfirm: "Вы собираетесь изменить модель эмбеддинга с {from} на {to}.",
rebuildRequired: "Важно: Требуется пересоздание",
rebuildReason: "Изменение модели эмбеддинга требует пересоздания всех существующих эмбеддингов для сохранения согласованности. Без пересоздания поиск может возвращать некорректные или неполные результаты.",
whatHappensNext: "Что произойдёт далее:",
step1: "Модель эмбеддинга по умолчанию будет обновлена",
step2: "Существующие эмбеддинги останутся неизменными до пересоздания",
step3: "Новый контент будет использовать новую модель эмбеддинга",
step4: "Вам следует пересоздать эмбеддинги как можно скорее",
proceedToRebuildPrompt: "Хотите перейти на страницу «Дополнительно», чтобы начать пересоздание сейчас?",
changeModelOnly: "Только изменить модель",
changeAndRebuild: "Изменить и перейти к пересозданию",
autoAssign: "Автоназначение по умолчанию",
autoAssigning: "Назначение...",
autoAssignSuccess: "{count} моделей по умолчанию автоматически назначено",
autoAssignNoModels: "Нет доступных моделей для назначения. Сначала синхронизируйте модели.",
autoAssignAlreadySet: "Все модели по умолчанию уже настроены",
testModel: "Тестировать модель",
testModelSuccess: "Тест модели пройден",
testModelFailed: "Тест модели не пройден",
searchOrAddModel: "Поиск или введите имя модели...",
addCustomModel: "Добавить \"{name}\"",
},
apiKeys: {
title: "Настройте ИИ с помощью собственных API-ключей",
description: "Храните API-ключи в базе данных для безопасного подключения провайдеров ИИ в Open Notebook.",
encryptionRequired: "Ключ шифрования не настроен",
encryptionRequiredDescription: "Установите переменную окружения OPEN_NOTEBOOK_ENCRYPTION_KEY в любую секретную строку для хранения API-ключей в базе данных.",
configured: "Настроено",
notConfigured: "Не настроено",
migrationAvailable: "Обнаружены переменные окружения",
migrationDescription: "{count} API-ключ(ей) настроено через переменные окружения и может быть перенесено в базу данных для удобного управления.",
migrateToDatabase: "Перенести в базу данных",
migrating: "Перенос...",
migrationSuccess: "{count} API-ключ(ей) успешно перенесено",
migrationErrors: "{count} ключ(ей) не удалось перенести",
migrationNothingToMigrate: "Все ключи уже находятся в базе данных",
learnMore: "Узнайте, как настроить API-ключи →",
testConnection: "Проверить подключение",
testSuccess: "Подключение успешно",
testFailed: "Проверка подключения не удалась",
syncModels: "Синхронизировать модели",
syncSuccess: "Обнаружено {discovered} моделей, добавлено {new} новых",
syncNoNew: "Обнаружено {count} моделей, все уже зарегистрированы",
syncFailed: "Не удалось синхронизировать модели",
getApiKey: "Получить API-ключ",
vertexProject: "ID проекта GCP",
vertexLocation: "Регион",
vertexCredentials: "Путь к JSON сервисного аккаунта",
addConfig: "Добавить конфигурацию",
editConfig: "Редактировать конфигурацию",
deleteConfig: "Удалить конфигурацию",
configName: "Название конфигурации",
configNameHint: "Описательное название для этой конфигурации (например, «Продакшн», «Разработка»)",
baseUrl: "Базовый URL",
baseUrlOverrideHint: "Изменяйте только если нужно переопределить стандартную конечную точку API провайдера.",
numCtx: "Окно контекста (num_ctx)",
numCtxHint: "Максимальное окно контекста для моделей Ollama. Оставьте пустым для значения по умолчанию (8192). Увеличивайте только если ваше оборудование справится с большим окном.",
deleteConfigConfirm: "Вы уверены, что хотите удалить «{name}»? Это действие необратимо.",
configSaveSuccess: "Конфигурация успешно сохранена",
configUpdateSuccess: "Конфигурация успешно обновлена",
configDeleteSuccess: "Конфигурация успешно удалена",
apiKeyEditHint: "Оставьте пустым, чтобы сохранить текущий API-ключ",
decryptionError: "Ошибка расшифровки",
decryptionErrorDescription: "API-ключ этих учётных данных не удалось расшифровать. Возможно, ключ шифрования был изменён. Удалите эти учётные данные и создайте заново с правильным ключом.",
},
setupBanner: {
encryptionRequired: "Ключ шифрования не настроен",
encryptionRequiredDescription: "Установите переменную окружения OPEN_NOTEBOOK_ENCRYPTION_KEY для безопасного хранения учётных данных.",
migrationAvailable: "Доступна миграция API-ключей",
migrationDescription: "{count} провайдер(ов) имеют API-ключи, заданные через переменные окружения. Перенесите их в базу данных для удобного управления.",
goToSettings: "Перейти к настройкам",
viewDocs: "Документация",
},
}