mirror of
https://github.com/lobehub/lobehub
synced 2026-04-21 17:47:27 +00:00
* ✨ feat(resource): add select all hint and improve resource explorer selection Made-with: Cursor * ♻️ refactor(resource): flatten store actions and improve type imports Made-with: Cursor * ♻️ refactor resource explorer list view * refactor: engine Signed-off-by: Innei <tukon479@gmail.com> * ✨ feat: checkpoint current workspace updates * ♻️ refine resource explorer fetch ownership * 🐛 fix: resolve resource manager ci regressions * 🐛 fix(lambda): delete page-backed knowledge items by document id * 🐛 fix(lambda): include knowledge-base files in remove-all * 🐛 fix(resource): preserve cross-page select-all exclusions * 🐛 fix(resource): retain off-screen optimistic resources * 🐛 fix(resource): hide moved root items from current query * 🐛 fix(resource): reset explorer selection on query change * 🐛 fix(resource): fix select-all batchChunking and optimistic replace visibility - batchChunking: pass through server-resolved IDs not in local resourceMap when selectAllState is 'all', letting server filter unsupported types - replaceLocalResource: keep replacement visible if the optimistic item was already in the list, avoiding slug-vs-UUID mismatch in visibility check * 🐛 fix(resource): reset selectAllState after batch operations and preserve off-screen optimistic items - Reset selectAllState to 'none' after delete, removeFromKnowledgeBase, and batchChunking to prevent stale 'all' state causing unintended re-selection of remaining items - Preserve off-screen optimistic resources in clearCurrentQueryResources so background uploads from other folders survive delete-all-by-query * 🐛 fix: satisfy import-x/first in resource action test Made-with: Cursor * 🎨 lint: sort imports in ResourceExplorer Made-with: Cursor * 🐛 fix: widen searchQuery type in useResetSelectionOnQueryChange test Made-with: Cursor --------- Signed-off-by: Innei <tukon479@gmail.com>
188 lines
19 KiB
JSON
188 lines
19 KiB
JSON
{
|
||
"ArgsInput.addArgument": "Добавить аргумент",
|
||
"ArgsInput.argumentPlaceholder": "Аргумент {{index}}",
|
||
"ArgsInput.enterFirstArgument": "Введите первый аргумент...",
|
||
"DragUpload.dragDesc": "Перетащите файлы сюда, чтобы загрузить несколько изображений.",
|
||
"DragUpload.dragFileDesc": "Перетащите изображения и файлы сюда, чтобы загрузить несколько изображений и файлов.",
|
||
"DragUpload.dragFileTitle": "Загрузка файлов",
|
||
"DragUpload.dragTitle": "Загрузка изображений",
|
||
"FileManager.actions.addToLibrary": "Добавить в библиотеку",
|
||
"FileManager.actions.batchChunking": "Пакетная сегментация",
|
||
"FileManager.actions.chunking": "Сегментация",
|
||
"FileManager.actions.chunkingTooltip": "Разделить файл на несколько текстовых фрагментов и встроить их для семантического поиска и диалога с файлом.",
|
||
"FileManager.actions.chunkingUnsupported": "Этот файл не поддерживает сегментацию.",
|
||
"FileManager.actions.confirmDelete": "Вы собираетесь удалить этот файл. После удаления восстановление будет невозможно. Подтвердите действие.",
|
||
"FileManager.actions.confirmDeleteAllFiles": "Вы собираетесь удалить все результаты в текущем представлении. После удаления их нельзя будет восстановить. Пожалуйста, подтвердите действие.",
|
||
"FileManager.actions.confirmDeleteFolder": "Вы собираетесь удалить эту папку и всё её содержимое. Это действие необратимо. Подтвердите решение.",
|
||
"FileManager.actions.confirmDeleteMultiFiles": "Вы собираетесь удалить выбранные {{count}} файлов. После удаления восстановление будет невозможно. Подтвердите действие.",
|
||
"FileManager.actions.confirmRemoveFromLibrary": "Вы собираетесь удалить {{count}} выбранный(е) файл(ы) из библиотеки. Они останутся доступны во всех файлах. Подтвердите, чтобы продолжить.",
|
||
"FileManager.actions.copyUrl": "Скопировать ссылку",
|
||
"FileManager.actions.copyUrlSuccess": "Ссылка на файл успешно скопирована.",
|
||
"FileManager.actions.createChunkingTask": "Подготовка...",
|
||
"FileManager.actions.deleteSuccess": "Файл успешно удалён.",
|
||
"FileManager.actions.downloading": "Загрузка файла...",
|
||
"FileManager.actions.goBack": "Назад",
|
||
"FileManager.actions.goForward": "Вперёд",
|
||
"FileManager.actions.goToParent": "Перейти к родительской папке",
|
||
"FileManager.actions.moveError": "Не удалось переместить файл",
|
||
"FileManager.actions.moveHere": "Переместить сюда",
|
||
"FileManager.actions.moveSuccess": "Файл успешно перемещён",
|
||
"FileManager.actions.moveToFolder": "Переместить в...",
|
||
"FileManager.actions.moveToOtherLibrary": "Переместить в другую библиотеку",
|
||
"FileManager.actions.moveToRoot": "Переместить в корневую директорию",
|
||
"FileManager.actions.moving": "Перемещение...",
|
||
"FileManager.actions.removeFromLibrary": "Удалить из библиотеки",
|
||
"FileManager.actions.removeFromLibrarySuccess": "Файл успешно удалён.",
|
||
"FileManager.actions.rename": "Переименовать",
|
||
"FileManager.actions.renameError": "Ошибка при переименовании",
|
||
"FileManager.actions.renameSuccess": "Переименование прошло успешно",
|
||
"FileManager.bottom": "Вы достигли конца.",
|
||
"FileManager.config.showFilesInLibrary": "Показать содержимое в библиотеке",
|
||
"FileManager.emptyStatus.actions.file": "Загрузить файл",
|
||
"FileManager.emptyStatus.actions.folder": "Загрузить папку",
|
||
"FileManager.emptyStatus.actions.knowledgeBase": "Создать библиотеку",
|
||
"FileManager.emptyStatus.or": "или",
|
||
"FileManager.emptyStatus.title": "Перетащите файлы или папки сюда",
|
||
"FileManager.noFolders": "Нет доступных папок",
|
||
"FileManager.search.noResults": "Файлы не найдены",
|
||
"FileManager.search.placeholder": "Поиск файлов...",
|
||
"FileManager.sort.dateAdded": "Дата добавления",
|
||
"FileManager.sort.name": "Имя",
|
||
"FileManager.sort.size": "Размер",
|
||
"FileManager.title.createdAt": "Дата создания",
|
||
"FileManager.title.size": "Размер",
|
||
"FileManager.title.title": "Файл",
|
||
"FileManager.total.allSelectedCount": "Все {{count}} элементов выбраны.",
|
||
"FileManager.total.allSelectedFallback": "Выбраны все результаты.",
|
||
"FileManager.total.fileCount": "Всего {{count}} элементов",
|
||
"FileManager.total.loadedSelectedCount": "Выбрано {{count}} загруженных элементов.",
|
||
"FileManager.total.selectAll": "Выбрать все {{count}} элементов",
|
||
"FileManager.total.selectAllFallback": "Выбрать все элементы",
|
||
"FileManager.total.selectedCount": "Выбрано {{count}} элементов",
|
||
"FileManager.view.list": "Список",
|
||
"FileManager.view.masonry": "Сетка",
|
||
"FileParsingStatus.chunks.embeddingStatus.empty": "Текстовые фрагменты ещё не встроены, что делает функцию семантического поиска недоступной. Для улучшения качества поиска выполните встраивание фрагментов.",
|
||
"FileParsingStatus.chunks.embeddingStatus.error": "Ошибка встраивания",
|
||
"FileParsingStatus.chunks.embeddingStatus.errorResult": "Ошибка векторизации, пожалуйста, проверьте и повторите попытку. Подробности ошибки:",
|
||
"FileParsingStatus.chunks.embeddingStatus.processing": "Встраивание текстовых фрагментов, пожалуйста, подождите.",
|
||
"FileParsingStatus.chunks.embeddingStatus.success": "Все текущие текстовые фрагменты успешно встроены",
|
||
"FileParsingStatus.chunks.embeddings": "Встраивание",
|
||
"FileParsingStatus.chunks.status.error": "Ошибка сегментации",
|
||
"FileParsingStatus.chunks.status.errorResult": "Сегментация не удалась, пожалуйста, проверьте и повторите попытку. Подробности ошибки:",
|
||
"FileParsingStatus.chunks.status.processing": "Сегментация",
|
||
"FileParsingStatus.chunks.status.processingTip": "Сервер разделяет текст на фрагменты; закрытие страницы не повлияет на процесс.",
|
||
"GenerationModelItem.creditsPerImageApproximate": "Примерно {{amount}} кредитов / изображение",
|
||
"GenerationModelItem.creditsPerImageExact": "{{amount}} кредитов / изображение",
|
||
"GenerationModelItem.creditsPerVideoApproximate": "Примерно {{amount}} кредитов / видео",
|
||
"GenerationModelItem.creditsPerVideoExact": "{{amount}} кредитов / видео",
|
||
"GoBack.back": "Назад",
|
||
"HtmlPreview.actions.download": "Скачать",
|
||
"HtmlPreview.actions.preview": "Предпросмотр",
|
||
"HtmlPreview.iframeTitle": "Предпросмотр HTML",
|
||
"HtmlPreview.mode.code": "Код",
|
||
"HtmlPreview.mode.preview": "Предпросмотр",
|
||
"HtmlPreview.title": "Предпросмотр HTML",
|
||
"ImageUpload.actions.changeImage": "Нажмите, чтобы изменить изображение",
|
||
"ImageUpload.actions.dropMultipleFiles": "Загрузка нескольких файлов одновременно не поддерживается; будет использован только первый файл",
|
||
"ImageUpload.placeholder.primary": "Добавить изображение",
|
||
"ImageUpload.placeholder.secondary": "Нажмите или перетащите для загрузки",
|
||
"ImageUpload.validation.imageAspectRatioInvalid": "Соотношение сторон {{fileName}} ({{actualRatio}}) выходит за пределы допустимого диапазона: {{range}}",
|
||
"ImageUpload.validation.imageDimensionTooLarge": "{{fileName}} ({{width}}x{{height}}) слишком велик, требуется: {{maxDimension}}",
|
||
"ImageUpload.validation.imageDimensionTooSmall": "{{fileName}} ({{width}}x{{height}}) слишком мал, требуется: {{minDimension}}",
|
||
"KeyValueEditor.addButton": "Добавить строку",
|
||
"KeyValueEditor.deleteTooltip": "Удалить",
|
||
"KeyValueEditor.duplicateKeyError": "Ключ должен быть уникальным",
|
||
"KeyValueEditor.keyPlaceholder": "Ключ",
|
||
"KeyValueEditor.valuePlaceholder": "Значение",
|
||
"LocalFile.action.open": "Открыть",
|
||
"LocalFile.action.showInFolder": "Показать в папке",
|
||
"MaxTokenSlider.unlimited": "Без ограничений",
|
||
"ModelSelect.featureTag.custom": "Пользовательская модель по умолчанию поддерживает вызовы функций и визуальное распознавание. Пожалуйста, проверьте доступность этих возможностей в вашей ситуации.",
|
||
"ModelSelect.featureTag.file": "Эта модель поддерживает загрузку файлов для чтения и распознавания.",
|
||
"ModelSelect.featureTag.functionCall": "Эта модель поддерживает вызовы функций.",
|
||
"ModelSelect.featureTag.imageOutput": "Эта модель поддерживает генерацию изображений.",
|
||
"ModelSelect.featureTag.reasoning": "Эта модель поддерживает глубокое мышление.",
|
||
"ModelSelect.featureTag.search": "Эта модель поддерживает онлайн-поиск.",
|
||
"ModelSelect.featureTag.tokens": "Эта модель поддерживает до {{tokens}} токенов за одну сессию.",
|
||
"ModelSelect.featureTag.video": "Эта модель поддерживает распознавание видео",
|
||
"ModelSelect.featureTag.vision": "Эта модель поддерживает визуальное распознавание.",
|
||
"ModelSelect.removed": "Модель отсутствует в списке. Она будет автоматически удалена при снятии выбора.",
|
||
"ModelSwitchPanel.byModel": "По модели",
|
||
"ModelSwitchPanel.byProvider": "По провайдеру",
|
||
"ModelSwitchPanel.detail.abilities": "Возможности",
|
||
"ModelSwitchPanel.detail.abilities.files": "Файлы",
|
||
"ModelSwitchPanel.detail.abilities.functionCall": "Вызов инструмента",
|
||
"ModelSwitchPanel.detail.abilities.imageOutput": "Вывод изображения",
|
||
"ModelSwitchPanel.detail.abilities.reasoning": "Логика",
|
||
"ModelSwitchPanel.detail.abilities.search": "Поиск",
|
||
"ModelSwitchPanel.detail.abilities.video": "Видео",
|
||
"ModelSwitchPanel.detail.abilities.vision": "Компьютерное зрение",
|
||
"ModelSwitchPanel.detail.config": "Конфигурация модели",
|
||
"ModelSwitchPanel.detail.context": "Длина контекста",
|
||
"ModelSwitchPanel.detail.pricing": "Цены",
|
||
"ModelSwitchPanel.detail.pricing.cachedInput": "Кэшированный ввод ${{amount}}/М",
|
||
"ModelSwitchPanel.detail.pricing.group.audio": "Аудио",
|
||
"ModelSwitchPanel.detail.pricing.group.image": "Изображение",
|
||
"ModelSwitchPanel.detail.pricing.group.text": "Текст",
|
||
"ModelSwitchPanel.detail.pricing.input": "Ввод ${{amount}}/М",
|
||
"ModelSwitchPanel.detail.pricing.output": "Вывод ${{amount}}/М",
|
||
"ModelSwitchPanel.detail.pricing.perImage": "~ {{amount}} / изображение",
|
||
"ModelSwitchPanel.detail.pricing.perVideo": "~ {{amount}} / видео",
|
||
"ModelSwitchPanel.detail.pricing.unit.audioInput": "Аудио-ввод",
|
||
"ModelSwitchPanel.detail.pricing.unit.audioInput_cacheRead": "Аудио-ввод (из кэша)",
|
||
"ModelSwitchPanel.detail.pricing.unit.audioOutput": "Аудио-вывод",
|
||
"ModelSwitchPanel.detail.pricing.unit.imageGeneration": "Генерация изображения",
|
||
"ModelSwitchPanel.detail.pricing.unit.imageInput": "Ввод изображения",
|
||
"ModelSwitchPanel.detail.pricing.unit.imageInput_cacheRead": "Ввод изображения (из кэша)",
|
||
"ModelSwitchPanel.detail.pricing.unit.imageOutput": "Вывод изображения",
|
||
"ModelSwitchPanel.detail.pricing.unit.textInput": "Ввод",
|
||
"ModelSwitchPanel.detail.pricing.unit.textInput_cacheRead": "Ввод (из кэша)",
|
||
"ModelSwitchPanel.detail.pricing.unit.textInput_cacheWrite": "Ввод (запись в кэш)",
|
||
"ModelSwitchPanel.detail.pricing.unit.textOutput": "Вывод",
|
||
"ModelSwitchPanel.detail.releasedAt": "Выпущено {{date}}",
|
||
"ModelSwitchPanel.emptyModel": "Нет включённых моделей. Перейдите в настройки, чтобы включить.",
|
||
"ModelSwitchPanel.emptyProvider": "Нет включённых провайдеров. Перейдите в настройки, чтобы включить одного из них.",
|
||
"ModelSwitchPanel.goToSettings": "Перейти в настройки",
|
||
"ModelSwitchPanel.manageProvider": "Управление провайдером",
|
||
"ModelSwitchPanel.provider": "Провайдер",
|
||
"ModelSwitchPanel.searchPlaceholder": "Поиск моделей...",
|
||
"ModelSwitchPanel.title": "Модель",
|
||
"ModelSwitchPanel.useModelFrom": "Использовать эту модель от:",
|
||
"MultiImagesUpload.actions.uploadMore": "Нажмите или перетащите для загрузки дополнительных изображений",
|
||
"MultiImagesUpload.modal.complete": "Готово",
|
||
"MultiImagesUpload.modal.newFileIndicator": "Новый",
|
||
"MultiImagesUpload.modal.selectImageToPreview": "Выберите изображение для предпросмотра",
|
||
"MultiImagesUpload.modal.title": "Управление изображениями ({{count}})",
|
||
"MultiImagesUpload.modal.upload": "Загрузить изображения",
|
||
"MultiImagesUpload.placeholder.primary": "Нажмите или перетащите для загрузки изображений",
|
||
"MultiImagesUpload.placeholder.secondary": "Поддерживается выбор нескольких изображений",
|
||
"MultiImagesUpload.progress.uploadingWithCount": "Загружено {{completed}} из {{total}}",
|
||
"MultiImagesUpload.validation.fileSizeExceeded": "Размер файла превышает допустимый максимум",
|
||
"MultiImagesUpload.validation.fileSizeExceededDetail": "{{fileName}} ({{actualSize}}) превышает максимальный размер {{maxSize}}",
|
||
"MultiImagesUpload.validation.fileSizeExceededMultiple": "{{count}} файлов превышают максимальный размер {{maxSize}}: {{fileList}}",
|
||
"MultiImagesUpload.validation.imageCountExceeded": "Превышено максимальное количество изображений",
|
||
"OllamaSetupGuide.action.close": "Закрыть подсказку",
|
||
"OllamaSetupGuide.action.start": "Установлено",
|
||
"OllamaSetupGuide.cors.description": "Из-за ограничений безопасности браузера необходимо настроить кросс-доменные разрешения, чтобы Ollama работал корректно.",
|
||
"OllamaSetupGuide.cors.linux.env": "Добавьте `Environment` в раздел [Service] и установите переменную окружения OLLAMA_ORIGINS:",
|
||
"OllamaSetupGuide.cors.linux.reboot": "Перезагрузите systemd и перезапустите Ollama",
|
||
"OllamaSetupGuide.cors.linux.systemd": "Отредактируйте службу ollama с помощью systemd:",
|
||
"OllamaSetupGuide.cors.macos": "Откройте приложение 'Терминал', вставьте следующую команду и нажмите Enter для выполнения.",
|
||
"OllamaSetupGuide.cors.reboot": "Пожалуйста, перезапустите службу Ollama после выполнения.",
|
||
"OllamaSetupGuide.cors.title": "Настройка Ollama для кросс-доменного доступа",
|
||
"OllamaSetupGuide.cors.windows": "В Windows откройте 'Панель управления' и перейдите к редактированию системных переменных среды. Создайте новую переменную среды с именем 'OLLAMA_ORIGINS' для вашей учётной записи пользователя, установите значение * и нажмите 'ОК/Применить' для сохранения.",
|
||
"OllamaSetupGuide.install.description": "Убедитесь, что Ollama запущен. Если вы ещё не скачали Ollama, посетите официальный сайт, чтобы <1>скачать</1> его.",
|
||
"OllamaSetupGuide.install.docker": "Если вы предпочитаете использовать Docker, Ollama также предоставляет официальный образ Docker, который можно загрузить с помощью следующей команды:",
|
||
"OllamaSetupGuide.install.linux.command": "Установите с помощью следующей команды:",
|
||
"OllamaSetupGuide.install.linux.manual": "Вы также можете ознакомиться с <1>руководством по ручной установке для Linux</1>.",
|
||
"OllamaSetupGuide.install.title": "Установите и запустите приложение Ollama локально",
|
||
"OllamaSetupGuide.install.windowsTab": "Windows (предварительная версия)",
|
||
"Thinking.thinking": "Глубокое мышление...",
|
||
"Thinking.thought": "Обдумано (за {{duration}} секунд)",
|
||
"Thinking.thoughtWithDuration": "Обдумано",
|
||
"devTools.cache.empty": "Кэш пуст",
|
||
"devTools.metadata.empty": "Метаданные отсутствуют",
|
||
"knowledgeBase.empty.description": "Создайте библиотеку для организации и управления вашими ресурсами",
|
||
"knowledgeBase.empty.search": "Соответствующая библиотека не найдена",
|
||
"knowledgeBase.empty.title": "Библиотека отсутствует"
|
||
}
|