Files
Home-Assistant/custom_components/ha_washdata/translations/es.json
T
2026-06-14 02:01:49 -04:00

1342 lines
78 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"config": {
"step": {
"user": {
"title": "Configuración de WashData",
"description": "Configura tu lavadora u otro electrodoméstico.\n\nSe requiere un sensor de potencia.\n\n**A continuación, se te preguntará si deseas crear tu primer perfil.**",
"data": {
"name": "Nombre del dispositivo",
"device_type": "Tipo de dispositivo",
"power_sensor": "Sensor de potencia",
"min_power": "Umbral mínimo de potencia (W)"
},
"data_description": {
"name": "Un nombre descriptivo para este dispositivo (p. ej., «Lavadora», «Lavavajillas»).",
"device_type": "¿Qué tipo de electrodoméstico es este? Ayuda a personalizar la detección y el etiquetado.",
"power_sensor": "La entidad de sensor que informa el consumo de potencia en tiempo real (en vatios) desde tu enchufe inteligente.",
"min_power": "Las lecturas de potencia por encima de este umbral (en vatios) indican que el electrodoméstico está en funcionamiento. Empieza con 2 W para la mayoría de los dispositivos."
}
},
"first_profile": {
"title": "Crear primer perfil",
"description": "Un **Ciclo** es una ejecución completa del electrodoméstico (p. ej., una carga de ropa). Un **Perfil** agrupa estos ciclos por tipo (p. ej., «Algodón», «Lavado rápido»). Crear un perfil ahora ayuda a la integración a estimar la duración de inmediato.\n\nPuedes seleccionar este perfil manualmente en los controles del dispositivo si no se detecta automáticamente.\n\n**Deja el «Nombre del perfil» vacío para omitir este paso.**",
"data": {
"profile_name": "Nombre del perfil (opcional)",
"manual_duration": "Duración estimada (minutos)"
}
}
},
"error": {
"cannot_connect": "No se pudo conectar",
"invalid_auth": "Autenticación no válida",
"unknown": "Error inesperado"
},
"abort": {
"already_configured": "El dispositivo ya está configurado"
}
},
"options": {
"step": {
"init": {
"menu_options": {
"learning_feedbacks": "Revisar retroalimentación de aprendizaje",
"settings": "Ajustes",
"notifications": "Notificaciones",
"manage_cycles": "Gestionar ciclos",
"manage_profiles": "Gestionar perfiles",
"manage_phase_catalog": "Gestionar catálogo de fases",
"record_cycle": "Registrar ciclo (manual)",
"diagnostics": "Diagnóstico y mantenimiento"
}
},
"apply_suggestions": {
"title": "Copiar valores sugeridos",
"description": "Esto copiará los valores sugeridos actuales en tu configuración guardada. Esta es una acción única y no habilita sobreescrituras automáticas.\n\nValores sugeridos para copiar:\n{suggested}",
"data": {
"confirm": "Confirmar copia"
}
},
"apply_suggestions_confirm": {
"title": "Revisar cambios sugeridos",
"description": "WashData encontró **{pending_count}** valores sugeridos para aplicar.\n\nCambios:\n{changes}\n\n✅ Marque la casilla a continuación y haga clic en **Enviar** para aplicar y guardar estos cambios inmediatamente.\n❌ Déjalo sin marcar y haz clic en **Enviar** para cancelar y regresar.",
"data": {
"confirm_apply_suggestions": "Aplicar y guardar estos cambios."
}
},
"settings": {
"title": "Ajustes",
"description": "{deprecation_warning}Ajusta los umbrales de detección, el aprendizaje y el comportamiento avanzado. Los valores predeterminados funcionan bien para la mayoría de las configuraciones.\n\nAjustes sugeridos disponibles actualmente: {suggestions_count}.\nSi es mayor que 0, abre Configuración avanzada y usa Aplicar valores sugeridos para revisar las recomendaciones.",
"data": {
"apply_suggestions": "Aplicar valores sugeridos",
"device_type": "Tipo de dispositivo",
"power_sensor": "Entidad del sensor de potencia",
"min_power": "Potencia mínima (W)",
"off_delay": "Retraso de fin de ciclo (s)",
"notify_actions": "Acciones de notificación",
"notify_people": "Retrasar entrega hasta que estas personas estén en casa",
"notify_only_when_home": "Retrasar notificaciones hasta que la persona seleccionada esté en casa",
"notify_fire_events": "Disparar eventos de automatización",
"notify_start_services": "Inicio del ciclo: objetivos de notificación",
"notify_finish_services": "Fin del ciclo: objetivos de notificación",
"notify_live_services": "Progreso en vivo: objetivos de notificación",
"notify_before_end_minutes": "Notificación previa a la finalización (minutos antes del final)",
"notify_title": "Título de la notificación",
"notify_icon": "Icono de notificación",
"notify_start_message": "Formato del mensaje de inicio",
"notify_finish_message": "Formato del mensaje de finalización",
"notify_pre_complete_message": "Formato del mensaje previo a la finalización",
"show_advanced": "Editar configuración avanzada (siguiente paso)"
},
"data_description": {
"apply_suggestions": "Marca esta casilla para copiar los valores sugeridos por el algoritmo de aprendizaje en el formulario. Revisa antes de guardar.\n\nSugerido (del aprendizaje):\n- min_power: {suggested_min_power} W\n- off_delay: {suggested_off_delay} s\n- watchdog_interval: {suggested_watchdog_interval} s\n- no_update_active_timeout: {suggested_no_update_active_timeout} s\n- profile_match_interval: {suggested_profile_match_interval} s\n- auto_label_confidence: {suggested_auto_label_confidence}\n- duration_tolerance: {suggested_duration_tolerance}\n- profile_duration_tolerance: {suggested_profile_duration_tolerance}\n- profile_match_min_duration_ratio: {suggested_profile_match_min_duration_ratio}\n- profile_match_max_duration_ratio: {suggested_profile_match_max_duration_ratio}\n- start_threshold_w: {suggested_start_threshold_w} W\n- stop_threshold_w: {suggested_stop_threshold_w} W\n- end_energy_threshold: {suggested_end_energy_threshold} Wh\n- running_dead_zone: {suggested_running_dead_zone} s\n{suggested_reason}",
"device_type": "Selecciona el tipo de electrodoméstico (Lavadora, Secadora, Lavavajillas, Cafetera, Vehículo eléctrico). Esta etiqueta se almacena con cada ciclo para una mejor organización.",
"power_sensor": "La entidad de sensor que informa la potencia en tiempo real (en vatios). Puedes cambiarla en cualquier momento sin perder datos históricos, lo cual es útil si reemplazas un enchufe inteligente.",
"min_power": "Las lecturas de potencia por encima de este umbral (en vatios) indican que el electrodoméstico está en funcionamiento. Empieza con 2 W para la mayoría de los dispositivos.",
"off_delay": "Segundos que la potencia suavizada debe mantenerse por debajo del umbral de parada para marcar la finalización. Predeterminado: 120 s.",
"notify_actions": "Secuencia de acciones opcional de Home Assistant para notificaciones (scripts, notify, TTS, etc.). Si se configura, las acciones se ejecutan antes del servicio de notificación de reserva.",
"notify_people": "Entidades de personas usadas para control de presencia. Cuando está habilitado, la entrega de notificaciones se retrasa hasta que al menos una persona seleccionada esté en casa.",
"notify_only_when_home": "Si está habilitado, retrasa las notificaciones hasta que al menos una persona seleccionada esté en casa.",
"notify_fire_events": "Si está habilitado, dispara eventos de Home Assistant para el inicio y fin de ciclo (ha_washdata_cycle_started y ha_washdata_cycle_ended) para automatizaciones.",
"notify_start_services": "Uno o más servicios de notificación para alertar cuando comienza un ciclo. Déjelo vacío para omitir las notificaciones de inicio.",
"notify_finish_services": "Uno o más servicios de notificación para alertar cuando un ciclo finaliza o está a punto de completarse. Déjelo vacío para omitir las notificaciones de finalización.",
"notify_live_services": "Uno o más servicios de notificación para recibir actualizaciones de progreso en vivo mientras se ejecuta el ciclo (solo aplicación móvil complementaria). Déjelo vacío para omitir las actualizaciones en vivo.",
"notify_before_end_minutes": "Minutos antes del fin estimado del ciclo para activar una notificación. Pon 0 para deshabilitar. Predeterminado: 0.",
"notify_title": "Título personalizado para notificaciones. Admite el marcador {device}.",
"notify_icon": "Icono para notificaciones (p. ej., mdi:washing-machine). Deja vacío para enviar sin icono.",
"notify_start_message": "Mensaje enviado cuando comienza un ciclo. Admite el marcador {device}.",
"notify_finish_message": "Mensaje enviado cuando finaliza un ciclo. Admite los marcadores {device}, {duration}, {program}, {energy_kwh}, {cost}.",
"notify_pre_complete_message": "Texto de las actualizaciones recurrentes del progreso en vivo mientras se ejecuta el ciclo. Admite marcadores de posición {device}, {minutes}, {program}."
}
},
"notifications": {
"title": "Notificaciones",
"description": "Configura los canales de notificación, las plantillas y las actualizaciones opcionales de progreso en vivo para móviles.",
"data": {
"notify_actions": "Acciones de notificación",
"notify_people": "Retrasar entrega hasta que estas personas estén en casa",
"notify_only_when_home": "Retrasar notificaciones hasta que la persona seleccionada esté en casa",
"notify_fire_events": "Disparar eventos de automatización",
"notify_start_services": "Inicio del ciclo: objetivos de notificación",
"notify_finish_services": "Fin del ciclo: objetivos de notificación",
"notify_live_services": "Progreso en vivo: objetivos de notificación",
"notify_before_end_minutes": "Notificación previa a la finalización (minutos antes del final)",
"notify_live_interval_seconds": "Intervalo de actualización en vivo (segundos)",
"notify_live_overrun_percent": "Margen de sobrepasar el tiempo estimado en actualizaciones en vivo (%)",
"notify_live_chronometer": "Temporizador de cuenta atrás del cronómetro",
"notify_title": "Título de la notificación",
"notify_icon": "Icono de notificación",
"notify_start_message": "Formato del mensaje de inicio",
"notify_finish_message": "Formato del mensaje de finalización",
"notify_pre_complete_message": "Formato del mensaje previo a la finalización",
"energy_price_entity": "Precio de la energía: entidad (opcional)",
"energy_price_static": "Precio de la energía: valor estático (opcional)",
"go_back": "Volver sin guardar",
"notify_reminder_message": "Formato de mensaje de recordatorio",
"notify_timeout_seconds": "Auto-desestimación Después (segundos)",
"notify_channel": "Canal de notificación (Estado/live/reminder)",
"notify_finish_channel": "Canal de notificación terminado"
},
"data_description": {
"go_back": "Marca esto y haz clic en Enviar para descartar los cambios anteriores y volver al menú principal.",
"notify_actions": "Secuencia de acciones opcional de Home Assistant para notificaciones (scripts, notify, TTS, etc.). Si se configura, las acciones se ejecutan antes del servicio de notificación de reserva.",
"notify_people": "Entidades de personas usadas para control de presencia. Cuando está habilitado, la entrega de notificaciones se retrasa hasta que al menos una persona seleccionada esté en casa.",
"notify_only_when_home": "Si está habilitado, retrasa las notificaciones hasta que al menos una persona seleccionada esté en casa.",
"notify_fire_events": "Si está habilitado, dispara eventos de Home Assistant para el inicio y fin de ciclo (ha_washdata_cycle_started y ha_washdata_cycle_ended) para automatizaciones.",
"notify_start_services": "Uno o más servicios de notificación para avisar cuando comienza un ciclo (por ejemplo, notify.mobile_app_my_phone). Déjelo vacío para omitir las notificaciones de inicio.",
"notify_finish_services": "Uno o más servicios de notificación para alertar cuando un ciclo finaliza o está a punto de completarse. Déjelo vacío para omitir las notificaciones de finalización.",
"notify_live_services": "Uno o más servicios de notificación para recibir actualizaciones de progreso en vivo mientras se ejecuta el ciclo (solo aplicación móvil complementaria). Déjelo vacío para omitir las actualizaciones en vivo.",
"notify_before_end_minutes": "Minutos antes del fin estimado del ciclo para activar una notificación. Pon 0 para deshabilitar. Predeterminado: 0.",
"notify_live_interval_seconds": "Con qué frecuencia se envían actualizaciones de progreso durante el funcionamiento. Los valores más bajos son más responsivos pero consumen más notificaciones. Se aplica un mínimo de 30 segundos; los valores por debajo de 30 s se redondean automáticamente a 30 s.",
"notify_live_overrun_percent": "Margen de seguridad sobre el recuento estimado de actualizaciones para ciclos largos o que se extienden (p. ej., el 20% permite 1,2 veces las actualizaciones estimadas).",
"notify_live_chronometer": "Cuando está habilitada, cada actualización en vivo incluye una cuenta regresiva del cronómetro hasta el tiempo estimado de finalización. El temporizador de notificaciones avanza automáticamente en el dispositivo entre actualizaciones (solo aplicación complementaria de Android).",
"notify_title": "Título personalizado para notificaciones. Admite el marcador {device}.",
"notify_icon": "Icono para notificaciones (p. ej., mdi:washing-machine). Deja vacío para enviar sin icono.",
"notify_start_message": "Mensaje enviado cuando comienza un ciclo. Admite el marcador {device}.",
"notify_finish_message": "Mensaje enviado cuando finaliza un ciclo. Admite los marcadores {device}, {duration}, {program}, {energy_kwh}, {cost}.",
"energy_price_entity": "Seleccione una entidad numérica que contenga el precio actual de la electricidad (por ejemplo, sensor.electricity_price, input_number.energy_rate). Cuando está configurado, habilita el marcador de posición {cost}. Tiene prioridad sobre el valor estático si ambos están configurados.",
"energy_price_static": "Precio fijo de la electricidad por kWh. Cuando está configurado, habilita el marcador de posición {cost}. Se ignora si una entidad está configurada arriba. Agregue su símbolo de moneda en la plantilla de mensaje, p. {cost}€.",
"notify_reminder_message": "Texto del recordatorio de una sola vez envió el número configurado de minutos antes del final estimado. Distinto de las actualizaciones en vivo recurrentes arriba. Apoyo {device}, {minutes}, {program} propietarios de puestos.",
"notify_timeout_seconds": "Descargue automáticamente las notificaciones después de estos muchos segundos (en adelante como la aplicación de acompañamiento 'timeout'). Se establece a 0 para mantenerlos hasta que sea despedido. Predeterminado: 0.",
"notify_channel": "Android canal de notificación de aplicaciones acompañantes para el estado, progreso en vivo y notificaciones de recordatorio. El sonido y la importancia de un canal se configuran en la aplicación compañera la primera vez que se utiliza el nombre del canal - WashData sólo establece el nombre del canal. Deja vacío para el defecto de la aplicación.",
"notify_finish_channel": "Separar Android canal para la alerta terminada (también utilizado por el recordatorio y el aviso persistente de espera de la colada) para que pueda tener su propio sonido. Deja vacío para reutilizar el canal de arriba.",
"notify_pre_complete_message": "Texto de las actualizaciones recurrentes del progreso en vivo mientras se ejecuta el ciclo. Admite marcadores de posición {device}, {minutes}, {program}."
}
},
"advanced_settings": {
"title": "Configuración avanzada",
"description": "Ajusta los umbrales de detección, el aprendizaje y el comportamiento avanzado. Los valores predeterminados funcionan bien para la mayoría de las configuraciones.",
"sections": {
"suggestions_section": {
"name": "Ajustes sugeridos",
"description": "{suggestions_count} sugerencias aprendidas disponibles. Marca Aplicar valores sugeridos para revisar los cambios propuestos antes de guardar.",
"data": {
"apply_suggestions": "Aplicar valores sugeridos"
},
"data_description": {
"apply_suggestions": "Marca esta casilla para abrir un paso de revisión de los valores sugeridos por el algoritmo de aprendizaje. Nada se guarda automáticamente.\n\nSugerido (del aprendizaje):\n- min_power: {suggested_min_power} W\n- off_delay: {suggested_off_delay} s\n- watchdog_interval: {suggested_watchdog_interval} s\n- no_update_active_timeout: {suggested_no_update_active_timeout} s\n- profile_match_interval: {suggested_profile_match_interval} s\n- auto_label_confidence: {suggested_auto_label_confidence}\n- duration_tolerance: {suggested_duration_tolerance}\n- profile_duration_tolerance: {suggested_profile_duration_tolerance}\n- profile_match_min_duration_ratio: {suggested_profile_match_min_duration_ratio}\n- profile_match_max_duration_ratio: {suggested_profile_match_max_duration_ratio}\n- start_threshold_w: {suggested_start_threshold_w} W\n- stop_threshold_w: {suggested_stop_threshold_w} W\n- end_energy_threshold: {suggested_end_energy_threshold} Wh\n- running_dead_zone: {suggested_running_dead_zone} s\n{suggested_reason}"
}
},
"detection_section": {
"name": "Detección y umbrales de potencia",
"description": "Cuándo se considera que el aparato está ENCENDIDO o APAGADO, umbrales de energía y temporización de las transiciones de estado.",
"data": {
"start_duration_threshold": "Duración de antirrebote de inicio (s)",
"start_energy_threshold": "Umbral de energía de inicio (Wh)",
"completion_min_seconds": "Tiempo mínimo de ejecución para completar (segundos)",
"start_threshold_w": "Umbral de inicio (W)",
"stop_threshold_w": "Umbral de parada (W)",
"end_energy_threshold": "Umbral de energía de fin (Wh)",
"running_dead_zone": "Zona muerta en ejecución (segundos)",
"end_repeat_count": "Recuento de repeticiones de fin",
"min_off_gap": "Brecha mínima entre ciclos (s)",
"sampling_interval": "Intervalo de muestreo (s)"
},
"data_description": {
"start_duration_threshold": "Ignora los picos breves de potencia más cortos que esta duración (segundos). Filtra picos de arranque (p. ej., 60 W durante 2 s) antes del inicio real del ciclo. Predeterminado: 5 s.",
"start_energy_threshold": "El ciclo debe acumular al menos esta energía (Wh) durante la fase de INICIO para confirmarse. Predeterminado: 0,005 Wh.",
"completion_min_seconds": "Los ciclos más cortos se marcarán como «interrumpidos» incluso si finalizan de forma natural. Predeterminado: 600 s.",
"start_threshold_w": "La potencia debe superar ESTE umbral para INICIAR un ciclo. Configúralo por encima de tu potencia en espera. Predeterminado: min_power + 1 W.",
"stop_threshold_w": "La potencia debe caer POR DEBAJO de este umbral para FINALIZAR un ciclo. Configúralo justo por encima de cero para evitar que el ruido provoque finales falsos. Predeterminado: 0,6 × min_power.",
"end_energy_threshold": "El ciclo finaliza solo si la energía en la última ventana de retraso de apagado está por debajo de este valor (Wh). Evita finales falsos si la potencia fluctúa cerca de cero. Predeterminado: 0,05 Wh.",
"running_dead_zone": "Tras el inicio del ciclo, ignora las caídas de potencia durante estos segundos para evitar la detección falsa del final durante la fase de arranque. Pon 0 para deshabilitar. Predeterminado: 0 s.",
"end_repeat_count": "Número de veces que la condición de fin (potencia por debajo del umbral durante off_delay) debe cumplirse consecutivamente antes de finalizar el ciclo. Valores más altos evitan finales falsos durante las pausas. Predeterminado: 1.",
"min_off_gap": "Si un ciclo comienza dentro de estos segundos tras finalizar el anterior, se FUSIONARÁN en un único ciclo.",
"sampling_interval": "Intervalo mínimo de muestreo en segundos. Se ignorarán las actualizaciones más rápidas que esta velocidad. Valor predeterminado: 30 s (2 s para lavadoras, lavadoras-secadoras y lavavajillas)."
}
},
"matching_section": {
"name": "Coincidencia de perfiles y aprendizaje",
"description": "Qué tan agresivamente WashData hace coincidir los ciclos en curso con los perfiles aprendidos y cuándo pedir comentarios.",
"data": {
"profile_match_min_duration_ratio": "Proporción mínima de duración para coincidencia de perfil (0,1-1,0)",
"profile_match_interval": "Intervalo de coincidencia de perfil (segundos)",
"profile_match_threshold": "Umbral de coincidencia de perfil",
"profile_unmatch_threshold": "Umbral de no coincidencia de perfil",
"auto_label_confidence": "Confianza de etiquetado automático (0-1)",
"learning_confidence": "Confianza mínima para solicitar retroalimentación (0-1)",
"suppress_feedback_notifications": "Suprimir notificaciones de comentarios",
"duration_tolerance": "Tolerancia de duración (0-0,5)",
"smoothing_window": "Ventana de suavizado (muestras)",
"profile_duration_tolerance": "Tolerancia de duración para coincidencia de perfil (0-0,5)"
},
"data_description": {
"profile_match_min_duration_ratio": "Proporción mínima de duración para la coincidencia de perfil. El ciclo en ejecución debe ser al menos esta fracción de la duración del perfil para coincidir. Más bajo = coincidencia más temprana. Predeterminado: 0,50 (50%).",
"profile_match_interval": "Con qué frecuencia (en segundos) intentar la coincidencia de perfil durante un ciclo. Los valores más bajos dan una detección más rápida pero usan más CPU. Predeterminado: 300 s (5 minutos).",
"profile_match_threshold": "Puntuación mínima de similitud DTW (0,01,0) requerida para considerar un perfil como coincidencia. Más alto = coincidencia más estricta, menos falsos positivos. Predeterminado: 0,4.",
"profile_unmatch_threshold": "Puntuación de similitud DTW (0,01,0) por debajo de la cual se rechaza un perfil previamente coincidente. Debe ser inferior al umbral de coincidencia para evitar parpadeos. Predeterminado: 0,35.",
"auto_label_confidence": "Etiqueta automáticamente los ciclos con esta confianza o superior al finalizar (0,01,0).",
"learning_confidence": "Confianza mínima para solicitar verificación del usuario mediante un evento (0,01,0).",
"suppress_feedback_notifications": "Cuando está habilitado, WashData seguirá rastreando y solicitando comentarios internamente, pero no mostrará notificaciones persistentes pidiéndole que confirme los ciclos. Útil cuando los ciclos siempre se detectan correctamente y las indicaciones le distraen.",
"duration_tolerance": "Tolerancia para las estimaciones de tiempo restante durante una ejecución (0,00,5 corresponde a 050%).",
"smoothing_window": "Número de lecturas de potencia recientes usadas para el suavizado de media móvil.",
"profile_duration_tolerance": "Tolerancia usada por la coincidencia de perfil para la variación de duración total (0,00,5). Comportamiento predeterminado: ±25%."
}
},
"timing_section": {
"name": "Tiempo, mantenimiento y depuración",
"description": "Watchdog, reinicio del progreso, mantenimiento automático y exposición de entidades de depuración.",
"data": {
"watchdog_interval": "Intervalo de vigilancia (segundos)",
"no_update_active_timeout": "Tiempo de espera sin actualización (s)",
"progress_reset_delay": "Retraso de restablecimiento del progreso (segundos)",
"auto_maintenance": "Habilitar mantenimiento automático",
"expose_debug_entities": "Exponer entidades de depuración",
"save_debug_traces": "Guardar trazas de depuración"
},
"data_description": {
"watchdog_interval": "Segundos entre comprobaciones de vigilancia durante la ejecución. Predeterminado: 5 s. ADVERTENCIA: Asegúrate de que sea MAYOR que el intervalo de actualización de tu sensor para evitar paradas falsas (p. ej., si el sensor se actualiza cada 60 s, usa 65 s o más).",
"no_update_active_timeout": "Para sensores que publican solo al cambiar: fuerza el fin de un ciclo ACTIVO solo si no llegan actualizaciones durante estos segundos. La finalización de bajo consumo sigue usando el retraso de apagado.",
"progress_reset_delay": "Tras completar un ciclo (100%), espera estos segundos de inactividad antes de restablecer el progreso al 0%. Predeterminado: 300 s.",
"auto_maintenance": "Habilitar mantenimiento automático (reparar muestras, fusionar fragmentos).",
"expose_debug_entities": "Mostrar sensores avanzados (Confianza, Fase, Ambigüedad) para depuración.",
"save_debug_traces": "Almacenar datos detallados de clasificación y trazas de potencia en el historial (aumenta el uso de almacenamiento)."
}
},
"anti_wrinkle_section": {
"name": "Escudo antiarrugas (secadoras)",
"description": "Ignora los giros del tambor tras el ciclo para evitar ciclos fantasma. Solo secadora / lavasecadora.",
"data": {
"anti_wrinkle_enabled": "Escudo antiarrugas (solo secadora/lavadora-secadora)",
"anti_wrinkle_max_power": "Potencia máxima antiarrugas (W) (solo secadora/lavadora-secadora)",
"anti_wrinkle_max_duration": "Duración máxima antiarrugas (s) (solo secadora/lavadora-secadora)",
"anti_wrinkle_exit_power": "Potencia de salida antiarrugas (W) (solo secadora/lavadora-secadora)"
},
"data_description": {
"anti_wrinkle_enabled": "Ignora las breves rotaciones del tambor a baja potencia tras el fin de un ciclo para evitar ciclos fantasma (solo secadora/lavadora-secadora).",
"anti_wrinkle_max_power": "Las ráfagas a esta potencia o por debajo se tratan como rotaciones antiarrugas en lugar de nuevos ciclos. Solo se aplica cuando el Escudo antiarrugas está habilitado.",
"anti_wrinkle_max_duration": "Duración máxima de ráfaga para tratar como rotación antiarrugas. Solo se aplica cuando el Escudo antiarrugas está habilitado.",
"anti_wrinkle_exit_power": "Si la potencia cae por debajo de este nivel, sale del modo antiarrugas inmediatamente (apagado real). Solo se aplica cuando el Escudo antiarrugas está habilitado."
}
},
"delay_start_section": {
"name": "Detección de inicio diferido",
"description": "Trata el modo de espera sostenido de baja potencia como 'Esperando para iniciar' hasta que el ciclo comience realmente.",
"data": {
"delay_start_detect_enabled": "Habilitar la detección de inicio retrasado",
"delay_confirm_seconds": "Inicio diferido: tiempo de confirmación en espera (s)",
"delay_timeout_hours": "Inicio retrasado: tiempo máximo de espera (h)"
},
"data_description": {
"delay_start_detect_enabled": "Cuando está habilitado, se detecta un breve pico de consumo de baja potencia seguido de energía de reserva sostenida como un inicio retrasado. El sensor de estado muestra \"Esperando para comenzar\" durante el retraso. No se realiza un seguimiento del tiempo ni del progreso del programa hasta que el ciclo realmente comienza. Requiere que start_threshold_w se establezca por encima de la potencia del pico de drenaje.",
"delay_confirm_seconds": "La potencia debe permanecer entre Umbral de parada (W) y Umbral de inicio (W) durante este número de segundos antes de que WashData pase a 'Esperando para iniciar'. Filtra picos breves al navegar por menús. Predeterminado: 60 s.",
"delay_timeout_hours": "Tiempo de espera de seguridad: si la máquina todavía está en 'Esperando para iniciar' después de tantas horas, WashData se restablece en Apagado. Predeterminado: 8 h."
}
},
"external_triggers_section": {
"name": "Disparadores externos, puerta y pausa",
"description": "Sensor externo opcional de fin de ciclo, sensor de puerta para detección de pausa/limpio e interruptor de corte de energía al pausar.",
"data": {
"external_end_trigger_enabled": "Habilitar activador externo de fin de ciclo",
"external_end_trigger": "Sensor externo de fin de ciclo",
"external_end_trigger_inverted": "Invertir lógica de activación (activar en OFF)",
"door_sensor_entity": "Sensor de puerta",
"pause_cuts_power": "Cortar la energía al hacer una pausa",
"switch_entity": "Cambiar entidad (para pausar el corte de energía)",
"notify_unload_delay_minutes": "Retraso de notificación de espera de lavandería (min)"
},
"data_description": {
"external_end_trigger_enabled": "Habilitar la monitorización de un sensor binario externo para activar la finalización del ciclo.",
"external_end_trigger": "Selecciona una entidad de sensor binario. Cuando este sensor se activa, el ciclo actual finalizará con el estado «completado».",
"external_end_trigger_inverted": "De forma predeterminada, el activador se dispara cuando el sensor se enciende (ON). Marca esta casilla para disparar cuando el sensor se apague (OFF).",
"door_sensor_entity": "Sensor binario opcional para la puerta de la máquina (on = abierto, off = cerrado). Cuando la puerta se abre durante un ciclo activo, WashData confirmará que el ciclo está pausado intencionalmente. Una vez finalizado el ciclo, si la puerta aún está cerrada, el estado cambia a \"Limpiar\" hasta que se abre la puerta. Nota: cerrar la puerta NO reanuda automáticamente un ciclo en pausa; la reanudación debe activarse manualmente mediante el botón Reanudar ciclo o el servicio.",
"pause_cuts_power": "Al hacer una pausa mediante el botón o servicio Pause Cycle, también apague la entidad de conmutación configurada. Solo tiene efecto si se configura una entidad de conmutación para este dispositivo.",
"switch_entity": "La entidad de cambio para alternar al pausar o reanudar. Requerido cuando está habilitado 'Cortar energía al pausar'.",
"notify_unload_delay_minutes": "Envíe una notificación a través del canal de notificación de finalización después de que finalice el ciclo y la puerta no se haya abierto durante tantos minutos (requiere sensor de puerta). Establezca en 0 para desactivar. Predeterminado: 60 min."
}
},
"pump_section": {
"name": "Monitor de bomba",
"description": "Solo para el tipo de dispositivo bomba. Dispara un evento si un ciclo de bomba supera esta duración.",
"data": {
"pump_stuck_duration": "Umbrales de alerta de bomba atascada (sólo bomba)"
},
"data_description": {
"pump_stuck_duration": "Si un ciclo de bomba sigue ejecutándose después de tantos segundos, se activa una vez un evento ha_washdata_pump_stuck. Utilícelo para detectar un motor atascado (el funcionamiento típico de la bomba de sumidero es inferior a 60 s). Predeterminado: 1800 s (30 min). Solo tipo de dispositivo de bomba."
}
},
"device_link_section": {
"name": "Enlace de dispositivo",
"description": "Opcionalmente vincula este dispositivo WashData a un dispositivo existente Home Assistant (por ejemplo, el plug inteligente o el propio aparato). El dispositivo WashData se muestra entonces como \"Connected via\" ese dispositivo. Deja vacío para mantener a WashData como un dispositivo independiente.",
"data": {
"linked_device": "Dispositivo vinculado"
},
"data_description": {
"linked_device": "Seleccione el dispositivo para conectar WashData a. Esto agrega una referencia 'Connected via' en el registro del dispositivo; WashData mantiene su propia tarjeta de dispositivo y entidades. Limpiar la selección para eliminar el enlace."
}
}
}
},
"diagnostics": {
"title": "Diagnóstico y mantenimiento",
"description": "Ejecuta acciones de mantenimiento como fusionar ciclos fragmentados o migrar datos almacenados.\n\n**Uso de almacenamiento**\n\n- Tamaño del archivo: {file_size_kb} KB\n- Ciclos: {cycle_count}\n- Perfiles: {profile_count}\n- Trazas de depuración: {debug_count}",
"menu_options": {
"reprocess_history": "Mantenimiento: reprocesar y optimizar datos",
"clear_debug_data": "Borrar datos de depuración (liberar espacio)",
"wipe_history": "Borrar TODOS los datos de este dispositivo (irreversible)",
"export_import": "Exportar/Importar JSON con ajustes (copiar/pegar)",
"menu_back": "← Volver"
}
},
"clear_debug_data": {
"title": "Borrar datos de depuración",
"description": "¿Estás seguro de que deseas eliminar todas las trazas de depuración almacenadas? Esto liberará espacio pero eliminará la información detallada de clasificación de ciclos anteriores."
},
"manage_cycles": {
"title": "Gestionar ciclos",
"description": "Ciclos recientes:\n{recent_cycles}",
"menu_options": {
"auto_label_cycles": "Etiquetar automáticamente ciclos antiguos",
"select_cycle_to_label": "Etiquetar ciclo específico",
"select_cycle_to_delete": "Eliminar ciclo",
"interactive_editor": "Editor interactivo de fusión/división",
"trim_cycle_select": "Recortar datos del ciclo",
"menu_back": "← Volver"
}
},
"manage_cycles_empty": {
"title": "Gestionar ciclos",
"description": "Todavía no se han registrado ciclos.",
"menu_options": {
"auto_label_cycles": "Etiquetar automáticamente ciclos antiguos",
"menu_back": "← Volver"
}
},
"manage_profiles": {
"title": "Gestionar perfiles",
"description": "Resumen de perfiles:\n{profile_summary}",
"menu_options": {
"create_profile": "Crear nuevo perfil",
"edit_profile": "Editar/cambiar nombre del perfil",
"delete_profile_select": "Eliminar perfil",
"profile_stats": "Estadísticas de perfil",
"cleanup_profile": "Limpiar historial - Gráfico y eliminación",
"assign_profile_phases_select": "Asignar rangos de fase",
"menu_back": "← Volver"
}
},
"manage_profiles_empty": {
"title": "Gestionar perfiles",
"description": "Todavía no se han creado perfiles.",
"menu_options": {
"create_profile": "Crear nuevo perfil",
"menu_back": "← Volver"
}
},
"manage_phase_catalog": {
"title": "Gestionar catálogo de fases",
"description": "Catálogo de fases (predeterminados para este dispositivo + fases personalizadas):\n{phase_summary}",
"menu_options": {
"phase_catalog_create": "Crear nueva fase",
"phase_catalog_edit_select": "Editar fase",
"phase_catalog_delete": "Eliminar fase",
"menu_back": "← Volver"
}
},
"phase_catalog_create": {
"title": "Crear fase personalizada",
"description": "Crea un nombre y descripción de fase personalizados, y elige a qué tipo de dispositivo se aplica.",
"data": {
"target_device_type": "Tipo de dispositivo de destino",
"phase_name": "Nombre de la fase",
"phase_description": "Descripción de la fase"
}
},
"phase_catalog_edit_select": {
"title": "Editar fase personalizada",
"description": "Selecciona una fase personalizada para editar.",
"data": {
"phase_name": "Fase personalizada"
}
},
"phase_catalog_edit": {
"title": "Editar fase personalizada",
"description": "Editando fase: {phase_name}",
"data": {
"phase_name": "Nombre de la fase",
"phase_description": "Descripción de la fase"
}
},
"phase_catalog_delete": {
"title": "Eliminar fase personalizada",
"description": "Selecciona una fase personalizada para eliminar. Se eliminarán todos los rangos asignados que usen esta fase.",
"data": {
"phase_name": "Fase personalizada"
}
},
"assign_profile_phases": {
"title": "Asignar rangos de fase",
"description": "Vista previa de fase para el perfil: **{profile_name}**\n\n{timeline_svg}\n\n**Rangos actuales:**\n{current_ranges}\n\nUsa las acciones de abajo para añadir, editar, eliminar o guardar rangos.",
"menu_options": {
"assign_profile_phases_add": "Añadir rango de fase",
"assign_profile_phases_edit_select": "Editar rango de fase",
"assign_profile_phases_delete": "Eliminar rango de fase",
"phase_ranges_clear": "Borrar todos los rangos",
"assign_profile_phases_auto_detect": "Detectar fases automáticamente",
"phase_ranges_save": "Guardar y volver",
"menu_back": "← Volver"
}
},
"assign_profile_phases_add": {
"title": "Añadir rango de fase",
"description": "Añade un rango de fase al borrador actual.",
"data": {
"phase_name": "Fase",
"start_min": "Minuto de inicio",
"end_min": "Minuto de fin"
}
},
"assign_profile_phases_edit_select": {
"title": "Editar rango de fase",
"description": "Selecciona un rango para editar.",
"data": {
"range_index": "Rango de fase"
}
},
"assign_profile_phases_edit": {
"title": "Editar rango de fase",
"description": "Actualiza el rango de fase seleccionado.",
"data": {
"phase_name": "Fase",
"start_min": "Minuto de inicio",
"end_min": "Minuto de fin"
}
},
"assign_profile_phases_delete": {
"title": "Eliminar rango de fase",
"description": "Selecciona un rango para eliminar del borrador.",
"data": {
"range_index": "Rango de fase"
}
},
"assign_profile_phases_auto_detect": {
"title": "Fases detectadas automáticamente",
"description": "Perfil: **{profile_name}**\n\n{timeline_svg}\n\n**{detected_count} fase(s) detectadas automáticamente.** Elige una acción a continuación.",
"data": {
"action": "Acción"
}
},
"assign_profile_phases_auto_detect_name": {
"title": "Nombrar fases detectadas",
"description": "Perfil: **{profile_name}**\n\n**{detected_count} fase(s) detectada(s):**\n{ranges_summary}\n\nAsigna un nombre a cada fase."
},
"assign_profile_phases_select": {
"title": "Asignar rangos de fase",
"description": "Selecciona un perfil para configurar los rangos de fases.",
"data": {
"profile": "Perfil"
}
},
"profile_stats": {
"title": "Estadísticas de perfil",
"description": "{stats_table}"
},
"create_profile": {
"title": "Crear nuevo perfil",
"description": "Crea un nuevo perfil manualmente o a partir de un ciclo anterior.\n\nEjemplos de nombres de perfil: «Delicados», «Resistente», «Lavado rápido»",
"data": {
"profile_name": "Nombre del perfil",
"reference_cycle": "Ciclo de referencia (opcional)",
"manual_duration": "Duración manual (minutos)"
}
},
"edit_profile": {
"title": "Editar perfil",
"description": "Selecciona un perfil para cambiar el nombre",
"data": {
"profile": "Perfil"
}
},
"rename_profile": {
"title": "Editar detalles del perfil",
"description": "Perfil actual: {current_name}",
"data": {
"new_name": "Nombre del perfil",
"manual_duration": "Duración manual (minutos)"
}
},
"delete_profile_select": {
"title": "Eliminar perfil",
"description": "Selecciona un perfil para eliminar",
"data": {
"profile": "Perfil"
}
},
"delete_profile_confirm": {
"title": "Confirmar eliminación de perfil",
"description": "⚠️ Esto eliminará permanentemente el perfil: {profile_name}",
"data": {
"unlabel_cycles": "Quitar etiqueta de los ciclos que usan este perfil"
}
},
"auto_label_cycles": {
"title": "Etiquetar automáticamente ciclos antiguos",
"description": "Se encontraron {total_count} ciclos en total. Perfiles: {profiles}",
"data": {
"confidence_threshold": "Confianza mínima (0,50-0,95)"
}
},
"select_cycle_to_label": {
"title": "Seleccionar ciclo para etiquetar",
"description": "✓ = completado, ⚠ = reanudado, ✗ = interrumpido",
"data": {
"cycle_id": "Ciclo"
}
},
"select_cycle_to_delete": {
"title": "Eliminar ciclo",
"description": "⚠️ Esto eliminará permanentemente el ciclo seleccionado",
"data": {
"cycle_id": "Ciclo a eliminar"
}
},
"label_cycle": {
"title": "Etiquetar ciclo",
"description": "{cycle_info}",
"data": {
"profile_name": "Perfil",
"new_profile_name": "Nuevo nombre de perfil (si se está creando)"
}
},
"post_process": {
"title": "Procesar historial (fusionar/dividir)",
"description": "Limpie el historial de ciclos fusionando ejecuciones fragmentadas y dividiendo ciclos fusionados incorrectamente dentro de una ventana de tiempo. Ingrese el número de horas para mirar hacia atrás (use 999999 para todas).",
"data": {
"time_range": "Ventana de retrospección (horas)",
"gap_seconds": "Brecha para fusión/división (segundos)"
},
"data_description": {
"time_range": "Número de horas para buscar ciclos fragmentados que se fusionarán. Utilice 999999 para procesar todos los datos históricos.",
"gap_seconds": "Umbral para decidir dividir o fusionar. Las brechas MÁS CORTAS que esto se fusionan. Las brechas MÁS LARGAS que esto se dividen. Reduce esto para forzar una división en un ciclo fusionado incorrectamente."
}
},
"cleanup_profile": {
"title": "Limpiar historial - Seleccionar perfil",
"description": "Selecciona un perfil para visualizar. Esto generará un gráfico con todos los ciclos anteriores de este perfil para ayudar a identificar valores atípicos.",
"data": {
"profile": "Perfil"
}
},
"cleanup_select": {
"title": "Limpiar historial - Gráfico y eliminación",
"description": "![Gráfico]({graph_url})\n\n**Visualizando {profile_name}**\n\nEl gráfico muestra ciclos individuales como líneas de colores. Identifica los valores atípicos (líneas alejadas del grupo) y busca su color en la lista de abajo para eliminarlos.\n\n**Selecciona ciclos para eliminar PERMANENTEMENTE:**",
"data": {
"cycles_to_delete": "Ciclos a eliminar (verifica los colores coincidentes)"
}
},
"interactive_editor": {
"title": "Editor interactivo de fusión/división",
"description": "Selecciona una acción manual para realizar en tu historial de ciclos.",
"menu_options": {
"editor_split": "Dividir un ciclo (encontrar brechas)",
"editor_merge": "Fusionar ciclos (unir fragmentos)",
"editor_delete": "Eliminar ciclo(s)",
"menu_back": "← Volver"
}
},
"editor_select": {
"title": "Seleccionar ciclos",
"description": "Selecciona los ciclos a procesar.\n\n{info_text}",
"data": {
"selected_cycles": "Ciclos"
}
},
"editor_configure": {
"title": "Configurar y aplicar",
"description": "{preview_md}",
"data": {
"confirm_action": "Acción",
"merged_profile": "Perfil resultante",
"new_profile_name": "Nuevo nombre de perfil",
"confirm_commit": "Sí, confirmo esta acción",
"segment_0_profile": "Perfil del segmento 1",
"segment_1_profile": "Perfil del segmento 2",
"segment_2_profile": "Perfil del segmento 3",
"segment_3_profile": "Perfil del segmento 4",
"segment_4_profile": "Perfil del segmento 5",
"segment_5_profile": "Perfil del segmento 6",
"segment_6_profile": "Perfil del segmento 7",
"segment_7_profile": "Perfil del segmento 8",
"segment_8_profile": "Perfil del segmento 9",
"segment_9_profile": "Perfil del segmento 10"
}
},
"editor_split_params": {
"title": "Configuración de división",
"description": "Ajusta la sensibilidad para dividir este ciclo. Cualquier pausa inactiva mayor que esta causará una división.",
"data": {
"split_mode": "Método de división"
}
},
"editor_split_auto_params": {
"title": "Configuración de división automática",
"description": "Ajusta la sensibilidad para dividir este ciclo. Cualquier intervalo de inactividad más largo que este provocará una división.",
"data": {
"min_gap_seconds": "Umbral de intervalo de división (segundos)"
}
},
"editor_split_manual_params": {
"title": "Marcas de tiempo de división manual",
"description": "{preview_md}Ventana del ciclo: **{cycle_start_wallclock} → {cycle_end_wallclock}** el {cycle_date}.\n\nIngresa una o más marcas de tiempo de división (`HH:MM` o `HH:MM:SS`), una por línea. El ciclo se cortará en cada marca de tiempo — N marcas de tiempo producen N+1 segmentos.",
"data": {
"split_timestamps": "Marcas de tiempo de división"
}
},
"reprocess_history": {
"title": "Mantenimiento: reprocesar y optimizar datos",
"description": "Realiza una limpieza profunda de los datos históricos:\n1. Elimina las lecturas de potencia cero (silencio).\n2. Corrige el tiempo/duración del ciclo.\n3. Recalcula todos los modelos estadísticos (envolventes).\n\n**Ejecuta esto para solucionar problemas de datos o aplicar nuevos algoritmos.**"
},
"wipe_history": {
"title": "Borrar historial (solo para pruebas)",
"description": "⚠️ Esto eliminará TODOS los ciclos y perfiles almacenados para este dispositivo. ¡Esta acción no se puede deshacer!"
},
"export_import": {
"title": "Exportar/Importar JSON",
"description": "Copia/pega ciclos, perfiles Y ajustes de este dispositivo. Exporta abajo o pega JSON para importar.",
"data": {
"mode": "Acción",
"json_payload": "Configuración completa JSON"
},
"data_description": {
"mode": "Elige Exportar para copiar los datos y ajustes actuales, o Importar para pegar datos exportados desde otro dispositivo WashData.",
"json_payload": "Para exportar: copia este JSON (incluye ciclos, perfiles y todos los ajustes). Para importar: pega el JSON exportado desde WashData."
}
},
"record_cycle": {
"title": "Registrar ciclo",
"description": "Registra manualmente un ciclo para crear un perfil limpio sin interferencias.\n\nEstado: **{status}**\nDuración: {duration} s\nMuestras: {samples}",
"menu_options": {
"record_refresh": "Actualizar estado",
"record_stop": "Detener grabación (guardar y procesar)",
"record_start": "Iniciar nueva grabación",
"record_process": "Procesar última grabación (recortar y guardar)",
"record_discard": "Descartar última grabación",
"menu_back": "← Volver"
}
},
"record_process": {
"title": "Procesar grabación",
"description": "![Gráfico]({graph_url})\n\n**El gráfico muestra la grabación sin procesar.** Azul = Conservar, Rojo = Recorte propuesto.\n*El gráfico es estático y no se actualiza con los cambios del formulario.*\n\nLa grabación se detuvo. Los recortes están alineados con la frecuencia de muestreo detectada (~{sampling_rate} s).\n\nDuración sin procesar: {duration} s\nMuestras: {samples}",
"data": {
"head_trim": "Recorte de inicio (segundos)",
"tail_trim": "Recorte de fin (segundos)",
"save_mode": "Destino de guardado",
"profile_name": "Nombre del perfil"
}
},
"learning_feedbacks": {
"title": "Retroalimentación de aprendizaje",
"description": "Comentarios pendientes: {count}\n\n{pending_table}\n\nSelecciona una solicitud de revisión de ciclo para procesar.",
"menu_options": {
"learning_feedbacks_pick": "Revisar un comentario pendiente",
"learning_feedbacks_dismiss_all": "Descartar todos los comentarios pendientes",
"menu_back": "← Volver"
}
},
"learning_feedbacks_pick": {
"title": "Seleccionar retroalimentación para revisar",
"description": "Seleccione una solicitud de revisión de ciclo para abrir.",
"data": {
"selected_feedback": "Seleccionar ciclo para revisar"
}
},
"learning_feedbacks_empty": {
"title": "Retroalimentación de aprendizaje",
"description": "No se encontraron solicitudes de retroalimentación pendientes.",
"menu_options": {
"menu_back": "← Volver"
}
},
"learning_feedbacks_dismiss_all": {
"title": "Descartar todas las solicitudes de retroalimentación pendientes",
"description": "Está a punto de descartar **{count}** solicitud(es) de retroalimentación pendiente(s). Los ciclos descartados permanecen en su historial, pero no aportarán nueva señal de aprendizaje. Esto no se puede deshacer.\n\n✅ Marque la casilla a continuación y haga clic en **Enviar** para descartar todo.\n❌ Déjela sin marcar y haga clic en **Enviar** para cancelar y regresar.",
"data": {
"confirm_dismiss_all": "Confirmar: descartar todas las solicitudes de comentarios pendientes"
}
},
"resolve_feedback": {
"title": "Resolver retroalimentación",
"description": "{comparison_img}{candidates_table}\n**Perfil detectado**: {detected_profile} ({confidence_pct}%)\n**Duración estimada**: {est_duration_min} min\n**Duración real**: {act_duration_min} min\n\n__Elige una acción a continuación:__",
"data": {
"action": "¿Qué te gustaría hacer?",
"corrected_profile": "Programa correcto (si se está corrigiendo)",
"corrected_duration": "Duración correcta en segundos (si se está corrigiendo)"
}
},
"trim_cycle_select": {
"title": "Recortar ciclo - Seleccionar ciclo",
"description": "Selecciona un ciclo para recortar. ✓ = completado, ⚠ = reanudado, ✗ = interrumpido",
"data": {
"cycle_id": "Ciclo"
}
},
"trim_cycle": {
"title": "Recortar ciclo",
"description": "Ventana actual: {trim_summary}\n\n{trim_svg}",
"data": {
"action": "Acción"
}
},
"trim_cycle_start": {
"title": "Establecer inicio del recorte",
"description": "Ventana de ciclo: {cycle_start_wallclock} → {cycle_end_wallclock}\n\nInicio actual: **{current_wallclock}** (+{current_offset_min} min desde el inicio del ciclo)\n\nElija una nueva hora de inicio usando el selector de reloj a continuación.",
"data": {
"trim_start_time": "Nueva hora de inicio",
"trim_start_min": "Nuevo inicio (minutos desde el inicio del ciclo)"
}
},
"trim_cycle_end": {
"title": "Establecer fin del recorte",
"description": "Ventana de ciclo: {cycle_start_wallclock} → {cycle_end_wallclock}\n\nFin actual: **{current_wallclock}** (+{current_offset_min} min desde el inicio del ciclo)\n\nElija una nueva hora de finalización utilizando el selector de reloj a continuación.",
"data": {
"trim_end_time": "Nuevo tiempo de finalización",
"trim_end_min": "Nuevo fin (minutos desde el inicio del ciclo)"
}
}
},
"error": {
"import_failed": "Error al importar. Pega un JSON de exportación de WashData válido.",
"select_exactly_one": "Selecciona exactamente un ciclo para esta acción.",
"select_at_least_one": "Selecciona al menos un ciclo para esta acción.",
"select_at_least_two": "Selecciona al menos dos ciclos para esta acción.",
"profile_exists": "Ya existe un perfil con este nombre",
"rename_failed": "No se pudo cambiar el nombre del perfil. Es posible que el perfil no exista o que el nuevo nombre ya esté en uso.",
"assignment_failed": "No se pudo asignar el perfil al ciclo",
"duplicate_phase": "Ya existe una fase con este nombre.",
"phase_not_found": "No se encontró la fase seleccionada.",
"invalid_phase_name": "El nombre de la fase no puede estar vacío.",
"phase_name_too_long": "El nombre de la fase es demasiado largo.",
"invalid_phase_range": "El rango de fase no es válido. El fin debe ser mayor que el inicio.",
"invalid_phase_timestamp": "La marca de tiempo no es válida. Usa el formato AAAA-MM-DD HH:MM o HH:MM.",
"overlapping_phase_ranges": "Los rangos de fase se solapan. Ajusta los rangos y vuelve a intentarlo.",
"incomplete_phase_row": "Cada fila de fase debe incluir una fase más los valores completos de inicio/fin para el modo seleccionado.",
"timestamp_mode_cycle_required": "Selecciona un ciclo de origen cuando uses el modo de marca de tiempo.",
"no_phase_ranges": "Todavía no hay rangos de fase disponibles para esa acción.",
"feedback_notification_title": "WashData: Verificar ciclo ({device})",
"feedback_notification_message": "**Dispositivo**: {device}\n**Programa**: {program} ({confidence}% de confianza)\n**Hora**: {time}\n\nWashData necesita tu ayuda para verificar este ciclo detectado.\n\nVe a **Configuración > Dispositivos y servicios > WashData > Configurar > Retroalimentación de aprendizaje** para confirmar o corregir este resultado.",
"suggestions_ready_notification_title": "WashData: Ajustes sugeridos listos ({device})",
"suggestions_ready_notification_message": "El sensor de **Ajustes sugeridos** ahora reporta **{count}** recomendaciones aplicables.\n\nPara revisarlas y aplicarlas: **Configuración > Dispositivos y servicios > WashData > Configurar > Configuración avanzada > Aplicar valores sugeridos**.\n\nLas sugerencias son opcionales y se muestran para revisar antes de guardar.",
"trim_range_invalid": "El inicio debe ser anterior al fin. Por favor, ajusta los puntos de recorte.",
"trim_failed": "El recorte falló. Es posible que el ciclo ya no exista o que la ventana esté vacía.",
"invalid_split_timestamp": "La marca de tiempo no es válida o está fuera de la ventana del ciclo. Usa HH:MM o HH:MM:SS dentro de la ventana del ciclo.",
"no_split_segments_found": "No se pudieron generar segmentos válidos a partir de estas marcas de tiempo. Asegúrate de que cada marca de tiempo esté dentro de la ventana del ciclo y de que los segmentos duren al menos 1 minuto.",
"auto_tune_suggestion": "{device_type} {device_title} ciclos fantasma detectados. Cambio de min_power sugerido: {current_min}W -> {new_min}W (no se aplica automáticamente).",
"auto_tune_title": "Ajuste automático de WashData",
"auto_tune_fallback": "{device_type} {device_title} ciclos fantasma detectados. Cambio de min_power sugerido: {current_min}W -> {new_min}W (no se aplica automáticamente)."
},
"abort": {
"no_cycles_found": "No se encontraron ciclos",
"no_split_segments_found": "No se encontraron segmentos divisibles en el ciclo seleccionado.",
"cycle_not_found": "No se pudo cargar el ciclo seleccionado.",
"no_power_data": "No hay datos de traza de potencia disponibles para el ciclo seleccionado.",
"no_profiles_found": "No se encontraron perfiles. Crea un perfil primero.",
"no_profiles_for_matching": "No hay perfiles disponibles para la coincidencia. Crea perfiles primero.",
"no_unlabeled_cycles": "Todos los ciclos ya están etiquetados",
"no_suggestions": "Todavía no hay valores sugeridos disponibles. Ejecuta algunos ciclos y vuelve a intentarlo.",
"no_predictions": "Sin predicciones",
"no_custom_phases": "No se encontraron fases personalizadas.",
"reprocess_success": "{count} ciclos reprocesados correctamente.",
"debug_data_cleared": "Datos de depuración eliminados correctamente de {count} ciclos."
}
},
"selector": {
"notify_events_option": {
"options": {
"cycle_start": "Inicio de ciclo",
"cycle_finish": "Fin de ciclo",
"cycle_live": "Progreso en vivo"
}
},
"common_text": {
"options": {
"unlabeled": "(Sin etiquetar)",
"create_new_profile": "Crear nuevo perfil",
"remove_label": "Quitar etiqueta",
"no_reference_cycle": "(Sin ciclo de referencia)",
"all_device_types": "Todos los tipos de dispositivo",
"current_suffix": "(actual)",
"editor_select_info": "Selecciona 1 ciclo para dividir, o 2 o más ciclos para fusionar.",
"editor_select_info_split": "Selecciona 1 ciclo para dividir.",
"editor_select_info_merge": "Selecciona 2 o más ciclos para fusionar.",
"editor_select_info_delete": "Selecciona 1 o más ciclos para eliminar.",
"no_cycles_recorded": "Todavía no se han registrado ciclos.",
"profile_summary_line": "- **{name}**: {count} ciclos, promedio {avg} min",
"no_profiles_created": "Todavía no se han creado perfiles.",
"phase_preview": "Vista previa de fase",
"phase_preview_no_curve": "La curva de perfil promedio aún no está disponible. Ejecuta/etiqueta más ciclos para este perfil.",
"average_power_curve": "Curva de potencia promedio",
"unit_min": "min",
"profile_option_fmt": "{name} ({count} ciclos, ~{duration} min de promedio)",
"profile_option_short_fmt": "{name} ({count} ciclos, ~{duration} min)",
"deleted_cycles_from_profile": "Se eliminaron {count} ciclos de {profile}.",
"not_enough_data_graph": "No hay suficientes datos para generar el gráfico.",
"no_profiles_found": "No se encontraron perfiles.",
"cycle_info_fmt": "Ciclo: {start}, {duration} min, Actual: {label}",
"top_candidates_header": "### Mejores candidatos",
"tbl_profile": "Perfil",
"tbl_confidence": "Confianza",
"tbl_correlation": "Correlación",
"tbl_duration_match": "Coincidencia de duración",
"detected_profile": "Perfil detectado",
"estimated_duration": "Duración estimada",
"actual_duration": "Duración real",
"choose_action": "__Elige una acción a continuación:__",
"tbl_count": "Recuento",
"tbl_avg": "Prom.",
"tbl_min": "Mín.",
"tbl_max": "Máx.",
"tbl_energy_avg": "Energía (prom.)",
"tbl_energy_total": "Energía (total)",
"tbl_consistency": "Consistencia",
"tbl_last_run": "Última ejecución",
"graph_legend_title": "Leyenda del gráfico",
"graph_legend_body": "La banda azul representa el rango mínimo y máximo de consumo de potencia observado. La línea muestra la curva de potencia promedio.",
"recording_preview": "Vista previa de grabación",
"trim_start": "Inicio de recorte",
"trim_end": "Fin de recorte",
"split_preview_title": "Vista previa de división",
"split_preview_found_fmt": "Se encontraron {count} segmentos.",
"split_preview_confirm_fmt": "Haz clic en Confirmar para dividir este ciclo en {count} ciclos separados.",
"merge_preview_title": "Vista previa de fusión",
"merge_preview_joining_fmt": "Uniendo {count} ciclos. Las brechas se rellenarán con lecturas de 0 W.",
"editor_delete_preview_title": "Vista previa de eliminación",
"editor_delete_preview_intro": "Los ciclos seleccionados se eliminarán permanentemente:",
"editor_delete_preview_confirm": "Haz clic en Confirmar para eliminar permanentemente estos registros de ciclos.",
"no_power_preview": "*No hay datos de potencia disponibles para vista previa.*",
"profile_comparison": "Comparación de perfiles",
"actual_cycle_label": "Este ciclo (real)",
"storage_usage_header": "Uso de almacenamiento",
"storage_file_size": "Tamaño del archivo",
"storage_cycles": "Ciclos",
"storage_profiles": "Perfiles",
"storage_debug_traces": "Trazas de depuración",
"overview_suffix": "Resumen",
"phase_preview_for_profile": "Vista previa de fase para perfil",
"current_ranges_header": "Rangos actuales",
"assign_phases_help": "Usa las acciones de abajo para añadir, editar, eliminar o guardar rangos.",
"profile_summary_header": "Resumen de perfiles",
"recent_cycles_header": "Ciclos recientes",
"trim_cycle_preview_title": "Vista previa de recorte de ciclo",
"trim_cycle_preview_no_data": "No hay datos de potencia disponibles para este ciclo.",
"trim_cycle_preview_kept_suffix": "conservado",
"table_program": "Programa",
"table_when": "Cuándo",
"table_length": "Duración",
"table_match": "Coincidencia",
"table_profile": "Perfil",
"table_cycles": "Ciclos",
"table_avg_length": "Duración prom.",
"table_last_run": "Última ejecución",
"table_avg_energy": "Energía prom.",
"table_detected_program": "Programa detectado",
"table_confidence": "Confianza",
"table_reported": "Informado",
"phase_builtin_suffix": "(Incorporado)",
"phase_none_available": "No hay fases disponibles.",
"settings_deprecation_warning": "⚠️ **Tipo de dispositivo obsoleto:** {device_type} está programado para eliminarse en una versión futura. El proceso de coincidencia de WashData no produce resultados confiables para esta clase de electrodomésticos. Su integración sigue funcionando durante el período de desuso; Para silenciar esta advertencia, cambie el **Tipo de dispositivo** a continuación a uno de los tipos admitidos (lavadora, secadora, combinación de lavadora y secadora, lavavajillas, freidora, máquina para hacer pan o bomba), o a **Otro (avanzado)** si su electrodoméstico no coincide con ninguno de los tipos admitidos. **Otro (Avanzado)** incluye valores predeterminados intencionalmente genéricos que no están ajustados para ningún dispositivo específico, por lo que deberá configurar los umbrales, los tiempos de espera y los parámetros coincidentes usted mismo; todas sus configuraciones existentes se conservan cuando cambia.",
"phase_other_device_types": "Otros tipos de dispositivos:"
}
},
"interactive_editor_action": {
"options": {
"split": "Dividir un ciclo (encontrar brechas)",
"merge": "Fusionar ciclos (unir fragmentos)",
"delete": "Eliminar ciclo(s)"
}
},
"split_mode": {
"options": {
"auto": "Detectar automáticamente huecos de inactividad",
"manual": "Marcas de tiempo manuales"
}
},
"diagnostics_action": {
"options": {
"reprocess_history": "Mantenimiento: reprocesar y optimizar datos",
"clear_debug_data": "Borrar datos de depuración (liberar espacio)",
"wipe_history": "Borrar TODOS los datos de este dispositivo (irreversible)",
"export_import": "Exportar/Importar JSON con ajustes (copiar/pegar)"
}
},
"export_import_mode": {
"options": {
"export": "Exportar todos los datos",
"import": "Importar/fusionar datos"
}
},
"manage_cycles_action": {
"options": {
"auto_label_cycles": "Etiquetar automáticamente ciclos antiguos",
"select_cycle_to_label": "Etiquetar ciclo específico",
"select_cycle_to_delete": "Eliminar ciclo",
"interactive_editor": "Editor interactivo de fusión/división",
"trim_cycle": "Recortar datos del ciclo"
}
},
"manage_profiles_action": {
"options": {
"create_profile": "Crear nuevo perfil",
"edit_profile": "Editar/cambiar nombre del perfil",
"delete_profile": "Eliminar perfil",
"profile_stats": "Estadísticas de perfil",
"cleanup_profile": "Limpiar historial - gráfico y eliminación",
"assign_phases": "Asignar rangos de fase"
}
},
"manage_phase_catalog_action": {
"options": {
"create_custom_phase": "Crear nueva fase",
"edit_custom_phase": "Editar fase",
"delete_custom_phase": "Eliminar fase"
}
},
"assign_profile_phases_action": {
"options": {
"add_range": "Añadir rango de fase",
"edit_range": "Editar rango de fase",
"delete_range": "Eliminar rango de fase",
"clear_ranges": "Borrar todos los rangos",
"auto_detect_ranges": "Detectar fases automáticamente",
"save_ranges": "Guardar y volver"
}
},
"record_cycle_action": {
"options": {
"refresh_status": "Actualizar estado",
"stop_recording": "Detener grabación (guardar y procesar)",
"start_recording": "Iniciar nueva grabación",
"process_recording": "Procesar última grabación (recortar y guardar)",
"discard_recording": "Descartar última grabación"
}
},
"record_process_save_mode": {
"options": {
"new_profile": "Crear nuevo perfil",
"existing_profile": "Añadir al perfil existente",
"discard": "Descartar grabación"
}
},
"resolve_feedback_action": {
"options": {
"confirm": "Confirmar - Detección correcta",
"correct": "Corregir - Elegir programa/duración",
"ignore": "Ignorar - Falso positivo/ciclo ruidoso",
"delete": "Eliminar - Quitar del historial"
}
},
"assign_profile_phases_auto_detect_action": {
"options": {
"name_phases": "Nombrar y aplicar fases",
"cancel": "Volver sin cambios"
}
},
"trim_cycle_action": {
"options": {
"set_start": "Establecer punto de inicio",
"set_end": "Establecer punto de fin",
"reset": "Restablecer a duración completa",
"apply": "Aplicar recorte",
"cancel": "Cancelar"
}
},
"device_type": {
"options": {
"washing_machine": "Lavadora",
"dryer": "Secadora",
"washer_dryer": "Combinación de lavadora y secadora",
"dishwasher": "Lavavajillas",
"coffee_machine": "Máquina de café (obsoleta)",
"ev": "Vehículo eléctrico (obsoleto)",
"air_fryer": "Freidora de aire",
"heat_pump": "Bomba de calor (obsoleta)",
"bread_maker": "fabricante de pan",
"pump": "Bomba / Bomba de sumidero",
"oven": "Horno (obsoleto)",
"other": "Otro (avanzado)"
}
}
},
"services": {
"label_cycle": {
"name": "Etiquetar ciclo",
"description": "Asigna un perfil existente a un ciclo anterior, o quita la etiqueta.",
"fields": {
"device_id": {
"name": "Dispositivo",
"description": "El dispositivo WashData a etiquetar."
},
"cycle_id": {
"name": "ID del ciclo",
"description": "El ID del ciclo a etiquetar."
},
"profile_name": {
"name": "Nombre del perfil",
"description": "El nombre de un perfil existente (crea perfiles en el menú Gestionar perfiles). Deja vacío para quitar la etiqueta."
}
}
},
"create_profile": {
"name": "Crear perfil",
"description": "Crea un nuevo perfil (independiente o basado en un ciclo de referencia).",
"fields": {
"device_id": {
"name": "Dispositivo",
"description": "El dispositivo WashData."
},
"profile_name": {
"name": "Nombre del perfil",
"description": "Nombre para el nuevo perfil (p. ej., «Resistente», «Delicados»)."
},
"reference_cycle_id": {
"name": "ID del ciclo de referencia",
"description": "ID de ciclo opcional en el que basar este perfil."
}
}
},
"delete_profile": {
"name": "Eliminar perfil",
"description": "Elimina un perfil y, opcionalmente, quita las etiquetas de los ciclos que lo usan.",
"fields": {
"device_id": {
"name": "Dispositivo",
"description": "El dispositivo WashData."
},
"profile_name": {
"name": "Nombre del perfil",
"description": "El perfil a eliminar."
},
"unlabel_cycles": {
"name": "Quitar etiqueta de ciclos",
"description": "Quitar la etiqueta de perfil de los ciclos que usan este perfil."
}
}
},
"auto_label_cycles": {
"name": "Etiquetar automáticamente ciclos antiguos",
"description": "Etiqueta retroactivamente ciclos sin etiquetar usando la coincidencia de perfiles.",
"fields": {
"device_id": {
"name": "Dispositivo",
"description": "El dispositivo WashData."
},
"confidence_threshold": {
"name": "Umbral de confianza",
"description": "Confianza mínima de coincidencia (0,50-0,95) para aplicar etiquetas."
}
}
},
"export_config": {
"name": "Exportar configuración",
"description": "Exporta los perfiles, ciclos y ajustes de este dispositivo a un archivo JSON (por dispositivo).",
"fields": {
"device_id": {
"name": "Dispositivo",
"description": "El dispositivo WashData a exportar."
},
"path": {
"name": "Ruta",
"description": "Ruta de archivo absoluta opcional para escribir (por defecto: /config/ha_washdata_export_{entry}.json)."
}
}
},
"import_config": {
"name": "Importar configuración",
"description": "Importa perfiles, ciclos y ajustes para este dispositivo desde un archivo JSON de exportación (los ajustes pueden sobrescribirse).",
"fields": {
"device_id": {
"name": "Dispositivo",
"description": "El dispositivo WashData al que importar."
},
"path": {
"name": "Ruta",
"description": "Ruta absoluta al archivo JSON de exportación a importar."
}
}
},
"submit_cycle_feedback": {
"name": "Enviar retroalimentación del ciclo",
"description": "Confirma o corrige un programa detectado automáticamente tras un ciclo completado. Proporciona `entry_id` (avanzado) o `device_id` (recomendado).",
"fields": {
"device_id": {
"name": "Dispositivo",
"description": "El dispositivo WashData (recomendado en lugar de entry_id)."
},
"entry_id": {
"name": "ID de entrada",
"description": "El ID de entrada de configuración del dispositivo (alternativa a device_id)."
},
"cycle_id": {
"name": "ID del ciclo",
"description": "El ID del ciclo que aparece en la notificación de retroalimentación / registros."
},
"user_confirmed": {
"name": "Confirmar programa detectado",
"description": "Establece verdadero si el programa detectado es correcto."
},
"corrected_profile": {
"name": "Perfil corregido",
"description": "Si no se confirma, proporciona el nombre correcto del perfil/programa."
},
"corrected_duration": {
"name": "Duración corregida (segundos)",
"description": "Duración corregida opcional en segundos."
},
"notes": {
"name": "Notas",
"description": "Notas opcionales sobre este ciclo."
}
}
},
"record_start": {
"name": "Iniciar grabación de ciclo",
"description": "Empieza a grabar manualmente un ciclo limpio (omite toda la lógica de coincidencia).",
"fields": {
"device_id": {
"name": "Dispositivo",
"description": "El dispositivo WashData a grabar."
}
}
},
"record_stop": {
"name": "Detener grabación de ciclo",
"description": "Detiene la grabación manual.",
"fields": {
"device_id": {
"name": "Dispositivo",
"description": "El dispositivo WashData para detener la grabación."
}
}
},
"trim_cycle": {
"name": "Recortar ciclo",
"description": "Recorta los datos de potencia de un ciclo anterior a una ventana de tiempo específica.",
"fields": {
"device_id": {
"name": "Dispositivo",
"description": "El dispositivo WashData."
},
"cycle_id": {
"name": "ID del ciclo",
"description": "El ID del ciclo a recortar."
},
"trim_start_s": {
"name": "Inicio del recorte (segundos)",
"description": "Conservar datos desde este desplazamiento en segundos. Predeterminado: 0."
},
"trim_end_s": {
"name": "Fin del recorte (segundos)",
"description": "Conservar datos hasta este desplazamiento en segundos. Predeterminado = duración completa."
}
}
},
"pause_cycle": {
"name": "Ciclo de pausa",
"description": "Pausa el ciclo activo de un dispositivo WashData.",
"fields": {
"device_id": {
"name": "Dispositivo",
"description": "El dispositivo WashData se pausará."
}
}
},
"resume_cycle": {
"name": "Reanudar ciclo",
"description": "Reanudar un ciclo en pausa para un dispositivo WashData.",
"fields": {
"device_id": {
"name": "Dispositivo",
"description": "El dispositivo WashData para reanudar."
}
}
}
},
"entity": {
"binary_sensor": {
"running": {
"name": "En funcionamiento"
},
"match_ambiguity": {
"name": "Ambigüedad de coincidencia"
}
},
"sensor": {
"washer_state": {
"name": "Estado",
"state": {
"off": "Apagado",
"idle": "En espera",
"starting": "Iniciando",
"running": "En funcionamiento",
"paused": "En pausa",
"user_paused": "En pausa por el usuario",
"ending": "Finalizando",
"finished": "Finalizado",
"anti_wrinkle": "Antiarrugas",
"delay_wait": "Esperando para comenzar",
"interrupted": "Interrumpido",
"force_stopped": "Parada forzada",
"rinse": "Aclarado",
"unknown": "Desconocido",
"clean": "Limpio"
}
},
"washer_program": {
"name": "Programa"
},
"time_remaining": {
"name": "Tiempo restante"
},
"total_duration": {
"name": "Duración total"
},
"cycle_progress": {
"name": "Progreso"
},
"current_power": {
"name": "Potencia actual"
},
"elapsed_time": {
"name": "Tiempo transcurrido"
},
"debug_info": {
"name": "Información de depuración"
},
"match_confidence": {
"name": "Confianza de coincidencia"
},
"top_candidates": {
"name": "Mejores candidatos",
"state": {
"none": "Ninguno"
}
},
"current_phase": {
"name": "Fase actual"
},
"wash_phase": {
"name": "Fase"
},
"profile_cycle_count": {
"name": "Recuento de ciclos del perfil {profile_name}",
"unit_of_measurement": "ciclos"
},
"suggestions": {
"name": "Ajustes sugeridos disponibles"
},
"pump_runs_today": {
"name": "Funcionamiento de la bomba (últimas 24 h)"
},
"cycle_count": {
"name": "Conteo de ciclos"
}
},
"select": {
"program_select": {
"name": "Programa del ciclo",
"state": {
"auto_detect": "Detección automática"
}
}
},
"button": {
"force_end_cycle": {
"name": "Forzar fin de ciclo"
},
"pause_cycle": {
"name": "Ciclo de pausa"
},
"resume_cycle": {
"name": "Reanudar ciclo"
}
}
},
"exceptions": {
"device_id_required": {
"message": "Se requiere un ID de dispositivo válido."
},
"cycle_id_required": {
"message": "Se requiere un cycle_id válido."
},
"profile_name_required": {
"message": "Se requiere un profile_name válido."
},
"device_not_found": {
"message": "Dispositivo no encontrado."
},
"no_config_entry": {
"message": "No se encontró ninguna entrada de configuración para el dispositivo."
},
"integration_not_loaded": {
"message": "La integración no está cargada para este dispositivo."
},
"cycle_not_found_or_no_power": {
"message": "Ciclo no encontrado o sin datos de potencia."
},
"trim_failed_empty_window": {
"message": "Error de recorte: ciclo no encontrado, sin datos de potencia o la ventana resultante está vacía."
},
"trim_invalid_range": {
"message": "trim_end_s debe ser mayor que trim_start_s."
}
}
}