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: "বাংলা", 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 провайдера.", deleteConfigConfirm: "Вы уверены, что хотите удалить «{name}»? Это действие необратимо.", configSaveSuccess: "Конфигурация успешно сохранена", configUpdateSuccess: "Конфигурация успешно обновлена", configDeleteSuccess: "Конфигурация успешно удалена", apiKeyEditHint: "Оставьте пустым, чтобы сохранить текущий API-ключ", decryptionError: "Ошибка расшифровки", decryptionErrorDescription: "API-ключ этих учётных данных не удалось расшифровать. Возможно, ключ шифрования был изменён. Удалите эти учётные данные и создайте заново с правильным ключом.", }, setupBanner: { encryptionRequired: "Ключ шифрования не настроен", encryptionRequiredDescription: "Установите переменную окружения OPEN_NOTEBOOK_ENCRYPTION_KEY для безопасного хранения учётных данных.", migrationAvailable: "Доступна миграция API-ключей", migrationDescription: "{count} провайдер(ов) имеют API-ключи, заданные через переменные окружения. Перенесите их в базу данных для удобного управления.", goToSettings: "Перейти к настройкам", viewDocs: "Документация", }, }