es.yml
913 lignes · 45692 octets
# Traducciones en español — rustwarden-ui # Secciones específicas de UI (páginas, formularios, navegación, paneles de administración) # Inicio de sesión login: title: "Iniciar sesión" page_title: "Iniciar sesión" page_description: "Inicie sesión en su cuenta" subtitle: "Inicie sesión en su cuenta" username: "Nombre de usuario o email" password: "Contraseña" submit: "Iniciar sesión" remember_me: "Recordarme" tab_login: "Iniciar sesión" tab_register: "Registrarse" register_title: "Crear una cuenta" register_submit: "Crear mi cuenta" username_placeholder: "Nombre de usuario o email" password_placeholder: "Su contraseña" username_placeholder_register: "Su nombre de usuario (mín. 3 caracteres)" username_pattern_register: "Solo minúsculas, números y guiones, de 3 a 39 caracteres" password_placeholder_register: "Su contraseña (mín. 8 caracteres)" email_placeholder: "su@email.com" forgot_password: "¿Olvidó su contraseña?" email_not_verified: "¿Email no verificado?" resend_verification: "Reenviar email de verificación" already_have_account: "¿Ya tiene una cuenta?" sign_in_link: "Iniciar sesión" success_message: "¡Inicio de sesión exitoso! Redirigiendo..." error_message: "Error de inicio de sesión. Verifique sus credenciales." email_unverified_message: "Su email no está verificado. Haga clic a continuación para reenviar el enlace." resend_button: "Reenviar email de verificación" resend_success: "Email de verificación enviado si la cuenta existe." resend_error: "No se puede enviar la solicitud en este momento." resend_prompt: "Por favor ingrese su email antes de reenviar." register_success: "¡Cuenta creada con éxito! Por favor verifique su email." register_error: "Error en el registro" email_label: "Correo electrónico" footer_text: "Cuentas y autenticación" # Solicitar enlace de restablecimiento forgot_password: page_title: "Contraseña olvidada" title: "Contraseña olvidada" subtitle: "Ingrese su correo electrónico. Si existe una cuenta, se enviará un enlace de restablecimiento." email_label: "Dirección de correo electrónico" email_placeholder: "usted@ejemplo.com" submit: "Enviar el enlace" back_to_login: "Volver al inicio de sesión" error_default: "No se pudo enviar la solicitud." success_default: "Si existe una cuenta para esta dirección, se ha enviado un email de restablecimiento." error_missing_email: "Por favor ingrese su correo electrónico." error_cannot_send: "No se puede enviar la solicitud en este momento." # Reenviar email de verificación resend_verification: page_title: "Reenviar email de verificación - RustWarden" title: "Reenviar email de verificación" subtitle: "Ingrese su dirección de correo electrónico para recibir un nuevo enlace de verificación." email_label: "Dirección de correo electrónico" email_placeholder: "usted@ejemplo.com" submit: "Enviar enlace de verificación" back_to_login: "Volver al inicio de sesión" error_default: "No se pudo enviar la solicitud." success_default: "Si la cuenta existe y no está verificada, se ha enviado un email." error_missing_email: "Por favor ingrese su correo electrónico." error_cannot_send: "No se puede enviar la solicitud en este momento." # Restablecimiento de contraseña (desde enlace de email) password_reset: page_title: "Restablecer contraseña" title: "Restablecer contraseña" subtitle: "Ingrese su nueva contraseña a continuación." new_password_label: "Nueva contraseña" new_password_placeholder: "Nueva contraseña segura" requirements: "⚠️ Debe contener: 8+ caracteres, mayúscula, minúscula, dígito, carácter especial" confirm_password_label: "Confirmar contraseña" confirm_password_placeholder: "Confirme su nueva contraseña" missing_token_url: "Falta el token de restablecimiento en la URL." missing_token: "Falta el token de restablecimiento." missing_new_password: "Por favor ingrese una nueva contraseña." passwords_not_match: "Las contraseñas no coinciden." success_message: "Su contraseña ha sido restablecida con éxito. Ahora puede iniciar sesión." error_link_invalid: "No se pudo restablecer la contraseña. El enlace puede haber expirado o ser inválido." error_generic: "No se puede restablecer la contraseña en este momento." # Página de inicio de sesión 2FA login_2fa: page_title: "Verificación 2FA" title: "Verificación en dos pasos" subtitle: "Ingrese el código de su aplicación de autenticación" code_label: "Código de autenticación" backup_code_label: "Código de respaldo" verify_button: "Verificar" use_backup_code: "Usar un código de respaldo" use_totp_code: "Usar código de la aplicación" back_to_login: "Volver al inicio de sesión" error_invalid_code: "Código inválido. Inténtelo de nuevo." error_network: "Error de red. Inténtelo de nuevo." # Seguridad 2FA settings_security: page_title: "Seguridad - RustWarden" title: "Autenticación de dos factores" subtitle: "Proteja su cuenta con una capa adicional de seguridad" totp_title: "Autenticación TOTP" status_enabled: "Activado" status_disabled: "Desactivado" enabled_message: "Su cuenta está protegida por autenticación de dos factores." disabled_message: "Agregue una capa adicional de seguridad a su cuenta habilitando la autenticación de dos factores con una aplicación como Google Authenticator o Authy." enable_button: "Activar 2FA" disable_button: "Desactivar 2FA" scan_qr: "Escanee este código QR con su aplicación de autenticación" manual_entry: "O ingrese este código manualmente" enter_code: "Ingrese el código de 6 dígitos de su aplicación" verify_button: "Verificar y activar" backup_codes_title: "Códigos de respaldo" backup_codes_warning: "Guarde estos códigos en un lugar seguro. Cada código solo se puede usar una vez." backup_codes_remaining: "Códigos de respaldo restantes" regenerate_button: "Regenerar códigos" regenerate_confirm: "¿Está seguro? Los códigos antiguos serán reemplazados." confirm_disable: "Ingrese su contraseña para desactivar 2FA" password_label: "Contraseña actual" copy_button: "Copiar" saved_codes_button: "He guardado mis códigos" breadcrumb: "Seguridad" force_2fa_message: "Su administrador requiere la autenticación de dos factores. Debe configurar 2FA antes de poder acceder al resto de la aplicación." force_2fa_logout: "Cerrar sesión" # Configuración settings: title: "Configuración" page_title: "Configuración - RustWarden" subtitle: "Gestione sus preferencias y configuración de cuenta" profile_title: "Mi Perfil" profile_desc: "Edite su información personal (nombre de usuario, email)" password_title: "Contraseña" password_desc: "Cambie su contraseña para asegurar su cuenta" sessions_title: "Sesiones activas" sessions_desc: "Gestione sus sesiones activas y revoque el acceso desde otros dispositivos" preferences_title: "Preferencias" preferences_desc: "Personalice su experiencia (tema, idioma)" access: "Acceder" info_title: "Información" info_desc: "Utilice las secciones anteriores para gestionar diferentes aspectos de su cuenta. Todos los cambios son seguros y requieren su autenticación." language: "Idioma" language_description: "Elija su idioma preferido" save: "Guardar" saved: "Configuración guardada" # Página de inicio home: welcome: "¡Bienvenido, {username}!" subtitle: "Bienvenido a tu espacio personal" my_account: "Mi Cuenta" stat_username: "Nombre de usuario" stat_email: "Correo electrónico" stat_member_since: "Miembro desde" stat_roles: "Roles" # Preferencias preferences: title: "Preferencias de visualización" page_title: "Preferencias de visualización" subtitle: "Personalice la apariencia de la interfaz" theme: "Tema" theme_light: "Claro" theme_light_desc: "Interfaz brillante y limpia" theme_dark: "Oscuro" theme_dark_desc: "Reduce la fatiga visual" theme_auto: "Automático" theme_auto_desc: "Se adapta a la hora del día" theme_preview: "El tema se aplicará inmediatamente después de guardar" language: "Idioma" language_fr: "Français" language_fr_desc: "Interfaz en francés" language_en: "English" language_en_desc: "Interfaz en inglés" language_de: "Deutsch" language_de_desc: "Interfaz en alemán" language_es: "Español" language_es_desc: "Interfaz en español" language_it: "Italiano" language_it_desc: "Interfaz en italiano" language_pt: "Português" language_pt_desc: "Interfaz en portugués" translation_warning: "La traducción completa de la interfaz está en desarrollo. Algunos elementos pueden permanecer en francés." modified: "Preferencias modificadas" modified_desc: "Guarde sus cambios para aplicarlos" save: "Guardar preferencias" saving: "Guardando..." cancel: "Cancelar" saved_success: "¡Preferencias guardadas con éxito!" saved_reload: "¡Preferencias guardadas con éxito!\n\nEl idioma ha sido cambiado. ¿Desea recargar la página ahora para aplicar los cambios?" error: "Error: {message}" network_error: "Error de red. Por favor intente nuevamente." sync_title: "Sus preferencias están sincronizadas" sync_desc: "Sus preferencias de visualización se guardan y se aplican automáticamente en todos los dispositivos conectados a su cuenta." preview_dark: "Vista previa: Se aplicará el tema oscuro" preview_light: "Vista previa: Se aplicará el tema claro" preview_auto: "Vista previa: Se aplicará el tema automático" # Perfil profile: title: "Mi Perfil" page_title: "Mi Perfil" subtitle: "Edite su información personal" account_info: "Información de la cuenta" username: "Nombre de usuario" username_public: "Visible públicamente" username_placeholder: "Su nombre de usuario" username_pattern: "Solo minúsculas, números y guiones, de 3 a 39 caracteres" email: "Email" email_placeholder: "su@email.com" save: "Guardar cambios" saving: "Guardando..." saved: "Perfil actualizado con éxito" error: "Error al actualizar el perfil" email_label: "Dirección de correo electrónico" email_used_for: "Se utiliza para iniciar sesión" email_warning: "La dirección actual no se cambia aquí." email_change_info: "Se envía un enlace de confirmación a la nueva dirección. La dirección actual recibe un aviso. La cuenta cambia solo después de la confirmación." email_change_title: "Cambiar la dirección de email" new_email_label: "Nueva dirección" current_password_label: "Contraseña actual" request_button: "Solicitar el cambio" email_change_error: "No se pudo enviar la solicitud." network_error: "Error de red. Inténtelo de nuevo." username_help: "De 3 a 39 caracteres (a-z, 0-9, -)" additional_info: "Información adicional" account_created: "Cuenta creada el" roles: "Roles" linked_accounts_title: "Cuentas vinculadas" no_linked_accounts: "No hay cuentas externas vinculadas." linked_since: "Vinculada desde" unlink_button: "Desvincular" unlink_confirm: "¿Está seguro de que desea desvincular esta cuenta?" unlink_error: "No se pudo desvincular esta cuenta." cannot_unlink_last: "No se puede eliminar su último método de autenticación." # Breadcrumb breadcrumb: home: "Inicio" settings: "Configuración" admin: "Administración" preferences: "Preferencias" profile: "Perfil" password: "Contraseña" sessions: "Sesiones" # Administración admin: dashboard: title: "Administración" heading: "Panel de Administración" users_card_title: "Usuarios" users_card_subtitle: "Usuarios totales" access_button: "Acceder" sessions_card_title: "Sesiones activas" sessions_card_subtitle: "Sesiones en curso" admins_card_title: "Administradores" admins_card_subtitle: "Cuentas admin" last_activity_card_title: "Última actividad" last_activity_card_subtitle: "Último inicio de sesión" audit_section_title: "Estadísticas de logs de auditoría" audit_total_logs: "Logs totales" audit_last_24h: "Últimas 24h" audit_by_level: "Por nivel" chart_label: "Logs por nivel" view_logs: "Ver los logs" logs_card_title: "Logs de auditoría" logs_card_desc: "Últimas acciones registradas: cambios de email, inicios de sesión bloqueados." roles_card_title: "Gestión de Roles" roles_card_desc: "Gestionar roles y permisos granulares" roles_stat_title: "Roles" settings_card_title: "Configuración de la Aplicación" settings_card_desc: "Configurar los parámetros globales de la aplicación" apps_card_title: "Gestión de Aplicaciones" apps_card_desc: "Activar o desactivar aplicaciones modulares" orgs_card_title: "Gestión de Organizaciones" orgs_card_desc: "Crear y gestionar organizaciones y sus miembros" orgs_stat_title: "Organizaciones" orgs_members_stat_title: "Miembros totales" logs: page_title: "Logs de auditoría" heading: "Logs de auditoría" empty: "Todavía no hay entradas." col_date: "Fecha" col_level: "Nivel" col_action: "Acción" col_message: "Mensaje" roles_list: page_title: "Gestión de roles" breadcrumb_roles: "Roles" title: "Roles" create_role: "Crear un rol" table_name: "Nombre" table_description: "Descripción" table_users: "Usuarios" table_permissions: "Permisos" table_actions: "Acciones" edit: "Editar" delete: "Eliminar" no_roles: "No se encontraron roles." protected_hint: "Protegido" delete_confirm_title: "Confirmar eliminación" delete_confirm_message: "¿Está seguro de que desea eliminar el rol" delete_button: "Eliminar" role_form: title_create: "Crear un rol" title_edit: "Editar rol" breadcrumb_create: "Crear" breadcrumb_edit: "Editar" back_to_list: "Volver a la lista" name_label: "Nombre del rol" name_placeholder: "ej: moderator" description_label: "Descripción" description_placeholder: "Descripción del rol..." permissions_label: "Permisos" protected_name_hint: "El nombre de este rol no se puede cambiar." cancel: "Cancelar" submit_create: "Crear rol" submit_edit: "Guardar cambios" errors: title: "Códigos de Error" description: "Documentación de los códigos de error de la aplicación. Cada código de error está asociado a un middleware y proporciona información de contexto para la depuración." breadcrumb_errors: "Códigos de Error" table_code: "Código" table_description: "Descripción" table_category: "Categoría" table_middleware: "Middleware" table_context: "Contexto" table_example: "Ejemplo" legend_title: "Leyenda" legend_code: "Identificador único del error (formato: CATEGORY_NUMBER)" legend_description: "Descripción del error" legend_category: "Tipo de error (Autenticación, CSRF, Rate Limiting, etc.)" legend_middleware: "Middleware responsable de generar este error" legend_context: "Explicación detallada de cuándo ocurre este error" legend_example: "Ejemplo concreto de una situación que genera este error" error_auth001_desc: "Credenciales inválidas" error_auth001_category: "Autenticación" error_auth001_context: "El usuario proporcionó credenciales incorrectas al iniciar sesión" error_auth001_example: "Intento de inicio de sesión con contraseña incorrecta" error_auth002_desc: "Token inválido" error_auth002_category: "Autenticación" error_auth002_context: "El token JWT proporcionado es inválido o está malformado" error_auth002_example: "Token JWT corrupto o firmado con una clave diferente" error_auth003_desc: "Token expirado" error_auth003_category: "Autenticación" error_auth003_context: "El token JWT ha expirado y debe renovarse" error_auth003_example: "Intento de acceso con un token expirado después del período de validez" error_csrf001_desc: "Token CSRF faltante" error_csrf001_category: "Protección CSRF" error_csrf001_context: "La solicitud POST/PUT/DELETE no contiene un token CSRF" error_csrf001_example: "Formulario enviado sin token CSRF en el header o body" error_csrf002_desc: "Token CSRF inválido" error_csrf002_category: "Protección CSRF" error_csrf002_context: "El token CSRF proporcionado no coincide con el token de sesión" error_csrf002_example: "Token CSRF modificado o robado" error_rate001_desc: "Límite de tasa excedido" error_rate001_category: "Rate Limiting" error_rate001_context: "Se ha excedido el número de solicitudes por minuto" error_rate001_example: "Más de 100 solicitudes/min en endpoints admin" error_valid001_desc: "Datos de entrada inválidos" error_valid001_category: "Validación" error_valid001_context: "Los datos proporcionados no cumplen con las reglas de validación" error_valid001_example: "Formato de email inválido o campo requerido faltante" error_valid002_desc: "Complejidad de contraseña no cumplida" error_valid002_category: "Validación" error_valid002_context: "La contraseña no cumple con las reglas de complejidad configuradas" error_valid002_example: "Contraseña demasiado corta o sin los caracteres requeridos" error_rbac001_desc: "Permisos insuficientes" error_rbac001_category: "Autorización" error_rbac001_context: "El usuario no tiene los permisos necesarios para esta acción" error_rbac001_example: "Usuario no administrador intentando acceder a /admin/users" error_rbac002_desc: "Rol de administrador requerido" error_rbac002_category: "Autorización" error_rbac002_context: "La acción requiere un rol de administrador" error_rbac002_example: "Intento de eliminar un usuario sin rol admin" error_db001_desc: "Error de operación de base de datos" error_db001_category: "Base de datos" error_db001_context: "Una operación de base de datos falló" error_db001_example: "Restricción de clave foránea violada o conexión DB perdida" error_db002_desc: "Recurso no encontrado" error_db002_category: "Base de datos" error_db002_context: "El recurso solicitado no existe en la base de datos" error_db002_example: "Usuario con ID inexistente" user_form: breadcrumb_create: "Crear" breadcrumb_edit: "Modificar" title_create: "Crear un usuario" title_edit: "Modificar un usuario" back_to_list: "Volver a la lista" username_label: "Nombre de usuario" username_placeholder: "nombre-usuario" username_pattern: "Solo minúsculas, números y guiones, de 3 a 39 caracteres" username_readonly_hint: "El nombre de usuario no se puede cambiar después de la creación" email_label: "Email" email_placeholder: "usuario@example.com" email_change_hint: "Cambiar la dirección la escribe de inmediato, marca el email como verificado y cierra las sesiones de este usuario." password_label: "Contraseña" password_optional: "Opcional" password_placeholder: "Dejar vacío para generar una contraseña aleatoria" password_hint: "Si se deja vacío, se generará automáticamente una contraseña segura" roles_label: "Roles" roles_hint: "Seleccione al menos un rol" must_change_password_label: "Forzar cambio de contraseña" must_change_password_desc: "El usuario deberá cambiar su contraseña en el próximo inicio de sesión" cancel: "Cancelar" submit_create: "Crear usuario" submit_edit: "Guardar cambios" settings: title: "Configuración de la aplicación" page_title: "Configuración de la aplicación - Admin" subtitle: "Configuración global de la aplicación" general: "General" app_name: "Nombre de la aplicación" app_domain: "Dominio" app_domain_placeholder: "example.com" app_description: "Descripción" allow_registration: "Permitir registro" allow_registration_desc: "Los usuarios pueden crear cuentas desde la página de inicio" email_validation_required: "Validación de email requerida" email_validation_required_desc: "Los usuarios deben validar su email antes de poder iniciar sesión" save: "Guardar configuración" cancel: "Cancelar" saved: "Configuración guardada con éxito" error: "Error al guardar la configuración" network_error: "Error de red. Por favor intente nuevamente." password_security: "Seguridad de Contraseñas" password_min_length: "Longitud mínima" password_min_length_hint: "Entre 6 y 128 caracteres" password_complexity: "Requisitos de complejidad" require_uppercase: "Mayúscula requerida" require_lowercase: "Minúscula requerida" require_digits: "Dígito requerido" require_special: "Carácter especial requerido" password_change_require_email: "Confirmación por email del cambio de contraseña" password_change_require_email_desc: "Cuando está activado, se envía un correo de confirmación para validar cualquier cambio de contraseña. De lo contrario, el cambio se aplica inmediatamente." password_expiration: "Expiración de contraseñas" password_expiration_desc: "Forzar cambio periódico de contraseña" expiration_days: "Expiración después de (días)" expiration_alert: "Alerta por email antes de la expiración" expiration_alert_days: "Alerta (días antes)" audit_logging: "Registro de Auditoría" log_level: "Nivel de log" log_level_debug: "DEBUG - Todos los detalles" log_level_info: "INFO - Información normal" log_level_warn: "WARN - Solo advertencias" log_level_error: "ERROR - Solo errores" log_level_hint: "Controla la verbosidad de los logs de auditoría" log_retention: "Retención de logs (días)" log_retention_hint: "Período de retención de logs (1-365 días)" audit_info_message: "Los logs de auditoría registran todas las acciones administrativas (creación, modificación, eliminación de usuarios)." save_changes: "Guardar cambios" save_changes_desc: "La configuración se aplicará inmediatamente" saving: "Guardando..." save_success: "¡Configuración guardada con éxito!" save_error_prefix: "Error" # OAuth / SSO admin settings oauth_sso_title: "OAuth / SSO" oauth_enabled_label: "Activar OAuth" oauth_enabled_desc: "Permitir inicio de sesión a través de proveedores externos (Google, GitHub, etc.)" oauth_redirect_url_label: "URL base de redirección" oauth_redirect_url_desc: "URL base para callbacks OAuth (ej: https://miapp.example.com)" oauth_auto_register_label: "Auto-registro" oauth_auto_register_desc: "Crear automáticamente una cuenta si el correo no existe" oauth_link_existing_label: "Vincular cuentas existentes" oauth_link_existing_desc: "Vincular automáticamente una cuenta OAuth si el correo verificado coincide" oauth_client_id: "Client ID" oauth_client_secret: "Client Secret" oauth_tenant: "Tenant ID" oauth_redirect_uri: "URI de redirección" oauth_copy_uri: "Copiar" oauth_secret_configured: "Configurado" oauth_secret_not_configured: "No configurado" oauth_secret_change: "Cambiar" oauth_restart_warning: "Los cambios de credenciales requieren un reinicio de la aplicación." oauth_env_info: "Las credenciales también se pueden configurar mediante variables de entorno (OAUTH_*_CLIENT_ID, etc.)." oauth_google_label: "Google" oauth_google_desc: "OpenID Connect" oauth_github_label: "GitHub" oauth_github_desc: "OAuth2" oauth_discord_label: "Discord" oauth_discord_desc: "OAuth2" oauth_microsoft_label: "Microsoft" oauth_microsoft_desc: "OpenID Connect" # Audience measurement. The script URL is read-only here: it feeds # the CSP, which is frozen at startup (see config::analytics). analytics_title: 'Medición de audiencia' analytics_desc: 'Script de seguimiento de terceros inyectado en las páginas. La dirección del script se configura mediante una variable de entorno; los ajustes siguientes se aplican sin reiniciar.' analytics_enabled_label: 'Activar la medición de audiencia' analytics_enabled_desc: 'Cuando está desactivado, no se envía ningún script de seguimiento a los visitantes.' analytics_site_id_label: 'Identificador del sitio' analytics_site_id_desc: 'Proporcionado por su servicio de medición de audiencia.' analytics_attributes_label: 'Atributos adicionales' analytics_attributes_desc: 'Un objeto JSON de atributos data-*, por ejemplo un par data-consent / opt-in.' analytics_script_url_label: 'Dirección del script' analytics_script_url_desc: 'Solo lectura: esta dirección alimenta la política de seguridad de contenido, fijada al arrancar. Configúrela mediante ANALYTICS_SCRIPT_URL.' analytics_not_configured: 'No hay ningún script de medición de audiencia configurado. Defina ANALYTICS_SCRIPT_URL y reinicie la aplicación para activar esta sección.' users_list: page_title: "Gestión de Usuarios - Admin" title: "Gestión de Usuarios" breadcrumb_users: "Usuarios" create_user: "Crear usuario" search_label: "Buscar" search_placeholder: "Nombre de usuario o email..." role_filter_label: "Rol" all_roles: "Todos los roles" per_page_label: "Por página" search_button: "Buscar" results_summary: "Mostrando {count} usuario(s) de {total} total" page_info: "Página {page} de {total_pages}" table_username: "Nombre de usuario" table_email: "Email" table_roles: "Roles" table_created_at: "Creado el" table_last_login: "Último inicio de sesión" table_actions: "Acciones" never: "Nunca" edit: "Modificar" no_users: "No se encontraron usuarios" reset_password_title: "Restablecer contraseña" reset_generate: "Generar contraseña aleatoria" reset_custom: "Establecer contraseña personalizada" reset_new_password_label: "Nueva contraseña" reset_new_password_placeholder: "Mínimo 8 caracteres, mayúscula, minúscula, dígito, carácter especial" reset_password_requirements: "⚠️ Debe contener: 8+ caracteres, mayúscula, minúscula, dígito, carácter especial" reset_invalidate_sessions: "Invalidar todas las sesiones activas de este usuario" reset_invalidate_sessions_desc: "El usuario deberá iniciar sesión nuevamente después del cambio" reset_button: "Restablecer" delete_confirm_title: "⚠️ Confirmar eliminación" delete_confirm_message: "¿Está seguro de que desea eliminar este usuario?" delete_confirm_username: "Nombre de usuario:" delete_confirm_email: "Email:" delete_irreversible: "¡Esta acción es irreversible!" delete_button: "Eliminar permanentemente" delete: "Eliminar" delete_error: "Error al eliminar el usuario" network_error: "Error de red" edit_user_title: "Modificar usuario" resetting: "Restableciendo..." reset_by_email_title: "Restablecer por email" reset_email: "Restablecer por email" close: "Cerrar" password_reset_success_title: "Contraseña restablecida" password_warning_once: "¡Esta contraseña solo se mostrará una vez. Cópiela ahora!" new_password_label: "Nueva contraseña" copy: "Copiar" password_copied: "Contraseña copiada al portapapeles" password_set_success: "Contraseña restablecida con éxito" reset_error: "Error al restablecer la contraseña" # Cambio de contraseña password: title: "Cambiar mi contraseña" page_title: "Cambiar mi contraseña" subtitle: "Modifique su contraseña para asegurar su cuenta. Se enviará un correo electrónico de confirmación para validar el cambio." subtitle_no_email: "Modifique su contraseña para asegurar su cuenta." must_change_message: "⚠️ Debe cambiar su contraseña antes de continuar." new_password: "Nueva contraseña" current_password: "Contraseña actual" current_password_placeholder: "Su contraseña actual" new_password_placeholder: "Nueva contraseña segura" required: "Requerido" requirements: "📌 Requisitos: 8+ caracteres, mayúscula, minúscula, dígito, carácter especial" strength: "Fortaleza de la contraseña:" strength_weak: "Débil" strength_medium: "Medio" strength_strong: "Fuerte ✓" strength_too_short: "demasiado corta" strength_missing_lowercase: "falta minúscula" strength_missing_uppercase: "falta mayúscula" strength_missing_digit: "falta dígito" strength_missing_special: "falta carácter especial" confirm_password: "Confirmar nueva contraseña" confirm_password_placeholder: "Repita la nueva contraseña" passwords_match: "✓ Las contraseñas coinciden" passwords_not_match: "✗ Las contraseñas no coinciden" change_button: "Cambiar contraseña" changing: "Cambiando..." logout_warning_title: "Cerrar sesión de otras sesiones" logout_warning_desc: "Todas sus otras sesiones activas se cerrarán automáticamente después del cambio de contraseña. Solo su sesión actual permanecerá activa." save: "Guardar nueva contraseña" saving: "Guardando..." saved: "Se ha enviado un correo electrónico de confirmación a su dirección. Haga clic en el enlace del correo para validar el cambio de contraseña." saved_direct: "¡Contraseña cambiada con éxito! Sus otras sesiones han sido cerradas." error: "Error al cambiar la contraseña" error_all_fields_required: "Todos los campos son obligatorios." error_empty_data: "Los datos a enviar están vacíos." error_invalid_data: "Datos inválidos. Verifique que todos los campos estén completos." error_incorrect_current: "La contraseña actual es incorrecta." error_reading_response: "Error al leer la respuesta del servidor" error_415: "Error 415: El servidor no recibió los datos en el formato JSON esperado. Por favor intente nuevamente." network_error: "Error de red. Por favor intente nuevamente." security_tips_title: "Consejos de seguridad" security_tip_unique: "Use una contraseña única que no use en otro lugar" security_tip_share: "Nunca comparta su contraseña con nadie" security_tip_regular: "Cambie su contraseña regularmente (cada 3-6 meses)" security_tip_2fa: "Active la autenticación de dos factores si está disponible" security_tip_manager: "Use un administrador de contraseñas para mayor seguridad" # Sesiones sessions: title: "Sesiones activas" page_title: "Sesiones activas" subtitle: "Gestione los dispositivos conectados a su cuenta" current_session: "Sesión actual" current_badge: "Actual" unknown_device: "Dispositivo desconocido" ip_address: "Dirección IP:" created_at: "Creada el:" last_activity: "Última actividad:" session_id: "ID de sesión:" revoke: "Revocar" revoke_confirm: "¿Está seguro de que desea revocar la sesión para \"{device}\"?\n\nEste dispositivo será desconectado inmediatamente." revoke_success: "¡Sesión revocada con éxito!" revoke_error: "Error al revocar la sesión" no_sessions: "No hay sesiones activas" no_sessions_desc: "Actualmente no tiene sesiones activas" danger_zone: "Zona de peligro" danger_zone_desc: "Desconecte todos los demás dispositivos en una sola acción (su sesión actual permanecerá activa)." revoke_all: "Revocar todas las demás sesiones" revoke_all_confirm: "⚠️ ADVERTENCIA\n\n¿Está seguro de que desea revocar TODAS sus demás sesiones?\n\nTodos sus demás dispositivos serán desconectados. Solo su sesión actual permanecerá activa." revoke_all_success: "¡Todas las demás sesiones han sido revocadas!" revoke_all_error: "Error al revocar. Es posible que algunas sesiones no hayan sido revocadas." about_title: "Acerca de las sesiones" about_desc: "Se crea una sesión cada vez que inicia sesión desde un dispositivo o navegador diferente. Revocar una sesión desconecta inmediatamente ese dispositivo. Su sesión actual no puede ser revocada desde esta página (cierre sesión para hacerlo)." back_to_settings: "Volver a configuración" # Navigation menu (navbar) nav: home: "Inicio" settings: "Configuración" admin: "Administración" # User menu user_menu: profile: "Perfil" logout: "Cerrar sesión" settings: "Configuración" # Federación ActivityPub - RFC 0021 fundamentos admin fediverse: settings: title: "Ajustes de federación" breadcrumb: "Federación" heading: "Ajustes de federación ActivityPub" subtitle: "Active y configure la federación con otras instancias Rustwarden y servidores compatibles con ActivityPub. Funcionalidad experimental." card_activation: "Activación" card_trust: "Confianza" card_interop: "Interoperabilidad" card_security: "Seguridad avanzada" enabled_label: "Activar la federación ActivityPub (experimental)" enabled_desc: "Cuando está desactivada, las rutas /admin/fediverse/* distintas de esta página devuelven 404." trust_mode_label: "Modo de confianza" trust_mode_allowlist: "Lista blanca (zero-trust, recomendado)" trust_mode_open: "Abierto con lista de bloqueo (estilo Mastodon)" interop_scope_label: "Alcance de interoperabilidad" interop_scope_rustwarden_only: "Solo Rustwarden (rechazo cortés de otras instancias)" interop_scope_rustwarden_plus: "Rustwarden + lectura universal" interop_scope_open: "Abierto (cualquier instancia ActivityPub)" authorized_fetch_label: "Authorized-fetch" authorized_fetch_desc: "Requerir una firma HTTP para obtener un actor remoto. Activar tras auditoría." save_button: "Guardar" saved_toast: "Ajustes guardados." trust: title: "Dominios de confianza" breadcrumb: "Confianza" heading: "Lista de confianza de la federación" subtitle: "Gestione los dominios aceptados o bloqueados para la federación ActivityPub. El modo activo (lista blanca o lista de bloqueo) se define en la página Ajustes de federación." mode_allowlist: "Modo lista blanca (zero-trust)" mode_blocklist: "Modo lista de bloqueo (estilo Mastodon)" add_legend: "Añadir un dominio" domain_label: "Dominio" domain_placeholder: "ejemplo.tld" note_label: "Nota (opcional)" reason_label: "Motivo del bloqueo (opcional)" severity_label: "Severidad" severity_suspend: "Suspender (rechazo total)" severity_silence: "Silenciar (filtrado discreto)" severity_reject_auth: "Rechazar solo la autenticación" add_button: "Añadir" table_domain: "Dominio" table_note_or_reason: "Nota / Motivo" table_severity: "Severidad" table_created_at: "Añadido el" table_actions: "Acciones" delete_button: "Eliminar" delete_confirm_title: "Confirmar eliminación" delete_confirm_body: "Esta acción es irreversible. El dominio a continuación se eliminará de la lista activa." modal_cancel: "Cancelar" modal_confirm: "Confirmar eliminación" empty_title: "Lista vacía" empty_body: "Ningún dominio configurado. Añada uno para empezar a federar." saved_toast: "Lista actualizada." auth: error: page_title: "Error de autenticación federada" subtitle: "Ocurrió un error durante la autenticación ActivityPub." back_to_login: "Volver al inicio de sesión" timeout: title: "Tiempo de espera agotado" body: "Su instancia de origen no respondió a tiempo. Compruebe que es accesible y vuelva a intentarlo dentro de unos instantes." rejected: title: "Solicitud rechazada" body: "Su instancia de origen rechazó la solicitud de autenticación. Si usted no inició este intento, puede ignorarlo con seguridad." untrusted: title: "Dominio no autorizado" body: "El dominio de su identidad no está en la lista de confianza de esta instancia. Contacte al administrador si cree que es un error." invalid_signature: title: "Firma inválida" body: "No se pudo verificar la firma de su instancia de origen. Esto puede indicar una mala configuración o un intento malicioso." unknown: title: "Error desconocido" body: "Ocurrió un error inesperado. Inténtelo de nuevo o contacte al administrador si el problema persiste." login: page_title: "Inicio de sesión ActivityPub" subtitle: "Inicie sesión con una identidad alojada en otra instancia federada." heading: "Iniciar sesión con una identidad ActivityPub" field_label: "Identidad" field_placeholder: "@user@instancia.tld" field_help: "Formato Mastodon: @ seguido del nombre de usuario, luego @, luego el dominio de la instancia." submit: "Continuar" back_to_login: "Volver al inicio de sesión clásico" waiting: page_title: "Autenticación en curso" subtitle: "Espere mientras su instancia de origen valida la solicitud." heading: "Autenticación en curso…" explainer: "Su instancia de origen debe confirmar su identidad. Esta página se actualizará automáticamente en cuanto llegue una respuesta (hasta 5 minutos)." cancel: "Cancelar" consent: page_title: "Confirmar un inicio de sesión federado" heading: "Una instancia solicita una autenticación" explainer: "Una instancia federada quiere autenticarle en su lado. Verifique el dominio y la identidad a continuación antes de aprobar." label_requester: "Dominio solicitante" label_handle: "Identidad afectada" approve: "Aprobar" reject: "Rechazar" already_decided: "Esta solicitud ya ha sido procesada." queue: title: "Cola de salida de la federación" breadcrumb: "Cola de salida" heading: "Entregas salientes" subtitle: "Panel de actividades ActivityPub a distribuir a instancias remotas. Se muestran las últimas 100 filas." stats_pending: "Pendientes" stats_delivered: "Entregadas" stats_failed: "Fallidas" stats_dead: "Muertas" table_activity: "Actividad" table_target: "Destino" table_status: "Estado" table_attempts: "Intentos" table_last_error: "Último error" table_next_retry: "Próximo reintento" table_created_at: "Creada el" empty_title: "Cola vacía" empty_body: "Ninguna actividad saliente. El worker está sano o la federación aún no ha producido actividad." sessions_remote: title: "Sesiones remotas" breadcrumb: "Sesiones remotas" heading: "Sesiones remotas activas" subtitle: "Identidades federadas que han contactado esta instancia y no están desactivadas. Revocar = marcar como deshabilitada (las sesiones JWT remotas correspondientes serán rechazadas)." kill_switch_legend: "Kill switch por dominio" kill_switch_label: "Desactivar todas las identidades de un dominio" kill_switch_button: "Desactivar el dominio" kill_switch_confirm_title: "Confirmar el kill switch" kill_switch_confirm_body: "Todas las identidades federadas del dominio a continuación se marcarán como deshabilitadas. Esta acción es irreversible desde la UI (un nuevo inicio de sesión federado recreará la fila)." table_handle: "Handle" table_display_name: "Nombre mostrado" table_domain: "Dominio" table_last_seen: "Vista por última vez" table_actions: "Acciones" revoke_button: "Revocar" revoke_confirm_title: "Confirmar la revocación" revoke_confirm_body: "Esta identidad será marcada como deshabilitada. La próxima verificación de JWT remoto la rechazará." modal_cancel: "Cancelar" modal_confirm: "Confirmar" empty_title: "Sin sesiones remotas" empty_body: "Ninguna identidad federada ha contactado aún esta instancia, o todas han sido desactivadas." saved_toast: "Acción realizada." admin: tabs: settings: "Ajustes" trust_list: "Lista de confianza" queue: "Cola de envío" sessions_remote: "Sesiones remotas" nodeinfo: "NodeInfo" invites: "Invitaciones" hub: title: "Federación ActivityPub" subtitle: "Panel de control centralizado para gestionar la federación con otras instancias Rustwarden y compatibles con ActivityPub." card: settings: title: "Ajustes" desc: "Activar la federación, elegir el modo de confianza, el alcance de interoperabilidad y el authorized-fetch." trust_list: title: "Lista de confianza" desc: "Gestionar dominios aceptados (lista blanca) o bloqueados (lista negra)." queue: title: "Cola de envío" desc: "Panel de operador para la cola de entrega saliente (RFC 0011 + RFC 0019)." sessions_remote: title: "Sesiones remotas" desc: "Identidades federadas activas, kill switch por identidad o por dominio." nodeinfo: title: "NodeInfo" desc: "Estadísticas humanizadas de la instancia federada (NodeInfo 2.1)." invites: title: "Invitaciones" desc: "Invitar a una cuenta remota a unirse a un equipo (vista por equipo)." teams_for_invites: title: "Elegir un equipo para gestionar sus invitaciones" breadcrumb: "Invitaciones" heading: "Invitaciones federadas por equipo" subtitle: "Seleccione un equipo para ver y crear invitaciones a cuentas remotas." empty_title: "Sin equipos" empty_body: "Cree primero un equipo para poder invitar cuentas federadas." # Estadísticas NodeInfo (RFC 0024 Slice C iter. 3). Namespace de nivel # superior dedicado para no reabrir `fediverse:` (que sobrescribiría # settings/trust/auth/queue/sessions_remote bajo yaml-rust2). fediverse_nodeinfo: title: "NodeInfo - Estadísticas de federación" breadcrumb: "NodeInfo" heading: "NodeInfo - Estadísticas humanizadas" subtitle: "Vista general de la configuración runtime + estadísticas de usuarios locales e identidades remotas." card_software: "Software" card_runtime: "Configuración runtime" card_users: "Usuarios locales" card_remotes: "Identidades remotas" label_name: "Nombre" label_version: "Versión" label_domain: "Dominio" label_enabled: "Federación activada" label_trust_mode: "Modo de confianza" label_interop_scope: "Alcance interop" label_authorized_fetch: "Authorized-fetch" label_users_total: "Total" label_users_active_month: "Activos 30 días" label_users_active_halfyear: "Activos 180 días" label_remote_identities_active: "Activas" label_remote_distinct_domains: "Dominios distintos" # Invitaciones de equipo entre instancias (RFC 0024 Slice C iter. 4). fediverse_invites: title: "Invitaciones de equipo federado" breadcrumb: "Invitaciones" heading: "Invitaciones entre instancias" subtitle: "Invite a una identidad ActivityPub a unirse al equipo:" add_legend: "Invitar por handle" handle_label: "Handle del usuario" handle_placeholder: "@user@instancia.tld" role_label: "Rol" role_member: "Miembro" role_admin: "Administrador" role_owner: "Propietario" add_button: "Enviar la invitación" table_handle: "Handle invitado" table_role: "Rol" table_status: "Estado" table_created_at: "Enviada el" table_actions: "Acciones" revoke_button: "Revocar" revoke_confirm_title: "Confirmar la revocación" revoke_confirm_body: "La invitación se cancelará. Si ya ha sido aceptada, la identidad será retirada del equipo mediante la señal Revoke{Membership} (RFC 0010)." modal_cancel: "Cancelar" modal_confirm: "Confirmar" empty_title: "Sin invitaciones" empty_body: "Aún no se ha enviado ninguna invitación para este equipo." saved_toast: "Acción realizada." # Apps federadas conectadas (RFC 0024 Slice C iter. 5). fediverse_connected_apps: page_title: "Apps federadas conectadas" heading: "Mis apps federadas conectadas" subtitle: "Instancias ActivityPub donde se ha autenticado utilizando su identidad de este servidor." table_domain: "Instancia" table_count: "Sesiones" table_last_seen: "Última actividad" empty_title: "Sin apps federadas" empty_body: "Aún no ha aprobado ninguna autenticación federada hacia otra instancia." revoke_note: "Nota: la revocación manual de una sesión remota desde esta página estará disponible con la RFC 0006 Fase 2 (lista negra de JWT remoto). Mientras tanto, contacte al administrador a través de /admin/fediverse/sessions_remote o espere a que el JWT expire naturalmente." back_to_profile: "Volver al perfil" # Aceptación de invitación de equipo entre instancias (RFC 0024 Slice C iter. 6). fediverse_invite_landing: page_title: "Invitación de equipo" heading: "Ha recibido una invitación" explainer: "Un equipo de otra instancia federada le invita a unirse. Verifique los detalles a continuación antes de responder." team_label: "Equipo" role_label: "Rol propuesto" status_label: "Estado" accept_button: "Aceptar" reject_button: "Rechazar" already_decided: "Esta invitación ya ha sido procesada." cannot_accept_note: "Para aceptar, debe estar conectado mediante una identidad federada (inicio de sesión desde su instancia de origen). Puede rechazarla desde esta cuenta local, pero la aceptación pasa por el flujo nativo AP." # Página 404 (ruta desconocida) http_errors: not_found_title: "Página no encontrada" not_found_message: "Esta dirección no corresponde a ninguna página." code_label: "Error 404" home: "Volver al inicio" login: "Iniciar sesión" analytics: opt_out: hint: 'Puede oponerse a la medición de audiencia en cualquier momento. Su elección se guarda en su navegador y surte efecto en la próxima carga de página.' opt_out_label: 'Excluirme de la medición de audiencia' opt_in_label: 'Reactivar la medición de audiencia' opted_out_badge: 'Está excluido'
GitRust