fix: handle non-image modalities across uploads, previews, and filenames (#255)

SnapOtter spans five modalities now, but several code paths still assumed image input.

- dropzone: default to accept-all when no fileFilter is given (image tools still pass one); neutral "supported file types" error text instead of "image files"
- automate (pipelines): accept any modality in the file pickers and dropzones; render modality-aware previews (video player, audio waveform, document/data card) instead of always using ImageViewer/BeforeAfterSlider
- filename sanitizer: extend the double-extension allowlist beyond image extensions to video/audio/document/data so e.g. "report.csv.php" becomes "report.csv"; add tests
- thumbnail route: return 422 for non-rasterisable files (audio, data, non-PDF docs) instead of attempting a doomed Sharp decode
- pool: unknown tools fall back to the "system" pool, not the image pool
- a11y labels: "Previous/Next image", "Image viewer/area/controls/drop zone" are now modality-neutral, across all 21 locales
- copy: bulk-rename default, find-duplicates ZIP name, SSRF user-agent, fetch-urls fallback name, file-details MIME label, URL-import placeholder, help dialog
This commit is contained in:
SnapOtter
2026-06-16 18:04:48 +08:00
committed by GitHub
parent 622c9f98a5
commit 8eee17aeea
29 changed files with 420 additions and 246 deletions
+12 -12
View File
@@ -2436,13 +2436,13 @@ export const ar: TranslationKeys = {
generatingPreview: "جاري إنشاء المعاينة...",
cannotPreviewWillProcess:
"لا يمكن معاينة ملفات {ext} في المتصفح. ستتم معالجة الملف بشكل طبيعي.",
previousImage: "الصورة السابقة",
nextImage: "الصورة التالية",
previousImage: "الملف السابق",
nextImage: "الملف التالي",
imageCounter: "{current} / {total}",
settingsLabel: "الإعدادات",
downloadAllZip: "تحميل الكل (ZIP)",
hideSettings: "إخفاء الإعدادات",
imageArea: "منطقة الصورة",
imageArea: "منطقة المعاينة",
disabledByAdmin: "This tool has been disabled by your administrator",
browseOtherTools: "Browse other tools",
privacyNote: "Files are processed on your server and never leave your network",
@@ -3176,10 +3176,10 @@ export const ar: TranslationKeys = {
savingIndicator: "...",
cancelButton: "إلغاء",
preview: "معاينة",
previousImage: "الصورة السابقة",
nextImage: "الصورة التالية",
previousImage: "الملف السابق",
nextImage: "الملف التالي",
imageCounter: "{current} / {total}",
imageArea: "منطقة الصورة",
imageArea: "منطقة المعاينة",
templateSocialMedia: "جاهز لوسائل التواصل",
templatePrivacyClean: "تنظيف الخصوصية",
templateWebOptimization: "تحسين للويب",
@@ -3399,14 +3399,14 @@ export const ar: TranslationKeys = {
zoomOut: "Zoom out",
fitToView: "Fit to view",
actualSize: "Actual size",
previousImage: "Previous image",
nextImage: "Next image",
imageArea: "Image area",
imageViewer: "Image viewer",
previousImage: "الملف السابق",
nextImage: "الملف التالي",
imageArea: "منطقة المعاينة",
imageViewer: "عارض الملفات",
fileDropZone: "File drop zone",
imageDropZone: "Image drop zone",
imageDropZone: "منطقة إسقاط الملفات",
beforeAfterSlider: "Before/after comparison slider",
imageControls: "Image controls",
imageControls: "عناصر تحكم المعاينة",
zoomControls: "Zoom controls",
dragToReorder: "Drag to reorder",
whiteBackground: "White background",
+12 -12
View File
@@ -2450,13 +2450,13 @@ export const de: TranslationKeys = {
generatingPreview: "Vorschau wird generiert...",
cannotPreviewWillProcess:
"{ext}-Dateien koennen im Browser nicht angezeigt werden. Das Werkzeug verarbeitet diese Datei trotzdem.",
previousImage: "Vorheriges Bild",
nextImage: "Naechstes Bild",
previousImage: "Vorherige Datei",
nextImage: "Naechste Datei",
imageCounter: "{current} / {total}",
settingsLabel: "Einstellungen",
downloadAllZip: "Alle herunterladen (ZIP)",
hideSettings: "Einstellungen ausblenden",
imageArea: "Bildbereich",
imageArea: "Vorschaubereich",
disabledByAdmin: "This tool has been disabled by your administrator",
browseOtherTools: "Browse other tools",
privacyNote: "Files are processed on your server and never leave your network",
@@ -3205,10 +3205,10 @@ export const de: TranslationKeys = {
savingIndicator: "...",
cancelButton: "Abbrechen",
preview: "Vorschau",
previousImage: "Vorheriges Bild",
nextImage: "Naechstes Bild",
previousImage: "Vorherige Datei",
nextImage: "Naechste Datei",
imageCounter: "{current} / {total}",
imageArea: "Bildbereich",
imageArea: "Vorschaubereich",
templateSocialMedia: "Social Media fertig",
templatePrivacyClean: "Datenschutzbereinigung",
templateWebOptimization: "Weboptimierung",
@@ -3430,14 +3430,14 @@ export const de: TranslationKeys = {
zoomOut: "Zoom out",
fitToView: "Fit to view",
actualSize: "Actual size",
previousImage: "Previous image",
nextImage: "Next image",
imageArea: "Image area",
imageViewer: "Image viewer",
previousImage: "Vorherige Datei",
nextImage: "Naechste Datei",
imageArea: "Vorschaubereich",
imageViewer: "Dateibetrachter",
fileDropZone: "File drop zone",
imageDropZone: "Image drop zone",
imageDropZone: "Datei-Ablagezone",
beforeAfterSlider: "Before/after comparison slider",
imageControls: "Image controls",
imageControls: "Vorschausteuerung",
zoomControls: "Zoom controls",
dragToReorder: "Drag to reorder",
whiteBackground: "White background",
+12 -12
View File
@@ -2400,13 +2400,13 @@ export const en = {
generatingPreview: "Generating preview...",
cannotPreviewWillProcess:
"{ext} files cannot be previewed in the browser. The tool will still process this file normally.",
previousImage: "Previous image",
nextImage: "Next image",
previousImage: "Previous file",
nextImage: "Next file",
imageCounter: "{current} / {total}",
settingsLabel: "Settings",
downloadAllZip: "Download All (ZIP)",
hideSettings: "Hide Settings",
imageArea: "Image area",
imageArea: "Preview area",
disabledByAdmin: "This tool has been disabled by your administrator",
browseOtherTools: "Browse other tools",
privacyNote: "Files are processed on your server and never leave your network",
@@ -3142,10 +3142,10 @@ export const en = {
savingIndicator: "...",
cancelButton: "Cancel",
preview: "Preview",
previousImage: "Previous image",
nextImage: "Next image",
previousImage: "Previous file",
nextImage: "Next file",
imageCounter: "{current} / {total}",
imageArea: "Image area",
imageArea: "Preview area",
templateSocialMedia: "Social Media Ready",
templatePrivacyClean: "Privacy Clean",
templateWebOptimization: "Web Optimization",
@@ -3366,14 +3366,14 @@ export const en = {
zoomOut: "Zoom out",
fitToView: "Fit to view",
actualSize: "Actual size",
previousImage: "Previous image",
nextImage: "Next image",
imageArea: "Image area",
imageViewer: "Image viewer",
previousImage: "Previous file",
nextImage: "Next file",
imageArea: "Preview area",
imageViewer: "File viewer",
fileDropZone: "File drop zone",
imageDropZone: "Image drop zone",
imageDropZone: "File drop zone",
beforeAfterSlider: "Before/after comparison slider",
imageControls: "Image controls",
imageControls: "Preview controls",
zoomControls: "Zoom controls",
dragToReorder: "Drag to reorder",
whiteBackground: "White background",
+12 -12
View File
@@ -2432,13 +2432,13 @@ export const es: TranslationKeys = {
generatingPreview: "Generando vista previa...",
cannotPreviewWillProcess:
"Los archivos {ext} no se pueden previsualizar en el navegador. La herramienta procesara este archivo normalmente.",
previousImage: "Imagen anterior",
nextImage: "Siguiente imagen",
previousImage: "Archivo anterior",
nextImage: "Siguiente archivo",
imageCounter: "{current} / {total}",
settingsLabel: "Configuracion",
downloadAllZip: "Descargar todo (ZIP)",
hideSettings: "Ocultar configuracion",
imageArea: "Area de imagen",
imageArea: "Area de vista previa",
disabledByAdmin: "This tool has been disabled by your administrator",
browseOtherTools: "Browse other tools",
privacyNote: "Files are processed on your server and never leave your network",
@@ -3182,10 +3182,10 @@ export const es: TranslationKeys = {
savingIndicator: "...",
cancelButton: "Cancelar",
preview: "Vista previa",
previousImage: "Imagen anterior",
nextImage: "Siguiente imagen",
previousImage: "Archivo anterior",
nextImage: "Siguiente archivo",
imageCounter: "{current} / {total}",
imageArea: "Area de imagen",
imageArea: "Area de vista previa",
templateSocialMedia: "Listo para redes sociales",
templatePrivacyClean: "Limpieza de privacidad",
templateWebOptimization: "Optimizacion web",
@@ -3408,14 +3408,14 @@ export const es: TranslationKeys = {
zoomOut: "Zoom out",
fitToView: "Fit to view",
actualSize: "Actual size",
previousImage: "Previous image",
nextImage: "Next image",
imageArea: "Image area",
imageViewer: "Image viewer",
previousImage: "Archivo anterior",
nextImage: "Siguiente archivo",
imageArea: "Area de vista previa",
imageViewer: "Visor de archivos",
fileDropZone: "File drop zone",
imageDropZone: "Image drop zone",
imageDropZone: "Zona para soltar archivos",
beforeAfterSlider: "Before/after comparison slider",
imageControls: "Image controls",
imageControls: "Controles de vista previa",
zoomControls: "Zoom controls",
dragToReorder: "Drag to reorder",
whiteBackground: "White background",
+12 -12
View File
@@ -2451,13 +2451,13 @@ export const fr: TranslationKeys = {
generatingPreview: "Generation de l'apercu...",
cannotPreviewWillProcess:
"Les fichiers {ext} ne peuvent pas etre previsualises dans le navigateur. L'outil traitera ce fichier normalement.",
previousImage: "Image precedente",
nextImage: "Image suivante",
previousImage: "Fichier precedent",
nextImage: "Fichier suivant",
imageCounter: "{current} / {total}",
settingsLabel: "Parametres",
downloadAllZip: "Tout telecharger (ZIP)",
hideSettings: "Masquer les parametres",
imageArea: "Zone d'image",
imageArea: "Zone d'apercu",
disabledByAdmin: "This tool has been disabled by your administrator",
browseOtherTools: "Browse other tools",
privacyNote: "Files are processed on your server and never leave your network",
@@ -3203,10 +3203,10 @@ export const fr: TranslationKeys = {
savingIndicator: "...",
cancelButton: "Annuler",
preview: "Apercu",
previousImage: "Image precedente",
nextImage: "Image suivante",
previousImage: "Fichier precedent",
nextImage: "Fichier suivant",
imageCounter: "{current} / {total}",
imageArea: "Zone d'image",
imageArea: "Zone d'apercu",
templateSocialMedia: "Pret pour les reseaux sociaux",
templatePrivacyClean: "Nettoyage de confidentialite",
templateWebOptimization: "Optimisation web",
@@ -3429,14 +3429,14 @@ export const fr: TranslationKeys = {
zoomOut: "Zoom out",
fitToView: "Fit to view",
actualSize: "Actual size",
previousImage: "Previous image",
nextImage: "Next image",
imageArea: "Image area",
imageViewer: "Image viewer",
previousImage: "Fichier precedent",
nextImage: "Fichier suivant",
imageArea: "Zone d'apercu",
imageViewer: "Visionneuse de fichiers",
fileDropZone: "File drop zone",
imageDropZone: "Image drop zone",
imageDropZone: "Zone de depot de fichiers",
beforeAfterSlider: "Before/after comparison slider",
imageControls: "Image controls",
imageControls: "Controles d'apercu",
zoomControls: "Zoom controls",
dragToReorder: "Drag to reorder",
whiteBackground: "White background",
+12 -12
View File
@@ -2433,13 +2433,13 @@ export const hi: TranslationKeys = {
generatingPreview: "प्रीव्यू जनरेट हो रहा है...",
cannotPreviewWillProcess:
"{ext} फाइलें ब्राउज़र में प्रीव्यू नहीं हो सकतीं। टूल इस फाइल को सामान्य रूप से प्रोसेस करेगा।",
previousImage: "पिछली इमेज",
nextImage: "अगली इमेज",
previousImage: "पिछली फ़ाइल",
nextImage: "अगली फ़ाइल",
imageCounter: "{current} / {total}",
settingsLabel: "सेटिंग्स",
downloadAllZip: "सभी डाउनलोड करें (ZIP)",
hideSettings: "सेटिंग्स छुपाएं",
imageArea: "इमेज क्षेत्र",
imageArea: "पूर्वावलोकन क्षेत्र",
disabledByAdmin: "This tool has been disabled by your administrator",
browseOtherTools: "Browse other tools",
privacyNote: "Files are processed on your server and never leave your network",
@@ -3173,10 +3173,10 @@ export const hi: TranslationKeys = {
savingIndicator: "...",
cancelButton: "रद्द करें",
preview: "प्रीव्यू",
previousImage: "पिछली इमेज",
nextImage: "अगली इमेज",
previousImage: "पिछली फ़ाइल",
nextImage: "अगली फ़ाइल",
imageCounter: "{current} / {total}",
imageArea: "इमेज क्षेत्र",
imageArea: "पूर्वावलोकन क्षेत्र",
templateSocialMedia: "सोशल मीडिया रेडी",
templatePrivacyClean: "प्राइवेसी क्लीन",
templateWebOptimization: "वेब ऑप्टिमाइज़ेशन",
@@ -3396,14 +3396,14 @@ export const hi: TranslationKeys = {
zoomOut: "Zoom out",
fitToView: "Fit to view",
actualSize: "Actual size",
previousImage: "Previous image",
nextImage: "Next image",
imageArea: "Image area",
imageViewer: "Image viewer",
previousImage: "पिछली फ़ाइल",
nextImage: "अगली फ़ाइल",
imageArea: "पूर्वावलोकन क्षेत्र",
imageViewer: "फ़ाइल व्यूअर",
fileDropZone: "File drop zone",
imageDropZone: "Image drop zone",
imageDropZone: "फ़ाइल ड्रॉप ज़ोन",
beforeAfterSlider: "Before/after comparison slider",
imageControls: "Image controls",
imageControls: "पूर्वावलोकन नियंत्रण",
zoomControls: "Zoom controls",
dragToReorder: "Drag to reorder",
whiteBackground: "White background",
+12 -12
View File
@@ -2448,13 +2448,13 @@ export const pl: TranslationKeys = {
generatingPreview: "Generowanie podglądu...",
cannotPreviewWillProcess:
"Plików {ext} nie można podejrzeć w przeglądarce. Narzędzie nadal przetworzy ten plik.",
previousImage: "Poprzedni obraz",
nextImage: "Następny obraz",
previousImage: "Poprzedni plik",
nextImage: "Następny plik",
imageCounter: "{current} / {total}",
settingsLabel: "Ustawienia",
downloadAllZip: "Pobierz wszystko (ZIP)",
hideSettings: "Ukryj ustawienia",
imageArea: "Obszar obrazu",
imageArea: "Obszar podglądu",
disabledByAdmin: "This tool has been disabled by your administrator",
browseOtherTools: "Browse other tools",
privacyNote: "Files are processed on your server and never leave your network",
@@ -3200,10 +3200,10 @@ export const pl: TranslationKeys = {
savingIndicator: "...",
cancelButton: "Anuluj",
preview: "Podgląd",
previousImage: "Poprzedni obraz",
nextImage: "Następny obraz",
previousImage: "Poprzedni plik",
nextImage: "Następny plik",
imageCounter: "{current} / {total}",
imageArea: "Obszar obrazu",
imageArea: "Obszar podglądu",
templateSocialMedia: "Gotowe dla mediów społecznościowych",
templatePrivacyClean: "Czyszczenie prywatności",
templateWebOptimization: "Optymalizacja webowa",
@@ -3425,14 +3425,14 @@ export const pl: TranslationKeys = {
zoomOut: "Zoom out",
fitToView: "Fit to view",
actualSize: "Actual size",
previousImage: "Previous image",
nextImage: "Next image",
imageArea: "Image area",
imageViewer: "Image viewer",
previousImage: "Poprzedni plik",
nextImage: "Następny plik",
imageArea: "Obszar podglądu",
imageViewer: "Przeglądarka plików",
fileDropZone: "File drop zone",
imageDropZone: "Image drop zone",
imageDropZone: "Strefa upuszczania plików",
beforeAfterSlider: "Before/after comparison slider",
imageControls: "Image controls",
imageControls: "Sterowanie podglądem",
zoomControls: "Zoom controls",
dragToReorder: "Drag to reorder",
whiteBackground: "White background",
+12 -12
View File
@@ -2444,13 +2444,13 @@ export const ptBR: TranslationKeys = {
generatingPreview: "Gerando visualizacao...",
cannotPreviewWillProcess:
"Arquivos {ext} nao podem ser visualizados no navegador. A ferramenta processara este arquivo normalmente.",
previousImage: "Imagem anterior",
nextImage: "Proxima imagem",
previousImage: "Arquivo anterior",
nextImage: "Proximo arquivo",
imageCounter: "{current} / {total}",
settingsLabel: "Configuracoes",
downloadAllZip: "Baixar tudo (ZIP)",
hideSettings: "Ocultar configuracoes",
imageArea: "Area da imagem",
imageArea: "Area de visualizacao",
disabledByAdmin: "This tool has been disabled by your administrator",
browseOtherTools: "Browse other tools",
privacyNote: "Files are processed on your server and never leave your network",
@@ -3193,10 +3193,10 @@ export const ptBR: TranslationKeys = {
savingIndicator: "...",
cancelButton: "Cancelar",
preview: "Visualizacao",
previousImage: "Imagem anterior",
nextImage: "Proxima imagem",
previousImage: "Arquivo anterior",
nextImage: "Proximo arquivo",
imageCounter: "{current} / {total}",
imageArea: "Area da imagem",
imageArea: "Area de visualizacao",
templateSocialMedia: "Pronto para redes sociais",
templatePrivacyClean: "Limpeza de privacidade",
templateWebOptimization: "Otimizacao para web",
@@ -3418,14 +3418,14 @@ export const ptBR: TranslationKeys = {
zoomOut: "Zoom out",
fitToView: "Fit to view",
actualSize: "Actual size",
previousImage: "Previous image",
nextImage: "Next image",
imageArea: "Image area",
imageViewer: "Image viewer",
previousImage: "Arquivo anterior",
nextImage: "Proximo arquivo",
imageArea: "Area de visualizacao",
imageViewer: "Visualizador de arquivos",
fileDropZone: "File drop zone",
imageDropZone: "Image drop zone",
imageDropZone: "Zona de soltar arquivos",
beforeAfterSlider: "Before/after comparison slider",
imageControls: "Image controls",
imageControls: "Controles de visualizacao",
zoomControls: "Zoom controls",
dragToReorder: "Drag to reorder",
whiteBackground: "White background",
+12 -12
View File
@@ -2446,13 +2446,13 @@ export const ru: TranslationKeys = {
generatingPreview: "Генерация предпросмотра...",
cannotPreviewWillProcess:
"Файлы {ext} невозможно просмотреть в браузере. Инструмент всё равно обработает этот файл.",
previousImage: "Предыдущее изображение",
nextImage: "Следующее изображение",
previousImage: "Предыдущий файл",
nextImage: "Следующий файл",
imageCounter: "{current} / {total}",
settingsLabel: "Настройки",
downloadAllZip: "Скачать всё (ZIP)",
hideSettings: "Скрыть настройки",
imageArea: "Область изображения",
imageArea: "Область предпросмотра",
disabledByAdmin: "This tool has been disabled by your administrator",
browseOtherTools: "Browse other tools",
privacyNote: "Files are processed on your server and never leave your network",
@@ -3192,10 +3192,10 @@ export const ru: TranslationKeys = {
savingIndicator: "...",
cancelButton: "Отмена",
preview: "Предпросмотр",
previousImage: "Предыдущее изображение",
nextImage: "Следующее изображение",
previousImage: "Предыдущий файл",
nextImage: "Следующий файл",
imageCounter: "{current} / {total}",
imageArea: "Область изображения",
imageArea: "Область предпросмотра",
templateSocialMedia: "Готово для соцсетей",
templatePrivacyClean: "Очистка конфиденциальности",
templateWebOptimization: "Веб-оптимизация",
@@ -3416,14 +3416,14 @@ export const ru: TranslationKeys = {
zoomOut: "Zoom out",
fitToView: "Fit to view",
actualSize: "Actual size",
previousImage: "Previous image",
nextImage: "Next image",
imageArea: "Image area",
imageViewer: "Image viewer",
previousImage: "Предыдущий файл",
nextImage: "Следующий файл",
imageArea: "Область предпросмотра",
imageViewer: "Просмотр файла",
fileDropZone: "File drop zone",
imageDropZone: "Image drop zone",
imageDropZone: "Зона перетаскивания файлов",
beforeAfterSlider: "Before/after comparison slider",
imageControls: "Image controls",
imageControls: "Управление предпросмотром",
zoomControls: "Zoom controls",
dragToReorder: "Drag to reorder",
whiteBackground: "White background",
+12 -12
View File
@@ -2443,13 +2443,13 @@ export const sv: TranslationKeys = {
generatingPreview: "Genererar forhandsvisning...",
cannotPreviewWillProcess:
"{ext}-filer kan inte forhandsvisas i webblasaren. Verktyget bearbetar anda denna fil.",
previousImage: "Foregaende bild",
nextImage: "Nasta bild",
previousImage: "Foregaende fil",
nextImage: "Nasta fil",
imageCounter: "{current} / {total}",
settingsLabel: "Installningar",
downloadAllZip: "Ladda ner alla (ZIP)",
hideSettings: "Dolj installningar",
imageArea: "Bildomrade",
imageArea: "Forhandsvisningsomrade",
disabledByAdmin: "This tool has been disabled by your administrator",
browseOtherTools: "Browse other tools",
privacyNote: "Files are processed on your server and never leave your network",
@@ -3187,10 +3187,10 @@ export const sv: TranslationKeys = {
savingIndicator: "...",
cancelButton: "Avbryt",
preview: "Forhandsvisning",
previousImage: "Foregaende bild",
nextImage: "Nasta bild",
previousImage: "Foregaende fil",
nextImage: "Nasta fil",
imageCounter: "{current} / {total}",
imageArea: "Bildomrade",
imageArea: "Forhandsvisningsomrade",
templateSocialMedia: "Sociala medier-redo",
templatePrivacyClean: "Integritetsrensning",
templateWebOptimization: "Webboptimering",
@@ -3411,14 +3411,14 @@ export const sv: TranslationKeys = {
zoomOut: "Zoom out",
fitToView: "Fit to view",
actualSize: "Actual size",
previousImage: "Previous image",
nextImage: "Next image",
imageArea: "Image area",
imageViewer: "Image viewer",
previousImage: "Foregaende fil",
nextImage: "Nasta fil",
imageArea: "Forhandsvisningsomrade",
imageViewer: "Filvisare",
fileDropZone: "File drop zone",
imageDropZone: "Image drop zone",
imageDropZone: "Filslappzon",
beforeAfterSlider: "Before/after comparison slider",
imageControls: "Image controls",
imageControls: "Forhandsvisningskontroller",
zoomControls: "Zoom controls",
dragToReorder: "Drag to reorder",
whiteBackground: "White background",
+12 -12
View File
@@ -2425,13 +2425,13 @@ export const th: TranslationKeys = {
generatingPreview: "กำลังสร้างตัวอย่าง...",
cannotPreviewWillProcess:
"ไม่สามารถแสดงตัวอย่างไฟล์ {ext} ในเบราว์เซอร์ได้ เครื่องมือจะยังประมวลผลไฟล์นี้ตามปกติ",
previousImage: "ภาพก่อนหน้า",
nextImage: "ภาพถัดไป",
previousImage: "ไฟล์ก่อนหน้า",
nextImage: "ไฟล์ถัดไป",
imageCounter: "{current} / {total}",
settingsLabel: "ตั้งค่า",
downloadAllZip: "ดาวน์โหลดทั้งหมด (ZIP)",
hideSettings: "ซ่อนการตั้งค่า",
imageArea: "พื้นที่ภาพ",
imageArea: "พื้นที่แสดงตัวอย่าง",
disabledByAdmin: "This tool has been disabled by your administrator",
browseOtherTools: "Browse other tools",
privacyNote: "Files are processed on your server and never leave your network",
@@ -3164,10 +3164,10 @@ export const th: TranslationKeys = {
savingIndicator: "...",
cancelButton: "ยกเลิก",
preview: "ตัวอย่าง",
previousImage: "ภาพก่อนหน้า",
nextImage: "ภาพถัดไป",
previousImage: "ไฟล์ก่อนหน้า",
nextImage: "ไฟล์ถัดไป",
imageCounter: "{current} / {total}",
imageArea: "พื้นที่ภาพ",
imageArea: "พื้นที่แสดงตัวอย่าง",
templateSocialMedia: "พร้อมสำหรับสื่อสังคม",
templatePrivacyClean: "ล้างข้อมูลความเป็นส่วนตัว",
templateWebOptimization: "เพิ่มประสิทธิภาพเว็บ",
@@ -3387,14 +3387,14 @@ export const th: TranslationKeys = {
zoomOut: "Zoom out",
fitToView: "Fit to view",
actualSize: "Actual size",
previousImage: "Previous image",
nextImage: "Next image",
imageArea: "Image area",
imageViewer: "Image viewer",
previousImage: "ไฟล์ก่อนหน้า",
nextImage: "ไฟล์ถัดไป",
imageArea: "พื้นที่แสดงตัวอย่าง",
imageViewer: "ตัวแสดงไฟล์",
fileDropZone: "File drop zone",
imageDropZone: "Image drop zone",
imageDropZone: "โซนวางไฟล์",
beforeAfterSlider: "Before/after comparison slider",
imageControls: "Image controls",
imageControls: "การควบคุมการแสดงตัวอย่าง",
zoomControls: "Zoom controls",
dragToReorder: "Drag to reorder",
whiteBackground: "White background",
+12 -12
View File
@@ -2448,13 +2448,13 @@ export const tr: TranslationKeys = {
generatingPreview: "Önizleme oluşturuluyor...",
cannotPreviewWillProcess:
"{ext} dosyaları tarayıcıda önizlenemez. Araç bu dosyayı yine de normal olarak işleyecektir.",
previousImage: "Önceki görüntü",
nextImage: "Sonraki görüntü",
previousImage: "Önceki dosya",
nextImage: "Sonraki dosya",
imageCounter: "{current} / {total}",
settingsLabel: "Ayarlar",
downloadAllZip: "Tümünü İndir (ZIP)",
hideSettings: "Ayarları Gizle",
imageArea: "Görüntü alanı",
imageArea: "Önizleme alanı",
disabledByAdmin: "This tool has been disabled by your administrator",
browseOtherTools: "Browse other tools",
privacyNote: "Files are processed on your server and never leave your network",
@@ -3197,10 +3197,10 @@ export const tr: TranslationKeys = {
savingIndicator: "...",
cancelButton: "İptal",
preview: "Önizleme",
previousImage: "Önceki görüntü",
nextImage: "Sonraki görüntü",
previousImage: "Önceki dosya",
nextImage: "Sonraki dosya",
imageCounter: "{current} / {total}",
imageArea: "Görüntü alanı",
imageArea: "Önizleme alanı",
templateSocialMedia: "Sosyal Medyaya Hazır",
templatePrivacyClean: "Gizlilik Temizliği",
templateWebOptimization: "Web Optimizasyonu",
@@ -3422,14 +3422,14 @@ export const tr: TranslationKeys = {
zoomOut: "Zoom out",
fitToView: "Fit to view",
actualSize: "Actual size",
previousImage: "Previous image",
nextImage: "Next image",
imageArea: "Image area",
imageViewer: "Image viewer",
previousImage: "Önceki dosya",
nextImage: "Sonraki dosya",
imageArea: "Önizleme alanı",
imageViewer: "Dosya görüntüleyici",
fileDropZone: "File drop zone",
imageDropZone: "Image drop zone",
imageDropZone: "Dosya bırakma alanı",
beforeAfterSlider: "Before/after comparison slider",
imageControls: "Image controls",
imageControls: "Önizleme kontrolleri",
zoomControls: "Zoom controls",
dragToReorder: "Drag to reorder",
whiteBackground: "White background",
+12 -12
View File
@@ -2446,13 +2446,13 @@ export const uk: TranslationKeys = {
generatingPreview: "Генерація попереднього перегляду...",
cannotPreviewWillProcess:
"Файли {ext} неможливо переглянути у браузері. Інструмент все одно обробить цей файл.",
previousImage: "Попереднє зображення",
nextImage: "Наступне зображення",
previousImage: "Попередній файл",
nextImage: "Наступний файл",
imageCounter: "{current} / {total}",
settingsLabel: "Налаштування",
downloadAllZip: "Завантажити все (ZIP)",
hideSettings: "Сховати налаштування",
imageArea: "Область зображення",
imageArea: "Область попереднього перегляду",
disabledByAdmin: "This tool has been disabled by your administrator",
browseOtherTools: "Browse other tools",
privacyNote: "Files are processed on your server and never leave your network",
@@ -3193,10 +3193,10 @@ export const uk: TranslationKeys = {
savingIndicator: "...",
cancelButton: "Скасувати",
preview: "Попередній перегляд",
previousImage: "Попереднє зображення",
nextImage: "Наступне зображення",
previousImage: "Попередній файл",
nextImage: "Наступний файл",
imageCounter: "{current} / {total}",
imageArea: "Область зображення",
imageArea: "Область попереднього перегляду",
templateSocialMedia: "Готово для соцмереж",
templatePrivacyClean: "Очищення конфіденційності",
templateWebOptimization: "Веб-оптимізація",
@@ -3417,14 +3417,14 @@ export const uk: TranslationKeys = {
zoomOut: "Zoom out",
fitToView: "Fit to view",
actualSize: "Actual size",
previousImage: "Previous image",
nextImage: "Next image",
imageArea: "Image area",
imageViewer: "Image viewer",
previousImage: "Попередній файл",
nextImage: "Наступний файл",
imageArea: "Область попереднього перегляду",
imageViewer: "Переглядач файлів",
fileDropZone: "File drop zone",
imageDropZone: "Image drop zone",
imageDropZone: "Зона перетягування файлів",
beforeAfterSlider: "Before/after comparison slider",
imageControls: "Image controls",
imageControls: "Елементи керування переглядом",
zoomControls: "Zoom controls",
dragToReorder: "Drag to reorder",
whiteBackground: "White background",
+12 -12
View File
@@ -2445,13 +2445,13 @@ export const vi: TranslationKeys = {
generatingPreview: "Đang tạo bản xem trước...",
cannotPreviewWillProcess:
"Không thể xem trước tệp {ext} trong trình duyệt. Công cụ vẫn sẽ xử lý tệp này bình thường.",
previousImage: "Ảnh trước",
nextImage: "Ảnh tiếp theo",
previousImage: "Tệp trước",
nextImage: "Tệp tiếp theo",
imageCounter: "{current} / {total}",
settingsLabel: "Cài đặt",
downloadAllZip: "Tải tất cả (ZIP)",
hideSettings: "Ẩn cài đặt",
imageArea: "Vùng ảnh",
imageArea: "Vùng xem trước",
disabledByAdmin: "This tool has been disabled by your administrator",
browseOtherTools: "Browse other tools",
privacyNote: "Files are processed on your server and never leave your network",
@@ -3187,10 +3187,10 @@ export const vi: TranslationKeys = {
savingIndicator: "...",
cancelButton: "Hủy",
preview: "Xem trước",
previousImage: "Ảnh trước",
nextImage: "Ảnh tiếp theo",
previousImage: "Tệp trước",
nextImage: "Tệp tiếp theo",
imageCounter: "{current} / {total}",
imageArea: "Vùng ảnh",
imageArea: "Vùng xem trước",
templateSocialMedia: "Sẵn sàng cho mạng xã hội",
templatePrivacyClean: "Dọn dẹp quyền riêng tư",
templateWebOptimization: "Tối ưu cho Web",
@@ -3411,14 +3411,14 @@ export const vi: TranslationKeys = {
zoomOut: "Zoom out",
fitToView: "Fit to view",
actualSize: "Actual size",
previousImage: "Previous image",
nextImage: "Next image",
imageArea: "Image area",
imageViewer: "Image viewer",
previousImage: "Tệp trước",
nextImage: "Tệp tiếp theo",
imageArea: "Vùng xem trước",
imageViewer: "Trình xem tệp",
fileDropZone: "File drop zone",
imageDropZone: "Image drop zone",
imageDropZone: "Vùng thả tệp",
beforeAfterSlider: "Before/after comparison slider",
imageControls: "Image controls",
imageControls: "Điều khiển xem trước",
zoomControls: "Zoom controls",
dragToReorder: "Drag to reorder",
whiteBackground: "White background",
+12 -12
View File
@@ -2378,13 +2378,13 @@ export const zhCN: TranslationKeys = {
cannotPreviewDownload: "{type} 文件无法在浏览器中预览。请使用下载按钮保存文件。",
generatingPreview: "正在生成预览...",
cannotPreviewWillProcess: "{ext} 文件无法在浏览器中预览。该工具仍会正常处理此文件。",
previousImage: "上一张图片",
nextImage: "下一张图片",
previousImage: "上一个文件",
nextImage: "下一个文件",
imageCounter: "{current} / {total}",
settingsLabel: "设置",
downloadAllZip: "全部下载(ZIP",
hideSettings: "隐藏设置",
imageArea: "图片区域",
imageArea: "预览区域",
disabledByAdmin: "This tool has been disabled by your administrator",
browseOtherTools: "Browse other tools",
privacyNote: "Files are processed on your server and never leave your network",
@@ -3115,10 +3115,10 @@ export const zhCN: TranslationKeys = {
savingIndicator: "...",
cancelButton: "取消",
preview: "预览",
previousImage: "上一张图片",
nextImage: "下一张图片",
previousImage: "上一个文件",
nextImage: "下一个文件",
imageCounter: "{current} / {total}",
imageArea: "图片区域",
imageArea: "预览区域",
templateSocialMedia: "社交媒体适配",
templatePrivacyClean: "隐私清理",
templateWebOptimization: "网页优化",
@@ -3337,14 +3337,14 @@ export const zhCN: TranslationKeys = {
zoomOut: "Zoom out",
fitToView: "Fit to view",
actualSize: "Actual size",
previousImage: "Previous image",
nextImage: "Next image",
imageArea: "Image area",
imageViewer: "Image viewer",
previousImage: "上一个文件",
nextImage: "下一个文件",
imageArea: "预览区域",
imageViewer: "文件查看器",
fileDropZone: "File drop zone",
imageDropZone: "Image drop zone",
imageDropZone: "文件拖放区域",
beforeAfterSlider: "Before/after comparison slider",
imageControls: "Image controls",
imageControls: "预览控件",
zoomControls: "Zoom controls",
dragToReorder: "Drag to reorder",
whiteBackground: "White background",
+12 -12
View File
@@ -2376,13 +2376,13 @@ export const zhTW: TranslationKeys = {
cannotPreviewDownload: "{type}檔案無法在瀏覽器中預覽。請使用下載按鈕儲存檔案。",
generatingPreview: "正在產生預覽...",
cannotPreviewWillProcess: "{ext}檔案無法在瀏覽器中預覽。該工具仍會正常處理此檔案。",
previousImage: "上一張影像",
nextImage: "下一張影像",
previousImage: "上一個檔案",
nextImage: "下一個檔案",
imageCounter: "{current} / {total}",
settingsLabel: "設定",
downloadAllZip: "全部下載(ZIP",
hideSettings: "隱藏設定",
imageArea: "影像區域",
imageArea: "預覽區域",
disabledByAdmin: "This tool has been disabled by your administrator",
browseOtherTools: "Browse other tools",
privacyNote: "Files are processed on your server and never leave your network",
@@ -3113,10 +3113,10 @@ export const zhTW: TranslationKeys = {
savingIndicator: "...",
cancelButton: "取消",
preview: "預覽",
previousImage: "上一張影像",
nextImage: "下一張影像",
previousImage: "上一個檔案",
nextImage: "下一個檔案",
imageCounter: "{current} / {total}",
imageArea: "影像區域",
imageArea: "預覽區域",
templateSocialMedia: "社群媒體就緒",
templatePrivacyClean: "隱私清理",
templateWebOptimization: "網頁最佳化",
@@ -3336,14 +3336,14 @@ export const zhTW: TranslationKeys = {
zoomOut: "Zoom out",
fitToView: "Fit to view",
actualSize: "Actual size",
previousImage: "Previous image",
nextImage: "Next image",
imageArea: "Image area",
imageViewer: "Image viewer",
previousImage: "上一個檔案",
nextImage: "下一個檔案",
imageArea: "預覽區域",
imageViewer: "檔案檢視器",
fileDropZone: "File drop zone",
imageDropZone: "Image drop zone",
imageDropZone: "檔案拖放區域",
beforeAfterSlider: "Before/after comparison slider",
imageControls: "Image controls",
imageControls: "預覽控制項",
zoomControls: "Zoom controls",
dragToReorder: "Drag to reorder",
whiteBackground: "White background",