export const esMessages = { setup: { welcomeTitle: "Bienvenido a %{title}", welcomeSubtitle: "Para comenzar, debes conectarte a una base de datos de Supabase.", encryptedTitle: "Seguro", encryptedDesc: "Tus datos están protegidos con AES-256", turboTitle: "Turbo", turboDesc: "Optimizado para velocidad y escala", getStarted: "Comenzar", connectionMode: "Modo de conexión", selectVector: "Selecciona tu vector de inicialización", quickIgnition: "Ignición Rápida", autoProvision: "Auto-provisión vía token", manualSync: "Sincronización Manual", existingCredentials: "Usar credenciales existentes", abortAccess: "Abortar Acceso", injectCoordinates: "Inyectar coordenadas de base de datos", platformUrl: "URL de la plataforma", urlHelp: "Encontrado en Configuración del Proyecto > API > URL del Proyecto", anonMatrixKey: "Clave Anon / Matrix", keyHelp: "Encontrado en Configuración del Proyecto > API > clave anon (pública)", back: "Volver", engage: "Conectar", managedTokenTitle: "Token de Forja", managedTokenSubtitle: "Coordenadas API de Supabase", personalAccessToken: "Token de acceso personal", generateAt: "Generar en", scanOrgs: "Escanear Organizaciones", projectConfigTitle: "Config del Proyecto", engineParameters: "Parámetros del motor", projectName: "Nombre del Proyecto", hostingSector: "Sector de Alojamiento", vesselOrg: "Vasija (Organización)", initializeSystem: "Inicializar Sistema", provisioning: "Provisionando", provisioningFailed: "Fallo en el Provisionamiento", provisioningFailedDetails: "Error en el provisionamiento. Consulta los registros anteriores para más detalles.", assemblingInfrastructure: "Ensamblando infraestructura...", checkLogs: "Ver logs para detalles", tryAgain: "Reintentar", useManualConnect: "Usar Conexión Manual en su lugar", installationComplete: "Instalación Completada", installingDatabase: "Instalando Base de Datos", applyingSchemaDna: "Aplicando ADN del esquema...", systemReady: "¡Sistema listo!", tokenRequired: "Token requerido", readyToInstall: "Listo para instalar", managementToken: "Token de Gestión", installDatabaseSchema: "Instalar Esquema de Base de Datos", retryInstallation: "Reintentar Instalación", projectIdRequired: "Se requiere el ID del proyecto para la migración.", tokenDescription: "Se requiere un token de acceso de Supabase para instalar el esquema y sincronizar usuarios.", connectingProvisioning: "Conectando al motor de provisionamiento de Supabase...", projectReady: "✨ ¡Proyecto listo! Inicializando base de datos...", startingMigration: "Iniciando migración de la base de datos...", setupCompleteLog: "🎉 ¡Configuración completada!", checkingDatabase: "Comprobando el estado de la base de datos...", dbNotInitialized: "Base de datos no inicializada. Se requiere migración para configurar el esquema.", dbVersionBehind: "La versión de la base de datos (%{dbVersion}) es anterior a la versión de la aplicación (%{appVersion}). Se recomienda la migración.", dbLegacySchema: "La base de datos utiliza un esquema antiguo pero ya está inicializada y funcionando.", skippingMigration: "✅ Omitiendo migración. ¡Base de datos lista para usar!", reloadingApp: "Recargando la aplicación con las nuevas credenciales...", dbReady: "✅ ¡Base de datos ya configurada y lista!", setupComplete: "¡Configuración completada!", redirecting: "Redirigiendo a tu CRM...", liveFeed: "Transmisión en vivo", awaitingSignals: "Esperando señales del núcleo...", regions: { "us-east-1": "EE. UU. Este (N. Virginia)", "us-west-1": "EE. UU. Oeste (N. California)", "eu-central-1": "Europa (Frankfurt)", "ap-southeast-1": "Asia Pacífico (Singapur)", }, }, crm: { root: { database_checking: "Comprobando la conexión a la base de datos...", }, changelog: { title: "¿Qué hay de nuevo?", }, setup_wizard: { welcome: { title: "Bienvenido a %{title}", subtitle: "Configuración de la base de datos", description: "Para comenzar, necesitas conectar una base de datos Supabase.", no_project: "¿No tienes un proyecto Supabase?", create_free: "Crea uno gratis en", need_title: "Qué necesitarás:", need_url: "Tu URL de proyecto Supabase o ID de proyecto", need_key: "Tu clave API (clave anon o publicable)", find_hint: "¿Dónde encuentro esto?", continue: "Continuar", }, credentials: { title: "Conectar a Supabase", description: "Introduce tus credenciales de proyecto Supabase", url_label: "URL del proyecto o ID", url_placeholder: "xxxxx o https://xxxxx.supabase.co", url_valid: "URL de Supabase válida", url_project_id: "ID de proyecto válido (se expandirá a URL completa)", url_invalid_format: "Formato de URL inválido", url_must_be_supabase: "La URL debe ser un dominio de Supabase", url_hint: "Introduce la URL completa o ID del proyecto", url_expansion: "Se expandirá a: %{url}", url_default_hint: "Introduce la URL completa o solo el ID del proyecto (desde Configuración del proyecto → API)", key_label: "Clave API", key_placeholder: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", key_valid_publishable: "Formato de clave publicable válido", key_valid_anon: "Formato de clave anon válido", key_incomplete_publishable: "La clave publicable parece incompleta", key_incomplete_anon: "La clave anon parece incompleta", key_invalid: "Debe ser una clave API de Supabase válida (anon o publicable)", key_default_hint: "Clave anon o publicable (desde Configuración del proyecto → API)", back: "Atrás", connect: "Conectar", error_failed: "Conexión fallida", }, validating: { title: "Validando conexión", description: "Probando tus credenciales de Supabase...", wait: "Por favor espera...", }, success: { title: "¡Conexión exitosa!", description: "Tu base de datos Supabase está conectada", reloading: "Recargando aplicación...", }, }, nav: { dashboard: "Tablero", contacts: "Contactos", companies: "Empresas", deals: "Negocios", invoices: "Facturas", tasks: "Tareas", ai: "AI", users: "Usuarios", settings: "Mi información", database: "Base de datos", integrations: "Integraciones", back: "Volver", }, view: { table: "Tabla", kanban: "Kanban", }, action: { new_task: "Nueva tarea", new_deal: "Nuevo negocio", }, filter: { active: "Activo", active_filters: "Filtros activos", contact: "Contacto", company: "Empresa", deal: "Negocio", loading: "Cargando...", my_tasks: "Mis tareas", assigned_to: "Asignado a", archived: "Archivado", priority: "Prioridad", remove: "Eliminar filtro %{filter}", search: "Buscar", status: "Estado", }, dashboard: { invoice_revenue: "Ingresos por facturas", deal_pipeline: "Pipeline de oportunidades", upcoming_tasks: "Tareas próximas", task_filters: { overdue: "Vencidas", today: "Hoy", tomorrow: "Mañana", this_week: "Esta semana", later: "Más tarde", }, load_more: "Cargar más", tasks_empty: "Todo al día por ahora.", upcoming_deal_revenue: "Ingresos previstos", revenue: "Ingresos", outstanding_invoices: "Facturas pendientes", deals_chart: { won: "Ganado", lost: "Perdido", }, hot_contacts: "Contactos calientes", create_contact: "Crear contacto", hot_contacts_empty: { line_1: "Aún no hay contactos calientes.", line_2: "Crea un contacto para empezar.", }, latest_activity: "Última actividad", latest_notes: "Últimas notas", notes: { on: "en", added: "añadida", deal: "Negocio", contact: "Contacto", }, pipeline: { title: "Pipeline de negocios", }, stepper: { title: "Primeros pasos", progress: "Paso %{step} de %{total}", install: "Instalar la aplicación", add_contact: "Añadir tu primer contacto", new_contact: "Nuevo contacto", add_note: "Añadir una nota", add_note_hint: "Añade una nota a tu primer contacto.", add_note_button: "Añadir nota", }, welcome: { title: "Bienvenido", body_1: "es un CRM completo que puedes ejecutar localmente.", body_2: "Incluye contactos, empresas, negocios y tareas desde el inicio.", powered_by: "Con tecnología de", fork_of: ", un fork de", by_marmelab: "por Marmelab.", }, }, task: { column: { expand: "Expandir la columna %{column}", collapse: "Contraer la columna %{column}", }, field: { task: "Tarea", type: "Tipo", related_to: "Relacionado con", description: "Descripción", due_date: "Fecha de vencimiento", completed: "Completada", priority: "Prioridad", status: "Estado", assigned_to: "Asignado a", created_by: "Creada por", actions: "Acciones", }, action: { create_task: "Crear tarea", add_task: "Añadir tarea", edit_task: "Editar tarea", edit: "Editar", mark_complete: "Marcar como completada", snooze_tomorrow: "Posponer hasta mañana", postpone_day: "Posponer 1 día", show_details: "Ver detalles", postpone_tomorrow: "Posponer para mañana", postpone_next_week: "Posponer para la próxima semana", menu: "Acciones de la tarea", }, notification: { marked_complete: "Tarea marcada como completada", snoozed_tomorrow: "Tarea pospuesta hasta mañana", postponed_day: "Tarea pospuesta 1 día", created: "Tarea creada", updated: "Tarea actualizada", deleted: "Tarea eliminada", deleted_success: "Tarea eliminada correctamente", move_failed: "No se pudo mover la tarea. Inténtalo de nuevo.", }, note: { marked_complete: "Tarea marcada como completada mediante acción rápida", marked_complete_quick: "Marcada como completada mediante acción rápida", snoozed_to_date: "Fecha de vencimiento pospuesta al %{date}", postponed_to_date: "Fecha de vencimiento pospuesta al %{date}", quick_edit: "Tarea actualizada mediante edición rápida", }, section: { info: "Información", related: "Relacionado", assignment: "Asignación", activity_timeline: "Cronología de actividad", activity_description: "Seguimiento de cambios de estado y actualizaciones de esta tarea", notes: "Notas", notes_description: "Añade notas y actualizaciones a esta tarea", }, related: { none: "Sin entidad relacionada", prefix: "Re:", }, entity_type: { link_to: "Vincular con %{type}", none: "Ninguno", contact: "Contacto", company: "Empresa", deal: "Negocio", }, due: { label: "Vence", relative: "Vence %{time}", no_date: "Sin fecha de vencimiento", overdue_one: "Vencida hace 1 día", overdue_many: "Vencida hace %{count} días", today: "Vence hoy", tomorrow: "Vence mañana", in_days_one: "Vence en 1 día", in_days_many: "Vence en %{count} días", }, activity: { loading: "Cargando actividad...", empty: "No hay actividad registrada.", created: "creó esta tarea", updated: "actualizó esta tarea", updated_field: "cambió %{field}", assigned: "asignó esta tarea", completed: "completó esta tarea", reopened: "reabrió esta tarea", duplicated: "duplicó esta tarea", archived: "archivó esta tarea", truncated: "Mostrando %{count} de %{total} actividades. Las más antiguas no se muestran.", }, dialog: { edit: { title: "Editar tarea", description: "Actualiza los detalles de la tarea, la asignación y la entidad relacionada", }, create: { title: "Crear una nueva tarea", title_for: "Crear una nueva tarea para %{name}", this_record: "este registro", description: "Añade una nueva tarea con descripción, fecha de vencimiento y asignación", }, }, status: { todo: "Por hacer", in_progress: "En progreso", blocked: "Bloqueado", done: "Hecho", cancelled: "Cancelado", other: "Otro", }, priority: { low: "Baja", medium: "Media", high: "Alta", urgent: "Urgente", }, type: { none: "Ninguno", email: "Correo", demo: "Demo", lunch: "Almuerzo", meeting: "Reunión", follow_up: "Seguimiento", thank_you: "Agradecimiento", ship: "Enviar", call: "Llamada", }, }, note: { placeholder: "Añadir una nota", show_options: "Mostrar opciones", options_hint: "(adjuntar archivos o cambiar detalles)", date: "Fecha", added: "Nota añadida", action: { add: "Añadir esta nota", }, status: { cold: "Frío", warm: "Cálido", hot: "Caliente", in_contract: "En contrato", }, }, activity: { added_note: "añadió una nota", added_note_about: "añadió una nota sobre", added_note_about_deal: "añadió una nota sobre el negocio", at: "en", edit_note: "Editar nota", delete_note: "Eliminar nota", note_deleted: "Nota eliminada", cancel: "Cancelar", update_note: "Actualizar nota", added_deal: "añadió el negocio", to_company: "a la empresa", added_company: "añadió la empresa", added: "añadió", pagination: "Mostrando %{from}-%{to} de %{total} actividades", error_load: "Error al cargar el registro de actividad", }, deal: { field: { name: "Nombre del negocio", description: "Descripción", amount: "Monto", expected_closing_date: "Cierre previsto", stage: "Etapa", category: "Categoría", account_manager: "Propietario", budget: "Presupuesto", }, section: { linked_to: "Vinculado a", misc: "Varios", deal_info: "Información del negocio", company: "Empresa", contacts: "Contactos", assignment: "Asignación", notes: "Notas", notes_description: "Seguimiento de conversaciones, decisiones y actualizaciones para este negocio", }, action: { edit: "Editar negocio", create: "Crear negocio", archive: "Archivar", unarchive: "Desarchivar", view_archived: "Ver negocios archivados", }, notification: { archived: "Negocio archivado", unarchived: "Negocio desarchivado", error_archiving: "Error: negocio no archivado", error_unarchiving: "Error: negocio no desarchivado", }, empty: { title: "No se encontraron negocios", description: "Parece que tu lista de negocios está vacía.", no_contacts: "Parece que tu lista de contactos está vacía.", add_contact: "Añade tu primer contacto", before_creating: "antes de crear un negocio.", }, status: { archived: "ARCHIVADO", past: "Pasado", invalid_date: "Fecha inválida", }, placeholder: { select_company: "Por favor, selecciona una empresa primero para ver sus contactos", }, filter: { only_companies_i_manage: "Solo empresas que gestiono", }, list: { archived_title: "Negocios archivados", }, stage: { opportunity: "Oportunidad", proposal_sent: "Propuesta enviada", in_negociation: "En negociación", won: "Ganado", lost: "Perdido", delayed: "Aplazado", }, category: { other: "Otro", copywriting: "Redacción", print_project: "Proyecto de impresión", ui_design: "Diseño UI", website_design: "Diseño de sitios web", }, }, contact: { gender: { male: "Él/Él", female: "Ella/Ella", nonbinary: "Elle/Elle", }, field: { first_name: "Nombre", last_name: "Apellido", title: "Título", company: "Empresa", email: "Correo electrónico", email_addresses: "Direcciones de correo", phone_number: "Número de teléfono", phone_numbers: "Números de teléfono", linkedin_url: "URL de LinkedIn", background: "Información de contexto (biografía, cómo se conocieron, etc.)", has_newsletter: "Tiene boletín", account_manager: "Gerente de cuenta", first_seen: "Añadido el", last_seen_on: "Última actividad el", followed_by: "Seguido por", subscribed_to_newsletter: "Suscrito al boletín", linkedin: "LinkedIn", at: "en", }, section: { identity: "Identidad", position: "Puesto", personal_info: "Información personal", misc: "Varios", activity_timeline: "Cronología de actividad", activity_timeline_description: "Estado de procesamiento en tiempo real de las actividades entrantes", notes: "Notas", notes_description: "Registro permanente de interacciones y resultados", background_info: "Información de contexto", tags: "Etiquetas", tasks: "Tareas", }, action: { edit: "Editar contacto", show: "Ver contacto", create: "Nuevo contacto", export_vcard: "Exportar a vCard", merge_with_another: "Fusionar con otro contacto", import: "Importar", }, type: { work: "Trabajo", home: "Casa", other: "Otro", }, empty: { title: "No se encontraron contactos", description: "Parece que tu lista de contactos está vacía.", }, filter: { last_activity: "Última actividad", today: "Hoy", this_week: "Esta semana", before_this_week: "Antes de esta semana", before_this_month: "Antes de este mes", before_last_month: "Antes del mes pasado", engagement: "Compromiso", engagement_status: { strong: "Fuerte", active: "Activo", cooling: "Enfriando", cold: "Frío", dormant: "Inactivo", }, validation: "Validación", validation_status: { valid: "Email válido", risky: "Email riesgoso", invalid: "Email inválido", }, tags: "Etiquetas", tasks: "Tareas", with_pending_tasks: "Con tareas pendientes", account_manager: "Gerente de cuenta", me: "Yo", search_placeholder: "Buscar nombre, empresa...", }, health: { title: "Salud del contacto", no_data: "Aún no hay datos de salud calculados.", relationship_strength: "Fuerza de la relación", engagement_score: "Puntuación de compromiso", last_activity: "Última actividad: ", days_ago: "hace %{days} días", today: "Hoy", yesterday: "Ayer", contact_validation: "Validación de contacto", bounced: "(rebotado)", validated: "Validado", status: { valid: "Válido", risky: "Riesgoso", invalid: "Inválido", active: "Activo", inactive: "Inactivo", not_found: "No encontrado", }, }, merge: { title: "Fusionar contacto", description: "Fusionar este contacto con otro.", current_contact: "Contacto actual (será eliminado)", target_contact: "Contacto de destino (se mantendrá)", what_will_be_merged: "Qué se fusionará:", notes_to_merge: "%{count} nota será reasignada |||| %{count} notas serán reasignadas", tasks_to_merge: "%{count} tarea será reasignada |||| %{count} tareas serán reasignadas", deals_to_merge: "%{count} negocio será actualizado |||| %{count} negocios serán actualizados", emails_to_merge: "%{count} dirección de email será añadida |||| %{count} direcciones de email serán añadidas", phones_to_merge: "%{count} número de teléfono será añadido |||| %{count} números de teléfono serán añadidos", no_data: "No hay datos adicionales para fusionar", warning_title: "Advertencia: Operación destructiva", warning_message: "Todos los datos se transferirán al segundo contacto. Esta acción no se puede deshacer.", merging: "Fusionando...", merge_contacts: "Fusionar contactos", select_contact: "Por favor, selecciona un contacto para fusionar", success: "Contactos fusionados con éxito", error: "Error al fusionar contactos", }, import: { title: "Importar", description: "Importar contactos desde un archivo CSV", running: "La importación está en curso, por favor no cierres esta pestaña.", status: "Importados %{count} / %{total} contactos, con %{errors} errores.", remaining_time: "Tiempo restante estimado: %{time}.", stop: "Detener importación", error: "Error al importar este archivo, por favor asegúrate de haber proporcionado un archivo CSV válido.", complete: "Importación de contactos completada. Importados %{count} contactos, con %{errors} errores", template_hint: "Aquí tienes un archivo CSV de ejemplo que puedes usar como plantilla", download_sample: "Descargar ejemplo CSV", csv_file: "Archivo CSV", }, }, company: { sector: { communication_services: "Servicios de comunicación", consumer_discretionary: "Consumo discrecional", consumer_staples: "Consumo básico", energy: "Energía", financials: "Finanzas", health_care: "Salud", industrials: "Industriales", information_technology: "Tecnologías de la información", materials: "Materiales", real_estate: "Bienes raíces", utilities: "Servicios públicos", }, field: { name: "Nombre", website: "Sitio web", phone_number: "Número de teléfono", linkedin: "LinkedIn", twitter: "Twitter/X", facebook: "Facebook", github: "GitHub", logo_url: "URL del logotipo", lifecycle_stage: "Etapa del ciclo de vida", company_type: "Tipo de empresa", qualification_status: "Estado de calificación", employee_count: "Número de empleados", revenue_range: "Rango de ingresos", founded_year: "Año de fundación", tax_identifier: "Identificador fiscal", address: "Dirección", city: "Ciudad", zipcode: "Código postal", state: "Estado", country: "País", description: "Descripción", account_manager: "Gerente de cuenta", first_seen: "Añadida el", followed_by: "Seguida por", size: "Tamaño", revenue: "Ingresos", sector: "Sector", context_links: "Enlaces de contexto", }, section: { contact: "Contacto", social_profiles: "Perfiles sociales", context: "Contexto", address: "Dirección", additional_info: "Información adicional", advanced_settings: "Configuración avanzada", external_system_integration: "Integración con sistemas externos", company_info: "Información de la empresa", main_address: "Dirección principal", }, action: { edit: "Editar empresa", show: "Ver empresa", create: "Crear empresa", merge_with_another: "Fusionar con otra empresa", }, empty: { title: "No se encontraron empresas", description: "Parece que tu lista de empresas está vacía.", }, placeholder: { external_id: "ej., ID de cuenta de Salesforce", company_name: "Nombre de la empresa", create_hint: "Comience a escribir para crear una nueva empresa", }, error: { invalid_url: "Debe ser una URL válida", }, notification: { error_creating: "Ocurrió un error al crear la empresa", }, filter: { me: "Yo", }, health: { title: "Salud de la empresa", internal_engagement: "Compromiso interno", engagement_score: "Puntuación de compromiso", last_activity: "Última actividad: ", today: "Hoy", yesterday: "Ayer", days_ago: "hace %{days} días", updated: "Actualizado", external_health: "Salud externa", last_checked: "Última comprobación", status: { engaged: "Comprometido", quiet: "Tranquilo", at_risk: "En riesgo", unresponsive: "Sin respuesta", healthy: "Saludable", risky: "Riesgoso", dead: "Inactivo", unknown: "Desconocido", }, }, size: { 1: "1 empleado", 10: "2-9 empleados", 50: "10-49 empleados", 250: "50-249 empleados", 500: "250 o más empleados", }, merge: { title: "Fusionar empresa", description: "Fusionar esta empresa con otra.", current_contact: "Empresa actual (será eliminada)", target_contact: "Empresa de destino (se mantendrá)", what_will_be_merged: "Qué se fusionará:", contacts_to_merge: "%{count} contacto será reasignado |||| %{count} contactos serán reasignados", deals_to_merge: "%{count} negocio será reasignado |||| %{count} negocios serán reasignados", links_to_merge: "%{count} enlace de contexto será añadido |||| %{count} enlaces de contexto serán añadidos", no_data: "No hay datos adicionales para fusionar", warning_title: "Advertencia: Operación destructiva", warning_message: "Todos los datos se transferirán a la segunda empresa. Esta acción no se puede deshacer.", merging: "Fusionando...", merge_companies: "Fusionar empresas", select_company: "Por favor, selecciona una empresa para fusionar", success: "Empresas fusionadas con éxito", error: "Error al fusionar empresas", }, }, tag: { action: { add: "Añadir etiqueta", create: "Crear nueva etiqueta", }, }, integrations: { title: "Integraciones", description: "Administre claves de API, webhooks y canales de ingesta para integrar RealTimeX CRM con sistemas externos.", tabs: { ingestion: "Canales de ingesta", file_upload: "Carga de archivos", api_keys: "Claves de API", webhooks: "Webhooks (Salientes)", }, webhooks: { description: "Los webhooks notifican a los sistemas externos cuando ocurren eventos en su CRM.", action: { create: "Crear Webhook", create_first: "Cree su primer webhook", edit: "Editar Webhook", delete: "Eliminar", update: "Actualizar", }, empty: "Aún no hay webhooks", loading: "Cargando...", status: { active: "Activo", inactive: "Inactivo", more: "+%{count} más", }, fields: { name: "Nombre", url: "URL del Webhook", events: "Eventos para suscribirse", created: "Creado: %{date}", last_triggered: "Último activado: %{date}", failed_deliveries: "Entregas fallidas: %{count}", }, dialog: { create_title: "Crear Webhook", create_description: "Cree un nuevo webhook para recibir notificaciones de eventos", edit_title: "Editar Webhook", edit_description: "Actualizar la configuración del webhook", delete_title: "¿Eliminar Webhook?", delete_description: "Esto eliminará permanentemente este webhook. No se enviarán más eventos a este punto final. Esta acción no se puede deshacer.", }, placeholder: { name: "ej., Notificaciones de Slack", url: "https://ejemplo.com/webhook", }, notification: { created: "Webhook creado con éxito", updated: "Webhook actualizado con éxito", deleted: "Webhook eliminado con éxito", error_creating: "Error al crear el webhook", error_updating: "Error al actualizar el webhook", error_deleting: "Error al eliminar el webhook", }, categories: { contacts: "Contactos", companies: "Empresas", deals: "Negocios", tasks: "Tareas", invoices: "Facturas", }, events: { "contact.created": "Contacto creado", "contact.updated": "Contacto actualizado", "contact.deleted": "Contacto eliminado", "company.created": "Empresa creada", "company.updated": "Empresa actualizada", "company.deleted": "Empresa eliminada", "deal.created": "Negocio creado", "deal.updated": "Negocio actualizado", "deal.deleted": "Negocio eliminado", "deal.stage_changed": "Etapa del negocio cambiada", "deal.won": "Negocio ganado", "deal.lost": "Negocio perdido", "task.created": "Tarea creada", "task.updated": "Tarea actualizada", "task.assigned": "Tarea asignada", "task.completed": "Tarea completada", "task.priority_changed": "Prioridad de la tarea cambiada", "task.archived": "Tarea archivada", "task.deleted": "Tarea eliminada", "invoice.created": "Factura creada", "invoice.updated": "Factura actualizada", "invoice.deleted": "Factura eliminada", "invoice.status_changed": "Estado de factura cambiado", "invoice.sent": "Factura enviada", }, }, api_keys: { description: "Las claves de API permiten que las aplicaciones externas accedan a los datos de su CRM mediante programación.", action: { create: "Crear clave de API", create_first: "Cree su primera clave de API", copy: "Copiar", copied: "Clave de API completa copiada al portapapeles", done: "Hecho", }, empty: "Aún no hay claves de API", loading: "Cargando...", fields: { name: "Nombre", created: "Creado: %{date}", last_used: "Último uso: %{date}", expires: "Expira: %{date}", key_hint: "Haga clic en copiar para obtener la clave completa sin máscara", not_available: "Clave de API no disponible para copiar", scopes: "Permisos", expiration: "Expiración (opcional)", your_api_key: "Su clave de API", }, dialog: { create_title: "Crear clave de API", create_description: "Cree una nueva clave de API para acceder a la API del CRM", created_title: "Clave de API creada", created_description: "¡Copie esta clave ahora - no se volverá a mostrar!", delete_title: "¿Eliminar clave de API?", delete_description: "Esto eliminará permanentemente esta clave de API. Cualquier aplicación que use esta clave dejará de funcionar inmediatamente. Esta acción no se puede deshacer.", warning_copy: "Asegúrese de copiar su clave de API ahora. ¡No podrá volver a verla!", }, placeholder: { name: "ej., Clave de API de Producción", }, scopes: { "contacts:read": "Contactos: Lectura", "contacts:write": "Contactos: Escritura", "companies:read": "Empresas: Lectura", "companies:write": "Empresas: Escritura", "deals:read": "Negocios: Lectura", "deals:write": "Negocios: Escritura", "tasks:read": "Tareas: Lectura", "tasks:write": "Tareas: Escritura", "invoices:read": "Facturas: Lectura", "invoices:write": "Facturas: Escritura", "activities:write": "Actividades: Escritura (Notas)", }, notification: { created: "Clave de API creada con éxito", deleted: "Clave de API eliminada con éxito", error_creating: "Error al crear la clave de API", error_deleting: "Error al eliminar la clave de API", error_copying: "Error al copiar la clave de API", }, }, file_upload: { title: "Cargar archivos", description: "Cargue documentos, imágenes, archivos de audio o video para crear actividades. Los archivos se almacenan y vinculan automáticamente a su cuenta.", action: { upload: "Cargar", upload_all: "Cargar todo", clear_completed: "Limpiar completados", drop_files: "Suelte los archivos aquí...", drag_and_drop: "Arrastre y suelte archivos aquí, o haga clic para seleccionar", supports_all: "Admite todos los tipos de archivos (ejecutables bloqueados por seguridad)", }, fields: { ingestion_channel: "Canal de ingesta", activity_type: "Tipo de actividad", select_channel: "Seleccionar canal...", files_count: "Archivos (%{count})", }, types: { note: "Nota", email: "Correo electrónico", call: "Grabación de llamada", meeting: "Grabación de reunión", other: "Otro", }, how_it_works: { title: "Cómo funciona", step_1: "Los archivos se cargan directamente en un almacenamiento seguro (sin saturar la base de datos)", step_2: "Cada archivo crea un registro de actividad para seguimiento y búsqueda", step_3: "Los archivos grandes se manejan automáticamente (sin límites de tamaño)", step_4: "Los archivos se vinculan al canal de ingesta seleccionado", step_5: "Las actividades aparecen en el Feed de actividad de inmediato", }, notification: { select_channel: "Por favor, seleccione un canal de ingesta", success: "Archivo cargado: %{name}", error: "Carga fallida: %{name}", error_network: "Error de red", error_status: "La carga falló con el estado %{status}", error_dangerous: "Los archivos ejecutables no están permitidos por razones de seguridad", }, }, ingestion: { title: "Canales de ingesta", description: "Configure canales entrantes (correo electrónico, voz, SMS) para ingerir actividades en su CRM.", action: { create: "Crear canal", add: "Añadir canal de ingesta", add_first: "Añada su primer canal", copy_url: "Copiar URL del Webhook", url_copied: "URL del Webhook copiada al portapapeles", }, empty: "No hay canales de ingesta configurados", loading: "Cargando...", fields: { webhook_url: "URL del Webhook", created: "Creado: %{date}", }, dialog: { create_description: "Configure una nueva fuente para actividades entrantes.", name_label: "Nombre del canal", provider_label: "Proveedor", token_label: "Token de autenticación (Validación)", token_hint: "Requerido para validar solicitudes entrantes.", placeholder_name: "ej. Línea de soporte de EE. UU.", placeholder_token: "Token de autenticación de Twilio", select_provider: "Seleccionar proveedor", delete_title: "¿Eliminar canal?", delete_description: "Esto detendrá toda la ingesta desde esta fuente. Esta acción no se puede deshacer.", }, providers: { twilio: "Twilio (Voz/SMS)", postmark: "Postmark (Email)", generic: "Genérico / Interno", }, notification: { created: "Canal de ingesta creado con éxito", deleted: "Canal eliminado con éxito", error_creating: "Error al crear el canal: %{message}", error_deleting: "Error al eliminar el canal", }, }, }, image_editor: { action: { change: "Cambiar", update: "Actualizar imagen", delete: "Eliminar", }, dialog: { title: "Subir y redimensionar imagen", dropzone: "Arrastra un archivo para subirlo, o haz clic para seleccionarlo.", }, alt: "Contenido editable", }, document_viewer: { error: { docx: "Error al representar el contenido DOCX.", too_large: "Archivo demasiado grande (máx. 50MB). Tamaño: %{size}MB", not_available: "Vista previa no disponible para este tipo de archivo.", access: "No se pudo acceder al archivo. Esto puede deberse a un problema de red, una restricción de CORS o un enlace caducado.", load: "Error al cargar la vista previa del documento.", }, action: { download: "Descargar archivo", open_new_tab: "Abrir en una pestaña nueva", }, }, email_viewer: { error: { parse: "Error al analizar el archivo de correo electrónico", load: "Error al cargar el correo electrónico", }, field: { from: "De", to: "Para", cc: "CC", date: "Fecha", subject_none: "(Sin asunto)", content_none: "(Sin contenido)", attachment: "Adjunto", attachments: "Adjuntos", unknown: "Desconocido", unknown_type: "Tipo desconocido", none: "Ninguno", }, action: { html: "HTML", text: "Texto plano", download_attachment: "Descargar adjunto", }, }, activity_feed: { empty: "Aún no hay actividades.", direction: { inbound: "Entrante", outbound: "Saliente", }, status: { processing: "Procesando", failed: "Fallido", completed: "Completado", }, label: { processing_content: "Procesando contenido...", processing_failed: "Error al procesar.", audio_recording: "Grabación de audio", summary: "Resumen:", }, type: { email: "Correo", call: "Llamada", sms: "SMS", meeting: "Reunión", note: "Nota", }, }, user: { action: { create: "Nuevo usuario", edit: "Editar %{name}", resend_invite: "Reenviar invitación", send_password_reset: "Restablecer contraseña", send_reset_link: "Enviar enlace de restablecimiento", cancel: "Cancelar", sending: "Enviando...", send_invitation: "Enviar invitación", }, field: { administrator: "Admin", disabled: "Desactivado", email_actions: "Acciones de correo", }, section: { create_title: "Crear un nuevo usuario", }, empty: { title: "No se encontraron usuarios", description: "Parece que tu lista de usuarios está vacía.", }, notification: { invite_sent: "Invitación reenviada correctamente", created_invite_sent: "Usuario creado. Correo de invitación enviado.", invite_error: "Error al reenviar la invitación", reset_sent: "Correo de restablecimiento enviado correctamente", reset_error: "Error al enviar el correo de restablecimiento", created: "Usuario creado. Pronto recibirá un correo para establecer su contraseña.", create_error: "Ocurrió un error al crear el usuario.", updated: "Usuario actualizado correctamente", error: "Ocurrió un error. Por favor, inténtelo de nuevo.", }, dialog: { resend_invitation: { title: "Reenviar invitación", description: "¿Enviar un nuevo correo de invitación a %{email}?", fresh_link: "Esto le enviará un nuevo enlace de invitación para configurar su cuenta.", }, reset_password: { title: "Restablecer contraseña", description: "¿Enviar un correo de restablecimiento de contraseña a %{email}?", reset_link: "Esto le enviará un enlace para restablecer su contraseña.", }, }, }, auth: { login_with_code: "Iniciar sesión con código", enter_email_for_code: "Ingrese su correo electrónico para recibir un código de inicio de sesión de 6 dígitos", code_sent: "Se ha enviado un código de 6 dígitos a su correo electrónico", enter_verification_code: "Ingrese el código de verificación", code_sent_to: "Hemos enviado un código de 6 dígitos a %{email}", invalid_code: "Código inválido o expirado. Por favor, inténtelo de nuevo.", verify_code: "Verificar código", verifying: "Verificando...", resend_code: "Reenviar código", back_to_email: "Volver al correo", back_to_login: "Volver al inicio de sesión", no_access: "No tiene acceso a esta aplicación. Por favor, póngase en contacto con su administrador.", login_successful: "¡Inicio de sesión exitoso!", set_new_password: "Establecer nueva contraseña", choose_password_details: "Elija una contraseña segura para su cuenta", password_min_length: "La contraseña debe tener al menos 6 caracteres", passwords_do_not_match: "Las contraseñas no coinciden", password_updated: "Contraseña actualizada correctamente", update_password: "Actualizar contraseña", updating_password: "Actualizando...", failed_to_update_password: "Error al actualizar la contraseña", forgot_password_code_verified: "¡Código verificado! Por favor, establezca su nueva contraseña.", sign_in: "Iniciar sesión", login_otp_link: "Iniciar sesión con código de correo (OTP)", send_code: "Enviar código", }, signup: { title: "Bienvenido a %{title}", subtitle: "Cree la primera cuenta de usuario para completar la configuración.", action: { create: "Crear cuenta", creating: "Creando...", }, notification: { success: "Usuario inicial creado con éxito", error: "Ocurrió un error. Por favor, inténtelo de nuevo.", }, }, settings: { notification: { profile_updated: "Tu perfil ha sido actualizado", error: "Ocurrió un error. Por favor, inténtalo de nuevo", }, action: { change_password: "Cambiar contraseña", }, inbound_email: { title: "Correo entrante", description: "Puedes comenzar a enviar correos electrónicos a la dirección de correo entrante de tu servidor, por ejemplo, agregándola al campo Cc:. RealTimeX CRM procesará los correos y añadirá notas a los contactos correspondientes.", }, database: { title: "Conexión a la base de datos", description: "Administre la configuración de conexión de su base de datos Supabase", connected: "Conectado", not_connected: "No conectado", no_config: "No hay ninguna base de datos Supabase configurada", configured_on: "Configurado el %{date}", env_hint: "Usando la configuración de las variables de entorno. Puede anular esto configurando una nueva conexión a través de la interfaz de usuario.", setup_hint: "Conéctese a una base de datos Supabase para comenzar a usar RealTimeX CRM. Puede crear un proyecto gratuito en", anon_key: "Clave anónima (Anon Key)", confirm_clear: "¿Está seguro de que desea borrar la configuración de la base de datos? La aplicación deberá volver a configurarse en el próximo inicio.", action: { change: "Cambiar conexión", clear: "Borrar configuración", connect: "Conectar a Supabase", }, }, }, migration: { banner: { title: "Actualización de base disponible", subtitle: "El esquema v%{version} está listo para instalarse", view_details: "Ver detalles", later: "Más tarde", command_copied: "¡Comando copiado!", dismiss: "Cerrar", }, modal: { title: "Se requiere migración de base de datos", description: "El esquema de tu base de datos debe actualizarse a v%{version}. Sigue los pasos a continuación para completar la migración.", overview: { title: "Qué ocurrirá:", update_schema: "El esquema de la base se actualizará a v%{version}", enable_features: "Se habilitarán nuevas funciones y mejoras", data_safe: "Tus datos existentes no se verán afectados", duration: "Este proceso suele tardar menos de 2 minutos", }, prerequisites: { title: "Requisitos previos", intro: "Asegúrate de tener lo siguiente:", cli_installed: "CLI de Supabase instalada (ver instalación abajo)", project_id: "Tu ID de proyecto de Supabase:", db_password: "La contraseña de tu base de datos (se te pedirá)", }, install_cli: { title: "Instalar CLI de Supabase (si aún no está instalada)", macos: "macOS / Linux:", windows_scoop: "Windows (Scoop):", windows_npm: "Windows (npm):", view_all: "Ver todos los métodos de instalación", }, run_migration: { title: "Ejecutar comando de migración", intro: "Abre tu terminal y ejecuta:", tool_intro: "La herramienta de migración:", steps: { login: "Te pedirá iniciar sesión en Supabase (si es necesario)", project_id: "Te pedirá el ID del proyecto", password: "Solicitará la contraseña de la base de datos", apply: "Aplicará automáticamente todas las migraciones pendientes", deploy: "Desplegará las funciones Edge actualizadas", }, }, refresh: { title: "Actualizar la aplicación", description: "Cuando la migración termine, actualiza esta página para acceder a las nuevas funciones.", }, troubleshooting: { title: "Solución de problemas:", logout_prefix: "Si falla el inicio de sesión, ejecuta", logout_suffix: "y vuelve a intentarlo", password: "Asegúrate de que la contraseña de la base sea correcta (en el panel de Supabase)", report: "Si el problema continúa, repórtalo en", report_link: "GitHub Issues", }, auto: { tab_title: "✨ Auto-migración (Recomendado)", manual_tab_title: "🛠️ Instrucciones manuales", title: "Migración en un clic", description: "Ejecutaremos automáticamente los scripts de migración por usted.", project_id: "ID del proyecto", access_token: "Token de acceso de Supabase", generate_token: "Generar token", access_token_hint: "Requerido si no has iniciado sesión en la CLI globalmente.", db_password: "Contraseña de la base de datos (Opcional)", db_password_placeholder: "Ingrese solo si su proyecto aún no está vinculado", db_password_hint: "Solo es necesario si es la primera vez que se conecta a este proyecto desde esta máquina.", migrating: "Migrando...", start: "Iniciar migración", logs_placeholder: "Los registros aparecerán aquí...", init_log: "🚀 Inicializando el proceso de migración...", error_prefix: "❌ Error: ", failure_toast: "La migración falló. Vea los registros para más detalles.", missing_project_id: "No se pudo determinar el ID del proyecto a partir de la configuración.", }, close: "Cerrar", copy: { unsupported: "La copia no está disponible en este entorno — copia manualmente.", success: "¡Copiado al portapapeles!", error: "No se pudo copiar — copia manualmente.", copy_label: "Copiar", copied_label: "Copiado", }, }, }, common: { activity: "Actividad", contacts: "1 Contacto |||| %{smart_count} Contactos", notes: "1 Nota |||| %{smart_count} Notas", deals: "1 Trato |||| %{smart_count} Tratos", tasks: "1 Tarea |||| %{smart_count} Tareas", invoices: "1 Factura |||| %{smart_count} Facturas", last_activity: "última actividad hace %{distance}", add_contact: "Añadir contacto", add_invoice: "Añadir factura", }, }, resources: { contacts: { name: "Contacto |||| Contactos", fields: { first_name: "Nombre", last_name: "Apellido", title: "Título", company_id: "Empresa", email: "Correo", phone_number: "Teléfono", linkedin_url: "LinkedIn", sales_id: "Gerente", nb_tasks: "Tareas", last_seen: "Última actividad", }, }, companies: { name: "Empresa |||| Empresas", fields: { name: "Nombre", website: "Sitio web", phone_number: "Teléfono", sector: "Sector", size: "Tamaño", sales_id: "Gerente", nb_contacts: "Contactos", nb_deals: "Negocios", created_at: "Añadido el", context_links: "Enlaces de contexto", }, }, deals: { name: "Negocio |||| Negocios", fields: { name: "Nombre", amount: "Monto", category: "Categoría", stage: "Etapa", company_id: "Empresa", sales_id: "Propietario", }, }, tasks: { name: "Tarea |||| Tareas", fields: { title: "Título", description: "Descripción", type: "Tipo", due_date: "Fecha de vencimiento", status: "Estado", priority: "Prioridad", sales_id: "Asignado a", contact_id: "Contacto", company_id: "Empresa", deal_id: "Negocio", }, }, sales: { name: "Usuario |||| Usuarios", fields: { first_name: "Nombre", last_name: "Apellido", email: "Correo", administrator: "Admin", disabled: "Desactivado", }, }, invoices: { name: "Factura |||| Facturas", fields: { invoice_number: "Nº Factura", reference: "Referencia", company_id: "Empresa", contact_id: "Contacto", deal_id: "Trato", status: "Estado", issue_date: "Fecha de emisión", due_date: "Fecha de vencimiento", paid_at: "Pagado el", currency: "Moneda", subtotal: "Subtotal", discount: "Descuento", tax_total: "Impuesto", total: "Total", amount_paid: "Importe pagado", balance_due: "Saldo pendiente", notes: "Notas", payment_terms: "Condiciones de pago", terms_and_conditions: "Términos y condiciones", sent_at: "Enviado el", viewed_at: "Visto el", created_at: "Creado el", }, status: { draft: "Borrador", sent: "Enviada", paid: "Pagada", overdue: "Vencida", cancelled: "Cancelada", }, section: { details: "Detalles", billing: "Facturar a", items: "Artículos", activity: "Actividad", activity_description: "Seguimiento de actualizaciones y comunicaciones", actions: "Acciones", assigned_to: "Creado por", }, item: { name: "Artículo", description_placeholder: "Añadir detalles...", quantity: "Cant.", unit_price: "Precio unitario", tax: "Impuesto", total: "Total", tax_rate: "Tasa", }, item_type: { service: "Servicio", product: "Producto", hour: "Hora", day: "Día", deposit: "Depósito", }, action: { new_invoice: "Nueva Factura", add_item: "Añadir artículo", edit: "Editar factura", mark_as_sent: "Marcar como enviada", mark_as_paid: "Marcar como pagada", mark_as_cancelled: "Marcar como cancelada", print: "Imprimir", suggest_number: "Sugerir número", export_csv: "Exportar a CSV", send_email: "Enviar por correo", download_pdf: "Descargar PDF", }, notification: { status_updated: "Estado de la factura actualizado a %{status}", email_sent: "La factura #%{number} ha sido enviada al cliente", }, helper: { invoice_number: "Identificador único de factura", reference: "Número de referencia externo opcional", payment_terms: "ej: Neto 30, Al recibir", select_company_for_contacts: "Seleccione una empresa para ver sus contactos", select_company_for_deals: "Seleccione una empresa para ver sus tratos", }, email: { subject: "Asunto", body: "Cuerpo del mensaje", description: "Revise y personalice el mensaje antes de enviarlo al cliente.", body_intro: "Adjunto encontrará su factura #%{number}.", message_label: "Mensaje (Opcional)", message_placeholder: "Añada un mensaje personal...", message_help: "Se generará automáticamente un correo profesional con los detalles de la factura.", attachment_title: "Archivo adjunto PDF", attachment_help: "La factura %{number}.pdf se adjuntará automáticamente", cc: "CC", cc_placeholder: "cc@ejemplo.com, otro@ejemplo.com", }, empty_items: "No hay artículos añadidos", days_overdue: "días de retraso", }, }, ra: { action: { send: "Enviar", sending: "Enviando...", clear_array_input: "Borrar la lista", clear_input_value: "Borrar valor", clone: "Clonar", confirm: "Confirmar", create_item: "Crear %{item}", export: "Exportar", remove_all_filters: "Eliminar todos los filtros", reset: "Restablecer", search: "Buscar", search_columns: "Buscar columnas", select_all: "Seleccionar todo", select_all_button: "Seleccionar todo", select_row: "Seleccionar esta fila", unselect: "Deseleccionar", expand: "Expandir", close: "Cerrar", open_menu: "Abrir menú", close_menu: "Cerrar menú", update: "Actualizar", move_up: "Mover arriba", move_down: "Mover abajo", open: "Abrir", toggle_theme: "Alternar modo claro/oscuro", select_columns: "Columnas", update_application: "Recargar aplicación", }, boolean: { null: " ", }, page: { error: "Algo salió mal", empty: "Aún no hay %{name}.", invite: "¿Quieres agregar uno?", access_denied: "Acceso denegado", authentication_error: "Error de autenticación", }, input: { password: { toggle_visible: "Ocultar contraseña", toggle_hidden: "Mostrar contraseña", }, }, message: { access_denied: "No tienes permisos para acceder a esta página", authentication_error: "El servidor de autenticación devolvió un error y no se pudieron verificar tus credenciales.", auth_error: "Ocurrió un error al validar el token de autenticación.", bulk_update_content: "¿Seguro que deseas actualizar %{name} %{recordRepresentation}? |||| ¿Seguro que deseas actualizar estos %{smart_count} elementos?", bulk_update_title: "Actualizar %{name} %{recordRepresentation} |||| Actualizar %{smart_count} %{name}", clear_array_input: "¿Seguro que deseas borrar toda la lista?", details: "Detalles", error: "Se produjo un error del cliente y no se pudo completar tu solicitud.", select_all_limit_reached: "Hay demasiados elementos para seleccionarlos todos. Solo se seleccionaron los primeros %{max} elementos.", unsaved_changes: "Algunos cambios no se guardaron. ¿Seguro que quieres ignorarlos?", placeholder_data_warning: "Problema de red: la actualización de datos falló.", }, navigation: { no_results: "No se encontraron resultados.", clear_filters: "Limpiar filtros", no_filtered_results: "No se encontraron %{name} con los filtros actuales.", partial_page_range_info: "%{offsetBegin}-%{offsetEnd} de más de %{offsetEnd}", current_page: "Página %{page}", page: "Ir a la página %{page}", first: "Ir a la primera página", last: "Ir a la última página", previous: "Ir a la página anterior", page_rows_per_page: "Filas por página:", skip_nav: "Saltar al contenido", }, sort: { sort_by: "Ordenar por %{field_lower_first} %{order}", ASC: "ascendente", DESC: "descendente", }, auth: { auth_check_error: "Por favor inicia sesión para continuar", user_menu: "Perfil", username: "Nombre de usuario", password: "Contraseña", confirm_password: "Confirmar contraseña", sign_in: "Iniciar sesión", sign_in_error: "Autenticación fallida, por favor inténtalo de nuevo", logout: "Cerrar sesión", email: "Correo electrónico", }, notification: { data_provider_error: "Error del dataProvider. Revisa la consola para más detalles.", i18n_error: "No se pueden cargar las traducciones para el idioma especificado", logged_out: "Tu sesión ha finalizado, por favor vuelve a iniciar sesión.", not_authorized: "No estás autorizado para acceder a este recurso.", application_update_available: "Hay una nueva versión disponible.", offline: "Sin conectividad. No se pudieron obtener los datos.", }, validation: { unique: "Debe ser único", }, saved_queries: { label: "Consultas guardadas", query_name: "Nombre de la consulta", new_label: "Guardar consulta actual...", new_dialog_title: "Guardar consulta actual como", remove_label: "Eliminar consulta guardada", remove_label_with_name: 'Eliminar consulta "%{name}"', remove_dialog_title: "¿Eliminar consulta guardada?", remove_message: "¿Seguro que quieres eliminar ese elemento de tu lista de consultas guardadas?", help: "Filtra la lista y guarda esta consulta para más tarde", }, configurable: { customize: "Personalizar", configureMode: "Configurar esta página", inspector: { title: "Inspector", content: "Pasa el cursor sobre los elementos de la interfaz para configurarlos", reset: "Restablecer configuración", hideAll: "Ocultar todo", showAll: "Mostrar todo", }, Datagrid: { title: "Tabla", unlabeled: "Columna sin etiqueta #%{column}", }, SimpleForm: { title: "Formulario", unlabeled: "Campo sin etiqueta #%{input}", }, SimpleList: { title: "Lista", primaryText: "Texto principal", secondaryText: "Texto secundario", tertiaryText: "Texto terciario", }, }, }, "ra-supabase": { auth: { password_reset: "Revisa tu correo para el mensaje de restablecimiento de contraseña.", }, reset_password: { forgot_password: "¿Olvidó su contraseña?", forgot_password_details: "Ingrese su correo electrónico para recibir un código de 6 dígitos.", }, }, };