feat: disable auto-save, add Save to Files button, accept all file types in library

- Disabled auto-save of processed files to library (worker no longer
  calls autoSaveToLibrary)
- Added "Save to Files" button in the review panel for explicit saving
- Files library upload area now accepts all file types, not just images
- Removed "Drop images here" hardcoded text, replaced with i18n
- Removed image-only file filter from library upload
This commit is contained in:
SnapOtter
2026-06-14 21:53:42 +08:00
parent b8a6b2018e
commit d0795b69ea
24 changed files with 155 additions and 23 deletions
+2 -9
View File
@@ -238,15 +238,8 @@ async function processToolJob(job: Job<ToolJobData>): Promise<ToolJobResult> {
// Generate preview for non-browser-previewable formats
const previewRef = await generatePreview(resultBuffer, resultContentType, jobId, inputBuffer);
// Auto-save to user file library
const savedFileId = await autoSaveToLibrary({
fileId: data.fileId,
userId: data.userId,
buffer: resultBuffer,
outName,
contentType: resultContentType,
toolId: data.toolId,
});
// No auto-save -- users save to library explicitly via the UI
const savedFileId: string | undefined = undefined;
const durationMs = Date.now() - startTime;
@@ -1,7 +1,8 @@
import { AlertCircle, ArrowLeft, CheckCircle2, Download, FileText } from "lucide-react";
import { useMemo } from "react";
import { AlertCircle, ArrowLeft, CheckCircle2, Download, FileText, FolderPlus } from "lucide-react";
import { useCallback, useMemo, useState } from "react";
import { Link } from "react-router-dom";
import { useTranslation } from "@/contexts/i18n-context";
import { formatHeaders } from "@/lib/api";
import { formatFileSize, triggerDownload } from "@/lib/download";
import { format } from "@/lib/format";
@@ -72,6 +73,28 @@ export function ReviewPanel({
triggerDownload(downloadUrl, filename);
};
const [saveStatus, setSaveStatus] = useState<"idle" | "saving" | "saved" | "error">("idle");
const handleSaveToFiles = useCallback(async () => {
setSaveStatus("saving");
try {
const res = await fetch(downloadUrl);
const blob = await res.blob();
const formData = new FormData();
formData.append("file", new File([blob], filename, { type: fileType }));
const uploadRes = await fetch("/api/v1/files/upload", {
method: "POST",
headers: formatHeaders(),
body: formData,
});
if (!uploadRes.ok) throw new Error("Upload failed");
setSaveStatus("saved");
} catch {
setSaveStatus("error");
setTimeout(() => setSaveStatus("idle"), 3000);
}
}, [downloadUrl, filename, fileType]);
const hasBatchStats =
totalCount != null && totalCount > 1 && successCount != null && failedCount != null;
@@ -165,6 +188,23 @@ export function ReviewPanel({
</button>
)}
{/* Save to Files */}
{!isDataOutput && (
<button
type="button"
onClick={handleSaveToFiles}
disabled={saveStatus === "saving" || saveStatus === "saved"}
className="w-full py-2 rounded-lg border border-border text-muted-foreground hover:text-foreground hover:bg-muted text-sm flex items-center justify-center gap-2 disabled:opacity-50 transition-colors"
>
<FolderPlus className="h-4 w-4" />
{saveStatus === "saving"
? t.common.saving
: saveStatus === "saved"
? t.toolPage.savedToFiles
: t.toolPage.saveToFiles}
</button>
)}
{/* Adjust settings */}
<button
type="button"
@@ -1,10 +1,11 @@
import { Upload } from "lucide-react";
import { useState } from "react";
import { isImageFile } from "@/components/common/dropzone";
import { useTranslation } from "@/contexts/i18n-context";
import { cn } from "@/lib/utils";
import { useFilesPageStore } from "@/stores/files-page-store";
export function FileUploadArea() {
const { t } = useTranslation();
const { uploadFiles, loading, uploadProgress } = useFilesPageStore();
const [dragging, setDragging] = useState(false);
@@ -20,14 +21,13 @@ export function FileUploadArea() {
function handleDrop(e: React.DragEvent) {
e.preventDefault();
setDragging(false);
const files = Array.from(e.dataTransfer.files).filter(isImageFile);
const files = Array.from(e.dataTransfer.files);
if (files.length > 0) uploadFiles(files);
}
function handleInputChange(e: React.ChangeEvent<HTMLInputElement>) {
const files = Array.from(e.target.files ?? []);
if (files.length > 0) uploadFiles(files);
// Reset input so the same file can be re-selected
e.target.value = "";
}
@@ -57,19 +57,13 @@ export function FileUploadArea() {
)}
<div className="text-center">
<p className="text-sm font-medium text-foreground">
{loading ? "Uploading..." : "Drop images here"}
{loading ? t.common.loading : t.files.dropFilesHere}
</p>
<p className="text-xs text-muted-foreground mt-1">
{loading ? "" : "or click to select files"}
{loading ? "" : t.files.orClickToSelect}
</p>
</div>
<input
type="file"
accept="image/*,.avif,.heic,.heif,.hif,.jxl,.dng,.cr2,.cr3,.nef,.nrw,.arw,.orf,.rw2,.raf,.pef,.3fr,.iiq,.srw,.x3f,.rwl,.gpr,.fff,.mrw,.mef,.kdc,.dcr,.erf,.ptx,.tga,.psd,.exr,.hdr,.svgz,.jp2,.j2k,.qoi,.eps,.dds,.cur,.apng,.dpx,.cin,.fits,.ppm,.pgm,.pbm,.pfm"
multiple
className="hidden"
onChange={handleInputChange}
/>
<input type="file" multiple className="hidden" onChange={handleInputChange} />
</label>
</div>
);
+5
View File
@@ -12,6 +12,7 @@ export const ar: TranslationKeys = {
search: "البحث في الأدوات...",
dropFiles: "اسحب الملفات هنا أو اضغط على زر الرفع",
loading: "جاري التحميل...",
saving: "Saving...",
error: "حدث خطأ",
confirm: "تأكيد",
close: "إغلاق",
@@ -2447,6 +2448,8 @@ export const ar: TranslationKeys = {
applyAndDownload: "تطبيق وتنزيل",
andMore: "and {count} more",
importFromFiles: "Import from Files",
saveToFiles: "Save to Files",
savedToFiles: "Saved to Files",
adjustSettings: "Adjust settings",
startOver: "Start over with a new file",
backToTools: "Back to Tools",
@@ -3216,6 +3219,8 @@ export const ar: TranslationKeys = {
openFile: "Open File",
selectFile: "Select File",
openInPipeline: "Open in Pipeline",
dropFilesHere: "Drop files here",
orClickToSelect: "or click to select files",
name: "Name",
format: "Format",
size: "Size",
+5
View File
@@ -12,6 +12,7 @@ export const de: TranslationKeys = {
search: "Werkzeuge suchen...",
dropFiles: "Dateien hierher ziehen oder auf die Schaltflaeche klicken",
loading: "Wird geladen...",
saving: "Saving...",
error: "Ein Fehler ist aufgetreten",
confirm: "Bestaetigen",
close: "Schliessen",
@@ -2461,6 +2462,8 @@ export const de: TranslationKeys = {
applyAndDownload: "Anwenden & Herunterladen",
andMore: "and {count} more",
importFromFiles: "Import from Files",
saveToFiles: "Save to Files",
savedToFiles: "Saved to Files",
adjustSettings: "Adjust settings",
startOver: "Start over with a new file",
backToTools: "Back to Tools",
@@ -3245,6 +3248,8 @@ export const de: TranslationKeys = {
openFile: "Open File",
selectFile: "Select File",
openInPipeline: "Open in Pipeline",
dropFilesHere: "Drop files here",
orClickToSelect: "or click to select files",
name: "Name",
format: "Format",
size: "Size",
+5
View File
@@ -10,6 +10,7 @@ export const en = {
search: "Search tools...",
dropFiles: "Drop files here or click the upload button",
loading: "Loading...",
saving: "Saving...",
error: "An error occurred",
confirm: "Confirm",
close: "Close",
@@ -2411,6 +2412,8 @@ export const en = {
applyAndDownload: "Apply & Download",
andMore: "and {count} more",
importFromFiles: "Import from Files",
saveToFiles: "Save to Files",
savedToFiles: "Saved to Files",
adjustSettings: "Adjust settings",
startOver: "Start over with a new file",
backToTools: "Back to Tools",
@@ -3182,6 +3185,8 @@ export const en = {
openFile: "Open File",
selectFile: "Select File",
openInPipeline: "Open in Pipeline",
dropFilesHere: "Drop files here",
orClickToSelect: "or click to select files",
name: "Name",
format: "Format",
size: "Size",
+5
View File
@@ -12,6 +12,7 @@ export const es: TranslationKeys = {
search: "Buscar herramientas...",
dropFiles: "Arrastra archivos aqui o haz clic en el boton de carga",
loading: "Cargando...",
saving: "Saving...",
error: "Ocurrio un error",
confirm: "Confirmar",
close: "Cerrar",
@@ -2443,6 +2444,8 @@ export const es: TranslationKeys = {
applyAndDownload: "Aplicar y descargar",
andMore: "and {count} more",
importFromFiles: "Import from Files",
saveToFiles: "Save to Files",
savedToFiles: "Saved to Files",
adjustSettings: "Adjust settings",
startOver: "Start over with a new file",
backToTools: "Back to Tools",
@@ -3222,6 +3225,8 @@ export const es: TranslationKeys = {
openFile: "Open File",
selectFile: "Select File",
openInPipeline: "Open in Pipeline",
dropFilesHere: "Drop files here",
orClickToSelect: "or click to select files",
name: "Name",
format: "Format",
size: "Size",
+5
View File
@@ -12,6 +12,7 @@ export const fr: TranslationKeys = {
search: "Rechercher des outils...",
dropFiles: "Deposez des fichiers ici ou cliquez sur le bouton d'import",
loading: "Chargement...",
saving: "Saving...",
error: "Une erreur est survenue",
confirm: "Confirmer",
close: "Fermer",
@@ -2462,6 +2463,8 @@ export const fr: TranslationKeys = {
applyAndDownload: "Appliquer et télécharger",
andMore: "and {count} more",
importFromFiles: "Import from Files",
saveToFiles: "Save to Files",
savedToFiles: "Saved to Files",
adjustSettings: "Adjust settings",
startOver: "Start over with a new file",
backToTools: "Back to Tools",
@@ -3243,6 +3246,8 @@ export const fr: TranslationKeys = {
openFile: "Open File",
selectFile: "Select File",
openInPipeline: "Open in Pipeline",
dropFilesHere: "Drop files here",
orClickToSelect: "or click to select files",
name: "Name",
format: "Format",
size: "Size",
+5
View File
@@ -12,6 +12,7 @@ export const hi: TranslationKeys = {
search: "टूल्स खोजें...",
dropFiles: "फाइलें यहां खींचें या अपलोड बटन पर क्लिक करें",
loading: "लोड हो रहा है...",
saving: "Saving...",
error: "एक त्रुटि हुई",
confirm: "पुष्टि करें",
close: "बंद करें",
@@ -2444,6 +2445,8 @@ export const hi: TranslationKeys = {
applyAndDownload: "लागू करें और डाउनलोड करें",
andMore: "and {count} more",
importFromFiles: "Import from Files",
saveToFiles: "Save to Files",
savedToFiles: "Saved to Files",
adjustSettings: "Adjust settings",
startOver: "Start over with a new file",
backToTools: "Back to Tools",
@@ -3213,6 +3216,8 @@ export const hi: TranslationKeys = {
openFile: "Open File",
selectFile: "Select File",
openInPipeline: "Open in Pipeline",
dropFilesHere: "Drop files here",
orClickToSelect: "or click to select files",
name: "Name",
format: "Format",
size: "Size",
+5
View File
@@ -12,6 +12,7 @@ export const id: TranslationKeys = {
search: "Cari alat...",
dropFiles: "Seret file ke sini atau klik tombol unggah",
loading: "Memuat...",
saving: "Saving...",
error: "Terjadi kesalahan",
confirm: "Konfirmasi",
close: "Tutup",
@@ -2456,6 +2457,8 @@ export const id: TranslationKeys = {
applyAndDownload: "Terapkan & Unduh",
andMore: "and {count} more",
importFromFiles: "Import from Files",
saveToFiles: "Save to Files",
savedToFiles: "Saved to Files",
adjustSettings: "Adjust settings",
startOver: "Start over with a new file",
backToTools: "Back to Tools",
@@ -3230,6 +3233,8 @@ export const id: TranslationKeys = {
openFile: "Open File",
selectFile: "Select File",
openInPipeline: "Open in Pipeline",
dropFilesHere: "Drop files here",
orClickToSelect: "or click to select files",
name: "Name",
format: "Format",
size: "Size",
+5
View File
@@ -12,6 +12,7 @@ export const it: TranslationKeys = {
search: "Cerca strumenti...",
dropFiles: "Trascina i file qui o fai clic sul pulsante di caricamento",
loading: "Caricamento...",
saving: "Saving...",
error: "Si e verificato un errore",
confirm: "Conferma",
close: "Chiudi",
@@ -2455,6 +2456,8 @@ export const it: TranslationKeys = {
applyAndDownload: "Applica e scarica",
andMore: "and {count} more",
importFromFiles: "Import from Files",
saveToFiles: "Save to Files",
savedToFiles: "Saved to Files",
adjustSettings: "Adjust settings",
startOver: "Start over with a new file",
backToTools: "Back to Tools",
@@ -3237,6 +3240,8 @@ export const it: TranslationKeys = {
openFile: "Apri file",
selectFile: "Select File",
openInPipeline: "Apri nella pipeline",
dropFilesHere: "Drop files here",
orClickToSelect: "or click to select files",
name: "Nome",
format: "Formato",
size: "Dimensione",
+5
View File
@@ -12,6 +12,7 @@ export const ja: TranslationKeys = {
search: "ツールを検索...",
dropFiles: "ここにファイルをドロップするかアップロードボタンをクリック",
loading: "読み込み中...",
saving: "Saving...",
error: "エラーが発生しました",
confirm: "確認",
close: "閉じる",
@@ -2414,6 +2415,8 @@ export const ja: TranslationKeys = {
applyAndDownload: "適用してダウンロード",
andMore: "and {count} more",
importFromFiles: "Import from Files",
saveToFiles: "Save to Files",
savedToFiles: "Saved to Files",
adjustSettings: "Adjust settings",
startOver: "Start over with a new file",
backToTools: "Back to Tools",
@@ -3186,6 +3189,8 @@ export const ja: TranslationKeys = {
openFile: "Open File",
selectFile: "Select File",
openInPipeline: "Open in Pipeline",
dropFilesHere: "Drop files here",
orClickToSelect: "or click to select files",
name: "Name",
format: "Format",
size: "Size",
+5
View File
@@ -12,6 +12,7 @@ export const ko: TranslationKeys = {
search: "도구 검색...",
dropFiles: "여기에 파일을 놓거나 업로드 버튼을 클릭하세요",
loading: "로딩 중...",
saving: "Saving...",
error: "오류가 발생했습니다",
confirm: "확인",
close: "닫기",
@@ -2399,6 +2400,8 @@ export const ko: TranslationKeys = {
applyAndDownload: "적용 및 다운로드",
andMore: "and {count} more",
importFromFiles: "Import from Files",
saveToFiles: "Save to Files",
savedToFiles: "Saved to Files",
adjustSettings: "Adjust settings",
startOver: "Start over with a new file",
backToTools: "Back to Tools",
@@ -3171,6 +3174,8 @@ export const ko: TranslationKeys = {
openFile: "Open File",
selectFile: "Select File",
openInPipeline: "Open in Pipeline",
dropFilesHere: "Drop files here",
orClickToSelect: "or click to select files",
name: "Name",
format: "Format",
size: "Size",
+5
View File
@@ -12,6 +12,7 @@ export const nl: TranslationKeys = {
search: "Gereedschap zoeken...",
dropFiles: "Sleep bestanden hierheen of klik op de uploadknop",
loading: "Laden...",
saving: "Saving...",
error: "Er is een fout opgetreden",
confirm: "Bevestigen",
close: "Sluiten",
@@ -2458,6 +2459,8 @@ export const nl: TranslationKeys = {
applyAndDownload: "Toepassen en downloaden",
andMore: "and {count} more",
importFromFiles: "Import from Files",
saveToFiles: "Save to Files",
savedToFiles: "Saved to Files",
adjustSettings: "Adjust settings",
startOver: "Start over with a new file",
backToTools: "Back to Tools",
@@ -3233,6 +3236,8 @@ export const nl: TranslationKeys = {
openFile: "Open File",
selectFile: "Select File",
openInPipeline: "Open in Pipeline",
dropFilesHere: "Drop files here",
orClickToSelect: "or click to select files",
name: "Name",
format: "Format",
size: "Size",
+5
View File
@@ -12,6 +12,7 @@ export const pl: TranslationKeys = {
search: "Szukaj narzędzi...",
dropFiles: "Przeciągnij pliki tutaj lub kliknij przycisk przesyłania",
loading: "Ładowanie...",
saving: "Saving...",
error: "Wystąpił błąd",
confirm: "Potwierdź",
close: "Zamknij",
@@ -2459,6 +2460,8 @@ export const pl: TranslationKeys = {
applyAndDownload: "Zastosuj i pobierz",
andMore: "and {count} more",
importFromFiles: "Import from Files",
saveToFiles: "Save to Files",
savedToFiles: "Saved to Files",
adjustSettings: "Adjust settings",
startOver: "Start over with a new file",
backToTools: "Back to Tools",
@@ -3240,6 +3243,8 @@ export const pl: TranslationKeys = {
openFile: "Open File",
selectFile: "Select File",
openInPipeline: "Open in Pipeline",
dropFilesHere: "Drop files here",
orClickToSelect: "or click to select files",
name: "Name",
format: "Format",
size: "Size",
+5
View File
@@ -12,6 +12,7 @@ export const ptBR: TranslationKeys = {
search: "Buscar ferramentas...",
dropFiles: "Arraste arquivos aqui ou clique no botao de envio",
loading: "Carregando...",
saving: "Saving...",
error: "Ocorreu um erro",
confirm: "Confirmar",
close: "Fechar",
@@ -2455,6 +2456,8 @@ export const ptBR: TranslationKeys = {
applyAndDownload: "Aplicar e baixar",
andMore: "and {count} more",
importFromFiles: "Import from Files",
saveToFiles: "Save to Files",
savedToFiles: "Saved to Files",
adjustSettings: "Adjust settings",
startOver: "Start over with a new file",
backToTools: "Back to Tools",
@@ -3233,6 +3236,8 @@ export const ptBR: TranslationKeys = {
openFile: "Open File",
selectFile: "Select File",
openInPipeline: "Open in Pipeline",
dropFilesHere: "Drop files here",
orClickToSelect: "or click to select files",
name: "Name",
format: "Format",
size: "Size",
+5
View File
@@ -12,6 +12,7 @@ export const ru: TranslationKeys = {
search: "Поиск инструментов...",
dropFiles: "Перетащите файлы сюда или нажмите кнопку загрузки",
loading: "Загрузка...",
saving: "Saving...",
error: "Произошла ошибка",
confirm: "Подтвердить",
close: "Закрыть",
@@ -2457,6 +2458,8 @@ export const ru: TranslationKeys = {
applyAndDownload: "Применить и скачать",
andMore: "and {count} more",
importFromFiles: "Import from Files",
saveToFiles: "Save to Files",
savedToFiles: "Saved to Files",
adjustSettings: "Adjust settings",
startOver: "Start over with a new file",
backToTools: "Back to Tools",
@@ -3232,6 +3235,8 @@ export const ru: TranslationKeys = {
openFile: "Open File",
selectFile: "Select File",
openInPipeline: "Open in Pipeline",
dropFilesHere: "Drop files here",
orClickToSelect: "or click to select files",
name: "Name",
format: "Format",
size: "Size",
+5
View File
@@ -12,6 +12,7 @@ export const sv: TranslationKeys = {
search: "Sok verktyg...",
dropFiles: "Slapp filer har eller klicka pa uppladdningsknappen",
loading: "Laddar...",
saving: "Saving...",
error: "Ett fel uppstod",
confirm: "Bekrafta",
close: "Stang",
@@ -2454,6 +2455,8 @@ export const sv: TranslationKeys = {
applyAndDownload: "Tillämpa och ladda ner",
andMore: "and {count} more",
importFromFiles: "Import from Files",
saveToFiles: "Save to Files",
savedToFiles: "Saved to Files",
adjustSettings: "Adjust settings",
startOver: "Start over with a new file",
backToTools: "Back to Tools",
@@ -3227,6 +3230,8 @@ export const sv: TranslationKeys = {
openFile: "Open File",
selectFile: "Select File",
openInPipeline: "Open in Pipeline",
dropFilesHere: "Drop files here",
orClickToSelect: "or click to select files",
name: "Name",
format: "Format",
size: "Size",
+5
View File
@@ -12,6 +12,7 @@ export const th: TranslationKeys = {
search: "ค้นหาเครื่องมือ...",
dropFiles: "ลากไฟล์มาวางที่นี่หรือกดปุ่มอัปโหลด",
loading: "กำลังโหลด...",
saving: "Saving...",
error: "เกิดข้อผิดพลาด",
confirm: "ยืนยัน",
close: "ปิด",
@@ -2436,6 +2437,8 @@ export const th: TranslationKeys = {
applyAndDownload: "นำไปใช้และดาวน์โหลด",
andMore: "and {count} more",
importFromFiles: "Import from Files",
saveToFiles: "Save to Files",
savedToFiles: "Saved to Files",
adjustSettings: "Adjust settings",
startOver: "Start over with a new file",
backToTools: "Back to Tools",
@@ -3204,6 +3207,8 @@ export const th: TranslationKeys = {
openFile: "Open File",
selectFile: "Select File",
openInPipeline: "Open in Pipeline",
dropFilesHere: "Drop files here",
orClickToSelect: "or click to select files",
name: "Name",
format: "Format",
size: "Size",
+5
View File
@@ -12,6 +12,7 @@ export const tr: TranslationKeys = {
search: "Araç ara...",
dropFiles: "Dosyaları buraya sürükleyin veya yükle düğmesine tıklayın",
loading: "Yükleniyor...",
saving: "Saving...",
error: "Bir hata oluştu",
confirm: "Onayla",
close: "Kapat",
@@ -2459,6 +2460,8 @@ export const tr: TranslationKeys = {
applyAndDownload: "Uygula ve indir",
andMore: "and {count} more",
importFromFiles: "Import from Files",
saveToFiles: "Save to Files",
savedToFiles: "Saved to Files",
adjustSettings: "Adjust settings",
startOver: "Start over with a new file",
backToTools: "Back to Tools",
@@ -3237,6 +3240,8 @@ export const tr: TranslationKeys = {
openFile: "Open File",
selectFile: "Select File",
openInPipeline: "Open in Pipeline",
dropFilesHere: "Drop files here",
orClickToSelect: "or click to select files",
name: "Name",
format: "Format",
size: "Size",
+5
View File
@@ -12,6 +12,7 @@ export const uk: TranslationKeys = {
search: "Пошук інструментів...",
dropFiles: "Перетягніть файли сюди або натисніть кнопку завантаження",
loading: "Завантаження...",
saving: "Saving...",
error: "Сталася помилка",
confirm: "Підтвердити",
close: "Закрити",
@@ -2457,6 +2458,8 @@ export const uk: TranslationKeys = {
applyAndDownload: "Застосувати та завантажити",
andMore: "and {count} more",
importFromFiles: "Import from Files",
saveToFiles: "Save to Files",
savedToFiles: "Saved to Files",
adjustSettings: "Adjust settings",
startOver: "Start over with a new file",
backToTools: "Back to Tools",
@@ -3233,6 +3236,8 @@ export const uk: TranslationKeys = {
openFile: "Open File",
selectFile: "Select File",
openInPipeline: "Open in Pipeline",
dropFilesHere: "Drop files here",
orClickToSelect: "or click to select files",
name: "Name",
format: "Format",
size: "Size",
+5
View File
@@ -12,6 +12,7 @@ export const vi: TranslationKeys = {
search: "Tìm kiếm công cụ...",
dropFiles: "Kéo thả tệp vào đây hoặc nhấn nút tải lên",
loading: "Đang tải...",
saving: "Saving...",
error: "Đã xảy ra lỗi",
confirm: "Xác nhận",
close: "Đóng",
@@ -2456,6 +2457,8 @@ export const vi: TranslationKeys = {
applyAndDownload: "Áp dụng và tải xuống",
andMore: "and {count} more",
importFromFiles: "Import from Files",
saveToFiles: "Save to Files",
savedToFiles: "Saved to Files",
adjustSettings: "Adjust settings",
startOver: "Start over with a new file",
backToTools: "Back to Tools",
@@ -3227,6 +3230,8 @@ export const vi: TranslationKeys = {
openFile: "Open File",
selectFile: "Select File",
openInPipeline: "Open in Pipeline",
dropFilesHere: "Drop files here",
orClickToSelect: "or click to select files",
name: "Name",
format: "Format",
size: "Size",
+5
View File
@@ -12,6 +12,7 @@ export const zhCN: TranslationKeys = {
search: "搜索工具...",
dropFiles: "拖放文件到此处或点击上传按钮",
loading: "加载中...",
saving: "Saving...",
error: "发生错误",
confirm: "确认",
close: "关闭",
@@ -2389,6 +2390,8 @@ export const zhCN: TranslationKeys = {
applyAndDownload: "应用并下载",
andMore: "and {count} more",
importFromFiles: "Import from Files",
saveToFiles: "Save to Files",
savedToFiles: "Saved to Files",
adjustSettings: "Adjust settings",
startOver: "Start over with a new file",
backToTools: "Back to Tools",
@@ -3155,6 +3158,8 @@ export const zhCN: TranslationKeys = {
openFile: "Open File",
selectFile: "Select File",
openInPipeline: "Open in Pipeline",
dropFilesHere: "Drop files here",
orClickToSelect: "or click to select files",
name: "Name",
format: "Format",
size: "Size",
+5
View File
@@ -12,6 +12,7 @@ export const zhTW: TranslationKeys = {
search: "搜尋工具...",
dropFiles: "拖放檔案至此處或點擊上傳按鈕",
loading: "載入中...",
saving: "Saving...",
error: "發生錯誤",
confirm: "確認",
close: "關閉",
@@ -2387,6 +2388,8 @@ export const zhTW: TranslationKeys = {
applyAndDownload: "套用並下載",
andMore: "and {count} more",
importFromFiles: "Import from Files",
saveToFiles: "Save to Files",
savedToFiles: "Saved to Files",
adjustSettings: "Adjust settings",
startOver: "Start over with a new file",
backToTools: "Back to Tools",
@@ -3153,6 +3156,8 @@ export const zhTW: TranslationKeys = {
openFile: "Open File",
selectFile: "Select File",
openInPipeline: "Open in Pipeline",
dropFilesHere: "Drop files here",
orClickToSelect: "or click to select files",
name: "Name",
format: "Format",
size: "Size",