diff --git a/frontend/public/locales/en-GB/translation.json b/frontend/public/locales/en-GB/translation.json index f34301dc4..859cc41dd 100644 --- a/frontend/public/locales/en-GB/translation.json +++ b/frontend/public/locales/en-GB/translation.json @@ -1622,5 +1622,37 @@ "toolPicker": { "searchPlaceholder": "Search tools...", "noToolsFound": "No tools found" + }, + "fileUpload": { + "selectFile": "Select a file", + "selectFiles": "Select files", + "selectPdfToView": "Select a PDF to view", + "selectPdfToEdit": "Select a PDF to edit", + "chooseFromStorage": "Choose a file from storage or upload a new PDF", + "chooseFromStorageMultiple": "Choose files from storage or upload new PDFs", + "loadFromStorage": "Load from Storage", + "filesAvailable": "files available", + "loading": "Loading...", + "or": "or", + "dropFileHere": "Drop file here or click to upload", + "dropFilesHere": "Drop files here or click to upload", + "pdfFilesOnly": "PDF files only", + "supportedFileTypes": "Supported file types", + "uploadFile": "Upload File", + "uploadFiles": "Upload Files", + "noFilesInStorage": "No files available in storage. Upload some files first.", + "selectFromStorage": "Select from Storage", + "backToTools": "Back to Tools" + }, + "fileManager": { + "title": "Upload PDF Files", + "subtitle": "Add files to your storage for easy access across tools", + "filesSelected": "files selected", + "clearSelection": "Clear Selection", + "openInFileEditor": "Open in File Editor", + "uploadError": "Failed to upload some files.", + "failedToOpen": "Failed to open file. It may have been removed from storage.", + "failedToLoad": "Failed to load file to active set.", + "storageCleared": "Browser cleared storage. Files have been removed. Please re-upload." } } \ No newline at end of file diff --git a/frontend/src/components/fileManagement/FileManager.tsx b/frontend/src/components/fileManagement/FileManager.tsx index 8b6f91b33..206a22894 100644 --- a/frontend/src/components/fileManagement/FileManager.tsx +++ b/frontend/src/components/fileManagement/FileManager.tsx @@ -133,7 +133,7 @@ const FileManager = ({ const isPurged = await checkForPurge(files); if (isPurged) { console.warn('IndexedDB purge detected - forcing UI reload'); - setNotification('Browser cleared storage. Files have been removed. Please re-upload.'); + setNotification(t("fileManager.storageCleared", "Browser cleared storage. Files have been removed. Please re-upload.")); const reloadedFiles = await forceReloadFiles(); setFiles(reloadedFiles); setFilesLoaded(true); @@ -220,7 +220,7 @@ const FileManager = ({ } } catch (error) { console.error('Failed to load file to active set:', error); - setNotification('Failed to open file. It may have been removed from storage.'); + setNotification(t("fileManager.failedToOpen", "Failed to open file. It may have been removed from storage.")); } }; @@ -234,7 +234,7 @@ const FileManager = ({ } } catch (error) { console.error('Failed to load file to active set:', error); - setNotification('Failed to open file. It may have been removed from storage.'); + setNotification(t("fileManager.failedToOpen", "Failed to open file. It may have been removed from storage.")); } }; @@ -309,7 +309,7 @@ const FileManager = ({ - {selectedFiles.length} file{selectedFiles.length > 1 ? 's' : ''} selected + {selectedFiles.length} {t("fileManager.filesSelected", "files selected")} @@ -335,8 +335,8 @@ const FileManager = ({ {/* Files Display */} {files.length === 0 ? ( { // Handle multiple files - add to storage AND active set diff --git a/frontend/src/components/shared/FilePickerModal.tsx b/frontend/src/components/shared/FilePickerModal.tsx index bb02332a6..2a5cfa76e 100644 --- a/frontend/src/components/shared/FilePickerModal.tsx +++ b/frontend/src/components/shared/FilePickerModal.tsx @@ -123,28 +123,28 @@ const FilePickerModal = ({ {sharedFiles.length === 0 ? ( - No files available in storage. Upload some files first. + {t("fileUpload.noFilesInStorage", "No files available in storage. Upload some files first.")} ) : ( <> {/* Selection controls */} - {sharedFiles.length} files available + {sharedFiles.length} {t("fileUpload.filesAvailable", "files available")} @@ -234,7 +234,7 @@ const FilePickerModal = ({ {/* Selection summary */} {selectedFileIds.length > 0 && ( - {selectedFileIds.length} file{selectedFileIds.length > 1 ? 's' : ''} selected + {selectedFileIds.length} {t("fileManager.filesSelected", "files selected")} )} @@ -243,13 +243,16 @@ const FilePickerModal = ({ {/* Action buttons */} diff --git a/frontend/src/components/shared/FileUploadSelector.tsx b/frontend/src/components/shared/FileUploadSelector.tsx index 18bfa282a..dff6875e0 100644 --- a/frontend/src/components/shared/FileUploadSelector.tsx +++ b/frontend/src/components/shared/FileUploadSelector.tsx @@ -24,8 +24,8 @@ interface FileUploadSelectorProps { } const FileUploadSelector = ({ - title = "Select a file", - subtitle = "Choose from storage or upload a new file", + title, + subtitle, showDropzone = true, sharedFiles = [], onFileSelect, @@ -58,6 +58,12 @@ const FileUploadSelector = ({ } }, [allowMultiple, onFileSelect, onFilesSelect]); + // Get default title and subtitle from translations if not provided + const displayTitle = title || t(allowMultiple ? "fileUpload.selectFiles" : "fileUpload.selectFile", + allowMultiple ? "Select files" : "Select a file"); + const displaySubtitle = subtitle || t(allowMultiple ? "fileUpload.chooseFromStorageMultiple" : "fileUpload.chooseFromStorage", + allowMultiple ? "Choose files from storage or upload new PDFs" : "Choose a file from storage or upload a new PDF"); + return ( <> @@ -65,10 +71,10 @@ const FileUploadSelector = ({ - {title} + {displayTitle} - {subtitle} + {displaySubtitle} @@ -81,11 +87,14 @@ const FileUploadSelector = ({ disabled={disabled || sharedFiles.length === 0} loading={loading} > - {loading ? "Loading..." : `Load from Storage (${sharedFiles.length} files available)`} + {loading + ? t("fileUpload.loading", "Loading...") + : `${t("fileUpload.loadFromStorage", "Load from Storage")} (${sharedFiles.length} ${t("fileUpload.filesAvailable", "files available")})` + } - or + {t("fileUpload.or", "or")} {showDropzone ? ( @@ -99,10 +108,14 @@ const FileUploadSelector = ({
- {allowMultiple ? 'Drop files here or click to upload' : 'Drop file here or click to upload'} + {t(allowMultiple ? "fileUpload.dropFilesHere" : "fileUpload.dropFileHere", + allowMultiple ? "Drop files here or click to upload" : "Drop file here or click to upload")} - {accept.includes('application/pdf') ? 'PDF files only' : 'Supported file types'} + {accept.includes('application/pdf') + ? t("fileUpload.pdfFilesOnly", "PDF files only") + : t("fileUpload.supportedFileTypes", "Supported file types") + }
@@ -121,7 +134,8 @@ const FileUploadSelector = ({ disabled={disabled} loading={loading} > - Upload {allowMultiple ? 'Files' : 'File'} + {t(allowMultiple ? "fileUpload.uploadFiles" : "fileUpload.uploadFile", + allowMultiple ? "Upload Files" : "Upload File")} )} diff --git a/frontend/src/pages/HomePage.tsx b/frontend/src/pages/HomePage.tsx index 969623d80..acd8a85b6 100644 --- a/frontend/src/pages/HomePage.tsx +++ b/frontend/src/pages/HomePage.tsx @@ -241,7 +241,7 @@ export default function HomePage() { onClick={() => setLeftPanelView('toolPicker')} className="text-sm" > - ← Back to Tools + ← {t("fileUpload.backToTools", "Back to Tools")} @@ -293,8 +293,11 @@ export default function HomePage() { ) : (currentView != "fileManager") && !activeFiles[0] ? ( { addToActiveFiles(file);