Files
Innei b22ac0f266 feat: drag folders into chat input as @localFile mentions on desktop (#15071)
When the agent's runtime mode is `local` (or it's a heterogeneous agent),
dragging a folder into the conversation now inserts a `<localFile path="..."
isDirectory />` mention at the editor cursor instead of recursively uploading
its contents. Mixed drops route folders to mentions and files to the existing
upload pipeline in drop order.

The drag overlay detects content kind on `dragenter` via `webkitGetAsEntry`
and swaps the title/desc/icon between "Upload Files", "Reference Folder", and
the mixed variant.

Also aligns the @ mention search and server-side local file materialization
gates with the same condition (`isLocalSystemEnabled || isHeterogeneous`)
since `lobe-local-system` plugin presence is already overridden in
toolEngineering — runtime mode is the only real gate.
2026-05-21 21:09:19 +08:00

206 lines
15 KiB
JSON

{
"ArgsInput.addArgument": "Add Argument",
"ArgsInput.argumentPlaceholder": "Argument {{index}}",
"ArgsInput.enterFirstArgument": "Enter first argument...",
"DragUpload.dragDesc": "Drag and drop files here to upload multiple images.",
"DragUpload.dragFileDesc": "Drag and drop images and files here to upload multiple images and files.",
"DragUpload.dragFileTitle": "Upload Files",
"DragUpload.dragFolderDesc": "Drop the folder to reference it as @mention in the chat input.",
"DragUpload.dragFolderTitle": "Reference Folder",
"DragUpload.dragMixedDesc": "Folders are inserted as @mentions; files are uploaded.",
"DragUpload.dragMixedTitle": "Reference Folder & Upload Files",
"DragUpload.dragTitle": "Upload Images",
"FileManager.actions.addToLibrary": "Add to Library",
"FileManager.actions.batchChunking": "Batch Chunking",
"FileManager.actions.chunking": "Chunking",
"FileManager.actions.chunkingTooltip": "Split the file into multiple text chunks and embedding them for semantic search and file dialogue.",
"FileManager.actions.chunkingUnsupported": "This file does not support chunking.",
"FileManager.actions.confirmDelete": "You are about to delete this file. Once deleted, it cannot be recovered. Please confirm your action.",
"FileManager.actions.confirmDeleteAllFiles": "You are about to delete all results in the current view. Once deleted, they cannot be recovered. Please confirm your action.",
"FileManager.actions.confirmDeleteFolder": "You are about to delete this folder and all of its contents. This action cannot be undone. Please confirm your decision.",
"FileManager.actions.confirmDeleteMultiFiles": "You are about to delete the selected {{count}} files. Once deleted, they cannot be recovered. Please confirm your action.",
"FileManager.actions.confirmRemoveFromLibrary": "You're about to remove {{count}} selected file(s) from the Library. They'll still be available in All Files. Confirm to continue.",
"FileManager.actions.copyUrl": "Copy Link",
"FileManager.actions.copyUrlSuccess": "File url copied successfully.",
"FileManager.actions.createChunkingTask": "Preparing...",
"FileManager.actions.deleteSuccess": "File deleted successfully.",
"FileManager.actions.downloading": "Downloading file...",
"FileManager.actions.goBack": "Go to previous page",
"FileManager.actions.goForward": "Go to next page",
"FileManager.actions.goToParent": "Go to parent folder",
"FileManager.actions.moveError": "Failed to move file",
"FileManager.actions.moveHere": "Move here",
"FileManager.actions.moveSuccess": "File moved successfully",
"FileManager.actions.moveToFolder": "Move to...",
"FileManager.actions.moveToOtherLibrary": "Move to another Library",
"FileManager.actions.moveToRoot": "Move to root directory",
"FileManager.actions.moving": "Moving...",
"FileManager.actions.removeFromLibrary": "Remove from Library",
"FileManager.actions.removeFromLibrarySuccess": "File removed successfully.",
"FileManager.actions.rename": "Rename",
"FileManager.actions.renameError": "Rename failed",
"FileManager.actions.renameSuccess": "Rename successful",
"FileManager.bottom": "You've reached the end.",
"FileManager.config.showFilesInLibrary": "Show content in Library",
"FileManager.emptyStatus.actions.file": "Upload File",
"FileManager.emptyStatus.actions.folder": "Upload Folder",
"FileManager.emptyStatus.actions.knowledgeBase": "Create Library",
"FileManager.emptyStatus.or": "or",
"FileManager.emptyStatus.title": "Drag files or folders here",
"FileManager.noFolders": "No folders available",
"FileManager.search.noResults": "No files found",
"FileManager.search.placeholder": "Search files...",
"FileManager.sort.dateAdded": "Date Added",
"FileManager.sort.name": "Name",
"FileManager.sort.size": "Size",
"FileManager.title.createdAt": "Created At",
"FileManager.title.size": "Size",
"FileManager.title.title": "File",
"FileManager.total.allSelectedCount": "All {{count}} items are selected.",
"FileManager.total.allSelectedFallback": "All results are selected.",
"FileManager.total.fileCount": "Total {{count}} items",
"FileManager.total.loadedSelectedCount": "Selected {{count}} loaded items.",
"FileManager.total.selectAll": "Select all {{count}} items",
"FileManager.total.selectAllFallback": "Select all items",
"FileManager.total.selectedCount": "Selected {{count}} items",
"FileManager.view.list": "List View",
"FileManager.view.masonry": "Grid View",
"FileParsingStatus.chunks.embeddingStatus.empty": "Text chunks have not been fully embedded, which will render the semantic search feature unavailable. To improve search quality, please embedding the text chunks.",
"FileParsingStatus.chunks.embeddingStatus.error": "Embedding failed",
"FileParsingStatus.chunks.embeddingStatus.errorResult": "Vectorization failed, please check and try again. Error detail:",
"FileParsingStatus.chunks.embeddingStatus.processing": "Text chunks are being embedded, please be patient.",
"FileParsingStatus.chunks.embeddingStatus.success": "All current text chunks have been embedded",
"FileParsingStatus.chunks.embeddings": "Embedding",
"FileParsingStatus.chunks.status.error": "Chunking failed",
"FileParsingStatus.chunks.status.errorResult": "Chunking failed, please check and try again. Error detail:",
"FileParsingStatus.chunks.status.processing": "Chunking",
"FileParsingStatus.chunks.status.processingTip": "The server is splitting text chunks; closing the page will not affect the chunking progress.",
"GenerationModelItem.creditsPerImageApproximate": "Approx. {{amount}} Credits / image",
"GenerationModelItem.creditsPerImageExact": "{{amount}} Credits / image",
"GenerationModelItem.creditsPerVideoApproximate": "Approx. {{amount}} Credits / video",
"GenerationModelItem.creditsPerVideoExact": "{{amount}} Credits / video",
"GoBack.back": "Back",
"HtmlPreview.actions.download": "Download",
"HtmlPreview.actions.preview": "Preview",
"HtmlPreview.iframeTitle": "HTML Preview",
"HtmlPreview.mode.code": "Code",
"HtmlPreview.mode.preview": "Preview",
"HtmlPreview.title": "HTML Preview",
"ImageUpload.actions.changeImage": "Click to change image",
"ImageUpload.actions.dropMultipleFiles": "Uploading multiple files at once is not supported; only the first file will be used",
"ImageUpload.placeholder.primary": "Add Image",
"ImageUpload.placeholder.secondary": "Click or drag to upload",
"ImageUpload.validation.imageAspectRatioInvalid": "{{fileName}} aspect ratio ({{actualRatio}}) is out of range, required: {{range}}",
"ImageUpload.validation.imageDimensionTooLarge": "{{fileName}} ({{width}}x{{height}}) is too large, required: {{maxDimension}}",
"ImageUpload.validation.imageDimensionTooSmall": "{{fileName}} ({{width}}x{{height}}) is too small, required: {{minDimension}}",
"KeyValueEditor.addButton": "Add a row",
"KeyValueEditor.deleteTooltip": "Delete",
"KeyValueEditor.duplicateKeyError": "Key must be unique",
"KeyValueEditor.keyPlaceholder": "Key",
"KeyValueEditor.valuePlaceholder": "Value",
"LocalFile.action.open": "Open",
"LocalFile.action.showInFolder": "Show in Folder",
"MaxTokenSlider.unlimited": "Unlimited",
"ModelSelect.featureTag.custom": "Custom model, by default, supports both function calls and visual recognition. Please verify the availability of the above capabilities based on actual situations.",
"ModelSelect.featureTag.file": "This model supports file upload for reading and recognition.",
"ModelSelect.featureTag.functionCall": "This model supports tool calls.",
"ModelSelect.featureTag.imageOutput": "This model supports image generation.",
"ModelSelect.featureTag.reasoning": "This model supports deep thinking.",
"ModelSelect.featureTag.search": "This model supports online search.",
"ModelSelect.featureTag.tokens": "This model supports up to {{tokens}} tokens in a single session.",
"ModelSelect.featureTag.video": "This model supports video recognition",
"ModelSelect.featureTag.vision": "This model supports visual recognition.",
"ModelSelect.removed": "The model is not in the list. It will be automatically removed if deselected.",
"ModelSwitchPanel.byModel": "By Model",
"ModelSwitchPanel.byProvider": "By Provider",
"ModelSwitchPanel.detail.abilities": "Abilities",
"ModelSwitchPanel.detail.abilities.files": "Files",
"ModelSwitchPanel.detail.abilities.functionCall": "Tool Calling",
"ModelSwitchPanel.detail.abilities.imageOutput": "Image Output",
"ModelSwitchPanel.detail.abilities.reasoning": "Reasoning",
"ModelSwitchPanel.detail.abilities.search": "Search",
"ModelSwitchPanel.detail.abilities.video": "Video",
"ModelSwitchPanel.detail.abilities.vision": "Vision",
"ModelSwitchPanel.detail.config": "Model Config",
"ModelSwitchPanel.detail.context": "Context Length",
"ModelSwitchPanel.detail.pricing": "Pricing",
"ModelSwitchPanel.detail.pricing.cachedInput": "Cached input ${{amount}}/M",
"ModelSwitchPanel.detail.pricing.credits.cachedInput": "Cached input {{amount}} credits/M tokens",
"ModelSwitchPanel.detail.pricing.credits.image": "credits/img",
"ModelSwitchPanel.detail.pricing.credits.input": "Input {{amount}} credits/M tokens",
"ModelSwitchPanel.detail.pricing.credits.megapixel": "credits/MP",
"ModelSwitchPanel.detail.pricing.credits.millionCharacters": "credits/M chars",
"ModelSwitchPanel.detail.pricing.credits.millionTokens": "credits/M tokens",
"ModelSwitchPanel.detail.pricing.credits.output": "Output {{amount}} credits/M tokens",
"ModelSwitchPanel.detail.pricing.credits.perImage": "~ {{amount}} credits / image",
"ModelSwitchPanel.detail.pricing.credits.perVideo": "~ {{amount}} credits / video",
"ModelSwitchPanel.detail.pricing.credits.second": "credits/s",
"ModelSwitchPanel.detail.pricing.group.audio": "Audio",
"ModelSwitchPanel.detail.pricing.group.image": "Image",
"ModelSwitchPanel.detail.pricing.group.text": "Text",
"ModelSwitchPanel.detail.pricing.group.video": "Video",
"ModelSwitchPanel.detail.pricing.input": "Input ${{amount}}/M",
"ModelSwitchPanel.detail.pricing.output": "Output ${{amount}}/M",
"ModelSwitchPanel.detail.pricing.perImage": "~ ${{amount}} / image",
"ModelSwitchPanel.detail.pricing.perVideo": "~ ${{amount}} / video",
"ModelSwitchPanel.detail.pricing.unit.audioInput": "Audio Input",
"ModelSwitchPanel.detail.pricing.unit.audioInput_cacheRead": "Audio Input (Cached)",
"ModelSwitchPanel.detail.pricing.unit.audioOutput": "Audio Output",
"ModelSwitchPanel.detail.pricing.unit.imageGeneration": "Image Generation",
"ModelSwitchPanel.detail.pricing.unit.imageInput": "Image Input",
"ModelSwitchPanel.detail.pricing.unit.imageInput_cacheRead": "Image Input (Cached)",
"ModelSwitchPanel.detail.pricing.unit.imageOutput": "Image Output",
"ModelSwitchPanel.detail.pricing.unit.textInput": "Input",
"ModelSwitchPanel.detail.pricing.unit.textInput_cacheRead": "Input (Cached)",
"ModelSwitchPanel.detail.pricing.unit.textInput_cacheWrite": "Input (Cache Write)",
"ModelSwitchPanel.detail.pricing.unit.textOutput": "Output",
"ModelSwitchPanel.detail.pricing.unit.videoGeneration": "Video Generation",
"ModelSwitchPanel.detail.pricing.unit.videoInput": "Video Input",
"ModelSwitchPanel.detail.releasedAt": "Released {{date}}",
"ModelSwitchPanel.emptyModel": "No enabled model. Please go to settings to enable.",
"ModelSwitchPanel.emptyProvider": "No enabled providers. Please go to settings to enable one.",
"ModelSwitchPanel.goToSettings": "Go to settings",
"ModelSwitchPanel.manageProvider": "Manage Provider",
"ModelSwitchPanel.provider": "Provider",
"ModelSwitchPanel.searchPlaceholder": "Search models...",
"ModelSwitchPanel.title": "Model",
"ModelSwitchPanel.useModelFrom": "Use this model from:",
"MultiImagesUpload.actions.uploadMore": "Click or drag to upload more",
"MultiImagesUpload.modal.complete": "Done",
"MultiImagesUpload.modal.newFileIndicator": "New",
"MultiImagesUpload.modal.selectImageToPreview": "Please select an image to preview",
"MultiImagesUpload.modal.title": "Manage Images ({{count}})",
"MultiImagesUpload.modal.upload": "Upload Images",
"MultiImagesUpload.placeholder.primary": "Click or drag to upload images",
"MultiImagesUpload.placeholder.secondary": "Supports multiple image selection",
"MultiImagesUpload.progress.uploadingWithCount": "{{completed}}/{{total}} uploaded",
"MultiImagesUpload.validation.fileSizeExceeded": "File size exceeds the maximum allowed",
"MultiImagesUpload.validation.fileSizeExceededDetail": "{{fileName}} ({{actualSize}}) exceeds the maximum allowed size of {{maxSize}}",
"MultiImagesUpload.validation.fileSizeExceededMultiple": "{{count}} files exceed the maximum allowed size of {{maxSize}}: {{fileList}}",
"MultiImagesUpload.validation.imageCountExceeded": "Maximum number of images exceeded",
"OllamaSetupGuide.action.close": "Close Prompt",
"OllamaSetupGuide.action.start": "Installed",
"OllamaSetupGuide.cors.description": "Due to browser security restrictions, you need to configure cross-origin settings for Ollama to function properly.",
"OllamaSetupGuide.cors.linux.env": "Add `Environment` under the [Service] section, and set the OLLAMA_ORIGINS environment variable:",
"OllamaSetupGuide.cors.linux.reboot": "Reload systemd and restart Ollama",
"OllamaSetupGuide.cors.linux.systemd": "Edit the ollama service using systemd:",
"OllamaSetupGuide.cors.macos": "Please open the 'Terminal' application, paste the following command, and press Enter to run it.",
"OllamaSetupGuide.cors.reboot": "Please restart the Ollama service after the execution is complete.",
"OllamaSetupGuide.cors.title": "Configure Ollama for Cross-Origin Access",
"OllamaSetupGuide.cors.windows": "On Windows, click 'Control Panel' and go to edit system environment variables. Create a new environment variable named 'OLLAMA_ORIGINS' for your user account, with the value set to *, and click 'OK/Apply' to save.",
"OllamaSetupGuide.install.description": "Please ensure that you have started Ollama. If you haven't downloaded Ollama, please visit the official website to <1>download</1> it.",
"OllamaSetupGuide.install.docker": "If you prefer to use Docker, Ollama also provides an official Docker image, which you can pull using the following command:",
"OllamaSetupGuide.install.linux.command": "Install using the following command:",
"OllamaSetupGuide.install.linux.manual": "Alternatively, you can refer to the <1>Linux Manual Installation Guide</1> for a manual installation.",
"OllamaSetupGuide.install.title": "Install and Start the Ollama Application Locally",
"OllamaSetupGuide.install.windowsTab": "Windows (Preview)",
"Thinking.thinking": "Deep Thinking...",
"Thinking.thought": "Deeply Thought (in {{duration}} seconds)",
"Thinking.thoughtWithDuration": "Deeply Thought",
"devTools.cache.empty": "Cache is empty",
"devTools.metadata.empty": "No metadata available",
"knowledgeBase.empty.description": "Create a Library to organize and manage your resources",
"knowledgeBase.empty.search": "No matching Library found",
"knowledgeBase.empty.title": "No Library available"
}