feat: add file manager context actions (#3027)

* feat(app): add file manager context actions

* fix: reshape file context actions

---------

Co-authored-by: Mohamed Boudra <boudra.moha@gmail.com>
This commit is contained in:
nikuscs
2026-08-10 18:18:23 +02:00
committed by GitHub
co-authored by Mohamed Boudra
parent a98d154b6b
commit ca2b633286
36 changed files with 4159 additions and 227 deletions
+32
View File
@@ -393,9 +393,32 @@ export const ar: TranslationResources = {
fileActions: {
openFile: "افتح الملف",
copyPath: "نسخ المسار",
copyRelativePath: "نسخ المسار النسبي",
revealIn: "إظهار في {{target}}",
download: "تحميل",
addToChat: "إضافة إلى الدردشة",
moreActions: "المزيد من الإجراءات",
newFile: "ملف جديد",
newFolder: "مجلد جديد",
collapseFolder: "طي المجلد",
rename: "إعادة تسمية",
duplicate: "تكرار",
revert: "تجاهل التغييرات",
delete: "حذف",
confirmDelete: {
fileTitle: "حذف الملف؟",
folderTitle: "حذف المجلد؟",
message: 'سيتم حذف "{{name}}" نهائيًا.',
confirm: "حذف",
cancel: "إلغاء",
},
confirmRevert: {
title: "تجاهل التغييرات؟",
message: 'سيتم تجاهل التغييرات في "{{name}}" نهائيًا.',
confirm: "تجاهل",
cancel: "إلغاء",
failed: "فشل تجاهل التغييرات",
},
},
fileExplorer: {
sort: {
@@ -425,6 +448,15 @@ export const ar: TranslationResources = {
},
errors: {
failedToListDirectory: "فشل في سرد ​​الدليل",
createFailed: "فشل إنشاء العنصر",
renameFailed: "فشل إعادة تسمية العنصر",
duplicateFailed: "فشل تكرار العنصر",
revealFailed: "فشل إظهار العنصر",
deleteFailed: "فشل حذف العنصر",
},
draft: {
filePlaceholder: "اسم الملف",
folderPlaceholder: "اسم المجلد",
},
},
setup: {
+32
View File
@@ -392,9 +392,32 @@ export const en = {
fileActions: {
openFile: "Open file",
copyPath: "Copy path",
copyRelativePath: "Copy relative path",
revealIn: "Reveal in {{target}}",
download: "Download",
addToChat: "Add to chat",
moreActions: "More actions",
newFile: "New file",
newFolder: "New folder",
collapseFolder: "Collapse folder",
rename: "Rename",
duplicate: "Duplicate",
revert: "Discard changes",
delete: "Delete",
confirmDelete: {
fileTitle: "Delete file?",
folderTitle: "Delete folder?",
message: '"{{name}}" will be permanently deleted.',
confirm: "Delete",
cancel: "Cancel",
},
confirmRevert: {
title: "Discard changes?",
message: 'Changes to "{{name}}" will be permanently discarded.',
confirm: "Discard",
cancel: "Cancel",
failed: "Failed to discard changes",
},
},
fileExplorer: {
sort: {
@@ -424,6 +447,15 @@ export const en = {
},
errors: {
failedToListDirectory: "Failed to list directory",
createFailed: "Failed to create entry",
renameFailed: "Failed to rename entry",
duplicateFailed: "Failed to duplicate entry",
revealFailed: "Failed to reveal entry",
deleteFailed: "Failed to delete entry",
},
draft: {
filePlaceholder: "File name",
folderPlaceholder: "Folder name",
},
},
setup: {
+32
View File
@@ -397,9 +397,32 @@ export const es: TranslationResources = {
fileActions: {
openFile: "Abrir archivo",
copyPath: "Copiar ruta",
copyRelativePath: "Copiar ruta relativa",
revealIn: "Mostrar en {{target}}",
download: "Descargar",
addToChat: "Añadir al chat",
moreActions: "Más acciones",
newFile: "Nuevo archivo",
newFolder: "Nueva carpeta",
collapseFolder: "Contraer carpeta",
rename: "Renombrar",
duplicate: "Duplicar",
revert: "Descartar cambios",
delete: "Eliminar",
confirmDelete: {
fileTitle: "¿Eliminar archivo?",
folderTitle: "¿Eliminar carpeta?",
message: '"{{name}}" se eliminará permanentemente.',
confirm: "Eliminar",
cancel: "Cancelar",
},
confirmRevert: {
title: "¿Descartar cambios?",
message: 'Los cambios en "{{name}}" se descartarán permanentemente.',
confirm: "Descartar",
cancel: "Cancelar",
failed: "No se pudieron descartar los cambios",
},
},
fileExplorer: {
sort: {
@@ -429,6 +452,15 @@ export const es: TranslationResources = {
},
errors: {
failedToListDirectory: "No se pudo listar el directorio",
createFailed: "No se pudo crear la entrada",
renameFailed: "No se pudo renombrar la entrada",
duplicateFailed: "No se pudo duplicar la entrada",
revealFailed: "No se pudo mostrar la entrada",
deleteFailed: "No se pudo eliminar la entrada",
},
draft: {
filePlaceholder: "Nombre del archivo",
folderPlaceholder: "Nombre de la carpeta",
},
},
setup: {
+32
View File
@@ -397,9 +397,32 @@ export const fr: TranslationResources = {
fileActions: {
openFile: "Ouvrir le fichier",
copyPath: "Copier le chemin",
copyRelativePath: "Copier le chemin relatif",
revealIn: "Afficher dans {{target}}",
download: "Télécharger",
addToChat: "Ajouter au chat",
moreActions: "Plus de propositions",
newFile: "Nouveau fichier",
newFolder: "Nouveau dossier",
collapseFolder: "Replier le dossier",
rename: "Renommer",
duplicate: "Dupliquer",
revert: "Abandonner les modifications",
delete: "Supprimer",
confirmDelete: {
fileTitle: "Supprimer le fichier ?",
folderTitle: "Supprimer le dossier ?",
message: "« {{name}} » sera définitivement supprimé.",
confirm: "Supprimer",
cancel: "Annuler",
},
confirmRevert: {
title: "Abandonner les modifications ?",
message: "Les modifications de « {{name}} » seront définitivement abandonnées.",
confirm: "Abandonner",
cancel: "Annuler",
failed: "Échec de l'abandon des modifications",
},
},
fileExplorer: {
sort: {
@@ -429,6 +452,15 @@ export const fr: TranslationResources = {
},
errors: {
failedToListDirectory: "Échec de la liste du répertoire",
createFailed: "Échec de la création de l'entrée",
renameFailed: "Échec du renommage de l'entrée",
duplicateFailed: "Échec de la duplication de l'entrée",
revealFailed: "Échec de l'affichage de l'entrée",
deleteFailed: "Échec de la suppression de l'entrée",
},
draft: {
filePlaceholder: "Nom du fichier",
folderPlaceholder: "Nom du dossier",
},
},
setup: {
+32
View File
@@ -397,9 +397,32 @@ export const ja: TranslationResources = {
fileActions: {
openFile: "ファイルを開く",
copyPath: "パスをコピー",
copyRelativePath: "相対パスをコピー",
revealIn: "{{target}}で表示",
download: "ダウンロード",
addToChat: "チャットに追加",
moreActions: "その他のアクション",
newFile: "新規ファイル",
newFolder: "新規フォルダ",
collapseFolder: "フォルダを折りたたむ",
rename: "名前を変更",
duplicate: "複製",
revert: "変更を破棄",
delete: "削除",
confirmDelete: {
fileTitle: "ファイルを削除しますか?",
folderTitle: "フォルダを削除しますか?",
message: "「{{name}}」は完全に削除されます。",
confirm: "削除",
cancel: "キャンセル",
},
confirmRevert: {
title: "変更を破棄しますか?",
message: "「{{name}}」への変更は完全に破棄されます。",
confirm: "破棄",
cancel: "キャンセル",
failed: "変更の破棄に失敗しました",
},
},
fileExplorer: {
sort: {
@@ -429,6 +452,15 @@ export const ja: TranslationResources = {
},
errors: {
failedToListDirectory: "ディレクトリの一覧取得に失敗しました",
createFailed: "エントリの作成に失敗しました",
renameFailed: "エントリの名前変更に失敗しました",
duplicateFailed: "エントリの複製に失敗しました",
revealFailed: "エントリの表示に失敗しました",
deleteFailed: "エントリの削除に失敗しました",
},
draft: {
filePlaceholder: "ファイル名",
folderPlaceholder: "フォルダ名",
},
},
setup: {
+32
View File
@@ -394,9 +394,32 @@ export const ko: TranslationResources = {
fileActions: {
openFile: "파일 열기",
copyPath: "경로 복사",
copyRelativePath: "상대 경로 복사",
revealIn: "{{target}}에서 보기",
download: "다운로드",
addToChat: "채팅에 추가",
moreActions: "추가 작업",
newFile: "새 파일",
newFolder: "새 폴더",
collapseFolder: "폴더 접기",
rename: "이름 바꾸기",
duplicate: "복제",
revert: "변경 사항 버리기",
delete: "삭제",
confirmDelete: {
fileTitle: "파일을 삭제할까요?",
folderTitle: "폴더를 삭제할까요?",
message: '"{{name}}"이(가) 영구적으로 삭제됩니다.',
confirm: "삭제",
cancel: "취소",
},
confirmRevert: {
title: "변경 사항을 버릴까요?",
message: '"{{name}}"의 변경 사항이 영구적으로 삭제됩니다.',
confirm: "버리기",
cancel: "취소",
failed: "변경 사항을 버리지 못했습니다",
},
},
fileExplorer: {
sort: {
@@ -426,6 +449,15 @@ export const ko: TranslationResources = {
},
errors: {
failedToListDirectory: "디렉터리 목록을 불러오지 못했습니다",
createFailed: "항목을 만들지 못했습니다",
renameFailed: "항목 이름을 바꾸지 못했습니다",
duplicateFailed: "항목을 복제하지 못했습니다",
revealFailed: "항목을 표시하지 못했습니다",
deleteFailed: "항목을 삭제하지 못했습니다",
},
draft: {
filePlaceholder: "파일 이름",
folderPlaceholder: "폴더 이름",
},
},
setup: {
+32
View File
@@ -397,9 +397,32 @@ export const ptBR: TranslationResources = {
fileActions: {
openFile: "Abrir arquivo",
copyPath: "Copiar caminho",
copyRelativePath: "Copiar caminho relativo",
revealIn: "Mostrar no {{target}}",
download: "Baixar",
addToChat: "Adicionar ao chat",
moreActions: "Mais ações",
newFile: "Novo arquivo",
newFolder: "Nova pasta",
collapseFolder: "Recolher pasta",
rename: "Renomear",
duplicate: "Duplicar",
revert: "Descartar alterações",
delete: "Excluir",
confirmDelete: {
fileTitle: "Excluir arquivo?",
folderTitle: "Excluir pasta?",
message: '"{{name}}" será excluído permanentemente.',
confirm: "Excluir",
cancel: "Cancelar",
},
confirmRevert: {
title: "Descartar alterações?",
message: 'As alterações em "{{name}}" serão descartadas permanentemente.',
confirm: "Descartar",
cancel: "Cancelar",
failed: "Falha ao descartar alterações",
},
},
fileExplorer: {
sort: {
@@ -429,6 +452,15 @@ export const ptBR: TranslationResources = {
},
errors: {
failedToListDirectory: "Falha ao listar diretório",
createFailed: "Falha ao criar entrada",
renameFailed: "Falha ao renomear entrada",
duplicateFailed: "Falha ao duplicar entrada",
revealFailed: "Falha ao mostrar entrada",
deleteFailed: "Falha ao excluir entrada",
},
draft: {
filePlaceholder: "Nome do arquivo",
folderPlaceholder: "Nome da pasta",
},
},
setup: {
+32
View File
@@ -396,9 +396,32 @@ export const ru: TranslationResources = {
fileActions: {
openFile: "Открыть файл",
copyPath: "Копировать путь",
copyRelativePath: "Копировать относительный путь",
revealIn: "Показать в {{target}}",
download: "Скачать",
addToChat: "Добавить в чат",
moreActions: "Дополнительные действия",
newFile: "Новый файл",
newFolder: "Новая папка",
collapseFolder: "Свернуть папку",
rename: "Переименовать",
duplicate: "Дублировать",
revert: "Отменить изменения",
delete: "Удалить",
confirmDelete: {
fileTitle: "Удалить файл?",
folderTitle: "Удалить папку?",
message: "«{{name}}» будет удалён безвозвратно.",
confirm: "Удалить",
cancel: "Отмена",
},
confirmRevert: {
title: "Отменить изменения?",
message: "Изменения в «{{name}}» будут безвозвратно отменены.",
confirm: "Отменить",
cancel: "Отмена",
failed: "Не удалось отменить изменения",
},
},
fileExplorer: {
sort: {
@@ -428,6 +451,15 @@ export const ru: TranslationResources = {
},
errors: {
failedToListDirectory: "Не удалось указать каталог",
createFailed: "Не удалось создать элемент",
renameFailed: "Не удалось переименовать элемент",
duplicateFailed: "Не удалось дублировать элемент",
revealFailed: "Не удалось показать элемент",
deleteFailed: "Не удалось удалить элемент",
},
draft: {
filePlaceholder: "Имя файла",
folderPlaceholder: "Имя папки",
},
},
setup: {
+32
View File
@@ -393,9 +393,32 @@ export const zhCN: TranslationResources = {
fileActions: {
openFile: "打开文件",
copyPath: "复制路径",
copyRelativePath: "复制相对路径",
revealIn: "在 {{target}} 中显示",
download: "下载",
addToChat: "添加到聊天",
moreActions: "更多操作",
newFile: "新建文件",
newFolder: "新建文件夹",
collapseFolder: "折叠文件夹",
rename: "重命名",
duplicate: "复制",
revert: "放弃更改",
delete: "删除",
confirmDelete: {
fileTitle: "删除文件?",
folderTitle: "删除文件夹?",
message: "“{{name}}”将被永久删除。",
confirm: "删除",
cancel: "取消",
},
confirmRevert: {
title: "放弃更改?",
message: "对“{{name}}”的更改将被永久放弃。",
confirm: "放弃",
cancel: "取消",
failed: "放弃更改失败",
},
},
fileExplorer: {
sort: {
@@ -425,6 +448,15 @@ export const zhCN: TranslationResources = {
},
errors: {
failedToListDirectory: "列出目录失败",
createFailed: "创建条目失败",
renameFailed: "重命名条目失败",
duplicateFailed: "复制条目失败",
revealFailed: "显示条目失败",
deleteFailed: "删除条目失败",
},
draft: {
filePlaceholder: "文件名",
folderPlaceholder: "文件夹名称",
},
},
setup: {