{ "config": { "step": { "user": { "title": "Configuración de WashData", "description": "Configura a túa lavadora ou outro aparello.\n\nRequírese un sensor de potencia.\n\n**A continuación, preguntarache se queres crear o teu primeiro perfil.**", "data": { "name": "Nome do dispositivo", "device_type": "Tipo de dispositivo", "power_sensor": "Sensor de potencia", "min_power": "Limiar de potencia mínima (W)" }, "data_description": { "name": "Un nome sinxelo para este dispositivo (por exemplo, 'Lavadora', 'Lavalouzas').", "device_type": "Que tipo de aparello é este? Axuda a personalizar a detección e a etiquetaxe.", "power_sensor": "A entidade sensora que informa o consumo de enerxía en tempo real (en vatios) do teu enchufe intelixente.", "min_power": "As lecturas de potencia por riba deste limiar (en vatios) indican que o aparello está funcionando. Comeza con 2 W para a maioría dos dispositivos." } }, "first_profile": { "title": "Crear o primeiro perfil", "description": "Un **ciclo** é unha execución completa do teu aparello (por exemplo, unha carga de roupa). Un **Perfil** agrupa estes ciclos por tipo (por exemplo, \"Algodón\", \"Lavado rápido\"). A creación dun perfil agora axuda a estimar a duración da integración inmediatamente.\n\nPodes seleccionar este perfil manualmente nos controis do dispositivo se non se detecta automaticamente.\n\n**Deixe \"Nome do perfil\" baleiro para omitir este paso.**", "data": { "profile_name": "Nome do perfil (opcional)", "manual_duration": "Duración estimada (minutos)" } } }, "error": { "cannot_connect": "Produciuse un erro ao conectar", "invalid_auth": "Autenticación non válida", "unknown": "Erro inesperado" }, "abort": { "already_configured": "O dispositivo xa está configurado" } }, "options": { "step": { "init": { "menu_options": { "learning_feedbacks": "Revisar comentarios de aprendizaxe", "settings": "Configuración", "notifications": "Notificacións", "manage_cycles": "Xestionar Ciclos", "manage_profiles": "Xestionar perfís", "manage_phase_catalog": "Xestionar o catálogo de fases", "record_cycle": "Ciclo de gravación (manual)", "diagnostics": "Diagnóstico e Mantemento" } }, "apply_suggestions": { "title": "Copiar valores suxeridos", "description": "Isto copiará os valores suxeridos actuais na túa configuración gardada. Esta é unha acción única e non activa as sobreescrituras automáticas.\n\nValores suxeridos para copiar:\n{suggested}", "data": { "confirm": "Confirme a acción de copiar" } }, "apply_suggestions_confirm": { "title": "Revisa os cambios suxeridos", "description": "WashData atopou **{pending_count}** valor(s) suxerido(s) para aplicar.\n\nCambios:\n{changes}\n\n✅ Marca a caixa de abaixo e fai clic en **Enviar** para aplicar e gardar estes cambios inmediatamente.\n❌ Déixao desmarcado e fai clic en **Enviar** para cancelar e volver.", "data": { "confirm_apply_suggestions": "Aplica e garda estes cambios" } }, "settings": { "title": "Configuración", "description": "{deprecation_warning}Axusta os limiares de detección, a aprendizaxe e o comportamento avanzado. Os valores predeterminados funcionan ben para a maioría das configuracións.\n\nConfiguración suxerida dispoñible actualmente: {suggestions_count}.\nSe isto supera 0, abre a Configuración avanzada e usa Aplicar valores suxeridos para revisar as recomendacións.", "data": { "apply_suggestions": "Aplicar os valores suxeridos", "device_type": "Tipo de dispositivo", "power_sensor": "Entidade sensor de potencia", "min_power": "Potencia mínima (W)", "off_delay": "Retraso de fin de ciclo (s)", "notify_actions": "Accións de notificación", "notify_people": "Atrasa a entrega ata que estas persoas estean na casa", "notify_only_when_home": "Atrasa as notificacións ata que a persoa seleccionada estea na casa", "notify_fire_events": "Lanzar eventos de automatización", "notify_start_services": "Inicio do ciclo - Obxectivos de notificación", "notify_finish_services": "Finalización do ciclo - Obxectivos de notificación", "notify_live_services": "Progreso en directo - Obxectivos de notificación", "notify_before_end_minutes": "Notificación previa á finalización (minutos antes do final)", "notify_title": "Título da notificación", "notify_icon": "Icona de notificación", "notify_start_message": "Iniciar o formato da mensaxe", "notify_finish_message": "Finalizar o formato da mensaxe", "notify_pre_complete_message": "Formato de mensaxe precompletado", "show_advanced": "Editar configuración avanzada (paso seguinte)" }, "data_description": { "apply_suggestions": "Marque esta caixa para copiar os valores suxeridos polo algoritmo de aprendizaxe no formulario. Revisa antes de gardar.\n\nSuxerido (de aprendizaxe):\n- Potencia_mín: {suggested_min_power} W\n- retardo_desactivación: {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- tolerancia_duración: {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- límite_enerxético_final: {suggested_end_energy_threshold} Wh\n- running_dead_zone: {suggested_running_dead_zone} s\n{suggested_reason}", "device_type": "Seleccione o tipo de electrodoméstico (lavadora, secadora, lavalouzas, cafetera, EV). Esta etiqueta gárdase con cada ciclo para unha mellor organización.", "power_sensor": "A entidade sensora que informa da potencia en tempo real (en vatios). Podes cambiar isto en calquera momento sen perder os datos históricos; é útil se substitúes un enchufe intelixente.", "min_power": "As lecturas de potencia por riba deste limiar (en vatios) indican que o aparello está funcionando. Comeza con 2 W para a maioría dos dispositivos.", "off_delay": "Segundos, a potencia suavizada debe permanecer por debaixo do limiar de parada para marcar a finalización. Predeterminado: 120 s.", "notify_actions": "Secuencia de acción opcional do Home Assistant para executar para notificacións (scripts, notificación, TTS, etc.). Se se establece, as accións execútanse antes do servizo de notificación alternativa.", "notify_people": "Entidades de persoas utilizadas para o control de presenza. Cando se activa, a entrega de notificacións atrasase ata que polo menos unha persoa seleccionada estea na casa.", "notify_only_when_home": "Se está activado, atrasa as notificacións ata que polo menos unha persoa seleccionada estea na casa.", "notify_fire_events": "Se está activado, activa os eventos do Home Assistant para o inicio e o final do ciclo (ha_washdata_cycle_started e ha_washdata_cycle_ended) para impulsar as automatizacións.", "notify_start_services": "Un ou varios servizos de notificación para alertar cando comeza un ciclo. Deixa o campo baleiro para saltar as notificacións de inicio.", "notify_finish_services": "Un ou máis servizos de notificación para alertar cando un ciclo remata ou se está preto da súa finalización. Deixa o campo baleiro para saltar as notificacións de finalización.", "notify_live_services": "Un ou máis servizos de notificación para recibir actualizacións de progreso en directo mentres se executa o ciclo (só a aplicación complementaria para móbiles). Deixa o campo baleiro para saltar as actualizacións en directo.", "notify_before_end_minutes": "Minutos antes do final estimado do ciclo para activar unha notificación. Establécese en 0 para desactivar. Por defecto: 0.", "notify_title": "Título personalizado para notificacións. Admite o marcador de posición {device}.", "notify_icon": "Icona para usar para notificacións (por exemplo, mdi:washing-machine). Deixa en branco para enviar sen icona.", "notify_start_message": "Mensaxe enviada cando comeza un ciclo. Admite o marcador de posición {device}.", "notify_finish_message": "Mensaxe enviada cando remata un ciclo. Admite os marcadores de posición {device}, {duration}, {program}, {energy_kwh}, {cost}.", "notify_pre_complete_message": "Texto das actualizacións recorrentes do progreso en directo mentres se executa o ciclo. Admite os marcadores de posición {device}, {minutes}, {program}." } }, "notifications": { "title": "Notificacións", "description": "Configura as canles de notificación, os modelos e as actualizacións opcionais do progreso móbil en directo.", "data": { "notify_actions": "Accións de notificación", "notify_people": "Atrasa a entrega ata que estas persoas estean na casa", "notify_only_when_home": "Atrasa as notificacións ata que a persoa seleccionada estea na casa", "notify_fire_events": "Lanzar eventos de automatización", "notify_start_services": "Inicio do ciclo - Obxectivos de notificación", "notify_finish_services": "Finalización do ciclo - Obxectivos de notificación", "notify_live_services": "Progreso en directo - Obxectivos de notificación", "notify_before_end_minutes": "Notificación previa á finalización (minutos antes do final)", "notify_live_interval_seconds": "Intervalo de actualización en directo (segundos)", "notify_live_overrun_percent": "Subsidio de excedencia de actualizacións en directo (%)", "notify_live_chronometer": "Temporizador de conta atrás do cronómetro", "notify_title": "Título da notificación", "notify_icon": "Icona de notificación", "notify_start_message": "Iniciar o formato da mensaxe", "notify_finish_message": "Finalizar o formato da mensaxe", "notify_pre_complete_message": "Formato de mensaxe precompletado", "energy_price_entity": "Prezo da enerxía - Entidade (opcional)", "energy_price_static": "Prezo da enerxía: valor estático (opcional)", "go_back": "Volver sen gardar", "notify_reminder_message": "Formato de mensaxe", "notify_timeout_seconds": "Auto-desistencia (segundos)", "notify_channel": "Canle de notificación (estado/live/reminder)", "notify_finish_channel": "Canle de notificación finalizada" }, "data_description": { "go_back": "Marca isto e fai clic en Enviar para descartar os cambios anteriores e volver ao menú principal.", "notify_actions": "Secuencia de acción opcional do Home Assistant para executar para notificacións (scripts, notificación, TTS, etc.). Se se establece, as accións execútanse antes do servizo de notificación alternativa.", "notify_people": "Entidades de persoas utilizadas para o control de presenza. Cando se activa, a entrega de notificacións atrasase ata que polo menos unha persoa seleccionada estea na casa.", "notify_only_when_home": "Se está activado, atrasa as notificacións ata que polo menos unha persoa seleccionada estea na casa.", "notify_fire_events": "Se está activado, activa os eventos do Home Assistant para o inicio e o final do ciclo (ha_washdata_cycle_started e ha_washdata_cycle_ended) para impulsar as automatizacións.", "notify_start_services": "Un ou máis servizos de notificación para alertar cando comeza un ciclo (por exemplo, notify.mobile_app_my_phone). Deixa o campo baleiro para saltar as notificacións de inicio.", "notify_finish_services": "Un ou máis servizos de notificación para alertar cando un ciclo remata ou se está preto da súa finalización. Deixa o campo baleiro para saltar as notificacións de finalización.", "notify_live_services": "Un ou máis servizos de notificación para recibir actualizacións de progreso en directo mentres se executa o ciclo (só a aplicación complementaria para móbiles). Deixa o campo baleiro para saltar as actualizacións en directo.", "notify_before_end_minutes": "Minutos antes do final estimado do ciclo para activar unha notificación. Establécese en 0 para desactivar. Por defecto: 0.", "notify_live_interval_seconds": "Con que frecuencia se envían as actualizacións de progreso durante a execución. Os valores máis baixos responden máis pero consomen máis notificacións. Aplícase un mínimo de 30 segundos; os valores inferiores a 30 s redondéanse automaticamente a 30 s.", "notify_live_overrun_percent": "A marxe de seguridade por riba do reconto de actualizacións estimado para ciclos longos ou superados (por exemplo, un 20 % permite actualizacións 1,2 veces estimadas).", "notify_live_chronometer": "Cando está activada, cada actualización en directo inclúe unha conta atrás do cronómetro ata a hora de finalización estimada. O temporizador de notificacións desactiva automaticamente no dispositivo entre as actualizacións (só a aplicación complementaria de Android).", "notify_title": "Título personalizado para notificacións. Admite o marcador de posición {device}.", "notify_icon": "Icona para usar para notificacións (por exemplo, mdi:washing-machine). Deixa en branco para enviar sen icona.", "notify_start_message": "Mensaxe enviada cando comeza un ciclo. Admite o marcador de posición {device}.", "notify_finish_message": "Mensaxe enviada cando remata un ciclo. Admite os marcadores de posición {device}, {duration}, {program}, {energy_kwh}, {cost}.", "energy_price_entity": "Seleccione unha entidade numérica que conteña o prezo actual da electricidade (por exemplo, sensor.electricity_price, input_number.energy_rate). Cando se define, activa o marcador de posición {cost}. Ten prioridade sobre o valor estático se ambos están configurados.", "energy_price_static": "Prezo fixo da electricidade por kWh. Cando se define, activa o marcador de posición {cost}. Ignorase se unha entidade está configurada anteriormente. Engade o teu símbolo de moeda no modelo de mensaxe, por exemplo. {cost} €.", "notify_reminder_message": "O texto do recordatorio único enviou o número configurado de minutos antes do final estimado. Distinción das actualizacións en directo recorrentes anteriores. Admite os marcadores de posición {device}, {minutes}, {program}.", "notify_timeout_seconds": "Desestima automaticamente as notificacións despois de tantos segundos (previado como a aplicación compañeira \"tempo de espera\"). 0 para mantelos ata que sexan eliminados. Por defecto: 0.", "notify_channel": "Android canle de notificación de estado, progreso en directo e notificacións de recordatorios. O son e a importancia dunha canle configúrase na aplicación compañeira a primeira vez que se usa o nome da canle: WashData só establece o nome da canle. Deixe baleiro para a aplicación por defecto.", "notify_finish_channel": "Canle de Android separada para a alerta de finalización (tamén usada polo recordatorio e o aviso de espera da roupa) para que poida ter o seu propio son. Deixar baleiro para reutilizar a canle de arriba.", "notify_pre_complete_message": "Texto das actualizacións recorrentes do progreso en directo mentres se executa o ciclo. Admite os marcadores de posición {device}, {minutes}, {program}." } }, "advanced_settings": { "title": "Configuración avanzada", "description": "Axusta os limiares de detección, a aprendizaxe e o comportamento avanzado. Os valores predeterminados funcionan ben para a maioría das configuracións.", "sections": { "suggestions_section": { "name": "Configuracións suxeridas", "description": "{suggestions_count} suxestións aprendidas dispoñibles. Marca Aplicar valores suxeridos para revisar os cambios propostos antes de gardar.", "data": { "apply_suggestions": "Aplicar os valores suxeridos" }, "data_description": { "apply_suggestions": "Marque esta caixa para abrir un paso de revisión dos valores suxeridos do algoritmo de aprendizaxe. Non se garda nada automaticamente.\n\nSuxerido (de aprendizaxe):\n- Potencia_mín: {suggested_min_power} W\n- retardo_desactivación: {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- tolerancia_duración: {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- límite_enerxético_final: {suggested_end_energy_threshold} Wh\n- running_dead_zone: {suggested_running_dead_zone} s\n{suggested_reason}" } }, "detection_section": { "name": "Detección e limiares de potencia", "description": "Cando o aparello se considera acendido ou apagado, límites de enerxía e temporización das transicións de estado.", "data": { "start_duration_threshold": "Duración do inicio do rebote (s)", "start_energy_threshold": "Iniciar Energy Gate (Wh)", "completion_min_seconds": "Tempo de execución mínimo de finalización (segundos)", "start_threshold_w": "Limiar de inicio (W)", "stop_threshold_w": "Limiar de parada (W)", "end_energy_threshold": "End Energy Gate (Wh)", "running_dead_zone": "Zona morta de execución (segundos)", "end_repeat_count": "Finalizar o reconto de repeticións", "min_off_gap": "Distancia mínima entre ciclos (s)", "sampling_interval": "Intervalo (s) de mostraxe" }, "data_description": { "start_duration_threshold": "Ignora os picos de potencia breves máis curtos que esta duración (segundos). Filtra os picos de arranque (por exemplo, 60 W durante 2 s) antes de que comece o ciclo real. Predeterminado: 5 s.", "start_energy_threshold": "O ciclo debe acumular polo menos esta enerxía (Wh) durante a fase de INICIO para ser confirmado. Predeterminado: 0,005 Wh.", "completion_min_seconds": "Os ciclos máis curtos que este marcaranse como \"interrompidos\" aínda que rematen de forma natural. Predeterminado: 600 s.", "start_threshold_w": "A potencia debe subir por riba deste limiar para INICIAR un ciclo. Establece unha potencia superior á túa en espera. Valor predeterminado: min_power + 1 W.", "stop_threshold_w": "A potencia debe caer POR BAIXO deste limiar para FINALIZAR un ciclo. Establece un pouco por riba de cero para evitar que o ruído desencadee falsos extremos. Valor predeterminado: 0,6 * min_power.", "end_energy_threshold": "O ciclo remata só se a enerxía na última xanela de retardo de apagado está por debaixo deste valor (Wh). Evita falsos extremos se a potencia fluctúa preto de cero. Predeterminado: 0,05 Wh.", "running_dead_zone": "Despois de comezar o ciclo, ignore as caídas de enerxía durante estes segundos para evitar a detección de final falso durante a fase de arranque inicial. Establécese en 0 para desactivar. Predeterminado: 0s.", "end_repeat_count": "Número de veces que se debe cumprir consecutivamente a condición de final (potencia por debaixo do limiar para off_delay) antes de finalizar o ciclo. Os valores máis altos evitan finalidades falsas durante as pausas. Por defecto: 1.", "min_off_gap": "Se un ciclo comeza dentro destes segundos desde que remate o anterior, uniranse nun único ciclo.", "sampling_interval": "Intervalo mínimo de mostraxe en segundos. Ignoraranse as actualizacións máis rápidas que esta taxa. Predeterminado: 30 s (2 s para lavadoras, lavadoras-secadoras e lavalouzas)." } }, "matching_section": { "name": "Correspondencia de perfís e aprendizaxe", "description": "Con que agresividade WashData fai coincidir os ciclos en execución cos perfís aprendidos e cando pedir comentarios.", "data": { "profile_match_min_duration_ratio": "Relación de duración mínima de coincidencia de perfil (0,1-1,0)", "profile_match_interval": "Intervalo de coincidencia de perfil (segundos)", "profile_match_threshold": "Limiar de coincidencia de perfil", "profile_unmatch_threshold": "Limiar de non coincidencia do perfil", "auto_label_confidence": "Etiqueta automática de confianza (0-1)", "learning_confidence": "Confianza da solicitude de comentarios (0-1)", "suppress_feedback_notifications": "Suprimir as notificacións de comentarios", "duration_tolerance": "Tolerancia de duración (0-0,5)", "smoothing_window": "Fiestra de suavización (mostras)", "profile_duration_tolerance": "Tolerancia de duración da coincidencia do perfil (0-0,5)" }, "data_description": { "profile_match_min_duration_ratio": "Relación de duración mínima para a correspondencia do perfil. O ciclo de execución debe ser polo menos esta fracción da duración do perfil para que coincida. Inferior = coincidencia anterior. Por defecto: 0,50 (50%).", "profile_match_interval": "Con que frecuencia (en segundos) tentar a coincidencia de perfil durante un ciclo. Os valores máis baixos proporcionan unha detección máis rápida pero usan máis CPU. Predeterminado: 300 s (5 minutos).", "profile_match_threshold": "Puntuación mínima de semellanza DTW (0,0–1,0) necesaria para considerar un perfil como coincidencia. Maior = coincidencia máis estrita, menos falsos positivos. Por defecto: 0.4.", "profile_unmatch_threshold": "Puntuación de semellanza DTW (0,0–1,0) por debaixo da cal se rexeita un perfil previamente coincidente. Debe ser inferior ao limiar de coincidencia para evitar o parpadeo. Por defecto: 0,35.", "auto_label_confidence": "Etiqueta automaticamente os ciclos igual ou superior a esta confianza ao finalizar (0,0–1,0).", "learning_confidence": "Confianza mínima para solicitar a verificación do usuario mediante un evento (0,0–1,0).", "suppress_feedback_notifications": "Cando está activado, WashData seguirá facendo un seguimento e solicitará comentarios internamente, pero non mostrará notificacións persistentes que che soliciten que confirmes os ciclos. Útil cando os ciclos sempre se detectan correctamente e atopas que as indicacións distraen.", "duration_tolerance": "Tolerancia para as estimacións do tempo restante durante unha carreira (0,0-0,5 corresponde ao 0-50%).", "smoothing_window": "Número de lecturas recentes de potencia utilizadas para a suavización da media móbil.", "profile_duration_tolerance": "Tolerancia utilizada pola coincidencia de perfil para a variación da duración total (0,0–0,5). Comportamento por defecto: ±25%." } }, "timing_section": { "name": "Temporización, mantemento e depuración", "description": "Watchdog, reinicio do progreso, mantemento automático e exposición de entidades de depuración.", "data": { "watchdog_interval": "Intervalo de control (segundos)", "no_update_active_timeout": "Tempo de espera sen actualización (s)", "progress_reset_delay": "Demora de restablecemento do progreso (segundos)", "auto_maintenance": "Activar o mantemento automático", "expose_debug_entities": "Expoñer entidades de depuración", "save_debug_traces": "Gardar trazos de depuración" }, "data_description": { "watchdog_interval": "Segundos entre comprobacións de control durante a execución. Predeterminado: 5 s. ADVERTENCIA: Asegúrate de que este é MAIOR que o intervalo de actualización do teu sensor para evitar falsas paradas (por exemplo, se o sensor se actualiza cada 60 segundos, utiliza 65 segundos ou máis).", "no_update_active_timeout": "Para sensores de publicación ao cambio: só forza a finalizar un ciclo ACTIVO se non chegan actualizacións durante tantos segundos. A finalización de baixa potencia aínda usa o retardo de apagado.", "progress_reset_delay": "Despois de completar un ciclo (100 %), agarde tantos segundos de inactividade antes de restablecer o progreso ao 0 %. Predeterminado: 300 s.", "auto_maintenance": "Activar o mantemento automático (reparar mostras, combinar fragmentos).", "expose_debug_entities": "Mostra sensores avanzados (confianza, fase, ambigüidade) para a depuración.", "save_debug_traces": "Almacena datos detallados de clasificación e rastrexo de enerxía no historial (Aumenta o uso de almacenamento)." } }, "anti_wrinkle_section": { "name": "Escudo antiarrugas (secadoras)", "description": "Ignora as rotacións do tambor despois do ciclo para evitar ciclos fantasma. Só secadora / lavasecadora.", "data": { "anti_wrinkle_enabled": "Protector antiengurras (só secadora/lavadora-secadora)", "anti_wrinkle_max_power": "Potencia máxima antiengurras (W) (só secadora/lavadora-secadora)", "anti_wrinkle_max_duration": "Duración máxima antiengurras (s) (só secadora/lavadora-secadora)", "anti_wrinkle_exit_power": "Potencia de saída antiengurras (W) (só secadora/lavadora-secadora)" }, "data_description": { "anti_wrinkle_enabled": "Ignora as rotacións curtas de tambor de baixa potencia despois de que remate un ciclo para evitar ciclos fantasma (só para secadora/lavadora e secadora).", "anti_wrinkle_max_power": "As explosións a esta potencia ou por debaixo trátanse como rotacións antiengurras en lugar de novos ciclos. Só se aplica cando o protector antiengurras está activado.", "anti_wrinkle_max_duration": "Lonxitude máxima de explosión para tratar como rotación antiengurras. Só se aplica cando o protector antiengurras está activado.", "anti_wrinkle_exit_power": "Se a potencia cae por debaixo deste nivel, saia inmediatamente da función antiengurras (desactivada). Só se aplica cando o protector antiengurras está activado." } }, "delay_start_section": { "name": "Detección de inicio diferido", "description": "Trata a espera sostida de baixa potencia como 'Agardando para iniciar' ata que o ciclo comece de verdade.", "data": { "delay_start_detect_enabled": "Activar a detección de inicio retardado", "delay_confirm_seconds": "Inicio diferido: tempo de confirmación en espera (s)", "delay_timeout_hours": "Inicio diferido: tempo de espera máximo (h)" }, "data_description": { "delay_start_detect_enabled": "Cando está activado, detéctase como un inicio atrasado un breve pico de drenaxe de baixa potencia seguido dunha potencia en espera sostida. O sensor de estado mostra \"Esperando para comezar\" durante o atraso. Non se fai un seguimento do tempo nin do progreso do programa ata que comeza realmente o ciclo. Require que start_threshold_w se configure por riba da potencia do pico de drenaxe.", "delay_confirm_seconds": "A potencia debe permanecer entre o Limiar de parada (W) e o Limiar de inicio (W) durante este número de segundos antes de que WashData entre en 'Agardando para iniciar'. Filtra os picos breves da navegación polos menús. Predeterminado: 60 s.", "delay_timeout_hours": "Tempo de espera de seguridade: se a máquina aínda está en \"Esperando para iniciar\" despois de tantas horas, WashData restablecerá a Desactivado. Por defecto: 8 h." } }, "external_triggers_section": { "name": "Disparadores externos, porta e pausa", "description": "Sensor externo opcional de fin de ciclo, sensor de porta para detectar pausa/limpo e interruptor de corte de enerxía en pausa.", "data": { "external_end_trigger_enabled": "Activar o disparador de fin de ciclo externo", "external_end_trigger": "Sensor externo de fin de ciclo", "external_end_trigger_inverted": "Inverter lóxica de disparo (disparador activado)", "door_sensor_entity": "Sensor de porta", "pause_cuts_power": "Cortar a enerxía ao facer unha pausa", "switch_entity": "Cambiar a entidade (para o corte de enerxía en pausa)", "notify_unload_delay_minutes": "Atraso da notificación de espera de lavandería (min)" }, "data_description": { "external_end_trigger_enabled": "Activa a monitorización dun sensor binario externo para activar a finalización do ciclo.", "external_end_trigger": "Seleccione unha entidade de sensor binario. Cando este sensor se activa, o ciclo actual finalizará co estado \"completado\".", "external_end_trigger_inverted": "De forma predeterminada, o gatillo dispara cando o sensor se acende. Marca esta caixa para disparar cando o sensor se apague.", "door_sensor_entity": "Sensor binario opcional para a porta da máquina (encendido = aberto, apagado = pechado). Cando a porta se abre durante un ciclo activo, WashData confirmará o ciclo como pausado intencionalmente. Despois de finalizar o ciclo, se a porta aínda está pechada, o estado cambia a \"Limpar\" ata que se abra a porta. Nota: pechar a porta NON reanuda automaticamente un ciclo en pausa; a continuación debe activarse manualmente mediante o botón Reanudar o ciclo ou o servizo.", "pause_cuts_power": "Ao facer unha pausa mediante o botón ou o servizo Pause Cycle, tamén desactiva a entidade de conmutación configurada. Só ten efecto se se configura unha entidade de cambio para este dispositivo.", "switch_entity": "A entidade de conmutación para alternar ao pausar ou retomar. Necesario cando se activa \"Cortar a enerxía ao facer unha pausa\".", "notify_unload_delay_minutes": "Envía unha notificación a través da canle de notificación de finalización despois de que o ciclo remate e a porta non se abriu durante tantos minutos (require sensor de porta). Establécese en 0 para desactivar. Por defecto: 60 min." } }, "pump_section": { "name": "Monitor de bomba", "description": "Só para o tipo de dispositivo bomba. Dispara un evento se un ciclo da bomba supera esta duración.", "data": { "pump_stuck_duration": "Limiar (s) de alerta de bomba atascada (só bomba)" }, "data_description": { "pump_stuck_duration": "Se un ciclo de bomba aínda está en execución despois destes segundos, desenvólvese unha vez un evento ha_washdata_pump_stuck. Use isto para detectar un motor atascado (o funcionamento típico da bomba de sumidoiro é inferior a 60 s). Predeterminado: 1800 s (30 min). Só tipo de dispositivo de bomba." } }, "device_link_section": { "name": "Dispositivo Link", "description": "Facultativamente vincular este dispositivo a un dispositivo existente (por exemplo, o enchufe intelixente ou o propio electrodomésticos). O dispositivo WashData móstrase entón como \"conectado a través\" do dispositivo. Deixar baleiro para manter os datos como un dispositivo autónomo.", "data": { "linked_device": "Dispositivo conectado" }, "data_description": { "linked_device": "Seleccione o dispositivo para conectar WashData. Isto engade unha referencia \"conectada vía\" no rexistro de dispositivos; WashData mantén a súa propia tarxeta de dispositivo e entidades. Borrar a selección para eliminar o enlace." } } } }, "diagnostics": { "title": "Diagnóstico e Mantemento", "description": "Executa accións de mantemento como fusionar ciclos fragmentados ou migrar datos almacenados.\n\n**Uso de almacenamento**\n\n- Tamaño do ficheiro: {file_size_kb} KB\n- Ciclos: {cycle_count}\n- Perfís: {profile_count}\n- Trazos de depuración: {debug_count}", "menu_options": { "reprocess_history": "Mantemento: reprocesamento e optimización de datos", "clear_debug_data": "Borrar datos de depuración (liberar espazo)", "wipe_history": "Borrar TODOS os datos deste dispositivo (irreversible)", "export_import": "Exportar/Importar JSON con configuración (copiar/pegar)", "menu_back": "← Volver" } }, "clear_debug_data": { "title": "Borrar datos de depuración", "description": "Estás seguro de que queres eliminar todos os rastros de depuración almacenados? Isto liberará espazo pero eliminará a información detallada da clasificación dos ciclos anteriores." }, "manage_cycles": { "title": "Xestionar Ciclos", "description": "Últimos ciclos:\n{recent_cycles}", "menu_options": { "auto_label_cycles": "Etiqueta automática de ciclos antigos", "select_cycle_to_label": "Ciclo específico da etiqueta", "select_cycle_to_delete": "Eliminar ciclo", "interactive_editor": "Combinar/dividir Editor interactivo", "trim_cycle_select": "Datos do ciclo de recorte", "menu_back": "← Volver" } }, "manage_cycles_empty": { "title": "Xestionar Ciclos", "description": "Aínda non se rexistrou ningún ciclo.", "menu_options": { "auto_label_cycles": "Etiqueta automática de ciclos antigos", "menu_back": "← Volver" } }, "manage_profiles": { "title": "Xestionar perfís", "description": "Resumo do perfil:\n{profile_summary}", "menu_options": { "create_profile": "Crear novo perfil", "edit_profile": "Editar/Renomear o perfil", "delete_profile_select": "Eliminar perfil", "profile_stats": "Estatísticas do perfil", "cleanup_profile": "Limpar o historial - Gráfica e elimina", "assign_profile_phases_select": "Asignar intervalos de fase", "menu_back": "← Volver" } }, "manage_profiles_empty": { "title": "Xestionar perfís", "description": "Aínda non se creou ningún perfil.", "menu_options": { "create_profile": "Crear novo perfil", "menu_back": "← Volver" } }, "manage_phase_catalog": { "title": "Xestionar o catálogo de fases", "description": "Catálogo de fases (valores predeterminados para este dispositivo + fases personalizadas):\n{phase_summary}", "menu_options": { "phase_catalog_create": "Crear unha nova fase", "phase_catalog_edit_select": "Fase de edición", "phase_catalog_delete": "Eliminar fase", "menu_back": "← Volver" } }, "phase_catalog_create": { "title": "Crear fase personalizada", "description": "Crea un nome e unha descrición de fase personalizados e escolla a que tipo de dispositivo se aplica.", "data": { "target_device_type": "Tipo de dispositivo de destino", "phase_name": "Nome da fase", "phase_description": "Descrición da fase" } }, "phase_catalog_edit_select": { "title": "Editar Fase Personalizada", "description": "Seleccione unha fase personalizada para editar.", "data": { "phase_name": "Fase personalizada" } }, "phase_catalog_edit": { "title": "Editar Fase Personalizada", "description": "Fase de edición: {phase_name}", "data": { "phase_name": "Nome da fase", "phase_description": "Descrición da fase" } }, "phase_catalog_delete": { "title": "Eliminar Fase Personalizada", "description": "Seleccione unha fase personalizada para eliminar. Eliminaranse os intervalos asignados que utilicen esta fase.", "data": { "phase_name": "Fase personalizada" } }, "assign_profile_phases": { "title": "Asignar intervalos de fase", "description": "Vista previa da fase para o perfil: **{profile_name}**\n\n{timeline_svg}\n\n**Intervalos actuais:**\n{current_ranges}\n\nUse as accións seguintes para engadir, editar, eliminar ou gardar intervalos.", "menu_options": { "assign_profile_phases_add": "Engadir intervalo de fases", "assign_profile_phases_edit_select": "Editar intervalo de fases", "assign_profile_phases_delete": "Eliminar intervalo de fases", "phase_ranges_clear": "Borrar todos os intervalos", "assign_profile_phases_auto_detect": "Fases de detección automática", "phase_ranges_save": "Garda e Volve", "menu_back": "← Volver" } }, "assign_profile_phases_add": { "title": "Engadir intervalo de fases", "description": "Engade un intervalo de fase ao borrador actual.", "data": { "phase_name": "Fase", "start_min": "Minuto de inicio", "end_min": "Minuto Final" } }, "assign_profile_phases_edit_select": { "title": "Editar intervalo de fases", "description": "Seleccione un intervalo para editar.", "data": { "range_index": "Rango de fases" } }, "assign_profile_phases_edit": { "title": "Editar intervalo de fases", "description": "Actualiza o intervalo de fase seleccionado.", "data": { "phase_name": "Fase", "start_min": "Minuto de inicio", "end_min": "Minuto Final" } }, "assign_profile_phases_delete": { "title": "Eliminar intervalo de fases", "description": "Selecciona un intervalo para eliminar do borrador.", "data": { "range_index": "Rango de fases" } }, "assign_profile_phases_auto_detect": { "title": "Fases detectadas automaticamente", "description": "Perfil: **{profile_name}**\n\n{timeline_svg}\n\n**Detectáronse {detected_count} fases automaticamente.** Escolle unha acción a continuación.", "data": { "action": "Acción" } }, "assign_profile_phases_auto_detect_name": { "title": "Nome das fases detectadas", "description": "Perfil: **{profile_name}**\n\n**Detectáronse {detected_count} fases:**\n{ranges_summary}\n\nAsignar un nome a cada fase." }, "assign_profile_phases_select": { "title": "Asignar intervalos de fase", "description": "Seleccione un perfil para configurar intervalos de fase.", "data": { "profile": "Perfil" } }, "profile_stats": { "title": "Estatísticas do perfil", "description": "{stats_table}" }, "create_profile": { "title": "Crear novo perfil", "description": "Crea un novo perfil manualmente ou a partir dun ciclo anterior.\n\nExemplos de nomes de perfil: 'Delicados', 'Resistente', 'Lavado rápido'", "data": { "profile_name": "Nome do perfil", "reference_cycle": "Ciclo de referencia (opcional)", "manual_duration": "Duración manual (minutos)" } }, "edit_profile": { "title": "Editar perfil", "description": "Seleccione un perfil para renomear", "data": { "profile": "Perfil" } }, "rename_profile": { "title": "Editar detalles do perfil", "description": "Perfil actual: {current_name}", "data": { "new_name": "Nome do perfil", "manual_duration": "Duración manual (minutos)" } }, "delete_profile_select": { "title": "Eliminar perfil", "description": "Seleccione un perfil para eliminar", "data": { "profile": "Perfil" } }, "delete_profile_confirm": { "title": "Confirma Eliminar perfil", "description": "⚠️ Isto eliminará permanentemente o perfil: {profile_name}", "data": { "unlabel_cycles": "Elimina a etiqueta dos ciclos usando este perfil" } }, "auto_label_cycles": { "title": "Etiqueta automática de ciclos antigos", "description": "Atopáronse {total_count} ciclos totais. Perfís: {profiles}", "data": { "confidence_threshold": "Confianza mínima (0,50-0,95)" } }, "select_cycle_to_label": { "title": "Seleccione Ciclo para etiquetar", "description": "✓ = completado, ⚠ = retomado, ✗ = interrompido", "data": { "cycle_id": "Ciclo" } }, "select_cycle_to_delete": { "title": "Eliminar ciclo", "description": "⚠️ Isto eliminará permanentemente o ciclo seleccionado", "data": { "cycle_id": "Ciclo para eliminar" } }, "label_cycle": { "title": "Ciclo de etiquetas", "description": "{cycle_info}", "data": { "profile_name": "Perfil", "new_profile_name": "Novo nome de perfil (se se está a crear)" } }, "post_process": { "title": "Historial do proceso (fusionar/dividir)", "description": "Limpa o historial de ciclos fusionando execucións fragmentadas e dividindo ciclos combinados incorrectamente nunha xanela de tempo. Introduza o número de horas para mirar atrás (use 999999 para todos).", "data": { "time_range": "Ventá retrospectiva (horas)", "gap_seconds": "Combinar/dividir o intervalo (segundos)" }, "data_description": { "time_range": "Número de horas para buscar ciclos fragmentados para fusionar. Use 999999 para procesar todos os datos históricos.", "gap_seconds": "Limiar para decidir división vs fusión. Os espazos máis curtos que este únense. Os espazos máis longos que este están divididos. Baixa isto para forzar unha división nun ciclo que se fusionou incorrectamente." } }, "cleanup_profile": { "title": "Limpar o historial: seleccione o perfil", "description": "Seleccione un perfil para visualizar. Isto xerará un gráfico que mostra todos os ciclos pasados ​​deste perfil para axudar a identificar os valores atípicos.", "data": { "profile": "Perfil" } }, "cleanup_select": { "title": "Limpar o historial - Gráfica e elimina", "description": "![Gráfica]({graph_url})\n\n**Visualización de {profile_name}**\n\nO gráfico mostra os ciclos individuais como liñas de cores. Identifica os valores atípicos (liñas afastadas do grupo) e fai coincidir a súa cor na lista de abaixo para eliminalos.\n\n**Selecciona ciclos para eliminar PERMANENTE:**", "data": { "cycles_to_delete": "Ciclos para eliminar (comproba as cores coincidentes)" } }, "interactive_editor": { "title": "Combinar/dividir Editor interactivo", "description": "Seleccione unha acción manual para realizar no seu historial de ciclos.", "menu_options": { "editor_split": "Dividir un ciclo (Buscar ocos)", "editor_merge": "Combinar ciclos (unir fragmentos)", "editor_delete": "Eliminar ciclo(s)", "menu_back": "← Volver" } }, "editor_select": { "title": "Seleccione Ciclos", "description": "Seleccione o(s) ciclo(s) a procesar.\n\n{info_text}", "data": { "selected_cycles": "Ciclos" } }, "editor_configure": { "title": "Configurar e aplicar", "description": "{preview_md}", "data": { "confirm_action": "Acción", "merged_profile": "Perfil resultante", "new_profile_name": "Novo nome de perfil", "confirm_commit": "Si, confirmo esta acción", "segment_0_profile": "Perfil do segmento 1", "segment_1_profile": "Perfil do segmento 2", "segment_2_profile": "Perfil do segmento 3", "segment_3_profile": "Perfil do segmento 4", "segment_4_profile": "Perfil do segmento 5", "segment_5_profile": "Perfil do segmento 6", "segment_6_profile": "Perfil do segmento 7", "segment_7_profile": "Perfil do segmento 8", "segment_8_profile": "Perfil do segmento 9", "segment_9_profile": "Perfil do segmento 10" } }, "editor_split_params": { "title": "Configuración dividida", "description": "Axuste a sensibilidade para dividir este ciclo. Calquera espazo inactivo máis longo que isto provocará unha división.", "data": { "split_mode": "Método de división" } }, "editor_split_auto_params": { "title": "Configuración da división automática", "description": "Axusta a sensibilidade para dividir este ciclo. Calquera intervalo de inactividade máis longo ca este provocará unha división.", "data": { "min_gap_seconds": "Limiar do intervalo de división (segundos)" } }, "editor_split_manual_params": { "title": "Marcas de tempo de división manual", "description": "{preview_md}Xanela do ciclo: **{cycle_start_wallclock} → {cycle_end_wallclock}** o {cycle_date}.\n\nIntroduce unha ou máis marcas de tempo de división (`HH:MM` ou `HH:MM:SS`), unha por liña. O ciclo cortarase en cada marca de tempo — N marcas de tempo producen N+1 segmentos.", "data": { "split_timestamps": "Marcas temporais de división" } }, "reprocess_history": { "title": "Mantemento: reprocesamento e optimización de datos", "description": "Realiza unha limpeza profunda de datos históricos:\n1. Recorta as lecturas de potencia cero (silencio).\n2. Corrixe o tempo/duración do ciclo.\n3. Recalcula todos os modelos estatísticos (sobres).\n\n**Executa isto para solucionar problemas de datos ou aplicar novos algoritmos.**" }, "wipe_history": { "title": "Borrar o historial (só probas)", "description": "⚠️ Isto eliminará permanentemente TODOS os ciclos e perfís almacenados para este dispositivo. Isto non se pode desfacer!" }, "export_import": { "title": "Exportar/Importar JSON", "description": "Copiar/pegar ciclos, perfís e configuracións para este dispositivo. Exporta a continuación ou pega JSON para importar.", "data": { "mode": "Acción", "json_payload": "Configuración completa JSON" }, "data_description": { "mode": "Escolla Exportar para copiar os datos e a configuración actuais ou Importar para pegar os datos exportados desde outro dispositivo WashData.", "json_payload": "Para exportar: copia este JSON (inclúe ciclos, perfís e todas as configuracións afinadas). Para importar: pegue JSON exportado desde WashData." } }, "record_cycle": { "title": "Ciclo de rexistro", "description": "Grava manualmente un ciclo para crear un perfil limpo sen interferencias.\n\nEstado: **{status}**\nDuración: {duration} s\nMostras: {samples}", "menu_options": { "record_refresh": "Estado de actualización", "record_stop": "Deter a gravación (gardar e procesar)", "record_start": "Iniciar unha nova gravación", "record_process": "Procesar a última gravación (recortar e gardar)", "record_discard": "Descartar a última gravación", "menu_back": "← Volver" } }, "record_process": { "title": "Gravación do proceso", "description": "![Gráfica]({graph_url})\n\n**O gráfico mostra a gravación en bruto.** Azul = Manter, Vermello = Recorte proposto.\n*O gráfico é estático e non se actualiza cos cambios de formulario.*\n\nDetívose a gravación. Os recortes están aliñados coa frecuencia de mostraxe detectada (~{sampling_rate}s).\n\nDuración bruta: {duration} s\nMostras: {samples}", "data": { "head_trim": "Inicio de recorte (segundos)", "tail_trim": "Fin de recorte (segundos)", "save_mode": "Gardar destino", "profile_name": "Nome do perfil" } }, "learning_feedbacks": { "title": "Comentarios de aprendizaxe", "description": "Comentarios pendentes: {count}\n\n{pending_table}\n\nSelecciona unha solicitude de revisión de ciclo para procesar.", "menu_options": { "learning_feedbacks_pick": "Revisar un feedback pendente", "learning_feedbacks_dismiss_all": "Descartar todo o feedback pendente", "menu_back": "← Volver" } }, "learning_feedbacks_pick": { "title": "Seleccionar comentarios para revisar", "description": "Seleccione unha solicitude de revisión de ciclo para abrir.", "data": { "selected_feedback": "Seleccionar ciclo para revisar" } }, "learning_feedbacks_empty": { "title": "Comentarios de aprendizaxe", "description": "Non se atoparon solicitudes de comentarios pendentes.", "menu_options": { "menu_back": "← Volver" } }, "learning_feedbacks_dismiss_all": { "title": "Descartar todos os comentarios pendentes", "description": "Está a piques de descartar **{count}** solicitudes de comentarios pendentes. Os ciclos descartados permanecerán no seu historial pero non achegarán ningún novo sinal de aprendizaxe. Isto non se pode desfacer.\n\n✅ Marca a caixa de abaixo e fai clic en **Enviar** para descartalos todos.\n❌ Déixaa sen marcar e fai clic en **Enviar** para cancelar e volver.", "data": { "confirm_dismiss_all": "Confirmar: descartar todas as solicitudes de feedback pendentes" } }, "resolve_feedback": { "title": "Resolver comentarios", "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__Escolle unha acción a continuación:__", "data": { "action": "Que che gustaría facer?", "corrected_profile": "Programa correcto (se está corrixindo)", "corrected_duration": "Duración correcta en segundos (se se corrixe)" } }, "trim_cycle_select": { "title": "Ciclo de recorte - Seleccione Ciclo", "description": "Seleccione un ciclo para cortar. ✓ = completado, ⚠ = retomado, ✗ = interrompido", "data": { "cycle_id": "Ciclo" } }, "trim_cycle": { "title": "Ciclo de corte", "description": "Fiestra actual: {trim_summary}\n\n{trim_svg}", "data": { "action": "Acción" } }, "trim_cycle_start": { "title": "Establece o inicio de recorte", "description": "Ventá de ciclo: {cycle_start_wallclock} → {cycle_end_wallclock}\n\nInicio actual: **{current_wallclock}** (+{current_offset_min} min desde o inicio do ciclo)\n\nEscolle unha nova hora de inicio usando o selector de reloxos que aparece a continuación.", "data": { "trim_start_time": "Nova hora de inicio", "trim_start_min": "Novo inicio (minutos desde o inicio do ciclo)" } }, "trim_cycle_end": { "title": "Establecer o final do recorte", "description": "Ventá de ciclo: {cycle_start_wallclock} → {cycle_end_wallclock}\n\nFin actual: **{current_wallclock}** (+{current_offset_min} min desde o inicio do ciclo)\n\nEscolle unha nova hora de finalización usando o selector de reloxos que aparece a continuación.", "data": { "trim_end_time": "Nova hora de finalización", "trim_end_min": "Novo fin (minutos desde o inicio do ciclo)" } } }, "error": { "import_failed": "Produciuse un erro na importación. 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 polo menos un ciclo para esta acción.", "select_at_least_two": "Selecciona polo menos dous ciclos para esta acción.", "profile_exists": "Xa existe un perfil con este nome", "rename_failed": "Produciuse un erro ao cambiar o nome do perfil. É posible que o perfil non exista ou que xa se tome un novo nome.", "assignment_failed": "Produciuse un erro ao asignar o perfil ao ciclo", "duplicate_phase": "Xa existe unha fase con este nome.", "phase_not_found": "Non se atopou a fase seleccionada.", "invalid_phase_name": "O nome da fase non pode estar baleiro.", "phase_name_too_long": "O nome da fase é demasiado longo.", "invalid_phase_range": "O intervalo de fases non é válido. O final debe ser maior que o inicio.", "invalid_phase_timestamp": "A marca de tempo non é válida. Use o formato AAAA-MM-DD HH:MM ou HH:MM.", "overlapping_phase_ranges": "Os intervalos de fase se solapan. Axusta os intervalos e téntao de novo.", "incomplete_phase_row": "Cada fila de fase debe incluír unha fase máis os valores de inicio/fin completos para o modo seleccionado.", "timestamp_mode_cycle_required": "Seleccione un ciclo de orixe cando use o modo de marca de tempo.", "no_phase_ranges": "Aínda non hai intervalos de fase dispoñibles para esa acción.", "feedback_notification_title": "WashData: verificar o ciclo ({device})", "feedback_notification_message": "**Dispositivo**: {device}\n**Programa**: {program} ({confidence} % de confianza)\n**Hora**: {time}\n\nWashData precisa da túa axuda para verificar este ciclo detectado.\n\nVaia a **Configuración > Dispositivos e servizos > WashData > Configurar > Comentarios de aprendizaxe** para confirmar ou corrixir este resultado.", "suggestions_ready_notification_title": "WashData: configuracións suxeridas listas ({device})", "suggestions_ready_notification_message": "O sensor de **Configuración suxerida** agora informa de **{count}** recomendacións útiles.\n\nPara revisalos e aplicalos: **Configuración > Dispositivos e servizos > WashData > Configurar > Configuración avanzada > Aplicar valores suxeridos**.\n\nAs suxestións son opcionais e móstranse para revisar antes de gardar.", "trim_range_invalid": "O comezo debe ser antes do final. Axusta os teus puntos de recorte.", "trim_failed": "Fallou o recorte. É posible que o ciclo xa non exista ou que a xanela estea baleira.", "invalid_split_timestamp": "A marca temporal é inválida ou está fóra da xanela do ciclo. Usa HH:MM ou HH:MM:SS dentro da xanela do ciclo.", "no_split_segments_found": "Non se puideron producir segmentos válidos a partir destas marcas temporais. Asegúrate de que cada marca temporal estea dentro da xanela do ciclo e de que os segmentos duren polo menos 1 minuto.", "auto_tune_suggestion": "{device_type} {device_title} detectaron ciclos pantasmas. Cambio de min_power suxerido: {current_min}W -> {new_min}W (non se aplica automaticamente).", "auto_tune_title": "Sintonización automática de WashData", "auto_tune_fallback": "{device_type} {device_title} detectaron ciclos pantasmas. Cambio de min_power suxerido: {current_min}W -> {new_min}W (non se aplica automaticamente)." }, "abort": { "no_cycles_found": "Non se atoparon ciclos", "no_split_segments_found": "Non se atoparon segmentos divisibles no ciclo seleccionado.", "cycle_not_found": "Non se puido cargar o ciclo seleccionado.", "no_power_data": "Non hai datos de rastrexo de enerxía dispoñibles para o ciclo seleccionado.", "no_profiles_found": "Non se atoparon perfís. Crea primeiro un perfil.", "no_profiles_for_matching": "Non hai perfís dispoñibles para coincidir. Crea primeiro perfís.", "no_unlabeled_cycles": "Todos os ciclos xa están etiquetados", "no_suggestions": "Aínda non hai valores suxeridos dispoñibles. Executa algúns ciclos e téntao de novo.", "no_predictions": "Sen previsións", "no_custom_phases": "Non se atopou ningunha fase personalizada.", "reprocess_success": "Reprocesáronse correctamente {count} ciclos.", "debug_data_cleared": "Borráronse correctamente os datos de depuración de {count} ciclos." } }, "selector": { "notify_events_option": { "options": { "cycle_start": "Inicio de ciclo", "cycle_finish": "Finalización do ciclo", "cycle_live": "Progreso en directo" } }, "common_text": { "options": { "unlabeled": "(Sen etiqueta)", "create_new_profile": "Crear novo perfil", "remove_label": "Eliminar a etiqueta", "no_reference_cycle": "(Sen ciclo de referencia)", "all_device_types": "Todos os tipos de dispositivos", "current_suffix": "(actual)", "editor_select_info": "Selecciona 1 ciclo para dividir ou máis de 2 ciclos para combinar.", "editor_select_info_split": "Selecciona 1 ciclo para dividir.", "editor_select_info_merge": "Selecciona 2 ou máis ciclos para fusionar.", "editor_select_info_delete": "Selecciona 1 ou máis ciclos para eliminar.", "no_cycles_recorded": "Aínda non se rexistrou ningún ciclo.", "profile_summary_line": "- **{name}**: {count} ciclos, {avg}m de media", "no_profiles_created": "Aínda non se creou ningún perfil.", "phase_preview": "Vista previa de fases", "phase_preview_no_curve": "A curva de perfil media aínda non está dispoñible. Executa/etiqueta máis ciclos para este perfil.", "average_power_curve": "Curva de potencia media", "unit_min": "min", "profile_option_fmt": "{name} ({count} ciclos, ~{duration} m de media)", "profile_option_short_fmt": "{name} ({count} ciclos, ~{duration} m)", "deleted_cycles_from_profile": "Elimináronse {count} ciclos de {profile}.", "not_enough_data_graph": "Non hai datos suficientes para xerar o gráfico.", "no_profiles_found": "Non se atoparon perfís.", "cycle_info_fmt": "Ciclo: {start}, {duration}m, Actual: {label}", "top_candidates_header": "### Principais 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": "__Escolle unha acción a continuación:__", "tbl_count": "Conta", "tbl_avg": "Prom", "tbl_min": "Min", "tbl_max": "Máx", "tbl_energy_avg": "Enerxía (media)", "tbl_energy_total": "Enerxía (Total)", "tbl_consistency": "Consistir.", "tbl_last_run": "Última carreira", "graph_legend_title": "Lenda gráfica", "graph_legend_body": "A banda azul representa o rango de consumo de potencia mínimo e máximo observado. A liña mostra a curva de potencia media.", "recording_preview": "Vista previa da gravación", "trim_start": "Inicio de recorte", "trim_end": "Recortar final", "split_preview_title": "Vista previa dividida", "split_preview_found_fmt": "Atopáronse {count} segmentos.", "split_preview_confirm_fmt": "Fai clic en Confirmar para dividir este ciclo en {count} ciclos separados.", "merge_preview_title": "Vista previa de combinación", "merge_preview_joining_fmt": "Unindo {count} ciclos. As lagoas cubriranse con lecturas de 0W.", "editor_delete_preview_title": "Vista previa de eliminación", "editor_delete_preview_intro": "Os ciclos seleccionados eliminaranse permanentemente:", "editor_delete_preview_confirm": "Fai clic en Confirmar para eliminar permanentemente estes rexistros de ciclos.", "no_power_preview": "*Non hai datos de enerxía dispoñibles para a vista previa.*", "profile_comparison": "Comparación de perfiles", "actual_cycle_label": "Este ciclo (real)", "storage_usage_header": "Uso de almacenamento", "storage_file_size": "Tamaño do ficheiro", "storage_cycles": "Ciclos", "storage_profiles": "Perfís", "storage_debug_traces": "Rastros de depuración", "overview_suffix": "Visión xeral", "phase_preview_for_profile": "Vista previa da fase para o perfil", "current_ranges_header": "Rangos actuais", "assign_phases_help": "Use as accións seguintes para engadir, editar, eliminar ou gardar intervalos.", "profile_summary_header": "Resumo do perfil", "recent_cycles_header": "Ciclos recentes", "trim_cycle_preview_title": "Vista previa de recorte do ciclo", "trim_cycle_preview_no_data": "Non hai datos de enerxía dispoñibles para este ciclo.", "trim_cycle_preview_kept_suffix": "mantido", "table_program": "Programa", "table_when": "Cando", "table_length": "Duración", "table_match": "Coincidencia", "table_profile": "Perfil", "table_cycles": "Ciclos", "table_avg_length": "Duración media", "table_last_run": "Última carreira", "table_avg_energy": "Enerxía media", "table_detected_program": "Programa detectado", "table_confidence": "Confianza", "table_reported": "Informado", "phase_builtin_suffix": "(Incorporado)", "phase_none_available": "Non hai fases dispoñibles.", "settings_deprecation_warning": "⚠️ **Tipo de dispositivo en desuso:** {device_type} está programado para a súa eliminación nunha versión futura. A canalización de coincidencias de WashData non produce resultados fiables para esta clase de dispositivo. A súa integración segue funcionando durante o período de desuso; para silenciar esta advertencia, cambia o **Tipo de dispositivo** a continuación a un dos tipos admitidos (lavadora, secadora, lavadora-secadora combinada, lavavajillas, freidora de aire, máquina de pan ou bomba) ou a **Outro (avanzado)** se o teu aparello non coincide con ningún dos tipos admitidos. **Outro (Avanzado)** envía valores predeterminados xenéricos intencionadamente que non están axustados para ningún dispositivo específico, polo que terás que configurar ti mesmo os limiares, os tempos de espera e os parámetros coincidentes; toda a súa configuración existente consérvase cando cambia.", "phase_other_device_types": "Outros tipos de dispositivos:" } }, "interactive_editor_action": { "options": { "split": "Dividir un ciclo (Buscar ocos)", "merge": "Combinar ciclos (unir fragmentos)", "delete": "Eliminar ciclo(s)" } }, "split_mode": { "options": { "auto": "Detectar automaticamente os ocos de inactividade", "manual": "Marcas temporais manuais" } }, "diagnostics_action": { "options": { "reprocess_history": "Mantemento: reprocesamento e optimización de datos", "clear_debug_data": "Borrar datos de depuración (liberar espazo)", "wipe_history": "Borrar TODOS os datos deste dispositivo (irreversible)", "export_import": "Exportar/Importar JSON con configuración (copiar/pegar)" } }, "export_import_mode": { "options": { "export": "Exportar todos os datos", "import": "Importar/Combinar datos" } }, "manage_cycles_action": { "options": { "auto_label_cycles": "Etiqueta automática de ciclos antigos", "select_cycle_to_label": "Ciclo específico da etiqueta", "select_cycle_to_delete": "Eliminar ciclo", "interactive_editor": "Combinar/dividir Editor interactivo", "trim_cycle": "Datos do ciclo de recorte" } }, "manage_profiles_action": { "options": { "create_profile": "Crear novo perfil", "edit_profile": "Editar/Renomear o perfil", "delete_profile": "Eliminar perfil", "profile_stats": "Estatísticas do perfil", "cleanup_profile": "Limpar o historial - Gráfica e elimina", "assign_phases": "Asignar intervalos de fase" } }, "manage_phase_catalog_action": { "options": { "create_custom_phase": "Crear unha nova fase", "edit_custom_phase": "Fase de edición", "delete_custom_phase": "Eliminar fase" } }, "assign_profile_phases_action": { "options": { "add_range": "Engadir intervalo de fases", "edit_range": "Editar intervalo de fases", "delete_range": "Eliminar intervalo de fases", "clear_ranges": "Borrar todos os intervalos", "auto_detect_ranges": "Fases de detección automática", "save_ranges": "Garda e Volve" } }, "record_cycle_action": { "options": { "refresh_status": "Estado de actualización", "stop_recording": "Deter a gravación (gardar e procesar)", "start_recording": "Iniciar unha nova gravación", "process_recording": "Procesar a última gravación (recortar e gardar)", "discard_recording": "Descartar a última gravación" } }, "record_process_save_mode": { "options": { "new_profile": "Crear novo perfil", "existing_profile": "Engadir ao perfil existente", "discard": "Descartar a gravación" } }, "resolve_feedback_action": { "options": { "confirm": "Confirmar - Detección correcta", "correct": "Correcto - Escolla Programa/Duración", "ignore": "Ignorar - Ciclo falso positivo/ruidoso", "delete": "Eliminar - Eliminar do historial" } }, "assign_profile_phases_auto_detect_action": { "options": { "name_phases": "Nomear e aplicar as fases", "cancel": "Volver sen cambios" } }, "trim_cycle_action": { "options": { "set_start": "Establecer o punto de inicio", "set_end": "Establecer punto final", "reset": "Restablecer a duración completa", "apply": "Aplicar Trim", "cancel": "Cancelar" } }, "device_type": { "options": { "washing_machine": "Lavadora", "dryer": "Secador", "washer_dryer": "Combo lavadora-secadora", "dishwasher": "Lavalouza", "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": "Máquina de Pan", "pump": "Bomba / Bomba de sumidoiro", "oven": "Forno (obsoleto)", "other": "Outros (Avanzado)" } } }, "services": { "label_cycle": { "name": "Ciclo de etiquetas", "description": "Asigna un perfil existente a un ciclo anterior ou elimina a etiqueta.", "fields": { "device_id": { "name": "Dispositivo", "description": "O dispositivo da lavadora para etiquetar." }, "cycle_id": { "name": "ID do ciclo", "description": "O ID do ciclo a etiquetar." }, "profile_name": { "name": "Nome do perfil", "description": "O nome dun perfil existente (crear perfís no menú Xestionar perfís). Deixa en branco para eliminar a etiqueta." } } }, "create_profile": { "name": "Crear perfil", "description": "Crea un novo perfil (autónomo ou baseado nun ciclo de referencia).", "fields": { "device_id": { "name": "Dispositivo", "description": "O dispositivo da lavadora." }, "profile_name": { "name": "Nome do perfil", "description": "Nome para o novo perfil (por exemplo, 'Heavy Duty', 'Delicates')." }, "reference_cycle_id": { "name": "ID do ciclo de referencia", "description": "ID de ciclo opcional para basear este perfil." } } }, "delete_profile": { "name": "Eliminar perfil", "description": "Elimina un perfil e, opcionalmente, elimina a etiqueta dos ciclos que o usan.", "fields": { "device_id": { "name": "Dispositivo", "description": "O dispositivo da lavadora." }, "profile_name": { "name": "Nome do perfil", "description": "O perfil a eliminar." }, "unlabel_cycles": { "name": "Desetiquetar ciclos", "description": "Elimina a etiqueta do perfil dos ciclos usando este perfil." } } }, "auto_label_cycles": { "name": "Etiqueta automática de ciclos antigos", "description": "Etiqueta de forma retroactiva os ciclos sen etiquetas mediante a coincidencia de perfil.", "fields": { "device_id": { "name": "Dispositivo", "description": "O dispositivo da lavadora." }, "confidence_threshold": { "name": "Limiar de confianza", "description": "Confianza de coincidencia mínima (0,50-0,95) para aplicar etiquetas." } } }, "export_config": { "name": "Exportar configuración", "description": "Exporta os perfís, ciclos e configuracións deste dispositivo a un ficheiro JSON (por dispositivo).", "fields": { "device_id": { "name": "Dispositivo", "description": "O dispositivo da lavadora para exportar." }, "path": { "name": "Camiño", "description": "Ruta de ficheiro absoluta opcional para escribir (por omisión /config/ha_washdata_export_{entry}.json)." } } }, "import_config": { "name": "Importar configuración", "description": "Importa perfís, ciclos e configuracións para este dispositivo desde un ficheiro de exportación JSON (a configuración pode sobrescribirse).", "fields": { "device_id": { "name": "Dispositivo", "description": "O dispositivo da lavadora no que importar." }, "path": { "name": "Camiño", "description": "Ruta absoluta ao ficheiro JSON de exportación para importar." } } }, "submit_cycle_feedback": { "name": "Enviar comentarios sobre o ciclo", "description": "Confirme ou corrixa un programa detectado automaticamente despois dun ciclo completo. Proporcione `entry_id` (avanzado) ou `device_id` (recomendado).", "fields": { "device_id": { "name": "Dispositivo", "description": "O dispositivo WashData (recomendado en lugar de entry_id)." }, "entry_id": { "name": "ID de entrada", "description": "O ID da entrada de configuración para o dispositivo (alternativa a device_id)." }, "cycle_id": { "name": "ID do ciclo", "description": "O ID do ciclo que se mostra na notificación/rexistros de comentarios." }, "user_confirmed": { "name": "Confirmar programa detectado", "description": "Establecer true se o programa detectado é correcto." }, "corrected_profile": { "name": "Perfil corrixido", "description": "Se non se confirma, proporcione o nome correcto do perfil/programa." }, "corrected_duration": { "name": "Duración corrixida (segundos)", "description": "Duración correxida opcional en segundos." }, "notes": { "name": "Notas", "description": "Notas opcionais sobre este ciclo." } } }, "record_start": { "name": "Inicio do ciclo de gravación", "description": "Comeza a gravar manualmente un ciclo limpo (omite toda a lóxica coincidente).", "fields": { "device_id": { "name": "Dispositivo", "description": "O dispositivo da lavadora para gravar." } } }, "record_stop": { "name": "Parada do ciclo de gravación", "description": "Deter a gravación manual.", "fields": { "device_id": { "name": "Dispositivo", "description": "O dispositivo da lavadora para deter a gravación." } } }, "trim_cycle": { "name": "Ciclo de corte", "description": "Recorta os datos de enerxía dun ciclo pasado a unha xanela de tempo específica.", "fields": { "device_id": { "name": "Dispositivo", "description": "O dispositivo WashData." }, "cycle_id": { "name": "ID do ciclo", "description": "O ID do ciclo a recortar." }, "trim_start_s": { "name": "Inicio de recorte (segundos)", "description": "Mantén os datos desta compensación en segundos. Predeterminado 0." }, "trim_end_s": { "name": "Fin de recorte (segundos)", "description": "Mantén os datos ata esta compensación en segundos. Predeterminado = duración total." } } }, "pause_cycle": { "name": "Ciclo de pausa", "description": "Pausa o ciclo activo para un dispositivo WashData.", "fields": { "device_id": { "name": "Dispositivo", "description": "O dispositivo WashData para pausar." } } }, "resume_cycle": { "name": "Reanudar Ciclo", "description": "Retomar un ciclo en pausa para un dispositivo WashData.", "fields": { "device_id": { "name": "Dispositivo", "description": "O dispositivo WashData para retomar." } } } }, "entity": { "binary_sensor": { "running": { "name": "Correndo" }, "match_ambiguity": { "name": "Ambigüidade de coincidencia" } }, "sensor": { "washer_state": { "name": "Estado", "state": { "off": "Desactivado", "idle": "Inactivo", "starting": "Comezando", "running": "Correndo", "paused": "En pausa", "user_paused": "En pausa polo usuario", "ending": "Finalización", "finished": "Rematou", "anti_wrinkle": "Anti-engurras", "delay_wait": "Agardando para comezar", "interrupted": "Interrompido", "force_stopped": "Forza detida", "rinse": "Enxágüe", "unknown": "Descoñecido", "clean": "Limpo" } }, "washer_program": { "name": "Programa" }, "time_remaining": { "name": "Tempo Restante" }, "total_duration": { "name": "Duración total" }, "cycle_progress": { "name": "Progreso" }, "current_power": { "name": "Potencia actual" }, "elapsed_time": { "name": "Tempo transcorrido" }, "debug_info": { "name": "Información de depuración" }, "match_confidence": { "name": "Confianza de coincidencia" }, "top_candidates": { "name": "Principais candidatos", "state": { "none": "Ningún" } }, "current_phase": { "name": "Fase actual" }, "wash_phase": { "name": "Fase" }, "profile_cycle_count": { "name": "Conta do perfil {profile_name}", "unit_of_measurement": "ciclos" }, "suggestions": { "name": "Configuración suxerida dispoñible" }, "pump_runs_today": { "name": "Funcións da bomba (últimas 24 h)" }, "cycle_count": { "name": "Conta de ciclos" } }, "select": { "program_select": { "name": "Programa Ciclo", "state": { "auto_detect": "Detección automática" } } }, "button": { "force_end_cycle": { "name": "Forzar ciclo final" }, "pause_cycle": { "name": "Ciclo de pausa" }, "resume_cycle": { "name": "Reanudar Ciclo" } } }, "exceptions": { "device_id_required": { "message": "Requírese un device_id válido." }, "cycle_id_required": { "message": "Requírese un cycle_id válido." }, "profile_name_required": { "message": "Requírese un profile_name válido." }, "device_not_found": { "message": "Non se atopou o dispositivo." }, "no_config_entry": { "message": "Non se atopou ningunha entrada de configuración para o dispositivo." }, "integration_not_loaded": { "message": "Non se cargou a integración para este dispositivo." }, "cycle_not_found_or_no_power": { "message": "Non se atopou o ciclo ou non ten datos de potencia." }, "trim_failed_empty_window": { "message": "Fallou o recorte: non se atopou o ciclo, non hai datos de enerxía ou a xanela resultante está baleira." }, "trim_invalid_range": { "message": "trim_end_s debe ser maior que trim_start_s." } } }