diff --git a/CHANGELOG.md b/CHANGELOG.md index b80b3f7..12b49ce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,8 @@ ## Changes 4//13/2025 - Decreased header height some more and clickable logo. +- authModals.js fully updated with i18n.js keys. +- main.js added Dark & Light mode i18n.js keys. ## Changes 4/12/2025 diff --git a/js/authModals.js b/js/authModals.js index 935442b..cc10470 100644 --- a/js/authModals.js +++ b/js/authModals.js @@ -3,7 +3,8 @@ import { sendRequest } from './networkUtils.js'; import { t, applyTranslations, setLocale } from './i18n.js'; const version = "v1.1.2"; -const adminTitle = `Admin Panel ${version}`; +// Use t() for the admin panel title. (Make sure t("admin_panel") returns "Admin Panel" in English.) +const adminTitle = `${t("admin_panel")} ${version}`; let lastLoginData = null; export function setLastLoginData(data) { @@ -44,7 +45,7 @@ export function openTOTPLoginModal() { - + `; @@ -66,12 +67,12 @@ export function openTOTPLoginModal() { // Switch to recovery totpSection.style.display = "none"; recoverySection.style.display = "block"; - toggleLink.textContent = "Use TOTP Code instead"; + toggleLink.textContent = t("use_totp_code_instead"); } else { // Switch back to TOTP recoverySection.style.display = "none"; totpSection.style.display = "block"; - toggleLink.textContent = "Use Recovery Code instead"; + toggleLink.textContent = t("use_recovery_code_instead"); } }); @@ -79,7 +80,7 @@ export function openTOTPLoginModal() { document.getElementById("submitRecovery").addEventListener("click", () => { const recoveryCode = document.getElementById("recoveryInput").value.trim(); if (!recoveryCode) { - showToast("Please enter your recovery code."); + showToast(t("please_enter_recovery_code")); return; } fetch("totp_recover.php", { @@ -97,11 +98,11 @@ export function openTOTPLoginModal() { // recovery succeeded → finalize login window.location.href = "index.html"; } else { - showToast(json.message || "Recovery code verification failed"); + showToast(json.message || t("recovery_code_verification_failed")); } }) .catch(() => { - showToast("Error verifying recovery code."); + showToast(t("error_verifying_recovery_code")); }); }); @@ -125,14 +126,14 @@ export function openTOTPLoginModal() { if (json.status === "ok") { window.location.href = "index.html"; } else { - showToast(json.message || "TOTP verification failed"); + showToast(json.message || t("totp_verification_failed")); this.value = ""; totpLoginModal.style.display = "flex"; totpInput.focus(); } }) .catch(() => { - showToast("TOTP verification failed"); + showToast(t("totp_verification_failed")); this.value = ""; totpLoginModal.style.display = "flex"; totpInput.focus(); @@ -189,24 +190,24 @@ export function openUserPanel() { userPanelModal.innerHTML = `
Please save this code securely. It will not be shown again and can only be used once.
-${recoveryCode}
-
- Scan this QR code with your authenticator app:
+${t("scan_qr_code")}
Enter the 6-digit code from your app to confirm setup:
+${t("enter_totp_confirmation")}
No users found.
"; + listContainer.innerHTML = "" + t("no_users_found") + "
"; return; } users.forEach(user => { // Skip admin users. if ((user.role && user.role === "1") || user.username.toLowerCase() === "admin") return; - // Use stored permissions if available; otherwise fall back to localStorage defaults. + // Use stored permissions if available; otherwise fall back to defaults. const defaultPerm = { folderOnly: false, readOnly: false, @@ -859,15 +826,15 @@ function loadUserPermissionsList() {Error loading users.
"; + listContainer.innerHTML = "" + t("error_loading_users") + "
"; }); } \ No newline at end of file diff --git a/js/i18n.js b/js/i18n.js index b01d9af..cefbc1a 100644 --- a/js/i18n.js +++ b/js/i18n.js @@ -1,6 +1,6 @@ /* i18n.js */ const translations = { - en: { /* English translations */ + en: { "please_log_in_to_continue": "Please log in to continue.", "no_files_selected": "No files selected.", "confirm_delete_files": "Are you sure you want to delete {count} selected file(s)?", @@ -35,7 +35,6 @@ const translations = { "tag_name": "Tag Name:", "tag_color": "Tag Color:", "save_tag": "Save Tag", - "files_in": "Files in", "light_mode": "Light Mode", "dark_mode": "Dark Mode", "upload_instruction": "Drop files/folders here or click 'Choose files'", @@ -138,10 +137,7 @@ const translations = { "error_generating_share_link": "Error Generating Share Link", // Folder - "create_folder": "Create Folder", - "rename_folder": "Rename Folder", "folder_share": "Share Folder", - "delete_folder": "Delete Folder", // Custom Confirm Modal keys: "yes": "Yes", @@ -163,7 +159,62 @@ const translations = { // Dark Mode Toggle "dark_mode_toggle": "Dark Mode", - "light_mode_toggle": "Light Mode" + "light_mode_toggle": "Light Mode", + + // NEW KEYS ADDED FOR ADMIN, USER PANELS, AND TOTP MODALS: + "admin_panel": "Admin Panel", + "user_panel": "User Panel", + "totp_settings": "TOTP Settings", + "enable_totp": "Enable TOTP", + "language": "Language", + "select_language": "Select Language", + "english": "English", + "spanish": "Spanish", + "french": "French", + "german": "German", + "use_totp_code_instead": "Use TOTP Code instead", + "submit_recovery_code": "Submit Recovery Code", + "please_enter_recovery_code": "Please enter your recovery code.", + "recovery_code_verification_failed": "Recovery code verification failed", + "error_verifying_recovery_code": "Error verifying recovery code", + "totp_verification_failed": "TOTP verification failed", + "error_verifying_totp_code": "Error verifying TOTP code", + "totp_setup": "TOTP Setup", + "scan_qr_code": "Scan this QR code with your authenticator app.", + "enter_totp_confirmation": "Enter the 6-digit code from your app to confirm setup:", + "confirm": "Confirm", + "please_enter_valid_code": "Please enter a valid 6-digit code.", + "totp_enabled_successfully": "TOTP successfully enabled.", + "error_generating_recovery_code": "Error generating recovery code", + "error_loading_qr_code": "Error loading QR code.", + "error_disabling_totp_setting": "Error disabling TOTP setting", + "user_management": "User Management", + "add_user": "Add User", + "remove_user": "Remove User", + "user_permissions": "User Permissions", + "oidc_configuration": "OIDC Configuration", + "oidc_provider_url": "OIDC Provider URL", + "oidc_client_id": "OIDC Client ID", + "oidc_client_secret": "OIDC Client Secret", + "oidc_redirect_uri": "OIDC Redirect URI", + "global_totp_settings": "Global TOTP Settings", + "global_otpauth_url": "Global OTPAuth URL", + "login_options": "Login Options", + "disable_login_form": "Disable Login Form", + "disable_basic_http_auth": "Disable Basic HTTP Auth", + "disable_oidc_login": "Disable OIDC Login", + "save_settings": "Save Settings", + "at_least_one_login_method": "At least one login method must remain enabled.", + "settings_updated_successfully": "Settings updated successfully.", + "error_updating_settings": "Error updating settings", + "user_permissions_updated_successfully": "User permissions updated successfully.", + "error_updating_permissions": "Error updating permissions", + "no_users_found": "No users found.", + "user_folder_only": "User Folder Only", + "read_only": "Read Only", + "disable_upload": "Disable Upload", + "error_loading_users": "Error loading users", + "save_permissions": "Save Permissions" }, es: { /* Spanish translations */ "please_log_in_to_continue": "Por favor, inicie sesión para continuar.", @@ -443,12 +494,395 @@ const translations = { // Dark Mode Toggle "dark_mode_toggle": "Mode sombre" }, - de: { + es: { /* Spanish translations */ + "please_log_in_to_continue": "Por favor, inicie sesión para continuar.", + "no_files_selected": "No se seleccionaron archivos.", + "confirm_delete_files": "¿Está seguro de que desea eliminar {count} archivo(s) seleccionado(s)?", + "element_not_found": "Elemento con id \"{id}\" no encontrado.", + "search_placeholder": "Buscar archivos, etiquetas y cargador...", + "search_placeholder_advanced": "Búsqueda avanzada: archivos, etiquetas, cargador y contenido...", + "basic_search_tooltip": "Búsqueda básica: por nombre de archivo, etiquetas y cargador.", + "advanced_search_tooltip": "Búsqueda avanzada: incluye el contenido del archivo, además del nombre, etiquetas y cargador.", + "file_name": "Nombre del archivo", + "date_modified": "Fecha de modificación", + "upload_date": "Fecha de carga", + "file_size": "Tamaño del archivo", + "uploader": "Cargado por", + "enter_totp_code": "Ingrese el código TOTP", + "use_recovery_code_instead": "Usar código de recuperación en su lugar", + "enter_recovery_code": "Ingrese el código de recuperación", + "editing": "Editando", + "decrease_font": "A-", + "increase_font": "A+", + "save": "Guardar", + "close": "Cerrar", + "no_files_found": "No se encontraron archivos.", + "switch_to_table_view": "Cambiar a vista de tabla", + "switch_to_gallery_view": "Cambiar a vista de galería", + "share_file": "Compartir archivo", + "set_expiration": "Establecer vencimiento:", + "password_optional": "Contraseña (opcional):", + "generate_share_link": "Generar enlace para compartir", + "shareable_link": "Enlace para compartir:", + "copy_link": "Copiar enlace", + "tag_file": "Etiquetar archivo", + "tag_name": "Nombre de la etiqueta:", + "tag_color": "Color de la etiqueta:", + "save_tag": "Guardar etiqueta", + "light_mode": "Modo claro", + "dark_mode": "Modo oscuro", + "upload_instruction": "Suelte archivos/carpetas aquí o haga clic en 'Elegir archivos'", + "no_files_selected_default": "No se seleccionaron archivos", + "choose_files": "Elegir archivos", + "delete_selected": "Eliminar seleccionados", + "copy_selected": "Copiar seleccionados", + "move_selected": "Mover seleccionados", + "tag_selected": "Etiquetar seleccionados", + "download_zip": "Descargar Zip", + "extract_zip": "Extraer Zip", + "preview": "Vista previa", + "edit": "Editar", + "rename": "Renombrar", + "trash_empty": "La papelera está vacía.", + "no_trash_selected": "No se seleccionaron elementos para restaurar.", + "title": "FileRise", + "header_title": "FileRise", + "logout": "Cerrar sesión", + "change_password": "Cambiar contraseña", + "restore_text": "Restaurar o", + "delete_text": "Eliminar elementos de la papelera", + "restore_selected": "Restaurar seleccionados", + "restore_all": "Restaurar todo", + "delete_selected_trash": "Eliminar seleccionados", + "delete_all": "Eliminar todo", + "upload_header": "Cargar archivos/carpetas", + "folder_navigation": "Navegación y gestión de carpetas", + "create_folder": "Crear carpeta", + "create_folder_title": "Crear carpeta", + "enter_folder_name": "Ingrese el nombre de la carpeta", + "cancel": "Cancelar", + "create": "Crear", + "rename_folder": "Renombrar carpeta", + "rename_folder_title": "Renombrar carpeta", + "rename_folder_placeholder": "Ingrese el nuevo nombre de la carpeta", + "delete_folder": "Eliminar carpeta", + "delete_folder_title": "Eliminar carpeta", + "delete_folder_message": "¿Está seguro de que desea eliminar esta carpeta?", + "folder_help": "Ayuda de carpetas", + "folder_help_item_1": "Haga clic en una carpeta para ver sus archivos.", + "folder_help_item_2": "Utilice [-] para colapsar y [+] para expandir las carpetas.", + "folder_help_item_3": "Seleccione una carpeta y haga clic en 'Crear carpeta' para agregar una subcarpeta.", + "folder_help_item_4": "Para renombrar o eliminar una carpeta, selecciónela y haga clic en el botón correspondiente.", + "file_list_title": "Archivos en (Raíz)", + "files_in": "Archivos en", + "delete_files": "Eliminar archivos", + "delete_selected_files_title": "Eliminar archivos seleccionados", + "delete_files_message": "¿Está seguro de que desea eliminar los archivos seleccionados?", + "copy_files": "Copiar archivos", + "copy_files_title": "Copiar archivos seleccionados", + "copy_files_message": "Seleccione una carpeta destino para copiar los archivos seleccionados:", + "move_files": "Mover archivos", + "move_files_title": "Mover archivos seleccionados", + "move_files_message": "Seleccione una carpeta destino para mover los archivos seleccionados:", + "move": "Mover", + "extract_zip_button": "Extraer Zip", + "download_zip_title": "Descargar archivos seleccionados en Zip", + "download_zip_prompt": "Ingrese un nombre para el archivo Zip:", + "zip_placeholder": "archivos.zip", + "login": "Iniciar sesión", + "remember_me": "Recuérdame", + "login_oidc": "Iniciar sesión con OIDC", + "basic_http_login": "Usar autenticación HTTP básica", + "change_password_title": "Cambiar contraseña", + "old_password": "Contraseña antigua", + "new_password": "Nueva contraseña", + "confirm_new_password": "Confirmar nueva contraseña", + "create_new_user_title": "Crear nuevo usuario", + "username": "Usuario:", + "password": "Contraseña:", + "grant_admin": "Otorgar acceso de administrador", + "save_user": "Guardar usuario", + "remove_user_title": "Eliminar usuario", + "select_user_remove": "Seleccione un usuario para eliminar:", + "delete_user": "Eliminar usuario", + "rename_file_title": "Renombrar archivo", + "rename_file_placeholder": "Ingrese el nuevo nombre del archivo", + "share_folder": "Compartir carpeta", + "allow_uploads": "Permitir cargas", + "share_link_generated": "Enlace de compartir generado", + "error_generating_share_link": "Error al generar el enlace de compartir", + "yes": "Sí", + "no": "No", + "delete": "Eliminar", + "download": "Descargar", + "upload": "Cargar", + "copy": "Copiar", + "extract": "Extraer", + "user": "Usuario:", + "unknown_error": "Error desconocido", + "link_copied": "Enlace copiado al portapapeles", + "minutes": "minutos", + "hours": "horas", + "days": "días", + "weeks": "semanas", + "months": "meses", + "seconds": "segundos", + "dark_mode_toggle": "Modo oscuro", + "light_mode_toggle": "Modo claro", + // Nuevas claves para paneles y TOTP: + "admin_panel": "Panel de Administración", + "user_panel": "Panel de Usuario", + "totp_settings": "Configuración TOTP", + "enable_totp": "Habilitar TOTP", + "language": "Idioma", + "select_language": "Seleccionar idioma", + "english": "Inglés", + "spanish": "Español", + "french": "Francés", + "german": "Alemán", + "use_totp_code_instead": "Usar código TOTP en su lugar", + "submit_recovery_code": "Enviar código de recuperación", + "please_enter_recovery_code": "Por favor, ingrese su código de recuperación.", + "recovery_code_verification_failed": "La verificación del código de recuperación falló", + "error_verifying_recovery_code": "Error al verificar el código de recuperación", + "totp_verification_failed": "La verificación TOTP falló", + "error_verifying_totp_code": "Error al verificar el código TOTP", + "totp_setup": "Configuración TOTP", + "scan_qr_code": "Escanee este código QR con su aplicación de autenticación.", + "enter_totp_confirmation": "Ingrese el código de 6 dígitos de su aplicación para confirmar la configuración:", + "confirm": "Confirmar", + "please_enter_valid_code": "Por favor, ingrese un código válido de 6 dígitos.", + "totp_enabled_successfully": "TOTP habilitado exitosamente.", + "error_generating_recovery_code": "Error al generar el código de recuperación", + "error_loading_qr_code": "Error al cargar el código QR.", + "error_disabling_totp_setting": "Error al deshabilitar la configuración TOTP", + "user_management": "Gestión de Usuarios", + "add_user": "Añadir Usuario", + "remove_user": "Eliminar Usuario", + "user_permissions": "Permisos de Usuario", + "oidc_configuration": "Configuración OIDC", + "oidc_provider_url": "URL del Proveedor OIDC", + "oidc_client_id": "ID del Cliente OIDC", + "oidc_client_secret": "Secreto del Cliente OIDC", + "oidc_redirect_uri": "URI de Redirección OIDC", + "global_totp_settings": "Configuración Global TOTP", + "global_otpauth_url": "URL Global OTPAuth", + "login_options": "Opciones de Inicio de Sesión", + "disable_login_form": "Deshabilitar el formulario de inicio de sesión", + "disable_basic_http_auth": "Deshabilitar la autenticación HTTP básica", + "disable_oidc_login": "Deshabilitar el inicio de sesión OIDC", + "save_settings": "Guardar Configuración", + "at_least_one_login_method": "Al menos un método de inicio de sesión debe permanecer habilitado.", + "settings_updated_successfully": "La configuración se actualizó con éxito.", + "error_updating_settings": "Error al actualizar la configuración", + "user_permissions_updated_successfully": "Los permisos de usuario se actualizaron con éxito.", + "error_updating_permissions": "Error al actualizar los permisos", + "no_users_found": "No se encontraron usuarios.", + "user_folder_only": "Solo carpeta de usuario", + "read_only": "Solo lectura", + "disable_upload": "Deshabilitar carga", + "error_loading_users": "Error al cargar los usuarios", + "save_permissions": "Guardar Permisos" + }, + fr: { /* French translations */ + "please_log_in_to_continue": "Veuillez vous connecter pour continuer.", + "no_files_selected": "Aucun fichier sélectionné.", + "confirm_delete_files": "Êtes-vous sûr de vouloir supprimer {count} fichier(s) sélectionné(s) ?", + "element_not_found": "Élément avec l'id \"{id}\" non trouvé.", + "search_placeholder": "Rechercher des fichiers, des balises et l'uploader...", + "search_placeholder_advanced": "Recherche avancée : fichiers, balises, uploader et contenu...", + "basic_search_tooltip": "Recherche basique : par nom de fichier, balises et uploader.", + "advanced_search_tooltip": "Recherche avancée : inclut le contenu du fichier, en plus du nom, des balises et de l'uploader.", + "file_name": "Nom du fichier", + "date_modified": "Date de modification", + "upload_date": "Date de téléchargement", + "file_size": "Taille du fichier", + "uploader": "Téléversé par", + "enter_totp_code": "Entrez le code TOTP", + "use_recovery_code_instead": "Utiliser le code de récupération à la place", + "enter_recovery_code": "Entrez le code de récupération", + "editing": "Modification", + "decrease_font": "A-", + "increase_font": "A+", + "save": "Enregistrer", + "close": "Fermer", + "no_files_found": "Aucun fichier trouvé.", + "switch_to_table_view": "Passer à la vue tableau", + "switch_to_gallery_view": "Passer à la vue galerie", + "share_file": "Partager le fichier", + "set_expiration": "Définir l'expiration :", + "password_optional": "Mot de passe (facultatif) :", + "generate_share_link": "Générer un lien de partage", + "shareable_link": "Lien partageable :", + "copy_link": "Copier le lien", + "tag_file": "Taguer le fichier", + "tag_name": "Nom du tag :", + "tag_color": "Couleur du tag :", + "save_tag": "Enregistrer le tag", + "light_mode": "Mode clair", + "dark_mode": "Mode sombre", + "upload_instruction": "Déposez vos fichiers/dossiers ici ou cliquez sur 'Choisir des fichiers'", + "no_files_selected_default": "Aucun fichier sélectionné", + "choose_files": "Choisir des fichiers", + "delete_selected": "Supprimer la sélection", + "copy_selected": "Copier la sélection", + "move_selected": "Déplacer la sélection", + "tag_selected": "Taguer la sélection", + "download_zip": "Télécharger en Zip", + "extract_zip": "Extraire le Zip", + "preview": "Aperçu", + "edit": "Modifier", + "rename": "Renommer", + "trash_empty": "La corbeille est vide.", + "no_trash_selected": "Aucun élément de la corbeille sélectionné pour restauration.", + "title": "FileRise", + "header_title": "FileRise", + "logout": "Se déconnecter", + "change_password": "Changer le mot de passe", + "restore_text": "Restaurer ou", + "delete_text": "Supprimer les éléments de la corbeille", + "restore_selected": "Restaurer la sélection", + "restore_all": "Restaurer tout", + "delete_selected_trash": "Supprimer la sélection", + "delete_all": "Supprimer tout", + "upload_header": "Téléverser des fichiers/dossiers", + "folder_navigation": "Navigation et gestion des dossiers", + "create_folder": "Créer un dossier", + "create_folder_title": "Créer un dossier", + "enter_folder_name": "Entrez le nom du dossier", + "cancel": "Annuler", + "create": "Créer", + "rename_folder": "Renommer le dossier", + "rename_folder_title": "Renommer le dossier", + "rename_folder_placeholder": "Entrez le nouveau nom du dossier", + "delete_folder": "Supprimer le dossier", + "delete_folder_title": "Supprimer le dossier", + "delete_folder_message": "Êtes-vous sûr de vouloir supprimer ce dossier ?", + "folder_help": "Aide des dossiers", + "folder_help_item_1": "Cliquez sur un dossier pour voir ses fichiers.", + "folder_help_item_2": "Utilisez [-] pour réduire et [+] pour développer les dossiers.", + "folder_help_item_3": "Cliquez sur 'Créer un dossier' pour ajouter un sous-dossier.", + "folder_help_item_4": "Pour renommer ou supprimer un dossier, sélectionnez-le et cliquez sur le bouton approprié.", + "file_list_title": "Fichiers dans (Racine)", + "files_in": "Fichiers dans", + "delete_files": "Supprimer les fichiers", + "delete_selected_files_title": "Supprimer les fichiers sélectionnés", + "delete_files_message": "Êtes-vous sûr de vouloir supprimer les fichiers sélectionnés ?", + "copy_files": "Copier les fichiers", + "copy_files_title": "Copier les fichiers sélectionnés", + "copy_files_message": "Sélectionnez un dossier de destination pour copier les fichiers sélectionnés :", + "move_files": "Déplacer les fichiers", + "move_files_title": "Déplacer les fichiers sélectionnés", + "move_files_message": "Sélectionnez un dossier de destination pour déplacer les fichiers sélectionnés :", + "move": "Déplacer", + "extract_zip_button": "Extraire le Zip", + "download_zip_title": "Télécharger les fichiers sélectionnés en Zip", + "download_zip_prompt": "Entrez un nom pour le fichier Zip :", + "zip_placeholder": "fichiers.zip", + "login": "Connexion", + "remember_me": "Se souvenir de moi", + "login_oidc": "Connexion avec OIDC", + "basic_http_login": "Utiliser l'authentification HTTP basique", + "change_password_title": "Changer le mot de passe", + "old_password": "Ancien mot de passe", + "new_password": "Nouveau mot de passe", + "confirm_new_password": "Confirmer le nouveau mot de passe", + "create_new_user_title": "Créer un nouvel utilisateur", + "username": "Nom d'utilisateur :", + "password": "Mot de passe :", + "grant_admin": "Donner les droits d'administrateur", + "save_user": "Enregistrer l'utilisateur", + "remove_user_title": "Supprimer l'utilisateur", + "select_user_remove": "Sélectionnez un utilisateur à supprimer :", + "delete_user": "Supprimer l'utilisateur", + "rename_file_title": "Renommer le fichier", + "rename_file_placeholder": "Entrez le nouveau nom du fichier", + "share_folder": "Partager le dossier", + "allow_uploads": "Autoriser le téléchargement", + "share_link_generated": "Lien de partage généré", + "error_generating_share_link": "Erreur lors de la génération du lien de partage", + "yes": "Oui", + "no": "Non", + "delete": "Supprimer", + "download": "Télécharger", + "upload": "Téléverser", + "copy": "Copier", + "extract": "Extraire", + "user": "Utilisateur :", + "unknown_error": "Erreur inconnue", + "link_copied": "Lien copié dans le presse-papiers", + "minutes": "minutes", + "hours": "heures", + "days": "jours", + "weeks": "semaines", + "months": "mois", + "seconds": "secondes", + "dark_mode_toggle": "Mode sombre", + "light_mode_toggle": "Mode clair", + // Nouvelles clés pour les panneaux et TOTP : + "admin_panel": "Panneau d'administration", + "user_panel": "Panneau utilisateur", + "totp_settings": "Paramètres TOTP", + "enable_totp": "Activer TOTP", + "language": "Langue", + "select_language": "Sélectionnez la langue", + "english": "Anglais", + "spanish": "Espagnol", + "french": "Français", + "german": "Allemand", + "use_totp_code_instead": "Utiliser le code TOTP à la place", + "submit_recovery_code": "Soumettre le code de récupération", + "please_enter_recovery_code": "Veuillez entrer votre code de récupération.", + "recovery_code_verification_failed": "La vérification du code de récupération a échoué", + "error_verifying_recovery_code": "Erreur lors de la vérification du code de récupération", + "totp_verification_failed": "La vérification TOTP a échoué", + "error_verifying_totp_code": "Erreur lors de la vérification du code TOTP", + "totp_setup": "Configuration TOTP", + "scan_qr_code": "Scannez ce QR code avec votre application d'authentification.", + "enter_totp_confirmation": "Entrez le code à 6 chiffres de votre application pour confirmer la configuration :", + "confirm": "Confirmer", + "please_enter_valid_code": "Veuillez entrer un code valide à 6 chiffres.", + "totp_enabled_successfully": "TOTP activé avec succès.", + "error_generating_recovery_code": "Erreur lors de la génération du code de récupération", + "error_loading_qr_code": "Erreur lors du chargement du QR code.", + "error_disabling_totp_setting": "Erreur lors de la désactivation des paramètres TOTP", + "user_management": "Gestion des utilisateurs", + "add_user": "Ajouter un utilisateur", + "remove_user": "Supprimer un utilisateur", + "user_permissions": "Permissions des utilisateurs", + "oidc_configuration": "Configuration OIDC", + "oidc_provider_url": "URL du fournisseur OIDC", + "oidc_client_id": "ID du client OIDC", + "oidc_client_secret": "Secret du client OIDC", + "oidc_redirect_uri": "URI de redirection OIDC", + "global_totp_settings": "Paramètres globaux TOTP", + "global_otpauth_url": "URL globale OTPAuth", + "login_options": "Options de connexion", + "disable_login_form": "Désactiver le formulaire de connexion", + "disable_basic_http_auth": "Désactiver l'authentification HTTP basique", + "disable_oidc_login": "Désactiver la connexion OIDC", + "save_settings": "Enregistrer les paramètres", + "at_least_one_login_method": "Au moins une méthode de connexion doit rester activée.", + "settings_updated_successfully": "Les paramètres ont été mis à jour avec succès.", + "error_updating_settings": "Erreur lors de la mise à jour des paramètres", + "user_permissions_updated_successfully": "Les permissions des utilisateurs ont été mises à jour avec succès.", + "error_updating_permissions": "Erreur lors de la mise à jour des permissions", + "no_users_found": "Aucun utilisateur trouvé.", + "user_folder_only": "Dossier utilisateur uniquement", + "read_only": "Lecture seule", + "disable_upload": "Désactiver le téléchargement", + "error_loading_users": "Erreur lors du chargement des utilisateurs", + "save_permissions": "Enregistrer les permissions" + }, + de: { /* German translations */ "please_log_in_to_continue": "Bitte melden Sie sich an, um fortzufahren.", "no_files_selected": "Keine Dateien ausgewählt.", "confirm_delete_files": "Sind Sie sicher, dass Sie {count} ausgewählte Datei(en) löschen möchten?", "element_not_found": "Element mit der ID \"{id}\" wurde nicht gefunden.", - "search_placeholder": "Suche nach Dateien oder Tags...", + "search_placeholder": "Suche nach Dateien, Tags und Uploader...", + "search_placeholder_advanced": "Erweiterte Suche: Dateien, Tags, Uploader und Inhalt...", + "basic_search_tooltip": "Einfache Suche: nach Dateiname, Tags und Uploader.", + "advanced_search_tooltip": "Erweiterte Suche: Beinhaltet Dateiinhalte zusätzlich zu Dateiname, Tags und Uploader.", "file_name": "Dateiname", "date_modified": "Änderungsdatum", "upload_date": "Hochladedatum", @@ -475,7 +909,6 @@ const translations = { "tag_name": "Tagname:", "tag_color": "Tagfarbe:", "save_tag": "Tag speichern", - "files_in": "Dateien in", "light_mode": "Heller Modus", "dark_mode": "Dunkler Modus", "upload_instruction": "Ziehen Sie Dateien/Ordner hierher oder klicken Sie auf 'Dateien auswählen'", @@ -491,9 +924,7 @@ const translations = { "edit": "Bearbeiten", "rename": "Umbenennen", "trash_empty": "Papierkorb ist leer.", - "no_trash_selected": "Keine Elemente im Papierkorb für die Wiederherstellung ausgewählt.", - - // Additional keys for HTML translations: + "no_trash_selected": "Keine Elemente im Papierkorb zur Wiederherstellung ausgewählt.", "title": "FileRise", "header_title": "FileRise", "logout": "Abmelden", @@ -505,8 +936,6 @@ const translations = { "delete_selected_trash": "Ausgewählte löschen", "delete_all": "Alle löschen", "upload_header": "Dateien/Ordner hochladen", - - // Folder Management keys: "folder_navigation": "Ordnernavigation & Verwaltung", "create_folder": "Ordner erstellen", "create_folder_title": "Ordner erstellen", @@ -521,12 +950,11 @@ const translations = { "delete_folder_message": "Sind Sie sicher, dass Sie diesen Ordner löschen möchten?", "folder_help": "Ordnerhilfe", "folder_help_item_1": "Klicken Sie auf einen Ordner, um dessen Dateien anzuzeigen.", - "folder_help_item_2": "Verwenden Sie [-] um zu minimieren und [+] um zu erweitern.", - "folder_help_item_3": "Klicken Sie auf \"Ordner erstellen\", um einen Unterordner hinzuzufügen.", + "folder_help_item_2": "Verwenden Sie [-] zum Reduzieren und [+] zum Erweitern.", + "folder_help_item_3": "Klicken Sie auf 'Ordner erstellen', um einen Unterordner hinzuzufügen.", "folder_help_item_4": "Um einen Ordner umzubenennen oder zu löschen, wählen Sie ihn und klicken Sie auf die entsprechende Schaltfläche.", - - // File List keys: "file_list_title": "Dateien in (Root)", + "files_in": "Dateien in", "delete_files": "Dateien löschen", "delete_selected_files_title": "Ausgewählte Dateien löschen", "delete_files_message": "Sind Sie sicher, dass Sie die ausgewählten Dateien löschen möchten?", @@ -541,36 +969,28 @@ const translations = { "download_zip_title": "Ausgewählte Dateien als Zip herunterladen", "download_zip_prompt": "Geben Sie einen Namen für die Zip-Datei ein:", "zip_placeholder": "dateien.zip", - - // Login Form keys: "login": "Anmelden", "remember_me": "Angemeldet bleiben", "login_oidc": "Mit OIDC anmelden", "basic_http_login": "HTTP-Basisauthentifizierung verwenden", - - // Change Password keys: "change_password_title": "Passwort ändern", "old_password": "Altes Passwort", "new_password": "Neues Passwort", "confirm_new_password": "Neues Passwort bestätigen", - - // Add User keys: "create_new_user_title": "Neuen Benutzer erstellen", "username": "Benutzername:", "password": "Passwort:", "grant_admin": "Admin-Rechte vergeben", "save_user": "Benutzer speichern", - - // Remove User keys: "remove_user_title": "Benutzer entfernen", "select_user_remove": "Wählen Sie einen Benutzer zum Entfernen:", "delete_user": "Benutzer löschen", - - // Rename File keys: "rename_file_title": "Datei umbenennen", "rename_file_placeholder": "Neuen Dateinamen eingeben", - - // Custom Confirm Modal keys: + "share_folder": "Ordner teilen", + "allow_uploads": "Uploads erlauben", + "share_link_generated": "Freigabelink generiert", + "error_generating_share_link": "Fehler beim Generieren des Freigabelinks", "yes": "Ja", "no": "Nein", "delete": "Löschen", @@ -578,9 +998,71 @@ const translations = { "upload": "Hochladen", "copy": "Kopieren", "extract": "Entpacken", - - // Dark Mode Toggle - "dark_mode_toggle": "Dunkler Modus" + "user": "Benutzer:", + "unknown_error": "Unbekannter Fehler", + "link_copied": "Link in die Zwischenablage kopiert", + "minutes": "Minuten", + "hours": "Stunden", + "days": "Tage", + "weeks": "Wochen", + "months": "Monate", + "seconds": "Sekunden", + "dark_mode_toggle": "Dunkler Modus", + "light_mode_toggle": "Heller Modus", + // Neue Schlüssel für Administrations-, Benutzer-Panels und TOTP-Modal: + "admin_panel": "Administrationsbereich", + "user_panel": "Benutzerbereich", + "totp_settings": "TOTP-Einstellungen", + "enable_totp": "TOTP aktivieren", + "language": "Sprache", + "select_language": "Sprache auswählen", + "english": "Englisch", + "spanish": "Spanisch", + "french": "Französisch", + "german": "Deutsch", + "use_totp_code_instead": "Stattdessen TOTP-Code verwenden", + "submit_recovery_code": "Wiederherstellungscode absenden", + "please_enter_recovery_code": "Bitte geben Sie Ihren Wiederherstellungscode ein.", + "recovery_code_verification_failed": "Die Überprüfung des Wiederherstellungscodes ist fehlgeschlagen", + "error_verifying_recovery_code": "Fehler bei der Überprüfung des Wiederherstellungscodes", + "totp_verification_failed": "TOTP-Überprüfung fehlgeschlagen", + "error_verifying_totp_code": "Fehler bei der Überprüfung des TOTP-Codes", + "totp_setup": "TOTP-Einrichtung", + "scan_qr_code": "Scannen Sie diesen QR-Code mit Ihrer Authenticator-App.", + "enter_totp_confirmation": "Geben Sie den 6-stelligen Code aus Ihrer App zur Bestätigung ein:", + "confirm": "Bestätigen", + "please_enter_valid_code": "Bitte geben Sie einen gültigen 6-stelligen Code ein.", + "totp_enabled_successfully": "TOTP wurde erfolgreich aktiviert.", + "error_generating_recovery_code": "Fehler beim Generieren des Wiederherstellungscodes", + "error_loading_qr_code": "Fehler beim Laden des QR-Codes.", + "error_disabling_totp_setting": "Fehler beim Deaktivieren der TOTP-Einstellung", + "user_management": "Benutzerverwaltung", + "add_user": "Benutzer hinzufügen", + "remove_user": "Benutzer entfernen", + "user_permissions": "Benutzerberechtigungen", + "oidc_configuration": "OIDC-Konfiguration", + "oidc_provider_url": "OIDC-Anbieter-URL", + "oidc_client_id": "OIDC-Client-ID", + "oidc_client_secret": "OIDC-Client-Geheimnis", + "oidc_redirect_uri": "OIDC-Umleitungs-URI", + "global_totp_settings": "Globale TOTP-Einstellungen", + "global_otpauth_url": "Globale OTPAuth-URL", + "login_options": "Anmeldeoptionen", + "disable_login_form": "Anmeldeformular deaktivieren", + "disable_basic_http_auth": "HTTP-Basis-Authentifizierung deaktivieren", + "disable_oidc_login": "OIDC-Anmeldung deaktivieren", + "save_settings": "Einstellungen speichern", + "at_least_one_login_method": "Mindestens eine Anmeldemethode muss aktiviert bleiben.", + "settings_updated_successfully": "Einstellungen wurden erfolgreich aktualisiert.", + "error_updating_settings": "Fehler beim Aktualisieren der Einstellungen", + "user_permissions_updated_successfully": "Benutzerberechtigungen wurden erfolgreich aktualisiert.", + "error_updating_permissions": "Fehler beim Aktualisieren der Berechtigungen", + "no_users_found": "Keine Benutzer gefunden.", + "user_folder_only": "Nur Benutzerordner", + "read_only": "Nur Lesen", + "disable_upload": "Upload deaktivieren", + "error_loading_users": "Fehler beim Laden der Benutzer", + "save_permissions": "Berechtigungen speichern" } }; diff --git a/js/main.js b/js/main.js index cc36fb1..1aac6c7 100644 --- a/js/main.js +++ b/js/main.js @@ -128,18 +128,18 @@ document.addEventListener("DOMContentLoaded", function () { if (darkModeToggle) { darkModeToggle.textContent = document.body.classList.contains("dark-mode") - ? "Light Mode" - : "Dark Mode"; + ? t("light_mode") + : t("dark_mode"); darkModeToggle.addEventListener("click", function () { if (document.body.classList.contains("dark-mode")) { document.body.classList.remove("dark-mode"); localStorage.setItem("darkMode", "false"); - darkModeToggle.textContent = "Dark Mode"; + darkModeToggle.textContent = t("dark_mode"); } else { document.body.classList.add("dark-mode"); localStorage.setItem("darkMode", "true"); - darkModeToggle.textContent = "Light Mode"; + darkModeToggle.textContent = t("light_mode"); } }); }