diff --git a/static/assets/plugins/custom/flatpickr/l10n/es.js b/static/assets/plugins/custom/flatpickr/l10n/es.js
new file mode 100644
index 00000000..cf19bebd
--- /dev/null
+++ b/static/assets/plugins/custom/flatpickr/l10n/es.js
@@ -0,0 +1,70 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
+ typeof define === 'function' && define.amd ? define(['exports'], factory) :
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.es = {}));
+}(this, (function (exports) { 'use strict';
+
+ var fp = typeof window !== "undefined" && window.flatpickr !== undefined
+ ? window.flatpickr
+ : {
+ l10ns: {},
+ };
+ var Spanish = {
+ weekdays: {
+ shorthand: ["Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb"],
+ longhand: [
+ "Domingo",
+ "Lunes",
+ "Martes",
+ "Miércoles",
+ "Jueves",
+ "Viernes",
+ "Sábado",
+ ],
+ },
+ months: {
+ shorthand: [
+ "Ene",
+ "Feb",
+ "Mar",
+ "Abr",
+ "May",
+ "Jun",
+ "Jul",
+ "Ago",
+ "Sep",
+ "Oct",
+ "Nov",
+ "Dic",
+ ],
+ longhand: [
+ "Enero",
+ "Febrero",
+ "Marzo",
+ "Abril",
+ "Mayo",
+ "Junio",
+ "Julio",
+ "Agosto",
+ "Septiembre",
+ "Octubre",
+ "Noviembre",
+ "Diciembre",
+ ],
+ },
+ ordinal: function () {
+ return "º";
+ },
+ firstDayOfWeek: 1,
+ rangeSeparator: " a ",
+ time_24hr: true,
+ };
+ fp.l10ns.es = Spanish;
+ var es = fp.l10ns;
+
+ exports.Spanish = Spanish;
+ exports.default = es;
+
+ Object.defineProperty(exports, '__esModule', { value: true });
+
+})));
diff --git a/static/locales/es/translation.json b/static/locales/es/translation.json
new file mode 100644
index 00000000..28000757
--- /dev/null
+++ b/static/locales/es/translation.json
@@ -0,0 +1,1140 @@
+{
+ "title": {
+ "setup": "Configuración inicial",
+ "login": "Iniciar sesión",
+ "share_login": "Inicio de sesión compartido",
+ "profile": "Perfil",
+ "change_password": "Cambiar contraseña",
+ "files": "Archivos",
+ "shares": "Compartidos",
+ "add_share": "Añadir compartido",
+ "update_share": "Actualizar compartido",
+ "two_factor_auth": "Autenticación de dos factores",
+ "two_factor_auth_short": "2FA",
+ "edit_file": "Editar archivo",
+ "view_file": "Ver archivo",
+ "recovery_password": "Recuperación de contraseña",
+ "reset_password": "Restablecer contraseña",
+ "shared_files": "Archivos compartidos",
+ "upload_to_share": "Subir a compartido",
+ "download_shared_file": "Descargar archivo compartido",
+ "share_access_error": "No se puede acceder al recurso compartido",
+ "invalid_auth_request": "Solicitud de autenticación no válida",
+ "error400": "Solicitud incorrecta",
+ "error403": "Prohibido",
+ "error404": "No encontrado",
+ "error416": "Rango solicitado no satisfactorio",
+ "error429": "Demasiadas solicitudes",
+ "error500": "Error interno del servidor",
+ "errorPDF": "No se puede mostrar el archivo PDF",
+ "error_editor": "No se puede abrir el editor de archivos",
+ "users": "Usuarios",
+ "groups": "Grupos",
+ "folders": "Carpetas virtuales",
+ "connections": "Conexiones activas",
+ "event_manager": "Gestor de eventos",
+ "event_rules": "Reglas",
+ "event_actions": "Acciones",
+ "ip_manager": "Gestor de IP",
+ "ip_lists": "Listas de IP",
+ "defender": "Lista de bloqueo automático",
+ "admins": "Administradores",
+ "roles": "Roles",
+ "server_manager": "Gestor del servidor",
+ "configs": "Configuraciones",
+ "logs": "Registros",
+ "maintenance": "Mantenimiento",
+ "status": "Estado",
+ "add_user": "Añadir usuario",
+ "update_user": "Actualizar usuario",
+ "template_user": "Plantilla de usuario",
+ "template_admin": "Plantilla de administrador",
+ "add_group": "Añadir grupo",
+ "update_group": "Actualizar grupo",
+ "add_folder": "Añadir carpeta virtual",
+ "update_folder": "Actualizar carpeta virtual",
+ "template_folder": "Plantilla de carpeta virtual",
+ "oauth2_error": "No se puede completar el flujo OAuth2",
+ "oauth2_success": "Flujo OAuth2 completado",
+ "add_role": "Añadir rol",
+ "update_role": "Actualizar rol",
+ "add_admin": "Añadir administrador",
+ "update_admin": "Actualizar administrador",
+ "add_ip_list": "Añadir entrada de lista IP",
+ "update_ip_list": "Actualizar entrada de lista IP",
+ "add_action": "Añadir acción",
+ "update_action": "Actualizar acción",
+ "add_rule": "Añadir regla",
+ "update_rule": "Actualizar regla"
+ },
+ "setup": {
+ "desc": "Para empezar a usar SFTPGo necesitas crear un usuario administrador",
+ "submit": "Crear administrador e Iniciar sesión",
+ "install_code_mismatch": "El código de instalación no coincide",
+ "help_text": "Soporte comercial"
+ },
+ "login": {
+ "username": "Nombre de usuario",
+ "password": "Contraseña",
+ "your_username": "Tu nombre de usuario",
+ "forgot_password": "¿Olvidaste tu contraseña?",
+ "forgot_password_msg": "Introduce el nombre de usuario de tu cuenta a continuación, recibirás un código de restablecimiento de contraseña por correo electrónico.",
+ "send_reset_code": "Enviar código de restablecimiento",
+ "signin": "Iniciar sesión",
+ "signin_openid": "Iniciar sesión con OpenID",
+ "signout": "Cerrar sesión",
+ "auth_code": "Código de autenticación",
+ "two_factor_help": "Abre la aplicación de autenticación de dos factores en tu dispositivo para ver tu código de autenticación y verificar tu identidad.",
+ "two_factor_msg": "Introduce un código de recuperación de dos factores",
+ "recovery_code": "Código de recuperación",
+ "recovery_code_msg": "Puedes introducir uno de tus códigos de recuperación en caso de perder el acceso a tu dispositivo móvil.",
+ "reset_password": "Restablecer contraseña",
+ "reset_pwd_msg": "Revisa tu correo electrónico para el código de confirmación",
+ "reset_submit": "Actualizar contraseña e Iniciar sesión",
+ "confirm_code": "Código de confirmación",
+ "reset_pwd_forbidden": "No tienes permiso para restablecer tu contraseña",
+ "reset_pwd_no_email": "Tu cuenta no tiene una dirección de correo electrónico, no es posible restablecer tu contraseña enviando un código de verificación por correo",
+ "reset_pwd_send_email_err": "No se puede enviar el código de confirmación por correo electrónico",
+ "reset_pwd_err_generic": "Error inesperado al restablecer la contraseña",
+ "reset_ok_login_error": "El restablecimiento de contraseña se completó con éxito pero ocurrió un error inesperado al iniciar sesión",
+ "ip_not_allowed": "El inicio de sesión no está permitido desde esta dirección IP",
+ "two_factor_required": "Configura la autenticación de dos factores, es obligatoria para los siguientes protocolos: {{val}}",
+ "two_factor_required_generic": "Configura la autenticación de dos factores, es obligatoria para tu cuenta",
+ "link": "Ir a {{link}}"
+ },
+ "theme": {
+ "light": "Claro",
+ "dark": "Oscuro",
+ "system": "Automático"
+ },
+ "general": {
+ "invalid_auth_request": "La solicitud de autenticación no cumple con los requisitos de seguridad",
+ "invalid_input": "Entrada no válida. No se permiten los siguientes caracteres: barra (/), dos puntos (:), caracteres de control y nombres de sistema reservados",
+ "error400": "La solicitud recibida no es válida",
+ "error403": "No tienes los permisos requeridos",
+ "error404": "El recurso solicitado no existe",
+ "error416": "El fragmento de archivo solicitado no pudo ser devuelto",
+ "error429": "Límite de tasa excedido",
+ "error500": "El servidor no puede cumplir con tu solicitud",
+ "errorPDF": "Este archivo no parece un PDF",
+ "error_edit_dir": "No se puede editar un directorio",
+ "error_edit_size": "El tamaño del archivo excede el tamaño máximo permitido",
+ "invalid_form": "Formulario inválido",
+ "invalid_credentials": "Credenciales inválidas, por favor reintenta",
+ "invalid_csrf": "El token del formulario no es válido",
+ "invalid_token": "Permisos inválidos",
+ "confirm_logout": "¿Estás seguro de que quieres cerrar sesión?",
+ "wait": "Por favor espera...",
+ "ok": "OK",
+ "failed": "Fallido",
+ "cancel": "No, volver",
+ "submit": "Guardar",
+ "back": "Atrás",
+ "add": "Añadir",
+ "enable": "Habilitar",
+ "disable": "Deshabilitar",
+ "disable_confirm_btn": "Sí, deshabilitar",
+ "close": "Cerrar",
+ "search": "Buscar",
+ "configuration": "Configuración",
+ "config_saved": "Configuración guardada",
+ "rename": "Renombrar",
+ "confirm": "Sí, proceder",
+ "edit": "Editar",
+ "delete": "Eliminar",
+ "delete_confirm_btn": "Sí, eliminar",
+ "delete_confirm": "¿Quieres eliminar \"{{- name}}\"? Esta acción es irreversible",
+ "delete_confirm_generic": "¿Quieres eliminar el elemento seleccionado? Esta acción es irreversible",
+ "delete_multi_confirm": "¿Quieres eliminar los elementos seleccionados? Esta acción es irreversible",
+ "delete_error_generic": "No se puede eliminar el elemento seleccionado",
+ "delete_error_403": "$t(general.delete_error_generic). $t(general.error403)",
+ "delete_error_404": "$t(general.delete_error_generic). $t(general.error404)",
+ "loading": "Cargando...",
+ "name": "Nombre",
+ "size": "Tamaño",
+ "last_modified": "Última modificación",
+ "info": "Info",
+ "datetime": "{{- val, datetime}}",
+ "selected_items_one": "{{count}} elemento seleccionado",
+ "selected_items_other": "{{count}} elementos seleccionados",
+ "selected_with_placeholder": "%d elementos seleccionados",
+ "name_required": "El nombre es obligatorio",
+ "name_different": "El nuevo nombre debe ser diferente del nombre actual",
+ "html5_media_not_supported": "Tu navegador no soporta audio/video HTML5.",
+ "choose_target_folder": "Elegir carpeta de destino",
+ "source_name": "Nombre de origen",
+ "target_folder": "Carpeta de destino",
+ "dest_name": "Nombre de destino",
+ "my_profile": "Mi perfil",
+ "description": "Descripción",
+ "email": "Correo electrónico",
+ "api_key_auth": "Autenticación por clave API",
+ "api_key_auth_help": "Permitir hacerse pasar por uno mismo, en la API REST, usando una clave API",
+ "pub_keys": "Claves públicas",
+ "pub_key_placeholder": "Pega una clave pública aquí",
+ "pub_keys_help": "Las claves públicas pueden ser usadas para la autenticación SFTP",
+ "verify": "Verificar",
+ "problems": "¿Tienes problemas?",
+ "allowed_ip_mask": "IP/Máscara permitida",
+ "denied_ip_mask": "IP/Máscara denegada",
+ "ip_mask_help": "IP/Máscara separadas por comas en formato CIDR, por ejemplo \"192.168.1.0/24,10.8.0.100/32\"",
+ "allowed_ip_mask_invalid": "IP/Máscara permitida inválida",
+ "username_required": "El nombre de usuario es obligatorio",
+ "password_required": "La contraseña es obligatoria",
+ "foldername_required": "El nombre de la carpeta es obligatorio",
+ "err_user": "No se puede validar tu usuario",
+ "err_protocol_forbidden": "El protocolo HTTP no está permitido para tu usuario",
+ "pwd_login_forbidden": "El método de inicio de sesión con contraseña no está permitido para tu usuario",
+ "ip_forbidden": "Inicio de sesión no permitido desde esta dirección IP",
+ "email_invalid": "La dirección de correo electrónico no es válida",
+ "err_password_complexity": "La contraseña proporcionada no cumple con los requisitos de complejidad",
+ "no_oidc_feature": "Esta característica no está disponible si has iniciado sesión con OpenID",
+ "connection_forbidden": "No tienes permiso para conectarte",
+ "no_permissions": "No tienes permiso para cambiar nada",
+ "path_invalid": "Ruta inválida",
+ "err_quota_read": "Lectura denegada debido al límite de cuota",
+ "profile_updated": "Tu perfil ha sido actualizado exitosamente",
+ "share_ok": "Acceso compartido exitoso, ahora puedes usar tu enlace",
+ "qr_code": "Código QR",
+ "copy_link": "Copiar enlace",
+ "copied": "Copiado",
+ "active": "Activo",
+ "inactive": "Inactivo",
+ "colvis": "Visibilidad de columnas",
+ "actions": "Acciones",
+ "template": "Usar como plantilla",
+ "quota_scan": "Escaneo de cuota",
+ "quota_scan_started": "Escaneo de cuota iniciado. Puede tardar un tiempo dependiendo del número de archivos a comprobar",
+ "quota_scan_conflit": "Otro escaneo ya está en progreso",
+ "quota_scan_error": "No se puede iniciar el escaneo de cuota",
+ "role": "Rol",
+ "role_placeholder": "Seleccionar un rol",
+ "group_placeholder": "Seleccionar un grupo",
+ "folder_placeholder": "Seleccionar una carpeta",
+ "blank_default_help": "Dejar en blanco para el valor predeterminado",
+ "skip_tls_verify": "Omitir verificación TLS. Esto solo debe usarse para pruebas",
+ "advanced_settings": "Configuraciones avanzadas",
+ "default": "Predeterminado",
+ "private_key": "Clave privada",
+ "acls": "ACLs",
+ "quota_limits": "Cuota de disco y límites de ancho de banda",
+ "expiration": "Expiración",
+ "expiration_help": "Elige una fecha de expiración",
+ "additional_info": "Información adicional",
+ "permissions": "Permisos",
+ "visible": "Visible",
+ "hidden": "Oculto",
+ "allowed": "Permitido",
+ "denied": "Denegado",
+ "zero_no_limit_help": "0 significa sin límite",
+ "global_settings": "Configuraciones globales",
+ "mandatory_encryption": "Cifrado obligatorio",
+ "name_invalid": "El nombre especificado no es válido, se permiten los siguientes caracteres: a-zA-Z0-9-_.~",
+ "associations": "Asociaciones",
+ "template_placeholders": "Se admiten los siguientes marcadores de posición",
+ "duplicated_username": "El nombre de usuario especificado ya existe",
+ "duplicated_name": "El nombre especificado ya existe",
+ "permissions_required": "Se requieren permisos",
+ "configs_saved": "Las configuraciones han sido actualizadas exitosamente",
+ "protocol": "Protocolo",
+ "refresh": "Actualizar",
+ "members": "Miembros",
+ "members_summary": "Usuarios: {{users}}. Administradores: {{admins}}",
+ "status": "Estado",
+ "last_login": "Último inicio de sesión",
+ "previous": "Anterior",
+ "next": "Siguiente",
+ "type": "Tipo",
+ "issuer": "Emisor",
+ "data_provider": "Base de datos",
+ "driver": "Controlador",
+ "mode": "Modo",
+ "port": "Puerto",
+ "domain": "Dominio",
+ "test": "Prueba",
+ "get": "Obtener",
+ "export": "Exportar",
+ "value": "Valor",
+ "method": "Método",
+ "timeout": "Tiempo de espera",
+ "env_vars": "Variables de entorno",
+ "hours": "Horas",
+ "paths": "Rutas",
+ "hour": "Hora",
+ "day_of_week": "Día de la semana",
+ "day_of_month": "Día del mes",
+ "month": "Mes",
+ "options": "Opciones",
+ "expired": "Expirado",
+ "unsupported": "Característica ya no soportada",
+ "start": "Inicio (HH:MM)",
+ "end": "Fin (HH:MM)",
+ "monday": "Lunes",
+ "tuesday": "Martes",
+ "wednesday": "Miércoles",
+ "thursday": "Jueves",
+ "friday": "Viernes",
+ "saturday": "Sábado",
+ "sunday": "Domingo",
+ "expired_session": "Tu sesión ha expirado. Por favor, inicia sesión de nuevo"
+ },
+ "fs": {
+ "view_file": "Ver archivo \"{{- path}}\"",
+ "edit_file": "Editar archivo \"{{- path}}\"",
+ "new_folder": "Nueva carpeta",
+ "select_across_pages": "Seleccionar a través de páginas",
+ "download": "Descargar",
+ "download_ready": "Tu descarga está lista",
+ "upload_queue_not_ready": "La cola de subida aún se está cargando, por favor intenta de nuevo en unos momentos",
+ "upload_no_files": "No se han seleccionado archivos. Por favor elige o arrastra archivos para subir",
+ "move_copy": "Mover o copiar",
+ "share": "Compartir",
+ "home": "Inicio",
+ "create_folder_msg": "Nombre de la carpeta",
+ "no_more_subfolders": "No hay más subcarpetas aquí",
+ "no_files_folders": "Sin archivos o carpetas",
+ "invalid_name": "Los nombres de archivo o carpeta no pueden contener \"/\"",
+ "folder_name_required": "El nombre de la carpeta es obligatorio",
+ "deleting": "Eliminar {{idx}}/{{total}}",
+ "copying": "Copiar {{idx}}/{{total}}",
+ "moving": "Mover {{idx}}/{{total}}",
+ "uploading": "Subir {{idx}}/{{total}}",
+ "err_403": "Permiso denegado",
+ "err_429": "Demasiadas solicitudes simultáneas",
+ "err_generic": "No se puede acceder al recurso solicitado",
+ "err_validation": "Configuración del sistema de archivos inválida",
+ "err_exists": "El destino ya existe",
+ "dir_list": {
+ "err_generic": "Error al obtener el listado del directorio",
+ "err_403": "$t(fs.dir_list.err_generic). $t(fs.err_403)",
+ "err_429": "$t(fs.dir_list.err_generic). $t(fs.err_429)",
+ "err_user": "$t(fs.dir_list.err_generic). $t(general.err_user)"
+ },
+ "create_dir": {
+ "err_generic": "Error creando nueva carpeta",
+ "err_403": "$t(fs.create_dir.err_generic). $t(fs.err_403)",
+ "err_429": "$t(fs.create_dir.err_generic). $t(fs.err_429)"
+ },
+ "save": {
+ "err_generic": "Error guardando archivo",
+ "err_403": "$t(fs.create_dir.err_generic). $t(fs.err_403)",
+ "err_429": "$t(fs.create_dir.err_generic). $t(fs.err_429)"
+ },
+ "delete": {
+ "err_generic": "No se puede eliminar \"{{- name}}\"",
+ "err_403": "$t(fs.delete.err_generic). $t(fs.err_403)",
+ "err_429": "$t(fs.delete.err_generic). $t(fs.err_429)"
+ },
+ "delete_multi": {
+ "err_generic_partial": "No todos los elementos seleccionados han sido eliminados, por favor recarga la página",
+ "err_generic": "No se pueden eliminar los elementos seleccionados",
+ "err_403_partial": "$t(fs.delete_multi.err_generic_partial). $t(fs.err_403)",
+ "err_429_partial": "$t(fs.delete_multi.err_generic_partial). $t(fs.err_429)",
+ "err_403": "$t(fs.delete_multi.err_generic). $t(fs.err_403)",
+ "err_429": "$t(fs.delete_multi.err_generic). $t(fs.err_429)"
+ },
+ "copy": {
+ "msg": "Copiar",
+ "err_generic": "Error copiando archivos/directorios",
+ "err_403": "$t(fs.copy.err_generic). $t(fs.err_403)",
+ "err_429": "$t(fs.copy.err_generic). $t(fs.err_429)",
+ "err_exists": "$t(fs.copy.err_generic). $t(fs.err_exists)"
+ },
+ "move": {
+ "msg": "Mover",
+ "err_generic": "Error moviendo archivos/directorios",
+ "err_403": "$t(fs.move.err_generic). $t(fs.err_403)",
+ "err_429": "$t(fs.move.err_generic). $t(fs.err_429)",
+ "err_exists": "$t(fs.move.err_generic). $t(fs.err_exists)",
+ "err_unsupported": "No soportado: si quieres mover un directorio asegúrate de que esté vacío"
+ },
+ "rename": {
+ "title": "Renombrar \"{{- name}}\"",
+ "new_name": "Nuevo nombre",
+ "err_generic": "No se puede renombrar \"{{- name}}\"",
+ "err_403": "$t(fs.rename.err_generic). $t(fs.err_403)",
+ "err_429": "$t(fs.rename.err_generic). $t(fs.err_429)",
+ "err_exists": "$t(fs.rename.err_generic). $t(fs.err_exists)",
+ "err_unsupported": "No soportado: si quieres renombrar un directorio asegúrate de que esté vacío"
+ },
+ "upload": {
+ "text": "Subir archivos",
+ "success": "Archivos subidos exitosamente",
+ "message": "Suelta archivos aquí o haz clic para subir.",
+ "message_empty": "Este directorio está vacío. $t(fs.upload.message)",
+ "err_generic": "Error subiendo archivos",
+ "err_403": "$t(fs.upload.err_generic). $t(fs.err_403)",
+ "err_429": "$t(fs.upload.err_generic). $t(fs.err_429)",
+ "err_dir_overwrite": "$t(fs.upload.err_generic). Hay directorios con el mismo nombre que los archivos: {{- val}}",
+ "overwrite_text": "Conflicto detectado. ¿Quieres sobrescribir los siguientes archivos/directorios?"
+ },
+ "quota_usage": {
+ "title": "Uso de cuota",
+ "disk": "Cuota de disco",
+ "size": "Tamaño: {{- val}}",
+ "size_percentage": "Tamaño: {{- val}} ({{percentage}}%)",
+ "files": "Archivos: {{- val}}",
+ "files_percentage": "Archivos: {{- val}} ({{percentage}}%)",
+ "transfer": "Cuota de transferencia",
+ "total": "Total: {{- val}}",
+ "total_percentage": "Total: {{- val}} ({{percentage}}%)",
+ "uploads": "Subidas: {{- val}}",
+ "uploads_percentage": "Subidas: {{- val}} ({{percentage}}%)",
+ "downloads": "Descargas: {{- val}}",
+ "downloads_percentage": "Descargas: {{- val}} ({{percentage}}%)"
+ }
+ },
+ "datatable": {
+ "info": "Mostrando _START_ a _END_ de _TOTAL_ registros",
+ "info_empty": "Mostrando ningún registro",
+ "info_filtered": "(filtrado de _MAX_ registros totales)",
+ "processing": "Procesando...",
+ "no_records": "No se encontraron registros"
+ },
+ "editor": {
+ "keybinding": "Atajos de teclado del editor",
+ "search": "Abrir panel de búsqueda",
+ "goto": "Ir a la línea",
+ "indent_more": "Aumentar sangría",
+ "indent_less": "Disminuir sangría"
+ },
+ "2fa": {
+ "title": "Autenticación de dos factores usando aplicaciones de autenticación",
+ "msg_enabled": "La autenticación de dos factores está habilitada",
+ "msg_disabled": "Asegura tu cuenta",
+ "msg_info": "La autenticación de dos factores añade una capa extra de seguridad a tu cuenta. Para iniciar sesión necesitarás proporcionar un código de autenticación adicional.",
+ "require": "La autenticación de dos factores es requerida para esta cuenta",
+ "require_for": "Requerir 2FA para",
+ "generate": "Generar nueva clave secreta",
+ "recovery_codes": "Códigos de recuperación",
+ "new_recovery_codes": "Nuevos códigos de recuperación",
+ "recovery_codes_msg1": "Los códigos de recuperación son códigos de respaldo de un solo uso para iniciar sesión cuando no puedes acceder a tu aplicación de autenticación. Úsalos para acceder a tu cuenta y gestionar la configuración de autenticación de dos factores si pierdes tu teléfono.",
+ "recovery_codes_msg2": "Para mantener segura tu cuenta, no compartas ni distribuyas tus códigos de recuperación. Recomendamos guardarlos con un gestor de contraseñas seguro.",
+ "recovery_codes_msg3": "Si generas nuevos códigos de recuperación, invalidas automáticamente los antiguos.",
+ "info_title": "Aprende sobre la autenticación de dos factores",
+ "info1": "El protocolo SSH (comandos SFTP/SCP/SSH) pedirá el código de acceso si el cliente utiliza autenticación interactiva por teclado.",
+ "info2": "El protocolo HTTP significa interfaz web y API REST. La interfaz web pedirá el código de acceso usando una página específica. Para la API REST tienes que añadir el código de acceso usando un encabezado HTTP.",
+ "info3": "FTP no tiene una forma estándar de soportar la autenticación de dos factores, si habilitas el soporte FTP, tienes que añadir el código TOTP después de la contraseña. Por ejemplo, si tu contraseña es \"password\" y tu código de acceso de una sola vez es \"123456\", tienes que usar \"password123456\" como contraseña.",
+ "info4": "WebDAV no está soportado ya que cada solicitud individual debe ser autenticada y un código de acceso no puede ser reutilizado.",
+ "setup_title": "Configurar la autenticación de dos factores",
+ "setup_msg": "Usa tu aplicación de autenticación preferida (ej. Microsoft Authenticator, Google Authenticator, Authy, 1Password, etc.) para escanear el código QR. Generará un código de autenticación para que lo introduzcas a continuación.",
+ "setup_help": "Si tienes problemas usando el código QR, selecciona entrada manual en tu aplicación e introduce el código:",
+ "disable_msg": "Deshabilitar 2FA",
+ "disable_confirm": "¿Quieres deshabilitar la autenticación de dos factores para el usuario seleccionado? Esta acción generalmente solo se requiere si el usuario ha perdido el acceso al segundo factor de autenticación",
+ "disable_question": "¿Quieres deshabilitar la autenticación de dos factores?",
+ "generate_question": "¿Quieres generar una nueva clave secreta e invalidar la anterior? Cualquier aplicación de autenticación registrada dejará de funcionar",
+ "disabled": "La autenticación de dos factores está deshabilitada",
+ "recovery_codes_gen_err": "Error al generar nuevos códigos de recuperación",
+ "recovery_codes_get_err": "No se pueden obtener los códigos de recuperación",
+ "auth_code_invalid": "Error al validar el código de autenticación proporcionado",
+ "auth_secret_gen_err": "Error al generar el secreto de autenticación",
+ "save_err": "Error al guardar la configuración de autenticación de dos factores",
+ "auth_code_required": "El código de autenticación es obligatorio",
+ "no_protocol": "Por favor selecciona al menos un protocolo",
+ "required_protocols": "La política de seguridad configurada para tu cuenta requiere autenticación de dos factores para los siguientes protocolos: {{val}}",
+ "recovery_codes_generate": "Generar nuevos códigos de recuperación",
+ "recovery_codes_view": "Ver códigos de recuperación"
+ },
+ "share": {
+ "scope": "Alcance",
+ "scope_read": "Lectura",
+ "scope_write": "Escritura",
+ "scope_read_write": "Lectura/Escritura",
+ "scope_help": "Para el alcance \"Escritura\" y \"Lectura/Escritura\" tienes que definir una sola ruta y debe ser un directorio",
+ "path_help": "ruta de archivo o directorio, ej. /dir o /dir/file.txt",
+ "password_help": "Si se establece, el recurso compartido estará protegido por contraseña",
+ "max_tokens": "Tokens máximos",
+ "max_tokens_help": "Número máximo de veces que se puede acceder a este recurso compartido. 0 significa sin límite",
+ "view_manage": "Ver y gestionar recursos compartidos",
+ "no_share": "Sin recursos compartidos",
+ "password_protected": "Protegido por contraseña.",
+ "expiration_date": "Expiración: {{- val, datetime}}. ",
+ "last_use": "Último uso: {{- val, datetime}}. ",
+ "usage": "Uso: {{used}}/{{total}}. ",
+ "used_tokens": "Token usado: {{used}}. ",
+ "scope_invalid": "Alcance inválido",
+ "max_tokens_invalid": "Tokens máximos inválidos",
+ "expiration_invalid": "Expiración inválida",
+ "err_no_password": "No tienes permiso para compartir archivos/carpetas sin contraseña",
+ "expiration_out_of_range": "Establece una fecha de expiración y asegúrate de que sea menor o igual a {{- val, datetime}}",
+ "generic": "Error inesperado guardando recurso compartido",
+ "path_required": "Se requiere al menos una ruta",
+ "path_write_scope": "El alcance de escritura requiere exactamente una ruta",
+ "nested_paths": "Las rutas no pueden estar anidadas",
+ "expiration_past": "La fecha de expiración debe ser en el futuro",
+ "usage_exceed": "Uso máximo de compartición excedido",
+ "expired": "La compartición ha expirado",
+ "browsable_multiple_paths": "Un recurso compartido con múltiples rutas no es navegable",
+ "browsable_non_dir": "El recurso compartido no es un directorio por lo que no es navegable",
+ "go": "Ir al recurso compartido",
+ "access_links_title": "Enlaces de acceso compartido",
+ "link_single_title": "Archivo zip único",
+ "link_single_desc": "Puedes descargar el contenido compartido como un solo archivo zip",
+ "link_dir_title": "Directorio único",
+ "link_dir_desc": "Si el recurso compartido consiste en un solo directorio, puedes navegar y descargar archivos",
+ "link_uncompressed_title": "Archivo sin comprimir",
+ "link_uncompressed_desc": "Si el recurso compartido consiste en un solo archivo, también se puede descargar sin comprimir",
+ "upload_desc": "Puedes subir uno o más archivos al directorio compartido",
+ "expired_desc": "Este recurso compartido ya no es accesible porque ha expirado",
+ "invalid_path": "El directorio compartido falta o no es accesible"
+ },
+ "select2": {
+ "no_results": "No se encontraron resultados",
+ "searching": "Buscando...",
+ "removeall": "Eliminar todos los elementos",
+ "remove": "Eliminar elemento"
+ },
+ "change_pwd": {
+ "info": "Introduce tu contraseña actual, por razones de seguridad, y luego tu nueva contraseña dos veces, para verificar que la has escrito correctamente. Se cerrará la sesión después de cambiar tu contraseña",
+ "current": "Contraseña actual",
+ "new": "Nueva contraseña",
+ "confirm": "Confirmar contraseña",
+ "save": "Cambiar mi contraseña",
+ "required_fields": "Por favor proporciona la contraseña actual y la nueva dos veces",
+ "no_match": "Los dos campos de contraseña no coinciden",
+ "no_different": "La nueva contraseña debe ser diferente de la actual",
+ "current_no_match": "La contraseña actual no coincide",
+ "generic": "Error inesperado al cambiar la contraseña",
+ "required": "Se requiere cambio de contraseña. Establece una nueva contraseña para continuar usando tu cuenta"
+ },
+ "user": {
+ "view_manage": "Ver y gestionar usuarios",
+ "username_reserved": "El nombre de usuario especificado está reservado",
+ "username_invalid": "El nombre especificado no es válido, se permiten los siguientes caracteres: a-z A-Z 0-9 - _ . ~",
+ "home_required": "El directorio de inicio es obligatorio",
+ "home_invalid": "El directorio de inicio debe ser una ruta absoluta",
+ "pub_key_invalid": "Clave pública inválida",
+ "priv_key_invalid": "Clave privada inválida",
+ "key_invalid_size": "Clave pública RSA inválida: el tamaño mínimo soportado es 2048",
+ "key_insecure": "Formato de clave pública inseguro no permitido",
+ "err_primary_group": "Solo se permite un grupo primario",
+ "err_duplicate_group": "Grupos duplicados detectados",
+ "no_permissions": "Los permisos de directorios son obligatorios",
+ "no_root_permissions": "Se requieren permisos del directorio de inicio",
+ "err_permissions_generic": "Permisos inválidos: Asegúrate de usar rutas absolutas válidas",
+ "2fa_invalid": "Configuración inválida para autenticación de dos factores",
+ "recovery_codes_invalid": "Códigos de recuperación inválidos",
+ "folder_path_required": "La ruta de montaje de la carpeta virtual es obligatoria",
+ "folder_duplicated": "Carpetas virtuales duplicadas detectadas",
+ "folder_overlapped": "Carpetas virtuales superpuestas detectadas",
+ "folder_quota_size_invalid": "La cuota como tamaño de carpetas virtuales debe ser mayor o igual a -1",
+ "folder_quota_file_invalid": "La cuota como archivos de carpetas virtuales debe ser mayor o igual a -1",
+ "folder_quota_invalid": "Las cuotas como tamaño y como número de archivos de carpetas virtuales deben ser ambas -1 o mayor o igual a 0",
+ "ip_filters_invalid": "Filtros IP inválidos, asegúrate de que respetan la notación CIDR, por ejemplo 192.168.1.0/24",
+ "src_bw_limits_invalid": "Límites de velocidad de ancho de banda por fuente inválidos",
+ "share_expiration_invalid": "La expiración para recursos compartidos debe ser mayor o igual al valor predeterminado definido",
+ "file_pattern_path_invalid": "Las rutas de filtro de patrón de nombre de archivo deben ser absolutas",
+ "file_pattern_duplicated": "Filtros de patrón de nombre de archivo duplicados detectados",
+ "file_pattern_invalid": "Filtros de patrón de nombre de archivo inválidos",
+ "disable_active_2fa": "La autenticación de dos factores no se puede deshabilitar para un usuario con una configuración activa",
+ "pwd_change_conflict": "No es posible solicitar un cambio de contraseña y al mismo tiempo evitar que se cambie la contraseña",
+ "two_factor_conflict": "No puedes requerir autenticación de dos factores y al mismo tiempo evitar que se configure",
+ "role_help": "Los usuarios con un rol pueden ser gestionados por administradores globales y administradores con el mismo rol",
+ "require_pwd_change": "Requerir cambio de contraseña",
+ "require_pwd_change_help": "El usuario necesitará cambiar la contraseña desde el WebClient para activar la cuenta",
+ "groups_help": "La pertenencia a grupos imparte las configuraciones de los grupos con la excepción de los grupos de solo pertenencia",
+ "primary_group": "Grupo primario",
+ "secondary_groups": "Grupos secundarios",
+ "membership_groups": "Grupos de pertenencia",
+ "template_help": "Para cada usuario establece el nombre de usuario y al menos uno de entre la contraseña y la clave pública",
+ "virtual_folders_help": "Cuota tamaño/archivos -1 significa incluido dentro de la cuota de usuario, 0 ilimitado. No establecer -1 para carpetas compartidas. Puedes usar sufijo MB/GB/TB. Sin sufijo asumimos bytes",
+ "disconnect": "Desconectar al usuario después de la actualización",
+ "disconnect_help": "De esta manera fuerzas al usuario a iniciar sesión de nuevo, si está conectado, y así usar la nueva configuración",
+ "invalid_quota_size": "Tamaño de cuota inválido",
+ "expires_in": "Expira en",
+ "expires_in_help": "Expiración de la cuenta como número de días desde la creación. 0 significa sin expiración",
+ "additional_emails": "Correos electrónicos adicionales",
+ "tls_certs": "Certificados TLS",
+ "tls_certs_help": "Los certificados TLS pueden ser usados para autenticación FTP y/o WebDAV",
+ "tls_cert_help": "Pega un certificado TLS codificado en PEM aquí",
+ "tls_cert_invalid": "Certificado TLS inválido",
+ "template_title": "Crear uno o más usuarios nuevos desde esta plantilla",
+ "template_username_placeholder": "reemplazado con el nombre de usuario especificado",
+ "template_password_placeholder": "reemplazado con la contraseña especificada",
+ "template_help1": "Los marcadores de posición serán reemplazados en rutas y credenciales del backend de almacenamiento configurado.",
+ "template_help2": "Los usuarios generados pueden ser guardados o exportados. Los usuarios exportados pueden ser importados desde la sección \"Mantenimiento\" de esta instancia de SFTPGo u otra.",
+ "template_no_user": "Ningún usuario válido definido, no se puede completar la acción solicitada",
+ "time_of_day_invalid": "Hora del día inválida. Formato soportado HH:MM",
+ "time_of_day_conflict": "Hora del día inválida. La hora de fin no puede ser anterior a la hora de inicio"
+ },
+ "group": {
+ "view_manage": "Ver y gestionar grupos",
+ "err_delete_referenced": "No se puede eliminar un grupo con usuarios asociados, elimina las asociaciones primero",
+ "help": "El marcador de posición %username% será reemplazado con el nombre de usuario del usuario asociado, %role% con su rol"
+ },
+ "virtual_folders": {
+ "view_manage": "Ver y gestionar carpetas virtuales",
+ "mount_path": "ruta de montaje, ej. /vfolder",
+ "quota_size": "Cuota de tamaño",
+ "quota_size_help": "0 significa sin límite. Puedes usar sufijo MB/GB/TB",
+ "quota_files": "Cuota de archivos",
+ "associations_summary": "Usuarios: {{users}}. Grupos: {{groups}}",
+ "template_title": "Crear una o más nuevas carpetas virtuales desde esta plantilla",
+ "template_name_placeholder": "reemplazado con el nombre de la carpeta virtual especificada",
+ "template_help": "Las carpetas virtuales generadas pueden ser guardadas o exportadas. Las carpetas exportadas pueden ser importadas desde la sección \"Mantenimiento\" de esta instancia de SFTPGo u otra.",
+ "name": "Nombre de carpeta virtual",
+ "template_no_folder": "Ninguna carpeta virtual válida definida, no se puede completar la acción solicitada"
+ },
+ "storage": {
+ "title": "Sistema de archivos",
+ "label": "Almacenamiento",
+ "local": "Disco local",
+ "s3": "S3 (Compatible)",
+ "gcs": "GCS",
+ "azblob": "Azure Blob",
+ "encrypted": "Disco local cifrado",
+ "sftp": "SFTP",
+ "http": "HTTP",
+ "home_dir": "Directorio raíz",
+ "home_dir_placeholder": "Ruta absoluta a un directorio en disco local",
+ "home_dir_help1": "Dejar en blanco para un valor predeterminado apropiado",
+ "home_dir_help2": "Dejar en blanco y almacenamiento en \"Disco local\" para no anular el directorio raíz",
+ "home_dir_help3": "Requerido para proveedores de almacenamiento en disco local. Para otros proveedores de almacenamiento esta carpeta será usada para archivos temporales, puedes dejarla en blanco para un valor predeterminado apropiado",
+ "home_dir_invalid": "Directorio raíz inválido, asegúrate de que es una ruta absoluta",
+ "sftp_home_dir": "Directorio raíz SFTP",
+ "sftp_home_help": "Restringir acceso a esta ruta SFTP. Ejemplo: \"/somedir/subdir\"",
+ "os_read_buffer": "Búfer de descarga (MB)",
+ "os_buffer_help": "0 significa sin búfer",
+ "os_write_buffer": "Búfer de subida (MB)",
+ "bucket": "Cubo",
+ "region": "Región",
+ "access_key": "Clave de acceso",
+ "access_secret": "Secreto de acceso",
+ "sse_customer_key": "Clave de cifrado del lado del servidor",
+ "sse_customer_key_help": "Puedes almacenar tus datos cifrados con esta clave, pero si pierdes o cambias esta clave, perderás todos los archivos cifrados con ella. Los archivos que no estén cifrados o cifrados con una clave diferente no serán accesibles",
+ "endpoint": "Punto final",
+ "endpoint_help": "Para AWS S3, dejar en blanco para usar el punto final predeterminado para la región especificada",
+ "sftp_endpoint_help": "Punto final como host:puerto. El puerto siempre es requerido",
+ "ul_part_size": "Tamaño de parte de subida (MB)",
+ "part_size_help": "0 significa el predeterminado (5 MB). El mínimo es 5",
+ "gcs_part_size_help": "0 significa el predeterminado (16 MB)",
+ "ul_concurrency": "Concurrencia de subida",
+ "ul_concurrency_help": "Cuántas partes se suben en paralelo. 0 significa el predeterminado (5)",
+ "dl_part_size": "Tamaño de parte de descarga (MB)",
+ "dl_concurrency": "Concurrencia de descarga",
+ "dl_concurrency_help": "Cuántas partes se descargan en paralelo. 0 significa el predeterminado (5)",
+ "ul_part_timeout": "Tiempo de espera de parte de subida",
+ "ul_part_timeout_help": "Límite de tiempo máximo, en segundos, para subir una sola parte. 0 significa sin límite",
+ "gcs_ul_part_timeout_help": "Límite de tiempo máximo, en segundos, para subir una sola parte. 0 significa el predeterminado (32)",
+ "dl_part_timeout": "Tiempo de espera de parte de descarga",
+ "dl_part_timeout_help": "Límite de tiempo máximo, en segundos, para descargar una sola parte. 0 significa sin límite",
+ "key_prefix": "Prefijo de clave",
+ "key_prefix_help": "Restringir acceso a claves con el prefijo especificado. Ejemplo: \"somedir/subdir/\"",
+ "class": "Clase de almacenamiento",
+ "acl": "ACL",
+ "role_arn": "ARN de Rol",
+ "role_arn_help": "ARN de Rol IAM opcional para asumir",
+ "s3_path_style": "Usar direccionamiento estilo ruta, ej. \"endpoint/BUCKET/KEY\"",
+ "credentials_file": "Archivo de credenciales",
+ "credentials_file_help": "Añadir o actualizar credenciales desde un archivo JSON",
+ "auto_credentials": "Credenciales automáticas",
+ "auto_credentials_help": "Usar credenciales de aplicación predeterminadas o credenciales de variables de entorno",
+ "container": "Contenedor",
+ "account_name": "Nombre de cuenta",
+ "account_key": "Clave de cuenta",
+ "sas_url": "URL SAS",
+ "sas_url_help": "La URL de Firma de Acceso Compartido se puede usar en lugar del nombre/clave de cuenta",
+ "emulator": "Usar emulador",
+ "passphrase": "Frase de contraseña",
+ "passphrase_help": "Frase de contraseña usada para derivar la clave de cifrado por objeto",
+ "passphrase_key_help": "Frase de contraseña usada para proteger tu clave privada, si la hay",
+ "fingerprints": "Huellas dactilares",
+ "fingerprints_help": "Huellas dactilares SHA256 para validar al conectarse al servidor SFTP externo, una por línea. Si está vacío, se aceptará cualquier clave de host: ¡esto es un riesgo de seguridad!",
+ "sftp_buffer": "Tamaño del búfer (MB)",
+ "sftp_buffer_help": "Un tamaño de búfer mayor que 0 habilita transferencias concurrentes",
+ "sftp_concurrent_reads": "Deshabilitar lecturas concurrentes",
+ "relaxed_equality_check": "Verificación de igualdad relajada",
+ "relaxed_equality_check_help": "Habilitar para considerar solo el punto final para determinar si diferentes configuraciones apuntan al mismo servidor. Por defecto, tanto el punto final como el nombre de usuario deben coincidir",
+ "api_key": "Clave API",
+ "fs_error": "Error de configuración del sistema de archivos",
+ "bucket_required": "$t(storage.fs_error): se requiere bucket",
+ "region_required": "$t(storage.fs_error): se requiere región",
+ "key_prefix_invalid": "$t(storage.fs_error): prefijo de clave inválido, no puede empezar con \"/\"",
+ "ul_part_size_invalid": "$t(storage.fs_error): tamaño de parte de subida inválido",
+ "ul_concurrency_invalid": "$t(storage.fs_error): concurrencia de subida inválida",
+ "dl_part_size_invalid": "$t(storage.fs_error): tamaño de parte de descarga inválido",
+ "dl_concurrency_invalid": "$t(storage.fs_error): concurrencia de descarga inválida",
+ "access_key_required": "$t(storage.fs_error): se requiere Clave de acceso",
+ "access_secret_required": "$t(storage.fs_error): se requiere Secreto de acceso",
+ "credentials_required": "$t(storage.fs_error): se requieren credenciales",
+ "container_required": "$t(storage.fs_error): se requiere contenedor",
+ "account_name_required": "$t(storage.fs_error): se requiere nombre de cuenta",
+ "sas_url_invalid": "$t(storage.fs_error): URL SAS inválida",
+ "passphrase_required": "$t(storage.fs_error): se requiere frase de contraseña",
+ "endpoint_invalid": "$t(storage.fs_error): el punto final es inválido",
+ "endpoint_required": "$t(storage.fs_error): se requiere punto final",
+ "username_required": "$t(storage.fs_error): se requiere nombre de usuario"
+ },
+ "oidc": {
+ "token_expired": "Tu token OpenID ha expirado, por favor inicia sesión de nuevo",
+ "token_invalid_webadmin": "Tu token OpenID no es válido para la interfaz WebAdmin. Cierra sesión en tu servidor OpenID e inicia sesión en WebAdmin",
+ "token_invalid_webclient": "Tu token OpenID no es válido para la interfaz WebClient. Cierra sesión en tu servidor OpenID e inicia sesión en WebClient",
+ "token_exchange_err": "Error al intercambiar token OpenID",
+ "token_invalid": "Token OpenID inválido",
+ "role_admin_err": "Rol OpenID incorrecto, el usuario conectado no es un administrador",
+ "role_user_err": "Rol OpenID incorrecto, el usuario conectado es un administrador",
+ "get_user_err": "Error al obtener el usuario asociado con el token OpenID"
+ },
+ "oauth2": {
+ "auth_verify_error": "No se puede verificar el código OAuth2",
+ "auth_validation_error": "No se puede verificar el código OAuth2",
+ "auth_invalid": "Código OAuth2 inválido",
+ "token_exchange_err": "No se puede obtener el token OAuth2 del código de autorización",
+ "no_refresh_token": "El proveedor OAuth2 devolvió un token vacío. Algunos proveedores solo devuelven el token cuando el usuario autoriza por primera vez. Si ya has registrado SFTPGo con este usuario en el pasado, revoca el acceso e intenta de nuevo. De esta manera invalidarás el token anterior",
+ "success": "Copia la siguiente cadena, sin las comillas, en el campo de configuración Token OAuth2 SMTP:",
+ "client_id_required": "ID de Cliente es obligatorio",
+ "client_secret_required": "Secreto de Cliente es obligatorio",
+ "refresh_token_required": "Token de Actualización es obligatorio"
+ },
+ "filters": {
+ "password_strength": "Fortaleza de contraseña",
+ "password_strength_help": "Se sugieren valores en el rango 50-70 para casos de uso comunes. 0 significa deshabilitado, cualquier contraseña será aceptada",
+ "password_expiration": "Expiración de contraseña",
+ "password_expiration_help": "Expiración de contraseña como número de días. 0 significa sin expiración",
+ "default_shares_expiration": "Expiración predeterminada de compartidos",
+ "default_shares_expiration_help": "Expiración predeterminada para nuevos compartidos como número de días",
+ "max_shares_expiration": "Expiración máxima de compartidos",
+ "max_shares_expiration_help": "Expiración máxima permitida, como número de días, cuando un usuario crea o actualiza un compartido",
+ "directory_permissions": "Permisos por directorio",
+ "directory_permissions_help": "Se soportan comodines en rutas, por ejemplo \"/incoming/*\" coincide con cualquier directorio dentro de \"/incoming\"",
+ "directory_path_help": "ruta de directorio, ej. /dir",
+ "directory_patterns": "Restricciones de patrones de nombre por directorio",
+ "directory_patterns_help": "Archivos/directorios denegados o permitidos separados por comas, basado en patrones de shell. La coincidencia no distingue mayúsculas de minúsculas",
+ "max_sessions": "Sesiones máximas",
+ "max_sessions_help": "Número máximo de sesiones concurrentes. 0 significa sin límite",
+ "denied_protocols": "Protocolos denegados",
+ "denied_login_methods": "Métodos de inicio de sesión denegados",
+ "denied_login_methods_help": "\"password\" es válido para todos los protocolos soportados, \"password-over-SSH\" solo para SSH/SFTP/SCP",
+ "web_client_options": "Cliente web/API REST",
+ "max_upload_size": "Tamaño máximo de subida",
+ "max_upload_size_help": "Tamaño máximo de subida para un solo archivo. 0 significa sin límite. Puedes usar sufijo MB/GB/TB",
+ "max_upload_size_invalid": "Tamaño máximo de archivo de subida inválido",
+ "upload_bandwidth": "Ancho de banda UL (KB/s)",
+ "download_bandwidth": "Ancho de banda DL (KB/s)",
+ "upload_bandwidth_help": "UL (KB/s). 0 significa sin límite",
+ "download_bandwidth_help": "DL (KB/s). 0 significa sin límite",
+ "src_bandwidth_limit": "Límites de velocidad de ancho de banda por fuente",
+ "upload_data_transfer": "Transferencia de datos de subida (MB)",
+ "upload_data_transfer_help": "Transferencia de datos máxima permitida para subidas. 0 significa sin límite",
+ "download_data_transfer": "Transferencia de datos de descarga (MB)",
+ "download_data_transfer_help": "Transferencia de datos máxima permitida para descargas. 0 significa sin límite",
+ "total_data_transfer": "Transferencia de datos total (MB)",
+ "total_data_transfer_help": "Transferencia de datos máxima permitida para subidas + descargas. Reemplaza los límites individuales. 0 significa sin límite",
+ "start_directory": "Directorio inicial",
+ "start_directory_help": "Directorio inicial alternativo para usar en lugar de \"/\". Soportado para SFTP/FTP/HTTP",
+ "tls_username": "Nombre de usuario TLS",
+ "tls_username_help": "Define el campo del certificado TLS a usar como nombre de usuario. Ignorado si TLS mutuo está deshabilitado",
+ "ftp_security": "Seguridad FTP",
+ "ftp_security_help": "Ignorado si TLS ya es globalmente requerido para todos los usuarios FTP",
+ "hooks": "Ganchos (Hooks)",
+ "hook_ext_auth_disabled": "Autenticación externa deshabilitada",
+ "hook_pre_login_disabled": "Pre-inicio de sesión deshabilitado",
+ "hook_check_password_disabled": "Verificación de contraseña deshabilitada",
+ "is_anonymous": "Usuario anónimo",
+ "is_anonymous_help": "Los usuarios anónimos son soportados para protocolos FTP y WebDAV y tienen acceso de solo lectura",
+ "disable_fs_checks": "Deshabilitar comprobaciones del sistema de archivos",
+ "disable_fs_checks_help": "Deshabilitar comprobaciones de existencia y creación automática de directorio de inicio y carpetas virtuales",
+ "api_key_auth_help": "Permitir hacerse pasar por el usuario, en la API REST, con una clave API",
+ "external_auth_cache_time": "Tiempo de caché de autenticación externa",
+ "external_auth_cache_time_help": "Tiempo de caché, en segundos, para usuarios autenticados usando un gancho de autenticación externa. 0 significa sin caché",
+ "access_time": "Restricciones de tiempo de acceso",
+ "access_time_help": "Sin restricciones significa que el acceso siempre está permitido, la hora debe establecerse en el formato HH:MM"
+ },
+ "admin": {
+ "role_permissions": "Un administrador de rol no puede tener el permiso \"*\"",
+ "view_manage": "Ver y gestionar administradores",
+ "self_delete": "No puedes borrarte a ti mismo",
+ "self_permissions": "No puedes cambiar tus permisos",
+ "self_disable": "No puedes deshabilitarte a ti mismo",
+ "self_role": "No puedes añadir/cambiar tu rol",
+ "password_help": "Si se deja en blanco, la contraseña actual no se cambiará",
+ "role_help": "Establecer un rol limita al administrador a gestionar solo usuarios con el mismo rol. Los administradores con un rol no pueden ser superadministradores",
+ "users_groups": "Grupos para usuarios",
+ "users_groups_help": "Grupos seleccionados automáticamente para nuevos usuarios creados por este administrador. El administrador aún podrá elegir diferentes grupos. Estas configuraciones solo se usan para esta interfaz de administración y serán ignoradas en API REST/ganchos",
+ "group_membership": "Añadir como pertenencia",
+ "group_primary": "Añadir como primario",
+ "group_secondary": "Añadir como secundario",
+ "user_page_pref": "Preferencias de página de usuario",
+ "user_page_pref_help": "Puedes ocultar algunas secciones de la página de usuario. Estas no son configuraciones de seguridad y no se aplican del lado del servidor de ninguna manera. Solo están destinadas a simplificar la página de añadir/actualizar usuario",
+ "hide_sections": "Ocultar secciones",
+ "default_users_expiration": "Expiración predeterminada de usuarios",
+ "default_users_expiration_help": "Expiración predeterminada para nuevos usuarios como número de días",
+ "require_pwd_change_help": "Se requiere un cambio de contraseña en el próximo inicio de sesión"
+ },
+ "connections": {
+ "view_manage": "Ver y gestionar conexiones",
+ "started": "Iniciado",
+ "remote_address": "Dirección remota",
+ "last_activity": "Última actividad",
+ "disconnect_confirm_btn": "Sí, desconectar",
+ "disconnect_confirm": "¿Quieres desconectar la conexión seleccionada? Esta acción es irreversible",
+ "disconnect_ko": "No se puede desconectar la conexión seleccionada",
+ "upload": "Subida: \"{{- path}}\"",
+ "download": "Descarga: \"{{- path}}\"",
+ "upload_info": "$t(connections.upload). Tamaño: {{- size}}. Velocidad: {{- speed}}",
+ "download_info": "$t(connections.download). Tamaño: {{- size}}. Velocidad: {{- speed}}",
+ "client": "Cliente: {{- val}}"
+ },
+ "role": {
+ "view_manage": "Ver y gestionar roles",
+ "err_delete_referenced": "No se puede eliminar un rol con administradores asociados, elimina las asociaciones primero"
+ },
+ "ip_list": {
+ "view_manage": "Ver y gestionar listas de IP",
+ "defender_list": "Defensor",
+ "allow_list": "Lista permitida",
+ "ratelimiters_safe_list": "Lista segura de limitadores de tasa",
+ "ip_net": "IP/Red",
+ "protocols": "Protocolos",
+ "any": "Cualquiera",
+ "allow": "Permitir",
+ "deny": "Denegar",
+ "ip_net_help": "Dirección IP o red en formato CIDR, ejemplo: \"192.168.1.1 o 10.8.0.100/32 o 2001:db8:1234::/48\"",
+ "ip_invalid": "Dirección IP inválida",
+ "net_invalid": "Red inválida",
+ "duplicated": "La IP/red especificada ya existe",
+ "search": "IP/Red o parte inicial",
+ "defender_disabled": "Defensor deshabilitado en tu configuración",
+ "allow_list_disabled": "Lista permitida deshabilitada en tu configuración",
+ "ratelimiters_disabled": "Limitadores de tasa deshabilitados en tu configuración"
+ },
+ "defender": {
+ "view_manage": "Ver y gestionar lista de bloqueo automático",
+ "ip": "Dirección IP",
+ "ban_time": "Bloqueado hasta",
+ "score": "Puntuación"
+ },
+ "status": {
+ "desc": "Estado del servidor",
+ "ssh": "Servidor SSH/SFTP",
+ "active": "Estado: activo",
+ "disabled": "Estado: deshabilitado",
+ "error": "Estado: error",
+ "proxy_on": "Protocolo PROXY habilitado",
+ "address": "Dirección",
+ "ssh_auths": "Métodos de autenticación",
+ "ssh_commands": "Comandos aceptados",
+ "host_key": "Clave de host",
+ "fingeprint": "Huella dactilar",
+ "algorithms": "Algoritmos",
+ "algorithm": "Algoritmo",
+ "ssh_pub_key_algo": "Algoritmos de autenticación de clave pública",
+ "ssh_mac_algo": "Algoritmos de código de autenticación de mensajes (MAC)",
+ "ssh_kex_algo": "Algoritmos de intercambio de claves (KEX)",
+ "ssh_cipher_algo": "Cifrados",
+ "ftp": "Servidor FTP",
+ "ftp_passive_range": "Rango de puertos en modo pasivo",
+ "ftp_passive_ip": "IP pasiva",
+ "tls": "TLS",
+ "tls_disabled": "Deshabilitado",
+ "tls_explicit": "Modo explícito requerido (FTPES)",
+ "tls_implicit": "Modo implícito (FTPS), obsoleto, preferir FTPES",
+ "tls_mixed": "Modo plano y explícito (FTPES)",
+ "webdav": "Servidor WebDAV",
+ "rate_limiters": "Limitadores de tasa"
+ },
+ "maintenance": {
+ "backup": "Copia de seguridad",
+ "backup_do": "Haz una copia de seguridad de tus datos",
+ "backup_ok": "Copia de seguridad restaurada exitosamente",
+ "backup_invalid_file": "Archivo de copia de seguridad inválido, asegúrate de que es un archivo JSON con contenido válido",
+ "restore_error": "No se puede restaurar tu copia de seguridad, revisa los registros del servidor para más detalles",
+ "restore": "Restaurar",
+ "backup_file": "Archivo de copia de seguridad",
+ "backup_file_help": "Importar datos desde un archivo de copia de seguridad JSON",
+ "restore_mode0": "Añadir y actualizar",
+ "restore_mode1": "Solo añadir",
+ "restore_mode2": "Añadir, actualizar y desconectar",
+ "after_restore": "Después de restaurar",
+ "quota_mode0": "Sin actualización de cuota",
+ "quota_mode1": "Actualizar cuota",
+ "quota_mode2": "Actualizar cuota para usuarios con límites de cuota"
+ },
+ "acme": {
+ "title": "ACME",
+ "generic_error": "No se pueden obtener certificados TLS, revisa los registros del servidor para más detalles",
+ "help": "Desde esta sección puedes solicitar certificados TLS gratuitos para tus servicios SFTPGo usando el protocolo ACME y el tipo de desafío HTTP-01. Debes crear una entrada DNS bajo un dominio personalizado que poseas que resuelva a tu dirección IP pública de SFTPGo y el puerto 80 debe ser accesible públicamente. Puedes establecer las opciones de configuración para los casos de uso más comunes y configuraciones de un solo nodo aquí, para configuraciones avanzadas consulta la documentación de SFTPGo. Se requiere un reinicio del servicio para aplicar los cambios",
+ "domain_help": "Se pueden especificar múltiples dominios separados por comas o espacios. Se incluirán en el mismo certificado",
+ "email_help": "Correo electrónico usado para registro y contacto de recuperación",
+ "port_help": "Si es diferente de 80 tienes que configurar un proxy inverso",
+ "protocols_help": "Usar los certificados obtenidos para los protocolos especificados"
+ },
+ "smtp": {
+ "title": "SMTP",
+ "err_required_fields": "La dirección del remitente y el nombre de usuario no pueden estar ambos vacíos",
+ "help": "Establece la configuración SMTP reemplazando la definida usando variables de entorno o archivo de configuración si lo hay",
+ "host": "Nombre del servidor",
+ "host_help": "Si está en blanco, la configuración está deshabilitada",
+ "auth": "Autenticación",
+ "encryption": "Cifrado",
+ "sender": "Remitente",
+ "debug": "Registros de depuración",
+ "domain_help": "Dominio HELO. Dejar en blanco para usar el nombre de host del servidor",
+ "test_recipient": "Dirección para enviar correos de prueba",
+ "oauth2_provider": "Proveedor OAuth2",
+ "oauth2_provider_help": "URI a la que redirigir después de la autenticación del usuario",
+ "oauth2_tenant": "Inquilino OAuth2",
+ "oauth2_tenant_help": "Inquilino de Azure. Los valores típicos son \"common\", \"organizations\", \"consumers\" o el identificador del inquilino",
+ "oauth2_client_id": "ID de Cliente OAuth2",
+ "oauth2_client_secret": "Secreto de Cliente OAuth2",
+ "oauth2_token": "Token OAuth2",
+ "recipient_required": "Especifica un destinatario para enviar un correo de prueba",
+ "test_error": "No se puede enviar correo de prueba, revisa los registros del servidor para más detalles",
+ "test_ok": "No se reportaron errores al enviar el correo de prueba. Por favor revisa tu bandeja de entrada para asegurarte",
+ "oauth2_flow_error": "No se puede obtener la URI para iniciar el flujo OAuth2",
+ "oauth2_question": "¿Quieres iniciar el flujo OAuth2 para obtener un token?"
+ },
+ "sftp": {
+ "help": "Desde esta sección puedes habilitar algoritmos deshabilitados por defecto. No necesitas establecer valores ya definidos usando variables de entorno o archivo de configuración. Se requiere un reinicio del servicio para aplicar los cambios",
+ "host_key_algos": "Algoritmos de Clave de Host"
+ },
+ "branding": {
+ "title": "Marca",
+ "help": "Desde esta sección puedes personalizar SFTPGo para adaptarlo a tu marca y añadir un descargo de responsabilidad a las páginas de inicio de sesión",
+ "short_name": "Nombre corto",
+ "logo": "Logotipo",
+ "logo_help": "Imagen PNG, tamaño máximo aceptado 512x512, el tamaño predeterminado del logotipo es 256x256",
+ "favicon": "Favicon",
+ "disclaimer_name": "Título del descargo de responsabilidad",
+ "disclaimer_url": "URL del descargo de responsabilidad",
+ "invalid_png": "Imagen PNG inválida",
+ "invalid_png_size": "Tamaño de imagen PNG inválido",
+ "invalid_disclaimer_url": "La URL del descargo de responsabilidad debe ser un enlace http o https"
+ },
+ "events": {
+ "search": "Buscar registros",
+ "fs_events": "Eventos del sistema de archivos",
+ "provider_events": "Eventos del proveedor",
+ "other_events": "Otros eventos",
+ "quota_exceeded": "Cuota excedida",
+ "date_range": "Rango de fechas",
+ "upload": "Subida",
+ "download": "Descarga",
+ "mkdir": "Crear directorio",
+ "rmdir": "Eliminar directorio",
+ "rename": "Renombrar",
+ "delete": "Eliminación",
+ "copy": "Copia",
+ "first_upload": "Primera subida",
+ "first_download": "Primera descarga",
+ "ssh_cmd": "Comando SSH",
+ "add": "Adición",
+ "update": "Actualización",
+ "login_failed": "Inicio de sesión fallido",
+ "login_ok": "Inicio de sesión exitoso",
+ "login_missing_user": "Inicio de sesión con usuario inexistente",
+ "no_login_tried": "Ningún inicio de sesión intentado",
+ "algo_negotiation_failed": "Negociación de algoritmo fallida",
+ "datetime": "Fecha y hora",
+ "action": "Acción",
+ "path": "Ruta",
+ "object": "Objeto",
+ "event": "Evento"
+ },
+ "provider_objects": {
+ "user": "Usuario",
+ "folder": "Carpeta",
+ "group": "Grupo",
+ "admin": "Administrador",
+ "api_key": "Clave API",
+ "share": "Recurso compartido",
+ "event_action": "Acción",
+ "event_rule": "Regla",
+ "role": "rol",
+ "ip_list_entry": "Entrada de lista IP",
+ "configs": "Configuraciones"
+ },
+ "actions": {
+ "view_manage": "Ver y gestionar acciones de reglas para eventos",
+ "err_delete_referenced": "No se puede eliminar una acción con reglas asociadas, elimina las asociaciones primero",
+ "http_url": "URL del servidor",
+ "http_url_help": "ej. https://host:puerto/ruta. Se soportan marcadores de posición dentro de la ruta URL",
+ "http_url_required": "La URL es obligatoria",
+ "http_url_invalid": "La URL es inválida, se soportan esquemas http y https",
+ "http_part_name_required": "El nombre de la parte HTTP es obligatorio",
+ "http_part_body_required": "El cuerpo de la parte HTTP es obligatorio si no se proporciona ruta de archivo",
+ "http_multipart_body_error": "Las solicitudes multiparte no requieren cuerpo. El cuerpo de la solicitud se construye a partir de las partes especificadas",
+ "http_multipart_ctype_error": "Content-Type se establece automáticamente para solicitudes multiparte",
+ "path_duplicated": "Ruta duplicada",
+ "command_required": "El comando es obligatorio",
+ "command_invalid": "Comando inválido, debe ser una ruta absoluta",
+ "email_recipient_required": "Se requiere al menos un destinatario de correo electrónico",
+ "email_subject_required": "El asunto del correo electrónico es obligatorio",
+ "email_body_required": "El cuerpo del correo electrónico es obligatorio",
+ "retention_directory_required": "Se requiere al menos un directorio para comprobar",
+ "path_required": "Se requiere al menos una ruta",
+ "source_dest_different": "La ruta de origen y destino deben ser diferentes",
+ "root_not_allowed": "La ruta raíz (/) no está permitida",
+ "archive_name_required": "El nombre del archivo comprimido es obligatorio",
+ "idp_template_required": "Se requiere una plantilla de usuario o administrador",
+ "threshold": "Umbral",
+ "threshold_help": "Se generará una notificación por correo electrónico para los usuarios cuya contraseña expire en un número de días menor o igual a este umbral",
+ "disable_threshold": "Umbral de desactivación",
+ "disable_threshold_help": "Inactividad en días, desde el último inicio de sesión o creación antes de desactivar usuarios",
+ "delete_threshold": "Umbral de eliminación",
+ "delete_threshold_help": "Inactividad en días, desde el último inicio de sesión o creación antes de eliminar usuarios",
+ "inactivity_threshold_required": "Se debe definir al menos un umbral de inactividad",
+ "inactivity_thresholds_invalid": "El umbral de eliminación debe ser mayor que el umbral de desactivación",
+ "idp_mode_add_update": "Crear o actualizar",
+ "idp_mode_add": "Crear si no existe",
+ "template_user_help": "Plantilla para usuarios de SFTPGo en formato JSON. Se soportan marcadores de posición",
+ "template_admin_help": "Plantilla para administradores de SFTPGo en formato JSON. Se soportan marcadores de posición",
+ "placeholders_help": "Se soportan marcadores de posición",
+ "http_headers": "Encabezados HTTP",
+ "query_parameters": "Parámetros de cadena de consulta",
+ "http_timeout_help": "Ignorado para solicitudes multiparte con archivos como adjuntos",
+ "body": "Cuerpo",
+ "http_body_help": "Se soportan marcadores de posición. Ignorado para solicitud HTTP get. Dejar vacío para solicitudes multiparte",
+ "multipart_body": "Cuerpo multiparte",
+ "multipart_body_help": "Las solicitudes HTTP Multiparte permiten combinar uno o más conjuntos de datos en un solo cuerpo. Para cada parte, puedes establecer una ruta de archivo o un cuerpo como texto. Se soportan marcadores de posición en ruta de archivo, cuerpo, valores de encabezado",
+ "http_part_name": "Nombre de parte",
+ "http_part_file": "Ruta de archivo",
+ "http_part_headers": "Encabezados de parte adicionales uno por línea como \"clave: valor\"",
+ "command_help": "Ruta absoluta del comando a ejecutar",
+ "command_args": "Argumentos",
+ "command_args_help": "Argumentos de comando separados por comas. Se soportan marcadores de posición",
+ "command_env_vars_help": "Se soportan marcadores de posición en valores. Establecer el valor a \"$\" sin comillas significa recuperar la clave del entorno excluyendo claves que empiezan con SFTPGO_",
+ "email_recipients": "Para",
+ "email_recipients_help": "Destinatarios separados por comas. Se soportan marcadores de posición",
+ "email_bcc": "Cco",
+ "email_bcc_help": "Direcciones Cco separadas por comas. Se soportan marcadores de posición",
+ "email_subject": "Asunto",
+ "content_type": "Tipo de contenido",
+ "attachments": "Adjuntos",
+ "attachments_help": "Rutas separadas por comas para adjuntar. Se soportan marcadores de posición. El tamaño total está limitado a 10 MB",
+ "data_retention": "Retención de datos",
+ "data_retention_help": "Establece la retención de datos, como horas, por ruta. La retención se aplica recursivamente. Establecer 0 como retención significa excluir la ruta especificada",
+ "delete_empty_dirs": "Eliminar directorios vacíos",
+ "fs_action": "Acción del sistema de archivos",
+ "paths_src_dst_help": "Rutas como las ven los usuarios de SFTPGo. Se soportan marcadores de posición. Los permisos requeridos se otorgan automáticamente",
+ "source_path": "Origen",
+ "target_path": "Destino",
+ "paths_help": "Rutas separadas por comas como las ven los usuarios de SFTPGo. Se soportan marcadores de posición. Los permisos requeridos se otorgan automáticamente",
+ "archive_path": "Ruta de archivo",
+ "archive_path_help": "Ruta completa, como la ven los usuarios de SFTPGo, al archivo zip a crear. Se soportan marcadores de posición. Si el archivo especificado ya existe, se sobrescribe",
+ "placeholders_modal_title": "Marcadores de posición soportados",
+ "update_mod_times": "Actualizar marca de tiempo",
+ "types": {
+ "http": "HTTP",
+ "email": "Correo electrónico",
+ "backup": "Copia de seguridad",
+ "user_quota_reset": "Restablecimiento de cuota de usuario",
+ "folder_quota_reset": "Restablecimiento de cuota de carpeta",
+ "transfer_quota_reset": "Restablecimiento de cuota de transferencia",
+ "data_retention_check": "Verificación de retención de datos",
+ "filesystem": "Sistema de archivos",
+ "password_expiration_check": "Verificación de expiración de contraseña",
+ "user_expiration_check": "Verificación de expiración de usuario",
+ "user_inactivity_check": "Verificación de inactividad de usuario",
+ "idp_check": "Verificación de cuenta de Proveedor de Identidad",
+ "rotate_logs": "Rotar archivo de registro",
+ "command": "Comando"
+ },
+ "fs_types": {
+ "rename": "Renombrar",
+ "delete": "Eliminar",
+ "path_exists": "Las rutas existen",
+ "compress": "Comprimir",
+ "copy": "Copiar",
+ "create_dirs": "Crear directorios"
+ },
+ "placeholders_modal": {
+ "name": "Nombre de usuario, nombre de carpeta virtual, nombre de usuario administrador para eventos de proveedor, nombre de dominio para eventos de certificado TLS",
+ "event": "Nombre del evento, por ejemplo \"upload\", \"download\" para eventos del sistema de archivos o \"add\", \"update\" para eventos de proveedor",
+ "status": "Estado para eventos del sistema de archivos. 1 significa sin error, 2 significa que ocurrió un error genérico, 3 significa error de cuota excedida",
+ "status_string": "Estado como cadena. Posibles valores \"OK\", \"KO\"",
+ "error_string": "Detalles del error. Reemplazado con una cadena vacía si no ocurre error",
+ "virtual_path": "Ruta vista por los usuarios de SFTPGo, por ejemplo \"/adir/afile.txt\"",
+ "escaped_virtual_path": "Ruta codificada en cadena de consulta HTTP, por ejemplo \"%2Fadir%2Fafile.txt\".",
+ "virtual_dir_path": "Directorio padre para \"VirtualPath\", por ejemplo si \"VirtualPath\" es \"/adir/afile.txt\", \"VirtualDirPath\" es \"/adir\"",
+ "fs_path": "Ruta completa del sistema de archivos, por ejemplo \"/user/homedir/adir/afile.txt\" o \"C:/data/user/homedir/adir/afile.txt\" en Windows",
+ "ext": "Extensión de archivo, por ejemplo \".txt\" si el nombre de archivo es \"afile.txt\"",
+ "object_name": "Nombre de archivo/directorio, por ejemplo \"afile.txt\" o nombre de objeto de proveedor",
+ "object_basename": "Nombre de archivo sin extensión, por ejemplo \"afile\" si el nombre de archivo es \"afile.txt\"",
+ "object_type": "Tipo de objeto para eventos de proveedor: \"user\", \"group\", \"admin\", etc",
+ "virtual_target_path": "Ruta de destino virtual para operaciones de renombrado y copia",
+ "virtual_target_dir_path": "Directorio padre para \"VirtualTargetPath\"",
+ "target_name": "Nombre de objeto de destino para operaciones de renombrado y copia",
+ "fs_target_path": "Ruta de destino completa del sistema de archivos para operaciones de renombrado y copia",
+ "file_size": "Tamaño de archivo (bytes)",
+ "elapsed": "Tiempo transcurrido como milisegundos para eventos del sistema de archivos",
+ "protocol": "Protocolo, por ejemplo \"SFTP\", \"FTP\"",
+ "ip": "Dirección IP del cliente",
+ "role": "Rol de usuario o administrador",
+ "timestamp": "Marca de tiempo del evento como nanosegundos desde la época",
+ "datetime": "Marca de tiempo del evento formateada como YYYY-MM-DDTHH:MM:SS.ZZZ",
+ "year": "Año del evento formateado como cuatro dígitos",
+ "month": "Mes del evento formateado como dos dígitos",
+ "day": "Día del evento formateado como dos dígitos",
+ "hour": "Hora del evento formateada como dos dígitos",
+ "minute": "Minuto del evento formateado como dos dígitos",
+ "email": "Para eventos del sistema de archivos, este es el correo electrónico asociado con el usuario realizando la acción. Para los eventos de proveedor, este es el correo electrónico asociado con el usuario o administrador afectado. En blanco en todos los demás casos",
+ "object_data": "Datos del objeto de proveedor serializados como JSON con campos sensibles eliminados",
+ "object_data_string": "Datos del objeto de proveedor como cadena escapada JSON con campos sensibles eliminados",
+ "retention_reports": "Informes de retención de datos como archivos CSV comprimidos en zip. Soportado como adjunto de correo electrónico, ruta de archivo para solicitud HTTP multiparte y como parámetro único para cuerpo de solicitudes HTTP",
+ "idp_field": "Campos personalizados del Proveedor de Identidad que contienen una cadena",
+ "metadata": "Metadatos de almacenamiento en la nube para el archivo descargado serializados como JSON",
+ "metadata_string": "Metadatos de almacenamiento en la nube para el archivo descargado como cadena escapada JSON",
+ "uid": "ID Único"
+ }
+ },
+ "rules": {
+ "view_manage": "Ver y gestionar reglas para eventos",
+ "trigger": "Disparador",
+ "run_confirm": "¿Quieres ejecutar la regla seleccionada?",
+ "run_confirm_btn": "Sí, ejecutar",
+ "run_error_generic": "No se puede ejecutar la regla seleccionada",
+ "run_ok": "Acciones de regla iniciadas",
+ "run": "Ejecutar",
+ "invalid_fs_min_size": "Tamaño mínimo inválido",
+ "invalid_fs_max_size": "Tamaño máximo inválido",
+ "action_required": "Se requiere al menos una acción",
+ "fs_event_required": "Se requiere al menos un evento del sistema de archivos",
+ "provider_event_required": "Se requiere al menos un evento de proveedor",
+ "schedule_required": "Se requiere al menos un horario",
+ "schedule_invalid": "Horario inválido",
+ "duplicate_actions": "Acciones duplicadas detectadas",
+ "sync_failure_actions": "La ejecución síncrona no es soportada para acciones de fallo",
+ "sync_unsupported": "La ejecución síncrona solo es soportada para algunos eventos del sistema de archivos e inicios de sesión de Proveedor de Identidad",
+ "sync_unsupported_fs_event": "La ejecución síncrona solo es soportada para eventos de subida y pre-* del sistema de archivos",
+ "only_failure_actions": "Se requiere al menos una acción que no sea de fallo",
+ "sync_action_required": "El evento \"{{val}}\" requiere al menos una acción síncrona",
+ "scheduler_help": "Horas: 0-23. Día de la semana: 0-6 (Dom-Sáb). Día del mes: 1-31. Mes: 1-12. Asterisco (*) indica una coincidencia para todos los valores del campo. ej. cada día de la semana, cada día del mes y así sucesivamente",
+ "concurrent_run": "Permitir ejecución concurrente desde múltiples instancias",
+ "protocol_filters": "Filtros de protocolo",
+ "status_filters": "Filtros de estado",
+ "object_filters": "Filtros de objeto",
+ "name_filters": "Filtros de nombre",
+ "name_filters_help": "Filtros de patrón tipo shell para nombres de usuario, nombres de carpeta. Por ejemplo \"user*\"\" coincidirá con nombres que empiecen con \"user\". Para eventos de proveedor, este filtro se aplica al nombre de usuario del administrador ejecutando el evento",
+ "inverse_match": "Coincidencia inversa",
+ "group_name_filters": "Filtros de nombre de grupo",
+ "group_name_filters_help": "Filtros de patrón tipo shell para nombres de grupo. Por ejemplo \"group*\"\" coincidirá con nombres de grupo que empiecen con \"group\"",
+ "role_name_filters": "Filtros de nombre de rol",
+ "role_name_filters_help": "Filtros de patrón tipo shell para nombres de rol. Por ejemplo \"role*\"\" coincidirá con nombres de rol que empiecen con \"role\"",
+ "path_filters": "Filtros de ruta",
+ "path_filters_help": "Filtros de patrón tipo shell en rutas de eventos del sistema de archivos. Por ejemplo \"/adir/*.txt\"\" coincidirá con rutas en el directorio \"/adir\" que terminen con \".txt\". Se soporta doble asterisco, por ejemplo \"/**/*.txt\" coincidirá con cualquier archivo que termine con \".txt\". \"/midir/**\" coincidirá con cualquier entrada en \"/midir\"",
+ "file_size_limits": "Límites de tamaño de archivo",
+ "file_size_limits_help": "0 significa sin límite. Puedes usar sufijo MB/GB",
+ "min_size": "Tamaño mínimo",
+ "max_size": "Tamaño máximo",
+ "actions_help": "Una o más acciones a ejecutar. La opción \"Ejecución síncrona\" es soportada para eventos de \"subida\" y requerida para eventos \"pre-*\" y eventos de inicio de sesión de proveedor de Identidad si la acción comprueba la cuenta",
+ "option_failure_action": "Acción de fallo",
+ "option_stop_on_failure": "Parar en fallo",
+ "option_execute_sync": "Ejecución síncrona",
+ "no_filter": "Sin filtro significa siempre disparar eventos",
+ "action_placeholder": "Seleccionar una acción",
+ "triggers": {
+ "fs_event": "Eventos del sistema de archivos",
+ "provider_event": "Eventos del proveedor",
+ "ip_blocked": "IP bloqueada",
+ "certificate_renewal": "Renovación de certificado",
+ "on_demand": "Bajo demanda",
+ "idp_login": "Inicios de sesión de Proveedor de Identidad",
+ "schedule": "Horarios"
+ },
+ "idp_logins": {
+ "user": "Inicio de sesión de usuario",
+ "admin": "Inicio de sesión de administrador"
+ }
+ }
+}
\ No newline at end of file
diff --git a/templates/common/base.html b/templates/common/base.html
index bfb97e06..05de8e67 100644
--- a/templates/common/base.html
+++ b/templates/common/base.html
@@ -190,6 +190,8 @@ explicit grant from the SFTPGo Team (support@sftpgo.com).
lngs.de = { nativeName: 'Deutsch' };
//{{- else if eq . "fr" }}
lngs.fr = { nativeName: 'Français' };
+ //{{- else if eq . "es" }}
+ lngs.es = { nativeName: 'Español' };
//{{- else if eq . "zh-CN" }}
lngs["zh-CN"] = { nativeName: '简体中文' };
//{{- end}}
diff --git a/templates/webadmin/events.html b/templates/webadmin/events.html
index d874f5d6..f6b573f3 100644
--- a/templates/webadmin/events.html
+++ b/templates/webadmin/events.html
@@ -155,6 +155,7 @@ explicit grant from the SFTPGo Team (support@sftpgo.com).
+
+
+