From 229f9a3ca0e7736f4051c89f82193c4a88e4c0d8 Mon Sep 17 00:00:00 2001 From: Daniel Luiz Alves Date: Tue, 24 Jun 2025 13:58:57 -0300 Subject: [PATCH] feat: enhance file management features and localization - Added bulk download functionality for files in the PublicSharePage, allowing users to download multiple files as a ZIP. - Introduced new success and error messages for file deletion and password protection updates, improving user feedback. - Updated translation files to include new keys for bulk download, file deletion, and password protection messages, enhancing localization support. - Improved UI components to accommodate new features and ensure a seamless user experience. --- apps/web/messages/ar-SA.json | 43 +++++++++++--- apps/web/messages/de-DE.json | 39 ++++++++++--- apps/web/messages/en-US.json | 11 +++- apps/web/messages/es-ES.json | 39 ++++++++++--- apps/web/messages/fr-FR.json | 39 ++++++++++--- apps/web/messages/hi-IN.json | 39 ++++++++++--- apps/web/messages/it-IT.json | 39 ++++++++++--- apps/web/messages/ja-JP.json | 39 ++++++++++--- apps/web/messages/ko-KR.json | 39 ++++++++++--- apps/web/messages/nl-NL.json | 39 ++++++++++--- apps/web/messages/pl-PL.json | 39 ++++++++++--- apps/web/messages/pt-BR.json | 39 ++++++++++--- apps/web/messages/ru-RU.json | 39 ++++++++++--- apps/web/messages/tr-TR.json | 39 ++++++++++--- apps/web/messages/zh-CN.json | 39 ++++++++++--- .../components/edit-password-modal.tsx | 6 +- .../components/received-files-modal.tsx | 6 +- .../s/[alias]/components/share-details.tsx | 21 +++++-- .../s/[alias]/components/share-header.tsx | 4 +- .../s/[alias]/hooks/use-public-share.ts | 57 +++++++++++++++++++ apps/web/src/app/(shares)/s/[alias]/page.tsx | 3 +- .../app/(shares)/s/[alias]/types/index.tsx | 1 + .../src/components/general/file-selector.tsx | 4 +- apps/web/src/hooks/use-file-manager.ts | 6 +- apps/web/src/hooks/use-share-manager.ts | 2 +- 25 files changed, 552 insertions(+), 119 deletions(-) diff --git a/apps/web/messages/ar-SA.json b/apps/web/messages/ar-SA.json index fdf00d4..c327a3e 100644 --- a/apps/web/messages/ar-SA.json +++ b/apps/web/messages/ar-SA.json @@ -532,6 +532,20 @@ "testSmtp": { "title": "اختبار اتصال SMTP", "description": "اختبار ما إذا كان تكوين SMTP صالحًا" + }, + "smtpNoAuth": { + "title": "بدون مصادقة", + "description": "قم بتمكين هذا للخوادم الداخلية التي لا تتطلب اسم مستخدم/كلمة مرور (يخفي حقول المصادقة)" + }, + "smtpSecure": { + "title": "أمان الاتصال", + "description": "طريقة أمان اتصال SMTP - تلقائي (موصى به)، SSL، STARTTLS، أو بدون (غير آمن)", + "options": { + "auto": "تلقائي (موصى به)", + "ssl": "SSL (منفذ 465)", + "tls": "STARTTLS (منفذ 587)", + "none": "بدون (غير آمن)" + } } }, "buttons": { @@ -548,7 +562,10 @@ "updateSuccess": "تم تحديث إعدادات {group} بنجاح", "smtpTestFailed": "فشل اتصال SMTP: {error}", "smtpTestGenericError": "فشل اختبار اتصال SMTP. يرجى التحقق من إعداداتك والمحاولة مرة أخرى.", - "smtpTestSuccess": "تم اتصال SMTP بنجاح! تكوين البريد الإلكتروني الخاص بك يعمل بشكل صحيح." + "smtpTestSuccess": "تم اتصال SMTP بنجاح! تكوين البريد الإلكتروني الخاص بك يعمل بشكل صحيح.", + "smtpMissingAuth": "يرجى ملء اسم المستخدم وكلمة المرور الخاصة بـ SMTP، أو تمكين خيار 'بدون مصادقة'.", + "smtpMissingHostPort": "يرجى ملء مضيف ومنفذ SMTP قبل الاختبار.", + "smtpNotEnabled": "SMTP غير مفعل. يرجى تفعيل SMTP أولاً." }, "title": "الإعدادات", "breadcrumb": "الإعدادات", @@ -556,7 +573,8 @@ "tooltips": { "oidcScope": "أدخل نطاقاً واضغط Enter للإضافة", "oidcAdminEmailDomains": "أدخل نطاقاً واضغط Enter للإضافة", - "testSmtp": "يختبر اتصال SMTP بالقيم المدخلة حاليًا في النموذج. لجعل التغييرات دائمة، تذكر حفظ إعداداتك بعد الاختبار." + "testSmtp": "يختبر اتصال SMTP بالقيم المدخلة حاليًا في النموذج. لجعل التغييرات دائمة، تذكر حفظ إعداداتك بعد الاختبار.", + "defaultPlaceholder": "أدخل واضغط Enter" }, "redirectUri": { "placeholder": "https://mysite.com", @@ -589,7 +607,8 @@ "title": "لم يتم العثور على المشاركة", "description": "قد يكون تم حذف هذه المشاركة أو انتهت صلاحيتها." }, - "pageTitle": "المشاركة" + "pageTitle": "المشاركة", + "downloadAll": "تحميل الكل" }, "shareActions": { "deleteTitle": "حذف المشاركة", @@ -1215,7 +1234,9 @@ "bulkDeleteProgress": "جارٍ حذف {count, plural, =1 {ملف واحد} =2 {ملفين} other {# ملفات}}...", "bulkDeleteSuccess": "{count, plural, =1 {تم حذف ملف واحد بنجاح} =2 {تم حذف ملفين بنجاح} other {تم حذف # ملفات بنجاح}}", "selectAll": "تحديد الكل", - "selectFile": "تحديد الملف {fileName}" + "selectFile": "تحديد الملف {fileName}", + "deleteError": "خطأ في حذف الملف", + "deleteSuccess": "تم حذف الملف بنجاح" } }, "form": { @@ -1298,14 +1319,17 @@ "deleteSuccess": "تم حذف رابط الاستلام بنجاح!", "aliasCreated": "تم إنشاء الاسم المستعار بنجاح!", "activateSuccess": "تم تفعيل رابط الاستلام بنجاح!", - "deactivateSuccess": "تم تعطيل رابط الاستلام بنجاح!" + "deactivateSuccess": "تم تعطيل رابط الاستلام بنجاح!", + "passwordProtectionDisabled": "تم إزالة حماية كلمة المرور بنجاح!", + "passwordProtectionEnabled": "تم تمكين حماية كلمة المرور بنجاح!" }, "errors": { "loadFailed": "فشل في تحميل روابط الاستلام", "createFailed": "فشل في إنشاء رابط الاستلام. حاول مرة أخرى.", "updateFailed": "فشل في تحديث رابط الاستلام. حاول مرة أخرى.", "deleteFailed": "فشل في حذف رابط الاستلام. حاول مرة أخرى.", - "aliasCreateFailed": "فشل في إنشاء الاسم المستعار. حاول مرة أخرى." + "aliasCreateFailed": "فشل في إنشاء الاسم المستعار. حاول مرة أخرى.", + "passwordUpdateFailed": "فشل في تحديث حماية كلمة المرور" }, "delete": { "title": "حذف رابط الاستلام", @@ -1405,7 +1429,9 @@ "components": { "fileRow": { "addDescription": "إضافة وصف...", - "anonymous": "مجهول" + "anonymous": "مجهول", + "deleteError": "خطأ في حذف الملف", + "deleteSuccess": "تم حذف الملف بنجاح" }, "fileActions": { "edit": "تحرير", @@ -1421,6 +1447,7 @@ "saveChanges": "حفظ التغييرات", "cancelEdit": "إلغاء التحرير" } - } + }, + "defaultLinkName": "الملفات المستلمة" } } \ No newline at end of file diff --git a/apps/web/messages/de-DE.json b/apps/web/messages/de-DE.json index d28149e..0de6edb 100644 --- a/apps/web/messages/de-DE.json +++ b/apps/web/messages/de-DE.json @@ -532,6 +532,20 @@ "testSmtp": { "title": "SMTP-Verbindung testen", "description": "Testen Sie, ob die SMTP-Konfiguration gültig ist" + }, + "smtpNoAuth": { + "title": "Keine Authentifizierung", + "description": "Aktivieren Sie dies für interne Server, die keinen Benutzernamen/Passwort benötigen (blendet Authentifizierungsfelder aus)" + }, + "smtpSecure": { + "title": "Verbindungssicherheit", + "description": "SMTP-Verbindungssicherheitsmethode - Auto (empfohlen), SSL, STARTTLS oder Keine (unsicher)", + "options": { + "auto": "Auto (Empfohlen)", + "ssl": "SSL (Port 465)", + "tls": "STARTTLS (Port 587)", + "none": "Keine (Unsicher)" + } } }, "buttons": { @@ -548,7 +562,10 @@ "updateSuccess": "{group}-Einstellungen erfolgreich aktualisiert", "smtpTestFailed": "SMTP-Verbindung fehlgeschlagen: {error}", "smtpTestGenericError": "SMTP-Verbindungstest fehlgeschlagen. Bitte überprüfen Sie Ihre Einstellungen und versuchen Sie es erneut.", - "smtpTestSuccess": "SMTP-Verbindung erfolgreich! Ihre E-Mail-Konfiguration funktioniert korrekt." + "smtpTestSuccess": "SMTP-Verbindung erfolgreich! Ihre E-Mail-Konfiguration funktioniert korrekt.", + "smtpMissingAuth": "Bitte geben Sie SMTP-Benutzername und Passwort ein oder aktivieren Sie die Option 'Keine Authentifizierung'.", + "smtpMissingHostPort": "Bitte geben Sie SMTP-Host und Port vor dem Test ein.", + "smtpNotEnabled": "SMTP ist nicht aktiviert. Bitte aktivieren Sie zuerst SMTP." }, "title": "Einstellungen", "breadcrumb": "Einstellungen", @@ -556,7 +573,8 @@ "tooltips": { "oidcScope": "Geben Sie einen Scope ein und drücken Sie Enter zum Hinzufügen", "oidcAdminEmailDomains": "Geben Sie eine Domain ein und drücken Sie Enter zum Hinzufügen", - "testSmtp": "Testet die SMTP-Verbindung mit den aktuell im Formular eingegebenen Werten. Um die Änderungen dauerhaft zu machen, denken Sie daran, Ihre Einstellungen nach dem Test zu speichern." + "testSmtp": "Testet die SMTP-Verbindung mit den aktuell im Formular eingegebenen Werten. Um die Änderungen dauerhaft zu machen, denken Sie daran, Ihre Einstellungen nach dem Test zu speichern.", + "defaultPlaceholder": "Eingeben und Enter drücken" }, "redirectUri": { "placeholder": "https://meineseite.com", @@ -589,7 +607,8 @@ "title": "Freigabe nicht gefunden", "description": "Diese Freigabe wurde möglicherweise gelöscht oder ist abgelaufen." }, - "pageTitle": "Freigabe" + "pageTitle": "Freigabe", + "downloadAll": "Alle herunterladen" }, "shareActions": { "deleteTitle": "Freigabe Löschen", @@ -1215,7 +1234,9 @@ "bulkDeleteProgress": "{count, plural, =1 {1 Datei wird} other {# Dateien werden}} gelöscht...", "bulkDeleteSuccess": "{count, plural, =1 {1 Datei wurde erfolgreich gelöscht} other {# Dateien wurden erfolgreich gelöscht}}", "selectAll": "Alle auswählen", - "selectFile": "Datei {fileName} auswählen" + "selectFile": "Datei {fileName} auswählen", + "deleteError": "Fehler beim Löschen der Datei", + "deleteSuccess": "Datei erfolgreich gelöscht" } }, "form": { @@ -1298,14 +1319,17 @@ "deleteSuccess": "Empfangslink erfolgreich gelöscht!", "aliasCreated": "Alias erfolgreich erstellt!", "activateSuccess": "Empfangslink erfolgreich aktiviert!", - "deactivateSuccess": "Empfangslink erfolgreich deaktiviert!" + "deactivateSuccess": "Empfangslink erfolgreich deaktiviert!", + "passwordProtectionDisabled": "Passwortschutz erfolgreich entfernt!", + "passwordProtectionEnabled": "Passwortschutz erfolgreich aktiviert!" }, "errors": { "loadFailed": "Fehler beim Laden der Empfangslinks", "createFailed": "Fehler beim Erstellen des Empfangslinks. Bitte versuchen Sie es erneut.", "updateFailed": "Fehler beim Aktualisieren des Empfangslinks. Bitte versuchen Sie es erneut.", "deleteFailed": "Fehler beim Löschen des Empfangslinks. Bitte versuchen Sie es erneut.", - "aliasCreateFailed": "Fehler beim Erstellen des Alias. Bitte versuchen Sie es erneut." + "aliasCreateFailed": "Fehler beim Erstellen des Alias. Bitte versuchen Sie es erneut.", + "passwordUpdateFailed": "Fehler beim Aktualisieren des Passwortschutzes" }, "delete": { "title": "Empfangslink löschen", @@ -1421,6 +1445,7 @@ "saveChanges": "Änderungen speichern", "cancelEdit": "Bearbeitung abbrechen" } - } + }, + "defaultLinkName": "Empfangene Dateien" } } \ No newline at end of file diff --git a/apps/web/messages/en-US.json b/apps/web/messages/en-US.json index 8344075..c4c4d6f 100644 --- a/apps/web/messages/en-US.json +++ b/apps/web/messages/en-US.json @@ -603,6 +603,7 @@ "created": "Created: {date}", "expires": "Expires: {date}" }, + "downloadAll": "Download All", "notFound": { "title": "Share Not Found", "description": "This share may have been deleted or expired." @@ -1218,6 +1219,8 @@ "previewNotAvailable": "Preview not available", "copySuccess": "File copied to your files successfully", "copyError": "Error copying file to your files", + "deleteSuccess": "File deleted successfully", + "deleteError": "Error deleting file", "bulkCopySuccess": "{count, plural, =1 {1 file copied to your files successfully} other {# files copied to your files successfully}}", "bulkDeleteSuccess": "{count, plural, =1 {1 file deleted successfully} other {# files deleted successfully}}", "bulkCopyProgress": "Copying {count, plural, =1 {1 file} other {# files}} to your files...", @@ -1316,14 +1319,18 @@ "deleteSuccess": "Receive link deleted successfully!", "aliasCreated": "Alias created successfully!", "activateSuccess": "Receive link activated successfully!", - "deactivateSuccess": "Receive link deactivated successfully!" + "deactivateSuccess": "Receive link deactivated successfully!", + "passwordProtectionEnabled": "Password protection enabled successfully!", + "passwordProtectionDisabled": "Password protection removed successfully!" }, + "defaultLinkName": "Received Files", "errors": { "loadFailed": "Failed to load receive links", "createFailed": "Failed to create receive link. Please try again.", "updateFailed": "Failed to update receive link. Please try again.", "deleteFailed": "Failed to delete receive link. Please try again.", - "aliasCreateFailed": "Failed to create alias. Please try again." + "aliasCreateFailed": "Failed to create alias. Please try again.", + "passwordUpdateFailed": "Failed to update password protection" }, "delete": { "title": "Delete receive link", diff --git a/apps/web/messages/es-ES.json b/apps/web/messages/es-ES.json index a7903c2..330ca2b 100644 --- a/apps/web/messages/es-ES.json +++ b/apps/web/messages/es-ES.json @@ -532,6 +532,20 @@ "testSmtp": { "title": "Probar Conexión SMTP", "description": "Probar si la configuración SMTP es válida" + }, + "smtpNoAuth": { + "title": "Sin Autenticación", + "description": "Habilitar para servidores internos que no requieren usuario/contraseña (oculta los campos de autenticación)" + }, + "smtpSecure": { + "title": "Seguridad de Conexión", + "description": "Método de seguridad de conexión SMTP - Auto (recomendado), SSL, STARTTLS o Ninguno (inseguro)", + "options": { + "auto": "Auto (Recomendado)", + "ssl": "SSL (Puerto 465)", + "tls": "STARTTLS (Puerto 587)", + "none": "Ninguno (Inseguro)" + } } }, "buttons": { @@ -548,7 +562,10 @@ "updateSuccess": "Configuración de {group} actualizada exitosamente", "smtpTestSuccess": "¡Conexión SMTP exitosa! Tu configuración de correo funciona correctamente.", "smtpTestFailed": "Falló la conexión SMTP: {error}", - "smtpTestGenericError": "Error al probar la conexión SMTP. Por favor revisa tu configuración e inténtalo de nuevo." + "smtpTestGenericError": "Error al probar la conexión SMTP. Por favor revisa tu configuración e inténtalo de nuevo.", + "smtpMissingAuth": "Por favor ingresa el Usuario y Contraseña SMTP, o habilita la opción 'Sin Autenticación'.", + "smtpMissingHostPort": "Por favor ingresa el Host y Puerto SMTP antes de probar.", + "smtpNotEnabled": "SMTP no está habilitado. Por favor habilita SMTP primero." }, "title": "Configuración", "breadcrumb": "Configuración", @@ -556,7 +573,8 @@ "tooltips": { "oidcScope": "Ingrese un ámbito y presione Enter para agregar", "oidcAdminEmailDomains": "Ingrese un dominio y presione Enter para agregar", - "testSmtp": "Prueba la conexión SMTP con los valores actualmente ingresados en el formulario. Para hacer los cambios permanentes, recuerda guardar la configuración después de probar." + "testSmtp": "Prueba la conexión SMTP con los valores actualmente ingresados en el formulario. Para hacer los cambios permanentes, recuerda guardar la configuración después de probar.", + "defaultPlaceholder": "Ingrese y presione Enter" }, "redirectUri": { "placeholder": "https://misitio.com", @@ -589,7 +607,8 @@ "title": "Compartición no encontrada", "description": "Esta compartición puede haber sido eliminada o haber expirado." }, - "pageTitle": "Compartición" + "pageTitle": "Compartición", + "downloadAll": "Descargar Todo" }, "shareActions": { "deleteTitle": "Eliminar Compartir", @@ -1215,7 +1234,9 @@ "bulkDeleteProgress": "Eliminando {count, plural, =1 {1 archivo} other {# archivos}}...", "bulkDeleteSuccess": "{count, plural, =1 {1 archivo eliminado correctamente} other {# archivos eliminados correctamente}}", "selectAll": "Seleccionar todo", - "selectFile": "Seleccionar archivo {fileName}" + "selectFile": "Seleccionar archivo {fileName}", + "deleteError": "Error al eliminar el archivo", + "deleteSuccess": "Archivo eliminado correctamente" } }, "form": { @@ -1298,14 +1319,17 @@ "deleteSuccess": "¡Enlace de recepción eliminado con éxito!", "aliasCreated": "¡Alias creado con éxito!", "activateSuccess": "¡Enlace de recepción activado con éxito!", - "deactivateSuccess": "¡Enlace de recepción desactivado con éxito!" + "deactivateSuccess": "¡Enlace de recepción desactivado con éxito!", + "passwordProtectionDisabled": "¡Protección por contraseña eliminada con éxito!", + "passwordProtectionEnabled": "¡Protección por contraseña habilitada con éxito!" }, "errors": { "loadFailed": "Error al cargar enlaces de recepción", "createFailed": "Error al crear enlace de recepción. Inténtalo de nuevo.", "updateFailed": "Error al actualizar enlace de recepción. Inténtalo de nuevo.", "deleteFailed": "Error al eliminar enlace de recepción. Inténtalo de nuevo.", - "aliasCreateFailed": "Error al crear alias. Inténtalo de nuevo." + "aliasCreateFailed": "Error al crear alias. Inténtalo de nuevo.", + "passwordUpdateFailed": "Error al actualizar la protección por contraseña" }, "delete": { "title": "Eliminar enlace de recepción", @@ -1421,6 +1445,7 @@ "saveChanges": "Guardar cambios", "cancelEdit": "Cancelar edición" } - } + }, + "defaultLinkName": "Archivos recibidos" } } \ No newline at end of file diff --git a/apps/web/messages/fr-FR.json b/apps/web/messages/fr-FR.json index dbe63cd..67038de 100644 --- a/apps/web/messages/fr-FR.json +++ b/apps/web/messages/fr-FR.json @@ -535,6 +535,20 @@ "testSmtp": { "title": "[TO_TRANSLATE] Test SMTP Connection", "description": "[TO_TRANSLATE] Test if the SMTP configuration is valid" + }, + "smtpNoAuth": { + "title": "Pas d'Authentification", + "description": "Activez cette option pour les serveurs internes qui ne nécessitent pas de nom d'utilisateur/mot de passe (masque les champs d'authentification)" + }, + "smtpSecure": { + "title": "Sécurité de la Connexion", + "description": "Méthode de sécurité de connexion SMTP - Auto (recommandé), SSL, STARTTLS, ou Aucune (non sécurisé)", + "options": { + "auto": "Auto (Recommandé)", + "ssl": "SSL (Port 465)", + "tls": "STARTTLS (Port 587)", + "none": "Aucune (Non sécurisé)" + } } }, "buttons": { @@ -551,12 +565,16 @@ "updateSuccess": "Paramètres {group} mis à jour avec succès", "smtpTestFailed": "La connexion SMTP a échoué : {error}", "smtpTestGenericError": "Échec du test de connexion SMTP. Veuillez vérifier vos paramètres et réessayer.", - "smtpTestSuccess": "Connexion SMTP réussie ! Votre configuration email fonctionne correctement." + "smtpTestSuccess": "Connexion SMTP réussie ! Votre configuration email fonctionne correctement.", + "smtpMissingAuth": "Veuillez remplir le nom d'utilisateur et le mot de passe SMTP, ou activer l'option 'Pas d'Authentification'.", + "smtpMissingHostPort": "Veuillez remplir l'hôte et le port SMTP avant de tester.", + "smtpNotEnabled": "SMTP n'est pas activé. Veuillez d'abord activer SMTP." }, "tooltips": { "oidcScope": "Entrez une portée et appuyez sur Entrée pour l'ajouter", "oidcAdminEmailDomains": "Entrez un domaine et appuyez sur Entrée pour l'ajouter", - "testSmtp": "Teste la connexion SMTP avec les valeurs actuellement saisies dans le formulaire. Pour rendre les modifications permanentes, n'oubliez pas d'enregistrer vos paramètres après le test." + "testSmtp": "Teste la connexion SMTP avec les valeurs actuellement saisies dans le formulaire. Pour rendre les modifications permanentes, n'oubliez pas d'enregistrer vos paramètres après le test.", + "defaultPlaceholder": "Entrez et appuyez sur Entrée" }, "redirectUri": { "placeholder": "https://monsite.com", @@ -589,7 +607,8 @@ "title": "Partage Non Trouvé", "description": "Ce partage a peut-être été supprimé ou a expiré." }, - "pageTitle": "Partage" + "pageTitle": "Partage", + "downloadAll": "Tout Télécharger" }, "shareActions": { "deleteTitle": "Supprimer le Partage", @@ -1215,7 +1234,9 @@ "bulkDeleteProgress": "Suppression de {count, plural, =1 {1 fichier} other {# fichiers}}...", "bulkDeleteSuccess": "{count, plural, =1 {1 fichier supprimé avec succès} other {# fichiers supprimés avec succès}}", "selectAll": "Tout sélectionner", - "selectFile": "Sélectionner le fichier {fileName}" + "selectFile": "Sélectionner le fichier {fileName}", + "deleteError": "Erreur lors de la suppression du fichier", + "deleteSuccess": "Fichier supprimé avec succès" } }, "form": { @@ -1298,14 +1319,17 @@ "deleteSuccess": "Lien de réception supprimé avec succès !", "aliasCreated": "Alias créé avec succès !", "activateSuccess": "Lien de réception activé avec succès !", - "deactivateSuccess": "Lien de réception désactivé avec succès !" + "deactivateSuccess": "Lien de réception désactivé avec succès !", + "passwordProtectionDisabled": "Protection par mot de passe supprimée avec succès !", + "passwordProtectionEnabled": "Protection par mot de passe activée avec succès !" }, "errors": { "loadFailed": "Échec du chargement des liens de réception", "createFailed": "Échec de la création du lien de réception. Veuillez réessayer.", "updateFailed": "Échec de la mise à jour du lien de réception. Veuillez réessayer.", "deleteFailed": "Échec de la suppression du lien de réception. Veuillez réessayer.", - "aliasCreateFailed": "Échec de la création de l'alias. Veuillez réessayer." + "aliasCreateFailed": "Échec de la création de l'alias. Veuillez réessayer.", + "passwordUpdateFailed": "Échec de la mise à jour de la protection par mot de passe" }, "delete": { "title": "Supprimer le lien de réception", @@ -1421,6 +1445,7 @@ "saveChanges": "Enregistrer les modifications", "cancelEdit": "Annuler la modification" } - } + }, + "defaultLinkName": "Fichiers reçus" } } \ No newline at end of file diff --git a/apps/web/messages/hi-IN.json b/apps/web/messages/hi-IN.json index da8c83c..ba4d568 100644 --- a/apps/web/messages/hi-IN.json +++ b/apps/web/messages/hi-IN.json @@ -532,6 +532,20 @@ "testSmtp": { "title": "SMTP कनेक्शन का परीक्षण करें", "description": "जांचें कि SMTP कॉन्फ़िगरेशन मान्य है" + }, + "smtpNoAuth": { + "title": "कोई प्रमाणीकरण नहीं", + "description": "आंतरिक सर्वर के लिए सक्षम करें जिन्हें उपयोगकर्ता नाम/पासवर्ड की आवश्यकता नहीं होती है (प्रमाणीकरण फ़ील्ड छिपाता है)" + }, + "smtpSecure": { + "title": "कनेक्शन सुरक्षा", + "description": "SMTP कनेक्शन सुरक्षा विधि - स्वचालित (अनुशंसित), SSL, STARTTLS, या कोई नहीं (असुरक्षित)", + "options": { + "auto": "स्वचालित (अनुशंसित)", + "ssl": "SSL (पोर्ट 465)", + "tls": "STARTTLS (पोर्ट 587)", + "none": "कोई नहीं (असुरक्षित)" + } } }, "buttons": { @@ -548,7 +562,10 @@ "updateSuccess": "{group} सेटिंग्स सफलतापूर्वक अपडेट हुईं", "smtpTestFailed": "SMTP कनेक्शन विफल: {error}", "smtpTestGenericError": "SMTP कनेक्शन का परीक्षण करने में विफल। कृपया अपनी सेटिंग्स जांचें और पुनः प्रयास करें।", - "smtpTestSuccess": "SMTP कनेक्शन सफल! आपका ईमेल कॉन्फ़िगरेशन सही ढंग से काम कर रहा है।" + "smtpTestSuccess": "SMTP कनेक्शन सफल! आपका ईमेल कॉन्फ़िगरेशन सही ढंग से काम कर रहा है।", + "smtpMissingAuth": "कृपया SMTP उपयोगकर्ता नाम और पासवर्ड भरें, या 'कोई प्रमाणीकरण नहीं' विकल्प सक्षम करें।", + "smtpMissingHostPort": "परीक्षण से पहले कृपया SMTP होस्ट और पोर्ट भरें।", + "smtpNotEnabled": "SMTP सक्षम नहीं है। कृपया पहले SMTP सक्षम करें।" }, "title": "सेटिंग्स", "breadcrumb": "सेटिंग्स", @@ -556,7 +573,8 @@ "tooltips": { "oidcScope": "स्कोप जोड़ने के लिए एक स्कोप दर्ज करें और Enter दबाएं", "oidcAdminEmailDomains": "डोमेन जोड़ने के लिए एक डोमेन दर्ज करें और Enter दबाएं", - "testSmtp": "फॉर्म में वर्तमान में दर्ज मानों के साथ SMTP कनेक्शन का परीक्षण करता है। परिवर्तनों को स्थायी बनाने के लिए, परीक्षण के बाद अपनी सेटिंग्स को सहेजना याद रखें।" + "testSmtp": "फॉर्म में वर्तमान में दर्ज मानों के साथ SMTP कनेक्शन का परीक्षण करता है। परिवर्तनों को स्थायी बनाने के लिए, परीक्षण के बाद अपनी सेटिंग्स को सहेजना याद रखें।", + "defaultPlaceholder": "दर्ज करें और Enter दबाएं" }, "redirectUri": { "placeholder": "https://mysite.com", @@ -589,7 +607,8 @@ "title": "साझाकरण नहीं मिला", "description": "यह साझाकरण हटा दिया गया हो सकता है या समाप्त हो चुका है।" }, - "pageTitle": "साझाकरण" + "pageTitle": "साझाकरण", + "downloadAll": "सभी डाउनलोड करें" }, "shareActions": { "deleteTitle": "साझाकरण हटाएं", @@ -1215,7 +1234,9 @@ "bulkDeleteProgress": "{count, plural, =1 {1 फ़ाइल} other {# फ़ाइलें}} हटाई जा रही हैं...", "bulkDeleteSuccess": "{count, plural, =1 {1 फ़ाइल सफलतापूर्वक हटाई गई} other {# फ़ाइलें सफलतापूर्वक हटाई गईं}}", "selectAll": "सभी चुनें", - "selectFile": "फ़ाइल {fileName} चुनें" + "selectFile": "फ़ाइल {fileName} चुनें", + "deleteError": "फ़ाइल हटाने में त्रुटि", + "deleteSuccess": "फ़ाइल सफलतापूर्वक हटा दी गई" } }, "form": { @@ -1298,14 +1319,17 @@ "deleteSuccess": "प्राप्ति लिंक सफलतापूर्वक हटाया गया!", "aliasCreated": "उपनाम सफलतापूर्वक बनाया गया!", "activateSuccess": "प्राप्ति लिंक सफलतापूर्वक सक्रिय किया गया!", - "deactivateSuccess": "प्राप्ति लिंक सफलतापूर्वक निष्क्रिय किया गया!" + "deactivateSuccess": "प्राप्ति लिंक सफलतापूर्वक निष्क्रिय किया गया!", + "passwordProtectionDisabled": "पासवर्ड सुरक्षा सफलतापूर्वक हटा दी गई!", + "passwordProtectionEnabled": "पासवर्ड सुरक्षा सफलतापूर्वक सक्षम की गई!" }, "errors": { "loadFailed": "प्राप्ति लिंक लोड करने में विफल", "createFailed": "प्राप्ति लिंक बनाने में विफल। कृपया पुनः प्रयास करें।", "updateFailed": "प्राप्ति लिंक अपडेट करने में विफल। कृपया पुनः प्रयास करें।", "deleteFailed": "प्राप्ति लिंक हटाने में विफल। कृपया पुनः प्रयास करें।", - "aliasCreateFailed": "उपनाम बनाने में विफल। कृपया पुनः प्रयास करें।" + "aliasCreateFailed": "उपनाम बनाने में विफल। कृपया पुनः प्रयास करें।", + "passwordUpdateFailed": "पासवर्ड सुरक्षा अपडेट करने में विफल" }, "delete": { "title": "प्राप्ति लिंक हटाएं", @@ -1421,6 +1445,7 @@ "saveChanges": "परिवर्तन सहेजें", "cancelEdit": "संपादन रद्द करें" } - } + }, + "defaultLinkName": "प्राप्त फ़ाइलें" } } \ No newline at end of file diff --git a/apps/web/messages/it-IT.json b/apps/web/messages/it-IT.json index e103a24..ca941b4 100644 --- a/apps/web/messages/it-IT.json +++ b/apps/web/messages/it-IT.json @@ -532,6 +532,20 @@ "testSmtp": { "title": "Test Connessione SMTP", "description": "Verifica se la configurazione SMTP è valida" + }, + "smtpNoAuth": { + "title": "Nessuna Autenticazione", + "description": "Abilita questa opzione per i server interni che non richiedono nome utente/password (nasconde i campi di autenticazione)" + }, + "smtpSecure": { + "title": "Sicurezza Connessione", + "description": "Metodo di sicurezza della connessione SMTP - Auto (raccomandato), SSL, STARTTLS o Nessuno (non sicuro)", + "options": { + "auto": "Auto (Raccomandato)", + "ssl": "SSL (Porta 465)", + "tls": "STARTTLS (Porta 587)", + "none": "Nessuno (Non sicuro)" + } } }, "buttons": { @@ -548,7 +562,10 @@ "updateSuccess": "Impostazioni {group} aggiornate con successo", "smtpTestFailed": "Connessione SMTP fallita: {error}", "smtpTestGenericError": "Impossibile testare la connessione SMTP. Controlla le impostazioni e riprova.", - "smtpTestSuccess": "Connessione SMTP riuscita! La configurazione email funziona correttamente." + "smtpTestSuccess": "Connessione SMTP riuscita! La configurazione email funziona correttamente.", + "smtpMissingAuth": "Inserisci Nome utente e Password SMTP, oppure abilita l'opzione 'Nessuna Autenticazione'.", + "smtpMissingHostPort": "Inserisci Host e Porta SMTP prima di effettuare il test.", + "smtpNotEnabled": "SMTP non è abilitato. Abilitalo prima di procedere." }, "title": "Impostazioni", "breadcrumb": "Impostazioni", @@ -556,7 +573,8 @@ "tooltips": { "oidcScope": "Inserisci uno scope e premi Invio per aggiungerlo", "oidcAdminEmailDomains": "Inserisci un dominio e premi Invio per aggiungerlo", - "testSmtp": "Verifica la connessione SMTP con i valori attualmente inseriti nel modulo. Per rendere permanenti le modifiche, ricordati di salvare le impostazioni dopo il test." + "testSmtp": "Verifica la connessione SMTP con i valori attualmente inseriti nel modulo. Per rendere permanenti le modifiche, ricordati di salvare le impostazioni dopo il test.", + "defaultPlaceholder": "Inserisci e premi Invio" }, "redirectUri": { "placeholder": "https://miosito.com", @@ -589,7 +607,8 @@ "title": "Condivisione Non Trovata", "description": "Questa condivisione potrebbe essere stata eliminata o è scaduta." }, - "pageTitle": "Condivisione" + "pageTitle": "Condivisione", + "downloadAll": "Scarica Tutto" }, "shareActions": { "deleteTitle": "Elimina Condivisione", @@ -1215,7 +1234,9 @@ "bulkDeleteProgress": "Eliminazione di {count, plural, =1 {1 file} other {# file}} in corso...", "bulkDeleteSuccess": "{count, plural, =1 {1 file eliminato con successo} other {# file eliminati con successo}}", "selectAll": "Seleziona tutto", - "selectFile": "Seleziona file {fileName}" + "selectFile": "Seleziona file {fileName}", + "deleteError": "Errore durante l'eliminazione del file", + "deleteSuccess": "File eliminato con successo" } }, "form": { @@ -1298,14 +1319,17 @@ "deleteSuccess": "Link di ricezione eliminato con successo!", "aliasCreated": "Alias creato con successo!", "activateSuccess": "Link di ricezione attivato con successo!", - "deactivateSuccess": "Link di ricezione disattivato con successo!" + "deactivateSuccess": "Link di ricezione disattivato con successo!", + "passwordProtectionDisabled": "Protezione con password rimossa con successo!", + "passwordProtectionEnabled": "Protezione con password abilitata con successo!" }, "errors": { "loadFailed": "Impossibile caricare i link di ricezione", "createFailed": "Impossibile creare il link di ricezione. Riprova.", "updateFailed": "Impossibile aggiornare il link di ricezione. Riprova.", "deleteFailed": "Impossibile eliminare il link di ricezione. Riprova.", - "aliasCreateFailed": "Impossibile creare l'alias. Riprova." + "aliasCreateFailed": "Impossibile creare l'alias. Riprova.", + "passwordUpdateFailed": "Impossibile aggiornare la protezione con password" }, "delete": { "title": "Elimina link di ricezione", @@ -1421,6 +1445,7 @@ "saveChanges": "Salva modifiche", "cancelEdit": "Annulla modifica" } - } + }, + "defaultLinkName": "File ricevuti" } } \ No newline at end of file diff --git a/apps/web/messages/ja-JP.json b/apps/web/messages/ja-JP.json index 1b343a3..82b5ba0 100644 --- a/apps/web/messages/ja-JP.json +++ b/apps/web/messages/ja-JP.json @@ -532,6 +532,20 @@ "testSmtp": { "title": "SMTP接続テスト", "description": "SMTP設定が有効かどうかをテストします" + }, + "smtpNoAuth": { + "title": "認証なし", + "description": "ユーザー名/パスワードを必要としない内部サーバー用(認証フィールドを非表示)" + }, + "smtpSecure": { + "title": "接続セキュリティ", + "description": "SMTP接続セキュリティ方式 - 自動(推奨)、SSL、STARTTLS、または なし(安全でない)", + "options": { + "auto": "自動(推奨)", + "ssl": "SSL(ポート465)", + "tls": "STARTTLS(ポート587)", + "none": "なし(安全でない)" + } } }, "buttons": { @@ -548,7 +562,10 @@ "updateSuccess": "{group}の設定が正常に更新されました", "smtpTestFailed": "SMTP接続に失敗しました: {error}", "smtpTestGenericError": "SMTP接続のテストに失敗しました。設定を確認して再度お試しください。", - "smtpTestSuccess": "SMTP接続に成功しました!メール設定は正常に動作しています。" + "smtpTestSuccess": "SMTP接続に成功しました!メール設定は正常に動作しています。", + "smtpMissingAuth": "SMTPユーザー名とパスワードを入力するか、「認証なし」オプションを有効にしてください。", + "smtpMissingHostPort": "テストの前にSMTPホストとポートを入力してください。", + "smtpNotEnabled": "SMTPが有効になっていません。最初にSMTPを有効にしてください。" }, "title": "設定", "breadcrumb": "設定", @@ -556,7 +573,8 @@ "tooltips": { "oidcScope": "スコープを入力してEnterキーを押して追加", "oidcAdminEmailDomains": "ドメインを入力してEnterキーを押して追加", - "testSmtp": "フォームに現在入力されている値でSMTP接続をテストします。変更を永続化するには、テスト後に設定を保存することを忘れないでください。" + "testSmtp": "フォームに現在入力されている値でSMTP接続をテストします。変更を永続化するには、テスト後に設定を保存することを忘れないでください。", + "defaultPlaceholder": "入力してEnterキーを押してください" }, "redirectUri": { "placeholder": "https://mysite.com", @@ -589,7 +607,8 @@ "title": "共有が見つかりません", "description": "この共有は削除されたか、期限が切れている可能性があります。" }, - "pageTitle": "共有" + "pageTitle": "共有", + "downloadAll": "すべてダウンロード" }, "shareActions": { "deleteTitle": "共有を削除", @@ -1215,7 +1234,9 @@ "bulkDeleteProgress": "{count, plural, =1 {1ファイル} other {#ファイル}}を削除中...", "bulkDeleteSuccess": "{count, plural, =1 {1ファイル} other {#ファイル}}を正常に削除しました", "selectAll": "すべて選択", - "selectFile": "ファイル{fileName}を選択" + "selectFile": "ファイル{fileName}を選択", + "deleteError": "ファイルの削除に失敗しました", + "deleteSuccess": "ファイルを正常に削除しました" } }, "form": { @@ -1298,14 +1319,17 @@ "deleteSuccess": "受信リンクを削除しました!", "aliasCreated": "エイリアスを作成しました!", "activateSuccess": "受信リンクを有効化しました!", - "deactivateSuccess": "受信リンクを無効化しました!" + "deactivateSuccess": "受信リンクを無効化しました!", + "passwordProtectionDisabled": "パスワード保護を正常に解除しました!", + "passwordProtectionEnabled": "パスワード保護を正常に有効化しました!" }, "errors": { "loadFailed": "受信リンクの読み込みに失敗しました", "createFailed": "受信リンクの作成に失敗しました。もう一度お試しください。", "updateFailed": "受信リンクの更新に失敗しました。もう一度お試しください。", "deleteFailed": "受信リンクの削除に失敗しました。もう一度お試しください。", - "aliasCreateFailed": "エイリアスの作成に失敗しました。もう一度お試しください。" + "aliasCreateFailed": "エイリアスの作成に失敗しました。もう一度お試しください。", + "passwordUpdateFailed": "パスワード保護の更新に失敗しました" }, "delete": { "title": "受信リンクを削除", @@ -1421,6 +1445,7 @@ "saveChanges": "変更を保存", "cancelEdit": "編集をキャンセル" } - } + }, + "defaultLinkName": "受信したファイル" } } \ No newline at end of file diff --git a/apps/web/messages/ko-KR.json b/apps/web/messages/ko-KR.json index 4d419b8..a431fbb 100644 --- a/apps/web/messages/ko-KR.json +++ b/apps/web/messages/ko-KR.json @@ -532,6 +532,20 @@ "testSmtp": { "title": "SMTP 연결 테스트", "description": "SMTP 구성이 유효한지 테스트합니다" + }, + "smtpNoAuth": { + "title": "인증 없음", + "description": "사용자 이름/비밀번호가 필요하지 않은 내부 서버의 경우 활성화하세요 (인증 필드 숨김)" + }, + "smtpSecure": { + "title": "연결 보안", + "description": "SMTP 연결 보안 방식 - 자동 (권장), SSL, STARTTLS 또는 없음 (비보안)", + "options": { + "auto": "자동 (권장)", + "ssl": "SSL (포트 465)", + "tls": "STARTTLS (포트 587)", + "none": "없음 (비보안)" + } } }, "buttons": { @@ -548,7 +562,10 @@ "updateSuccess": "{group} 설정이 성공적으로 업데이트되었습니다", "smtpTestFailed": "SMTP 연결 실패: {error}", "smtpTestGenericError": "SMTP 연결 테스트에 실패했습니다. 설정을 확인하고 다시 시도해주세요.", - "smtpTestSuccess": "SMTP 연결 성공! 이메일 구성이 올바르게 작동합니다." + "smtpTestSuccess": "SMTP 연결 성공! 이메일 구성이 올바르게 작동합니다.", + "smtpMissingAuth": "SMTP 사용자 이름과 비밀번호를 입력하거나 '인증 없음' 옵션을 활성화하세요.", + "smtpMissingHostPort": "테스트하기 전에 SMTP 호스트와 포트를 입력하세요.", + "smtpNotEnabled": "SMTP가 활성화되지 않았습니다. 먼저 SMTP를 활성화하세요." }, "title": "설정", "breadcrumb": "설정", @@ -556,7 +573,8 @@ "tooltips": { "oidcScope": "스코프를 입력하고 Enter 키를 눌러 추가", "oidcAdminEmailDomains": "도메인을 입력하고 Enter 키를 눌러 추가", - "testSmtp": "현재 입력된 값으로 SMTP 연결을 테스트합니다. 변경 사항을 영구적으로 적용하려면 테스트 후 설정을 저장하는 것을 잊지 마세요." + "testSmtp": "현재 입력된 값으로 SMTP 연결을 테스트합니다. 변경 사항을 영구적으로 적용하려면 테스트 후 설정을 저장하는 것을 잊지 마세요.", + "defaultPlaceholder": "입력하고 Enter 키를 누르세요" }, "redirectUri": { "placeholder": "https://mysite.com", @@ -589,7 +607,8 @@ "title": "공유를 찾을 수 없습니다", "description": "이 공유는 삭제되었거나 만료되었을 수 있습니다." }, - "pageTitle": "공유" + "pageTitle": "공유", + "downloadAll": "모두 다운로드" }, "shareActions": { "deleteTitle": "공유 삭제", @@ -1215,7 +1234,9 @@ "bulkDeleteProgress": "{count, plural, =1 {1개의 파일} other {#개의 파일}} 삭제 중...", "bulkDeleteSuccess": "{count, plural, =1 {1개의 파일이} other {#개의 파일이}} 성공적으로 삭제됨", "selectAll": "모두 선택", - "selectFile": "{fileName} 파일 선택" + "selectFile": "{fileName} 파일 선택", + "deleteError": "파일 삭제 오류", + "deleteSuccess": "파일이 성공적으로 삭제됨" } }, "form": { @@ -1298,14 +1319,17 @@ "deleteSuccess": "수신 링크가 성공적으로 삭제되었습니다!", "aliasCreated": "별칭이 성공적으로 생성되었습니다!", "activateSuccess": "수신 링크가 성공적으로 활성화되었습니다!", - "deactivateSuccess": "수신 링크가 성공적으로 비활성화되었습니다!" + "deactivateSuccess": "수신 링크가 성공적으로 비활성화되었습니다!", + "passwordProtectionDisabled": "비밀번호 보호가 성공적으로 제거되었습니다!", + "passwordProtectionEnabled": "비밀번호 보호가 성공적으로 활성화되었습니다!" }, "errors": { "loadFailed": "수신 링크 로드 실패", "createFailed": "수신 링크 생성 실패. 다시 시도하세요.", "updateFailed": "수신 링크 업데이트 실패. 다시 시도하세요.", "deleteFailed": "수신 링크 삭제 실패. 다시 시도하세요.", - "aliasCreateFailed": "별칭 생성 실패. 다시 시도하세요." + "aliasCreateFailed": "별칭 생성 실패. 다시 시도하세요.", + "passwordUpdateFailed": "비밀번호 보호 업데이트 실패" }, "delete": { "title": "수신 링크 삭제", @@ -1421,6 +1445,7 @@ "saveChanges": "변경사항 저장", "cancelEdit": "편집 취소" } - } + }, + "defaultLinkName": "받은 파일" } } \ No newline at end of file diff --git a/apps/web/messages/nl-NL.json b/apps/web/messages/nl-NL.json index c52abda..56d96af 100644 --- a/apps/web/messages/nl-NL.json +++ b/apps/web/messages/nl-NL.json @@ -532,6 +532,20 @@ "testSmtp": { "title": "Test SMTP Verbinding", "description": "Test of de SMTP configuratie geldig is" + }, + "smtpNoAuth": { + "title": "Geen Authenticatie", + "description": "Schakel dit in voor interne servers die geen gebruikersnaam/wachtwoord vereisen (verbergt authenticatievelden)" + }, + "smtpSecure": { + "title": "Verbindingsbeveiliging", + "description": "SMTP verbindingsbeveiligingsmethode - Auto (aanbevolen), SSL, STARTTLS, of Geen (onveilig)", + "options": { + "auto": "Auto (Aanbevolen)", + "ssl": "SSL (Poort 465)", + "tls": "STARTTLS (Poort 587)", + "none": "Geen (Onveilig)" + } } }, "buttons": { @@ -548,7 +562,10 @@ "updateSuccess": "{group} instellingen succesvol bijgewerkt", "smtpTestFailed": "SMTP verbinding mislukt: {error}", "smtpTestGenericError": "SMTP verbinding testen mislukt. Controleer uw instellingen en probeer het opnieuw.", - "smtpTestSuccess": "SMTP verbinding succesvol! Uw e-mailconfiguratie werkt correct." + "smtpTestSuccess": "SMTP verbinding succesvol! Uw e-mailconfiguratie werkt correct.", + "smtpMissingAuth": "Vul de SMTP gebruikersnaam en wachtwoord in, of schakel de optie 'Geen Authenticatie' in.", + "smtpMissingHostPort": "Vul de SMTP Host en Poort in voordat u test.", + "smtpNotEnabled": "SMTP is niet ingeschakeld. Schakel eerst SMTP in." }, "title": "Instellingen", "breadcrumb": "Instellingen", @@ -556,7 +573,8 @@ "tooltips": { "oidcScope": "Voer een scope in en druk op Enter om toe te voegen", "oidcAdminEmailDomains": "Voer een domein in en druk op Enter om toe te voegen", - "testSmtp": "Test de SMTP verbinding met de waarden die momenteel in het formulier zijn ingevoerd. Om wijzigingen permanent te maken, vergeet niet om uw instellingen op te slaan na het testen." + "testSmtp": "Test de SMTP verbinding met de waarden die momenteel in het formulier zijn ingevoerd. Om wijzigingen permanent te maken, vergeet niet om uw instellingen op te slaan na het testen.", + "defaultPlaceholder": "Voer in en druk op Enter" }, "redirectUri": { "placeholder": "https://mijnsite.com", @@ -589,7 +607,8 @@ "title": "Delen Niet Gevonden", "description": "Dit delen is mogelijk verwijderd of verlopen." }, - "pageTitle": "Delen" + "pageTitle": "Delen", + "downloadAll": "Alles Downloaden" }, "shareActions": { "deleteTitle": "Delen Verwijderen", @@ -1215,7 +1234,9 @@ "bulkDeleteProgress": "{count, plural, =1 {1 bestand} other {# bestanden}} verwijderen...", "bulkDeleteSuccess": "{count, plural, =1 {1 bestand succesvol verwijderd} other {# bestanden succesvol verwijderd}}", "selectAll": "Alles selecteren", - "selectFile": "Selecteer bestand {fileName}" + "selectFile": "Selecteer bestand {fileName}", + "deleteError": "Fout bij verwijderen bestand", + "deleteSuccess": "Bestand succesvol verwijderd" } }, "form": { @@ -1298,14 +1319,17 @@ "deleteSuccess": "Ontvangstlink succesvol verwijderd!", "aliasCreated": "Alias succesvol aangemaakt!", "activateSuccess": "Ontvangstlink succesvol geactiveerd!", - "deactivateSuccess": "Ontvangstlink succesvol gedeactiveerd!" + "deactivateSuccess": "Ontvangstlink succesvol gedeactiveerd!", + "passwordProtectionDisabled": "Wachtwoordbeveiliging succesvol verwijderd!", + "passwordProtectionEnabled": "Wachtwoordbeveiliging succesvol ingeschakeld!" }, "errors": { "loadFailed": "Fout bij laden ontvangstlinks", "createFailed": "Fout bij aanmaken ontvangstlink. Probeer het opnieuw.", "updateFailed": "Fout bij bijwerken ontvangstlink. Probeer het opnieuw.", "deleteFailed": "Fout bij verwijderen ontvangstlink. Probeer het opnieuw.", - "aliasCreateFailed": "Fout bij aanmaken alias. Probeer het opnieuw." + "aliasCreateFailed": "Fout bij aanmaken alias. Probeer het opnieuw.", + "passwordUpdateFailed": "Fout bij bijwerken wachtwoordbeveiliging" }, "delete": { "title": "Ontvangstlink verwijderen", @@ -1421,6 +1445,7 @@ "saveChanges": "Wijzigingen opslaan", "cancelEdit": "Bewerken annuleren" } - } + }, + "defaultLinkName": "Ontvangen bestanden" } } \ No newline at end of file diff --git a/apps/web/messages/pl-PL.json b/apps/web/messages/pl-PL.json index 479d053..4c3f76f 100644 --- a/apps/web/messages/pl-PL.json +++ b/apps/web/messages/pl-PL.json @@ -532,6 +532,20 @@ "testSmtp": { "title": "Test połączenia SMTP", "description": "Sprawdź, czy konfiguracja SMTP jest prawidłowa" + }, + "smtpNoAuth": { + "title": "Bez uwierzytelniania", + "description": "Włącz tę opcję dla serwerów wewnętrznych, które nie wymagają nazwy użytkownika/hasła (ukrywa pola uwierzytelniania)" + }, + "smtpSecure": { + "title": "Bezpieczeństwo połączenia", + "description": "Metoda zabezpieczenia połączenia SMTP - Auto (zalecane), SSL, STARTTLS lub Brak (niezabezpieczone)", + "options": { + "auto": "Auto (Zalecane)", + "ssl": "SSL (Port 465)", + "tls": "STARTTLS (Port 587)", + "none": "Brak (Niezabezpieczone)" + } } }, "buttons": { @@ -548,7 +562,10 @@ "updateSuccess": "Ustawienia {group} zaktualizowane pomyślnie", "smtpTestFailed": "Połączenie SMTP nie powiodło się: {error}", "smtpTestGenericError": "Nie udało się przetestować połączenia SMTP. Sprawdź ustawienia i spróbuj ponownie.", - "smtpTestSuccess": "Połączenie SMTP udane! Twoja konfiguracja poczty e-mail działa poprawnie." + "smtpTestSuccess": "Połączenie SMTP udane! Twoja konfiguracja poczty e-mail działa poprawnie.", + "smtpMissingAuth": "Proszę wypełnić nazwę użytkownika i hasło SMTP lub włączyć opcję 'Bez uwierzytelniania'.", + "smtpMissingHostPort": "Proszę wypełnić host i port SMTP przed testowaniem.", + "smtpNotEnabled": "SMTP nie jest włączone. Proszę najpierw włączyć SMTP." }, "title": "Ustawienia", "breadcrumb": "Ustawienia", @@ -556,7 +573,8 @@ "tooltips": { "oidcScope": "Wprowadź zakres i naciśnij Enter, aby dodać", "oidcAdminEmailDomains": "Wprowadź domenę i naciśnij Enter, aby dodać", - "testSmtp": "Testuje połączenie SMTP z obecnie wprowadzonymi wartościami w formularzu. Aby wprowadzić trwałe zmiany, pamiętaj o zapisaniu ustawień po testowaniu." + "testSmtp": "Testuje połączenie SMTP z obecnie wprowadzonymi wartościami w formularzu. Aby wprowadzić trwałe zmiany, pamiętaj o zapisaniu ustawień po testowaniu.", + "defaultPlaceholder": "Wprowadź i naciśnij Enter" }, "redirectUri": { "placeholder": "https://mysite.com", @@ -589,7 +607,8 @@ "title": "Udostępnienie nie znaleziono", "description": "To udostępnienie mogło zostać usunięte lub wygasło." }, - "pageTitle": "Udostępnij" + "pageTitle": "Udostępnij", + "downloadAll": "[TO_TRANSLATE] Download All" }, "shareActions": { "deleteTitle": "Usuń udostępnienie", @@ -1215,7 +1234,9 @@ "bulkDeleteProgress": "Usuwanie {count, plural, =1 {1 pliku} other {# plików}}...", "bulkDeleteSuccess": "{count, plural, =1 {1 plik usunięty pomyślnie} other {# plików usuniętych pomyślnie}}", "selectAll": "Zaznacz wszystko", - "selectFile": "Wybierz plik {fileName}" + "selectFile": "Wybierz plik {fileName}", + "deleteError": "Błąd usuwania pliku", + "deleteSuccess": "Plik usunięty pomyślnie" } }, "form": { @@ -1298,14 +1319,17 @@ "deleteSuccess": "Link do odbierania usunięty pomyślnie!", "aliasCreated": "Alias utworzony pomyślnie!", "activateSuccess": "Link do odbierania aktywowany pomyślnie!", - "deactivateSuccess": "Link do odbierania dezaktywowany pomyślnie!" + "deactivateSuccess": "Link do odbierania dezaktywowany pomyślnie!", + "passwordProtectionDisabled": "Ochrona hasłem została pomyślnie usunięta!", + "passwordProtectionEnabled": "Ochrona hasłem została pomyślnie włączona!" }, "errors": { "loadFailed": "Nie udało się załadować linków do odbierania", "createFailed": "Nie udało się utworzyć linku do odbierania. Spróbuj ponownie.", "updateFailed": "Nie udało się zaktualizować linku do odbierania. Spróbuj ponownie.", "deleteFailed": "Nie udało się usunąć linku do odbierania. Spróbuj ponownie.", - "aliasCreateFailed": "Nie udało się utworzyć aliasu. Spróbuj ponownie." + "aliasCreateFailed": "Nie udało się utworzyć aliasu. Spróbuj ponownie.", + "passwordUpdateFailed": "Nie udało się zaktualizować ochrony hasłem" }, "delete": { "title": "Usuń link do odbierania", @@ -1421,6 +1445,7 @@ "saveChanges": "Zapisz zmiany", "cancelEdit": "Anuluj edycję" } - } + }, + "defaultLinkName": "Otrzymane pliki" } } \ No newline at end of file diff --git a/apps/web/messages/pt-BR.json b/apps/web/messages/pt-BR.json index 5c1792f..639d64f 100644 --- a/apps/web/messages/pt-BR.json +++ b/apps/web/messages/pt-BR.json @@ -444,7 +444,8 @@ "tooltips": { "oidcScope": "Digite um escopo e pressione Enter para adicionar", "oidcAdminEmailDomains": "Digite um domínio e pressione Enter para adicionar", - "testSmtp": "Testa a conexão SMTP com os valores atualmente inseridos no formulário. Para tornar as alterações permanentes, lembre-se de salvar suas configurações após o teste." + "testSmtp": "Testa a conexão SMTP com os valores atualmente inseridos no formulário. Para tornar as alterações permanentes, lembre-se de salvar suas configurações após o teste.", + "defaultPlaceholder": "Digite e pressione Enter" }, "redirectUri": { "placeholder": "https://meusite.com", @@ -563,6 +564,20 @@ "testSmtp": { "title": "Testar Conexão SMTP", "description": "Testa se a configuração SMTP é válida" + }, + "smtpNoAuth": { + "title": "Sem Autenticação", + "description": "Ative isso para servidores internos que não exigem nome de usuário/senha (oculta campos de autenticação)" + }, + "smtpSecure": { + "title": "Segurança da Conexão", + "description": "Método de segurança da conexão SMTP - Auto (recomendado), SSL, STARTTLS ou Nenhum (inseguro)", + "options": { + "auto": "Auto (Recomendado)", + "ssl": "SSL (Porta 465)", + "tls": "STARTTLS (Porta 587)", + "none": "Nenhum (Inseguro)" + } } }, "buttons": { @@ -579,7 +594,10 @@ "updateSuccess": "Configurações de {group} atualizadas com sucesso", "smtpTestFailed": "Falha na conexão SMTP: {error}", "smtpTestGenericError": "Falha ao testar conexão SMTP. Por favor, verifique suas configurações e tente novamente.", - "smtpTestSuccess": "Conexão SMTP bem-sucedida! Sua configuração de e-mail está funcionando corretamente." + "smtpTestSuccess": "Conexão SMTP bem-sucedida! Sua configuração de e-mail está funcionando corretamente.", + "smtpMissingAuth": "Por favor, preencha o Nome de Usuário e Senha SMTP, ou ative a opção 'Sem Autenticação'.", + "smtpMissingHostPort": "Por favor, preencha o Host e Porta SMTP antes de testar.", + "smtpNotEnabled": "SMTP não está habilitado. Por favor, habilite o SMTP primeiro." }, "title": "Configurações", "breadcrumb": "Configurações", @@ -611,7 +629,8 @@ "title": "Compartilhamento não Encontrado", "description": "Este compartilhamento pode ter sido excluído ou expirado." }, - "pageTitle": "Compartilhamento" + "pageTitle": "Compartilhamento", + "downloadAll": "Baixar todos" }, "shareActions": { "deleteTitle": "Excluir Compartilhamento", @@ -1215,7 +1234,9 @@ "bulkDeleteProgress": "Excluindo {count, plural, =1 {1 arquivo} other {# arquivos}}...", "bulkDeleteSuccess": "{count, plural, =1 {1 arquivo excluído com sucesso} other {# arquivos excluídos com sucesso}}", "selectAll": "Selecionar todos", - "selectFile": "Selecionar arquivo {fileName}" + "selectFile": "Selecionar arquivo {fileName}", + "deleteError": "Erro ao excluir arquivo", + "deleteSuccess": "Arquivo excluído com sucesso" } }, "form": { @@ -1298,14 +1319,17 @@ "deleteSuccess": "Link de recebimento excluído com sucesso!", "aliasCreated": "Alias criado com sucesso!", "activateSuccess": "Link de recebimento ativado com sucesso!", - "deactivateSuccess": "Link de recebimento desativado com sucesso!" + "deactivateSuccess": "Link de recebimento desativado com sucesso!", + "passwordProtectionDisabled": "Proteção por senha removida com sucesso!", + "passwordProtectionEnabled": "Proteção por senha ativada com sucesso!" }, "errors": { "loadFailed": "Falha ao carregar links de recebimento", "createFailed": "Falha ao criar link de recebimento. Tente novamente.", "updateFailed": "Falha ao atualizar link de recebimento. Tente novamente.", "deleteFailed": "Falha ao excluir link de recebimento. Tente novamente.", - "aliasCreateFailed": "Falha ao criar alias. Tente novamente." + "aliasCreateFailed": "Falha ao criar alias. Tente novamente.", + "passwordUpdateFailed": "Falha ao atualizar a proteção por senha" }, "delete": { "title": "Excluir link de recebimento", @@ -1421,6 +1445,7 @@ "saveChanges": "Salvar alterações", "cancelEdit": "Cancelar edição" } - } + }, + "defaultLinkName": "Arquivos recebidos" } } \ No newline at end of file diff --git a/apps/web/messages/ru-RU.json b/apps/web/messages/ru-RU.json index d564e18..8d30fd7 100644 --- a/apps/web/messages/ru-RU.json +++ b/apps/web/messages/ru-RU.json @@ -532,6 +532,20 @@ "testSmtp": { "title": "Проверить SMTP-соединение", "description": "Проверить правильность настройки SMTP" + }, + "smtpNoAuth": { + "title": "Без аутентификации", + "description": "Включите для внутренних серверов, не требующих имя пользователя/пароль (скрывает поля аутентификации)" + }, + "smtpSecure": { + "title": "Безопасность соединения", + "description": "Метод безопасности SMTP-соединения - Авто (рекомендуется), SSL, STARTTLS или Нет (небезопасно)", + "options": { + "auto": "Авто (Рекомендуется)", + "ssl": "SSL (Порт 465)", + "tls": "STARTTLS (Порт 587)", + "none": "Нет (Небезопасно)" + } } }, "buttons": { @@ -548,7 +562,10 @@ "updateSuccess": "Настройки {group} успешно обновлены", "smtpTestFailed": "Ошибка SMTP-соединения: {error}", "smtpTestGenericError": "Не удалось проверить SMTP-соединение. Пожалуйста, проверьте настройки и попробуйте снова.", - "smtpTestSuccess": "SMTP-соединение успешно установлено! Ваша конфигурация электронной почты работает корректно." + "smtpTestSuccess": "SMTP-соединение успешно установлено! Ваша конфигурация электронной почты работает корректно.", + "smtpMissingAuth": "Пожалуйста, заполните имя пользователя и пароль SMTP или включите опцию 'Без аутентификации'.", + "smtpMissingHostPort": "Пожалуйста, заполните хост и порт SMTP перед тестированием.", + "smtpNotEnabled": "SMTP не включен. Пожалуйста, сначала включите SMTP." }, "title": "Настройки", "breadcrumb": "Настройки", @@ -556,7 +573,8 @@ "tooltips": { "oidcScope": "Digite um escopo e pressione Enter para adicionar", "oidcAdminEmailDomains": "Digite um domínio e pressione Enter para adicionar", - "testSmtp": "Проверяет SMTP-соединение с текущими значениями в форме. Чтобы сохранить изменения, не забудьте сохранить настройки после тестирования." + "testSmtp": "Проверяет SMTP-соединение с текущими значениями в форме. Чтобы сохранить изменения, не забудьте сохранить настройки после тестирования.", + "defaultPlaceholder": "Введите и нажмите Enter" }, "redirectUri": { "placeholder": "https://meusite.com", @@ -589,7 +607,8 @@ "title": "Общий доступ не найден", "description": "Этот общий доступ может быть удален или истек." }, - "pageTitle": "Общий доступ" + "pageTitle": "Общий доступ", + "downloadAll": "Скачать все" }, "shareActions": { "deleteTitle": "Удалить Общий Доступ", @@ -1215,7 +1234,9 @@ "bulkDeleteProgress": "Удаление {count, plural, =1 {1 файла} other {# файлов}}...", "bulkDeleteSuccess": "{count, plural, =1 {1 файл успешно удален} other {# файлов успешно удалено}}", "selectAll": "Выбрать все", - "selectFile": "Выбрать файл {fileName}" + "selectFile": "Выбрать файл {fileName}", + "deleteError": "Ошибка при удалении файла", + "deleteSuccess": "Файл успешно удален" } }, "form": { @@ -1298,14 +1319,17 @@ "deleteSuccess": "Ссылка для получения успешно удалена!", "aliasCreated": "Псевдоним успешно создан!", "activateSuccess": "Ссылка для получения успешно активирована!", - "deactivateSuccess": "Ссылка для получения успешно деактивирована!" + "deactivateSuccess": "Ссылка для получения успешно деактивирована!", + "passwordProtectionDisabled": "Защита паролем успешно отключена!", + "passwordProtectionEnabled": "Защита паролем успешно включена!" }, "errors": { "loadFailed": "Не удалось загрузить ссылки для получения", "createFailed": "Не удалось создать ссылку для получения. Попробуйте снова.", "updateFailed": "Не удалось обновить ссылку для получения. Попробуйте снова.", "deleteFailed": "Не удалось удалить ссылку для получения. Попробуйте снова.", - "aliasCreateFailed": "Не удалось создать псевдоним. Попробуйте снова." + "aliasCreateFailed": "Не удалось создать псевдоним. Попробуйте снова.", + "passwordUpdateFailed": "Не удалось обновить защиту паролем" }, "delete": { "title": "Удалить ссылку для получения", @@ -1421,6 +1445,7 @@ "saveChanges": "Сохранить изменения", "cancelEdit": "Отменить редактирование" } - } + }, + "defaultLinkName": "Полученные файлы" } } \ No newline at end of file diff --git a/apps/web/messages/tr-TR.json b/apps/web/messages/tr-TR.json index ad007e4..a71b1d5 100644 --- a/apps/web/messages/tr-TR.json +++ b/apps/web/messages/tr-TR.json @@ -532,6 +532,20 @@ "testSmtp": { "title": "SMTP Bağlantısını Test Et", "description": "SMTP yapılandırmasının geçerli olup olmadığını test et" + }, + "smtpNoAuth": { + "title": "Kimlik Doğrulama Yok", + "description": "Kullanıcı adı/şifre gerektirmeyen dahili sunucular için bunu etkinleştirin (kimlik doğrulama alanlarını gizler)" + }, + "smtpSecure": { + "title": "Bağlantı Güvenliği", + "description": "SMTP bağlantı güvenlik yöntemi - Otomatik (önerilen), SSL, STARTTLS veya Hiçbiri (güvensiz)", + "options": { + "auto": "Otomatik (Önerilen)", + "ssl": "SSL (Port 465)", + "tls": "STARTTLS (Port 587)", + "none": "Hiçbiri (Güvensiz)" + } } }, "buttons": { @@ -548,7 +562,10 @@ "updateSuccess": "{group} ayarları başarıyla güncellendi", "smtpTestFailed": "SMTP bağlantısı başarısız: {error}", "smtpTestGenericError": "SMTP bağlantısı test edilemedi. Lütfen ayarlarınızı kontrol edin ve tekrar deneyin.", - "smtpTestSuccess": "SMTP bağlantısı başarılı! E-posta yapılandırmanız doğru çalışıyor." + "smtpTestSuccess": "SMTP bağlantısı başarılı! E-posta yapılandırmanız doğru çalışıyor.", + "smtpMissingAuth": "Lütfen SMTP Kullanıcı Adı ve Şifresini doldurun veya 'Kimlik Doğrulama Yok' seçeneğini etkinleştirin.", + "smtpMissingHostPort": "Lütfen test etmeden önce SMTP Ana Bilgisayar ve Bağlantı Noktasını doldurun.", + "smtpNotEnabled": "SMTP etkin değil. Lütfen önce SMTP'yi etkinleştirin." }, "title": "Ayarlar", "breadcrumb": "Ayarlar", @@ -556,7 +573,8 @@ "tooltips": { "oidcScope": "Bir kapsam girin ve eklemek için Enter'a basın", "oidcAdminEmailDomains": "Bir alan girin ve eklemek için Enter'a basın", - "testSmtp": "Formda şu anda girilen değerlerle SMTP bağlantısını test eder. Değişiklikleri kalıcı yapmak için test ettikten sonra ayarlarınızı kaydetmeyi unutmayın." + "testSmtp": "Formda şu anda girilen değerlerle SMTP bağlantısını test eder. Değişiklikleri kalıcı yapmak için test ettikten sonra ayarlarınızı kaydetmeyi unutmayın.", + "defaultPlaceholder": "Girin ve Enter'a basın" }, "redirectUri": { "placeholder": "https://sitem.com", @@ -589,7 +607,8 @@ "title": "Paylaşım Bulunamadı", "description": "Bu paylaşım silinmiş veya süresi dolmuş olabilir." }, - "pageTitle": "Paylaşım" + "pageTitle": "Paylaşım", + "downloadAll": "Tümünü İndir" }, "shareActions": { "deleteTitle": "Paylaşımı Sil", @@ -1215,7 +1234,9 @@ "bulkDeleteProgress": "{count, plural, =1 {1 dosya} other {# dosya}} siliniyor...", "bulkDeleteSuccess": "{count, plural, =1 {1 dosya başarıyla silindi} other {# dosya başarıyla silindi}}", "selectAll": "Tümünü seç", - "selectFile": "{fileName} dosyasını seç" + "selectFile": "{fileName} dosyasını seç", + "deleteError": "Dosya silinirken hata oluştu", + "deleteSuccess": "Dosya başarıyla silindi" } }, "form": { @@ -1298,14 +1319,17 @@ "deleteSuccess": "Alma bağlantısı başarıyla silindi!", "aliasCreated": "Takma ad başarıyla oluşturuldu!", "activateSuccess": "Alma bağlantısı başarıyla etkinleştirildi!", - "deactivateSuccess": "Alma bağlantısı başarıyla devre dışı bırakıldı!" + "deactivateSuccess": "Alma bağlantısı başarıyla devre dışı bırakıldı!", + "passwordProtectionDisabled": "Şifre koruması başarıyla kaldırıldı!", + "passwordProtectionEnabled": "Şifre koruması başarıyla etkinleştirildi!" }, "errors": { "loadFailed": "Alma bağlantıları yüklenemedi", "createFailed": "Alma bağlantısı oluşturulamadı. Lütfen tekrar deneyin.", "updateFailed": "Alma bağlantısı güncellenemedi. Lütfen tekrar deneyin.", "deleteFailed": "Alma bağlantısı silinemedi. Lütfen tekrar deneyin.", - "aliasCreateFailed": "Takma ad oluşturulamadı. Lütfen tekrar deneyin." + "aliasCreateFailed": "Takma ad oluşturulamadı. Lütfen tekrar deneyin.", + "passwordUpdateFailed": "Şifre koruması güncellenemedi" }, "delete": { "title": "Alma bağlantısını sil", @@ -1421,6 +1445,7 @@ "saveChanges": "Değişiklikleri kaydet", "cancelEdit": "Düzenlemeyi iptal et" } - } + }, + "defaultLinkName": "Alınan Dosyalar" } } \ No newline at end of file diff --git a/apps/web/messages/zh-CN.json b/apps/web/messages/zh-CN.json index 0018483..1206c4a 100644 --- a/apps/web/messages/zh-CN.json +++ b/apps/web/messages/zh-CN.json @@ -532,6 +532,20 @@ "testSmtp": { "title": "测试SMTP连接", "description": "测试SMTP配置是否有效" + }, + "smtpNoAuth": { + "title": "无需认证", + "description": "为不需要用户名/密码的内部服务器启用此选项(隐藏认证字段)" + }, + "smtpSecure": { + "title": "连接安全性", + "description": "SMTP连接安全方法 - 自动(推荐)、SSL、STARTTLS或无(不安全)", + "options": { + "auto": "自动(推荐)", + "ssl": "SSL(端口465)", + "tls": "STARTTLS(端口587)", + "none": "无(不安全)" + } } }, "buttons": { @@ -548,7 +562,10 @@ "updateSuccess": "{group}设置更新成功", "smtpTestFailed": "SMTP连接失败:{error}", "smtpTestGenericError": "SMTP连接测试失败。请检查您的设置并重试。", - "smtpTestSuccess": "SMTP连接成功!您的电子邮件配置工作正常。" + "smtpTestSuccess": "SMTP连接成功!您的电子邮件配置工作正常。", + "smtpMissingAuth": "请填写SMTP用户名和密码,或启用“无需认证”选项。", + "smtpMissingHostPort": "测试前请填写SMTP主机和端口。", + "smtpNotEnabled": "SMTP未启用。请先启用SMTP。" }, "title": "设置", "breadcrumb": "设置", @@ -556,7 +573,8 @@ "tooltips": { "oidcScope": "Digite um escopo e pressione Enter para adicionar", "oidcAdminEmailDomains": "Digite um domínio e pressione Enter para adicionar", - "testSmtp": "使用当前在表单中输入的值测试SMTP连接。要使更改永久生效,请记得在测试后保存您的设置。" + "testSmtp": "使用当前在表单中输入的值测试SMTP连接。要使更改永久生效,请记得在测试后保存您的设置。", + "defaultPlaceholder": "输入并按回车键" }, "redirectUri": { "placeholder": "https://meusite.com", @@ -589,7 +607,8 @@ "title": "未找到共享", "description": "该共享可能已被删除或已过期。" }, - "pageTitle": "共享" + "pageTitle": "共享", + "downloadAll": "下载所有" }, "shareActions": { "deleteTitle": "删除共享", @@ -1215,7 +1234,9 @@ "bulkDeleteProgress": "正在删除{count, plural, =1 {1个文件} other {#个文件}}...", "bulkDeleteSuccess": "{count, plural, =1 {1个文件已成功删除} other {#个文件已成功删除}}", "selectAll": "全选", - "selectFile": "选择文件 {fileName}" + "selectFile": "选择文件 {fileName}", + "deleteError": "删除文件时出错", + "deleteSuccess": "文件已成功删除" } }, "form": { @@ -1298,14 +1319,17 @@ "deleteSuccess": "接收链接删除成功!", "aliasCreated": "别名创建成功!", "activateSuccess": "接收链接启用成功!", - "deactivateSuccess": "接收链接停用成功!" + "deactivateSuccess": "接收链接停用成功!", + "passwordProtectionDisabled": "密码保护已成功移除!", + "passwordProtectionEnabled": "密码保护已成功启用!" }, "errors": { "loadFailed": "加载接收链接失败", "createFailed": "创建接收链接失败。请重试。", "updateFailed": "更新接收链接失败。请重试。", "deleteFailed": "删除接收链接失败。请重试。", - "aliasCreateFailed": "创建别名失败。请重试。" + "aliasCreateFailed": "创建别名失败。请重试。", + "passwordUpdateFailed": "更新密码保护失败" }, "delete": { "title": "删除接收链接", @@ -1421,6 +1445,7 @@ "saveChanges": "保存更改", "cancelEdit": "取消编辑" } - } + }, + "defaultLinkName": "已接收文件" } } \ No newline at end of file diff --git a/apps/web/src/app/(shares)/reverse-shares/components/edit-password-modal.tsx b/apps/web/src/app/(shares)/reverse-shares/components/edit-password-modal.tsx index 1c3e490..be4ca6a 100644 --- a/apps/web/src/app/(shares)/reverse-shares/components/edit-password-modal.tsx +++ b/apps/web/src/app/(shares)/reverse-shares/components/edit-password-modal.tsx @@ -73,14 +73,16 @@ export function EditPasswordModal({ }); toast.success( - data.hasPassword ? "Proteção por senha ativada com sucesso!" : "Proteção por senha removida com sucesso!" + data.hasPassword + ? t("reverseShares.messages.passwordProtectionEnabled") + : t("reverseShares.messages.passwordProtectionDisabled") ); onClose(); form.reset(); } catch (error) { console.error("Failed to update password:", error); - toast.error("Erro ao atualizar proteção por senha"); + toast.error(t("reverseShares.errors.passwordUpdateFailed")); } }; diff --git a/apps/web/src/app/(shares)/reverse-shares/components/received-files-modal.tsx b/apps/web/src/app/(shares)/reverse-shares/components/received-files-modal.tsx index 3c57604..58ac0dd 100644 --- a/apps/web/src/app/(shares)/reverse-shares/components/received-files-modal.tsx +++ b/apps/web/src/app/(shares)/reverse-shares/components/received-files-modal.tsx @@ -543,10 +543,10 @@ export function ReceivedFilesModal({ await onRefresh(); } - toast.success("Arquivo excluído com sucesso"); + toast.success(t("reverseShares.modals.receivedFiles.deleteSuccess")); } catch (error) { console.error("Error deleting file:", error); - toast.error("Erro ao excluir arquivo"); + toast.error(t("reverseShares.modals.receivedFiles.deleteError")); } }; @@ -640,7 +640,7 @@ export function ReceivedFilesModal({ await Promise.all(downloadPromises); const zipBlob = await zip.generateAsync({ type: "blob" }); - const zipName = `${reverseShare.name || "received_files"}_files.zip`; + const zipName = `${reverseShare.name || t("reverseShares.defaultLinkName")}_files.zip`; const url = URL.createObjectURL(zipBlob); const a = document.createElement("a"); diff --git a/apps/web/src/app/(shares)/s/[alias]/components/share-details.tsx b/apps/web/src/app/(shares)/s/[alias]/components/share-details.tsx index 09987c2..9467185 100644 --- a/apps/web/src/app/(shares)/s/[alias]/components/share-details.tsx +++ b/apps/web/src/app/(shares)/s/[alias]/components/share-details.tsx @@ -1,22 +1,33 @@ -import { IconShare } from "@tabler/icons-react"; +import { IconDownload, IconShare } from "@tabler/icons-react"; import { format } from "date-fns"; import { useTranslations } from "next-intl"; +import { Button } from "@/components/ui/button"; import { Card, CardContent } from "@/components/ui/card"; import { ShareDetailsProps } from "../types"; import { ShareFilesTable } from "./files-table"; -export function ShareDetails({ share, onDownload }: ShareDetailsProps) { +export function ShareDetails({ share, onDownload, onBulkDownload }: ShareDetailsProps) { const t = useTranslations(); + const hasMultipleFiles = share.files && share.files.length > 1; + return (
-
- -

{share.name || t("share.details.untitled")}

+
+
+ +

{share.name || t("share.details.untitled")}

+
+ {hasMultipleFiles && ( + + )}
{share.description &&

{share.description}

}
diff --git a/apps/web/src/app/(shares)/s/[alias]/components/share-header.tsx b/apps/web/src/app/(shares)/s/[alias]/components/share-header.tsx index 73204e3..21f5495 100644 --- a/apps/web/src/app/(shares)/s/[alias]/components/share-header.tsx +++ b/apps/web/src/app/(shares)/s/[alias]/components/share-header.tsx @@ -1,5 +1,6 @@ import Image from "next/image"; import Link from "next/link"; +import { useTranslations } from "next-intl"; import { LanguageSwitcher } from "@/components/general/language-switcher"; import { ModeToggle } from "@/components/general/mode-toggle"; @@ -7,12 +8,13 @@ import { useAppInfo } from "@/contexts/app-info-context"; export function ShareHeader() { const { appName, appLogo } = useAppInfo(); + const t = useTranslations(); return (
- {appLogo && App Logo} + {appLogo && {t("logo.labels.appLogo")}}

{appName}

diff --git a/apps/web/src/app/(shares)/s/[alias]/hooks/use-public-share.ts b/apps/web/src/app/(shares)/s/[alias]/hooks/use-public-share.ts index 83e908c..5ec126b 100644 --- a/apps/web/src/app/(shares)/s/[alias]/hooks/use-public-share.ts +++ b/apps/web/src/app/(shares)/s/[alias]/hooks/use-public-share.ts @@ -69,6 +69,62 @@ export function usePublicShare() { } }; + const handleBulkDownload = async () => { + if (!share || !share.files || share.files.length === 0) { + toast.error(t("shareManager.noFilesToDownload")); + return; + } + + try { + toast.promise( + (async () => { + const JSZip = (await import("jszip")).default; + const zip = new JSZip(); + + const downloadPromises = share.files.map(async (file) => { + try { + const encodedObjectName = encodeURIComponent(file.objectName); + const downloadResponse = await getDownloadUrl(encodedObjectName); + const downloadUrl = downloadResponse.data.url; + const response = await fetch(downloadUrl); + + if (!response.ok) { + throw new Error(`Failed to download ${file.name}`); + } + + const blob = await response.blob(); + zip.file(file.name, blob); + } catch (error) { + console.error(`Error downloading file ${file.name}:`, error); + throw error; + } + }); + + await Promise.all(downloadPromises); + + const zipBlob = await zip.generateAsync({ type: "blob" }); + const zipName = `${share.name || t("shareManager.defaultShareName")}.zip`; + + const url = URL.createObjectURL(zipBlob); + const a = document.createElement("a"); + a.href = url; + a.download = zipName; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + URL.revokeObjectURL(url); + })(), + { + loading: t("shareManager.creatingZip"), + success: t("shareManager.zipDownloadSuccess"), + error: t("shareManager.zipDownloadError"), + } + ); + } catch (error) { + console.error("Error creating ZIP:", error); + } + }; + const downloadFile = async (url: string, fileName: string) => { const fileResponse = await fetch(url); const blob = await fileResponse.blob(); @@ -97,5 +153,6 @@ export function usePublicShare() { setPassword, handlePasswordSubmit, handleDownload, + handleBulkDownload, }; } diff --git a/apps/web/src/app/(shares)/s/[alias]/page.tsx b/apps/web/src/app/(shares)/s/[alias]/page.tsx index d2b188a..26ad66c 100644 --- a/apps/web/src/app/(shares)/s/[alias]/page.tsx +++ b/apps/web/src/app/(shares)/s/[alias]/page.tsx @@ -18,6 +18,7 @@ export default function PublicSharePage() { setPassword, handlePasswordSubmit, handleDownload, + handleBulkDownload, } = usePublicShare(); if (isLoading) { @@ -31,7 +32,7 @@ export default function PublicSharePage() {
{!isPasswordModalOpen && !share && } - {share && } + {share && }
diff --git a/apps/web/src/app/(shares)/s/[alias]/types/index.tsx b/apps/web/src/app/(shares)/s/[alias]/types/index.tsx index d7e737d..2ef8a90 100644 --- a/apps/web/src/app/(shares)/s/[alias]/types/index.tsx +++ b/apps/web/src/app/(shares)/s/[alias]/types/index.tsx @@ -24,4 +24,5 @@ export interface PasswordModalProps { export interface ShareDetailsProps { share: GetShareByAlias200Share; onDownload: (objectName: string, fileName: string) => Promise; + onBulkDownload?: () => Promise; } diff --git a/apps/web/src/components/general/file-selector.tsx b/apps/web/src/components/general/file-selector.tsx index 3cd9baa..7373e0a 100644 --- a/apps/web/src/components/general/file-selector.tsx +++ b/apps/web/src/components/general/file-selector.tsx @@ -42,7 +42,7 @@ export function FileSelector({ shareId, selectedFiles, onSave, onEditFile }: Fil setShareFiles(allFiles.filter((file) => selectedFiles.includes(file.id))); setAvailableFiles(allFiles.filter((file) => !selectedFiles.includes(file.id))); } catch (error) { - toast.error("Failed to load files"); + toast.error(t("files.loadError")); } }; @@ -79,7 +79,7 @@ export function FileSelector({ shareId, selectedFiles, onSave, onEditFile }: Fil await onSave(shareFiles.map((f) => f.id)); } catch (error) { - toast.error("Failed to update files"); + toast.error(t("shareManager.filesUpdateError")); } finally { setIsLoading(false); } diff --git a/apps/web/src/hooks/use-file-manager.ts b/apps/web/src/hooks/use-file-manager.ts index d18ad8e..7beacd5 100644 --- a/apps/web/src/hooks/use-file-manager.ts +++ b/apps/web/src/hooks/use-file-manager.ts @@ -195,9 +195,9 @@ export function useFileManager(onRefresh: () => Promise, clearSelection?: } })(), { - loading: "Criando arquivo ZIP...", - success: "Arquivo ZIP baixado com sucesso!", - error: "Erro ao criar arquivo ZIP", + loading: t("shareManager.creatingZip"), + success: t("shareManager.zipDownloadSuccess"), + error: t("shareManager.zipDownloadError"), } ); } catch (error) { diff --git a/apps/web/src/hooks/use-share-manager.ts b/apps/web/src/hooks/use-share-manager.ts index fc3fbc0..2a56508 100644 --- a/apps/web/src/hooks/use-share-manager.ts +++ b/apps/web/src/hooks/use-share-manager.ts @@ -255,7 +255,7 @@ export function useShareManager(onSuccess: () => void) { share.files.forEach((file) => { allFiles.push({ ...file, - shareName: share.name || "Unnamed Share", + shareName: share.name || t("shareManager.defaultShareName"), }); }); }