From 3565cc6ac60709c71366ed79395b20531d402a1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Padez?= Date: Sun, 23 Aug 2026 16:13:05 +0000 Subject: [PATCH] file view container's context menus keyed (97 -> 80) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The folder right-click menu and the search-results menu: copy path, chat about this, paste, new file/folder, upload, clone, hidden-files toggle, create dashboard, download video, dictate, open folder, show location, and the drop-to-upload overlay. "Hide hidden files" / "Show hidden files" was a ternary inside JSX, which the scanner's own docs say it cannot see — found by reading the file rather than by the tool. Two keys, one per branch, since English and Portuguese verbs differ by more than a negation. files.menu.* is a new sub-namespace under the existing files.* group rather than a flat name, since a bare "download" would otherwise collide with nothing today but reads as ambiguous next to files.downloadFailed. --- .../components/FileViewContainer.tsx | 40 ++++++++++--------- .../officerdev/src/locales/en-GB.json | 22 +++++++++- .../officerdev/src/locales/pt-PT.json | 22 +++++++++- 3 files changed, 64 insertions(+), 20 deletions(-) diff --git a/src/workspaces/officerdev/src/apps/FileBrowser/FileBrowserApp/components/FileViewContainer.tsx b/src/workspaces/officerdev/src/apps/FileBrowser/FileBrowserApp/components/FileViewContainer.tsx index 78224d4d..d8ef5ce0 100644 --- a/src/workspaces/officerdev/src/apps/FileBrowser/FileBrowserApp/components/FileViewContainer.tsx +++ b/src/workspaces/officerdev/src/apps/FileBrowser/FileBrowserApp/components/FileViewContainer.tsx @@ -29,12 +29,14 @@ import { import type { UseFileBrowserAppType } from '../useFileBrowserApp'; import { NewEntryDialog } from './NewEntryDialog'; import { FileGrid } from './FileGrid'; +import { useTranslation } from '../../../../locales'; type FileViewContainerProps = { fileBrowserManager: UseFileBrowserAppType; }; export const FileViewContainer = ({ fileBrowserManager }: FileViewContainerProps) => { + const { t } = useTranslation(); const { searchQuery, searching, @@ -85,11 +87,11 @@ export const FileViewContainer = ({ fileBrowserManager }: FileViewContainerProps - Copy path + {t('files.menu.copyPath')} - Chat about this + {t('files.menu.chatAboutThis')} {/* Gated on the clipboard, as both toolbars already were. Ungated it fell through to the OS clipboard path, which on an insecure origin toasts an error and otherwise silently @@ -97,7 +99,7 @@ export const FileViewContainer = ({ fileBrowserManager }: FileViewContainerProps {clipboard !== null && ( - Paste + {t('files.menu.paste')} )} {/* Both open the same dialog. It validates as you type — against the names already on screen — @@ -105,43 +107,43 @@ export const FileViewContainer = ({ fileBrowserManager }: FileViewContainerProps rejected request. The server still refuses to clobber; this is the courtesy, that is the lock. */} setNewEntry('file')} className="cursor-pointer"> - New file + {t('files.menu.newFile')} setNewEntry('folder')} className="cursor-pointer"> - New folder + {t('files.menu.newFolder')} fileInputRef.current?.click()} className="cursor-pointer"> - Upload files + {t('files.menu.uploadFiles')} folderInputRef.current?.click()} className="cursor-pointer"> - Upload folder + {t('files.menu.uploadFolder')} {/* Was toolbar-only, and the toolbar hides it under `md:` — so on a phone there was no way to clone at all. */} setNewEntry('clone')} className="cursor-pointer"> - Clone repository + {t('files.menu.cloneRepository')} setShowHidden(!showHidden)} className="cursor-pointer"> {showHidden ? : } - {showHidden ? 'Hide hidden files' : 'Show hidden files'} + {showHidden ? t('files.menu.hideHiddenFiles') : t('files.menu.showHiddenFiles')} - Create Dashboard here + {t('files.menu.createDashboardHere')} setShowVideoDownload(true)} className="cursor-pointer"> - Download video + {t('files.menu.downloadVideo')} setShowDictate(true)} className="cursor-pointer"> - Dictate + {t('files.menu.dictate')} ); @@ -158,7 +160,7 @@ export const FileViewContainer = ({ fileBrowserManager }: FileViewContainerProps
- Drop files to upload + {t('files.menu.dropToUpload')}
)} @@ -213,23 +215,23 @@ export const FileViewContainer = ({ fileBrowserManager }: FileViewContainerProps {isDir && ( handleSearchResultClick(entry)} className="cursor-pointer"> - Open folder + {t('files.menu.openFolder')} )} handleShowLocation(entry)} className="cursor-pointer"> - Show location + {t('files.menu.showLocation')} {absPath && ( handleCopyAbsPath(absPath)} className="cursor-pointer"> - Copy path + {t('files.menu.copyPath')} )} {absPath && !isDir && ( handleDownloadPath(absPath)} className="cursor-pointer"> - Download + {t('files.menu.download')} )} @@ -238,7 +240,9 @@ export const FileViewContainer = ({ fileBrowserManager }: FileViewContainerProps })} ) : searchResults ? ( -
No results found
+
+ {t('files.menu.noResults')} +
) : null} diff --git a/src/workspaces/officerdev/src/locales/en-GB.json b/src/workspaces/officerdev/src/locales/en-GB.json index c0009183..af44d33d 100644 --- a/src/workspaces/officerdev/src/locales/en-GB.json +++ b/src/workspaces/officerdev/src/locales/en-GB.json @@ -484,7 +484,27 @@ "duplicated": "Duplicated “{{name}}”", "pastedInto": "Pasted into “{{name}}”", "unpinned": "Unpinned “{{name}}”", - "pinned": "Pinned “{{name}}”" + "pinned": "Pinned “{{name}}”", + "menu": { + "copyPath": "Copy path", + "chatAboutThis": "Chat about this", + "paste": "Paste", + "newFile": "New file", + "newFolder": "New folder", + "uploadFiles": "Upload files", + "uploadFolder": "Upload folder", + "cloneRepository": "Clone repository", + "hideHiddenFiles": "Hide hidden files", + "showHiddenFiles": "Show hidden files", + "createDashboardHere": "Create Dashboard here", + "downloadVideo": "Download video", + "dictate": "Dictate", + "dropToUpload": "Drop files to upload", + "openFolder": "Open folder", + "showLocation": "Show location", + "download": "Download", + "noResults": "No results found" + } }, "taskRunner": { "stop": "Stop", diff --git a/src/workspaces/officerdev/src/locales/pt-PT.json b/src/workspaces/officerdev/src/locales/pt-PT.json index 0dce6688..c8a2cfe4 100644 --- a/src/workspaces/officerdev/src/locales/pt-PT.json +++ b/src/workspaces/officerdev/src/locales/pt-PT.json @@ -484,7 +484,27 @@ "duplicated": "“{{name}}” duplicado", "pastedInto": "Colado em “{{name}}”", "unpinned": "“{{name}}” removido dos fixados", - "pinned": "“{{name}}” fixado" + "pinned": "“{{name}}” fixado", + "menu": { + "copyPath": "Copiar caminho", + "chatAboutThis": "Conversar sobre isto", + "paste": "Colar", + "newFile": "Novo ficheiro", + "newFolder": "Nova pasta", + "uploadFiles": "Carregar ficheiros", + "uploadFolder": "Carregar pasta", + "cloneRepository": "Clonar repositório", + "hideHiddenFiles": "Ocultar ficheiros ocultos", + "showHiddenFiles": "Mostrar ficheiros ocultos", + "createDashboardHere": "Criar painel aqui", + "downloadVideo": "Descarregar vídeo", + "dictate": "Ditar", + "dropToUpload": "Largue ficheiros para carregar", + "openFolder": "Abrir pasta", + "showLocation": "Mostrar localização", + "download": "Descarregar", + "noResults": "Nenhum resultado encontrado" + } }, "taskRunner": { "stop": "Parar",