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

1342 lines
81 KiB
JSON
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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": "Configuration des données de lavage",
"description": "Configurez votre lave-linge ou autre appareil.\n\nUn capteur de puissance est requis.\n\n**Ensuite, il vous sera demandé si vous souhaitez créer votre premier profil.**",
"data": {
"name": "Nom de l'appareil",
"device_type": "Type d'appareil",
"power_sensor": "Capteur de puissance",
"min_power": "Seuil de puissance minimum (W)"
},
"data_description": {
"name": "Un nom convivial pour cet appareil (par exemple, « Machine à laver », « Lave-vaisselle »).",
"device_type": "De quel type d'appareil s'agit-il ? Aide à adapter la détection et l’étiquetage.",
"power_sensor": "L'entité de capteur qui signale la consommation d'énergie en temps réel (en watts) de votre prise intelligente.",
"min_power": "Les lectures de puissance supérieures à ce seuil (en watts) indiquent que l'appareil est en marche. Commencez avec 2 W pour la plupart des appareils."
}
},
"first_profile": {
"title": "Créer un premier profil",
"description": "Un **Cycle** est un fonctionnement complet de votre appareil (par exemple, une charge de linge). Un **Profil** regroupe ces cycles par type (par exemple, « Coton », « Lavage rapide »). La création d'un profil permet désormais d'estimer immédiatement la durée de l'intégration.\n\nVous pouvez sélectionner manuellement ce profil dans les contrôles de l'appareil s'il n'est pas détecté automatiquement.\n\n**Laissez « Nom du profil » vide pour ignorer cette étape.**",
"data": {
"profile_name": "Nom du profil (facultatif)",
"manual_duration": "Durée estimée (minutes)"
}
}
},
"error": {
"cannot_connect": "Échec de la connexion",
"invalid_auth": "Authentification invalide",
"unknown": "Erreur inattendue"
},
"abort": {
"already_configured": "L'appareil est déjà configuré"
}
},
"options": {
"step": {
"init": {
"menu_options": {
"learning_feedbacks": "Examiner les retours dapprentissage",
"settings": "Paramètres",
"notifications": "Notifications",
"manage_cycles": "Gérer les cycles",
"manage_profiles": "Gérer les profils",
"manage_phase_catalog": "Gérer le catalogue de phases",
"record_cycle": "Enregistrement de cycle (manuel)",
"diagnostics": "Diagnostic et entretien"
}
},
"apply_suggestions": {
"title": "Copier les valeurs suggérées",
"description": "Cela copiera les valeurs suggérées actuelles dans vos paramètres enregistrés. Il s'agit d'une action unique qui ne permet pas les écrasements automatiques.\n\nValeurs suggérées à copier :\n{suggested}",
"data": {
"confirm": "Confirmer l'action de copie"
}
},
"apply_suggestions_confirm": {
"title": "Examiner les modifications suggérées",
"description": "WashData a trouvé **{pending_count}** valeur(s) suggérée(s) à appliquer.\n\nModifications :\n{changes}\n\n✅ Cochez la case ci-dessous et cliquez sur **Soumettre** pour appliquer et enregistrer ces modifications immédiatement.\n❌ Laissez-la décochée et cliquez sur **Soumettre** pour annuler et revenir en arrière.",
"data": {
"confirm_apply_suggestions": "Appliquer et enregistrer ces modifications"
}
},
"settings": {
"title": "Paramètres",
"description": "{deprecation_warning}Ajustez les seuils de détection, lapprentissage et le comportement avancé. Les valeurs par défaut fonctionnent bien pour la plupart des configurations.\n\nParamètres suggérés actuellement disponibles : {suggestions_count}.\nSil est supérieur à 0, ouvrez les Paramètres avancés et utilisez Appliquer les valeurs suggérées.",
"data": {
"apply_suggestions": "Appliquer les valeurs suggérées",
"device_type": "Type dappareil",
"power_sensor": "Entité du capteur de puissance",
"min_power": "Puissance minimale (W)",
"off_delay": "Délai(s) de fin de cycle",
"notify_actions": "Actions de notification",
"notify_people": "Retarder la livraison jusqu'à ce que ces personnes soient à la maison",
"notify_only_when_home": "Retarder les notifications jusqu'à ce que la personne sélectionnée soit à la maison",
"notify_fire_events": "Déclencher les événements d'automatisation",
"notify_start_services": "Début du cycle  Cibles de notification",
"notify_finish_services": "Fin du cycle  Cibles de notification",
"notify_live_services": "Progression en direct  Objectifs de notification",
"notify_before_end_minutes": "Notification préalable à l'achèvement (minutes avant la fin)",
"notify_title": "Titre de la notification",
"notify_icon": "Icône de notification",
"notify_start_message": "Format du message de démarrage",
"notify_finish_message": "Format du message de fin",
"notify_pre_complete_message": "Format du message de pré-achèvement",
"show_advanced": "Modifier les paramètres avancés (étape suivante)"
},
"data_description": {
"apply_suggestions": "Cochez cette case pour copier les valeurs suggérées par l'algorithme d'apprentissage dans le formulaire. Vérifiez avant de sauvegarder.\n\nSuggéré (issu de l'apprentissage) :\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": "Sélectionnez le type d'appareil (Lave-linge, Sèche-linge, Lave-vaisselle, Machine à café, EV). Cette balise est stockée à chaque cycle pour une meilleure organisation.",
"power_sensor": "Entité du capteur signalant la puissance en temps réel (en watts). Vous pouvez modifier cela à tout moment sans perdre les données historiques, ce qui est utile si vous remplacez une prise intelligente.",
"min_power": "Les lectures de puissance supérieures à ce seuil (en watts) indiquent que l'appareil est en marche. Commencez avec 2 W pour la plupart des appareils.",
"off_delay": "Pendant quelques secondes, la puissance lissée doit rester en dessous du seuil d'arrêt pour marquer la fin. Par défaut : 120 s.",
"notify_actions": "Séquence d'actions facultative de Home Assistant à exécuter pour les notifications (scripts, notification, TTS, etc.). Si cette option est définie, les actions sont exécutées avant le service de notification de secours.",
"notify_people": "Entités de personnes utilisées pour le contrôle de présence. Lorsqu'elle est activée, l'envoi des notifications est retardé jusqu'à ce qu'au moins une personne sélectionnée soit à la maison.",
"notify_only_when_home": "Si cette option est activée, retardez les notifications jusqu'à ce qu'au moins une personne sélectionnée soit à la maison.",
"notify_fire_events": "Si activé, déclenchez les événements Home Assistant pour le début et la fin du cycle (ha_washdata_cycle_started et ha_washdata_cycle_ended) pour piloter les automatisations.",
"notify_start_services": "Un ou plusieurs services de notification pour alerter lorsqu'un cycle commence. Laissez vide pour ignorer les notifications de démarrage.",
"notify_finish_services": "Un ou plusieurs services de notification pour alerter lorsqu'un cycle se termine ou est sur le point de se terminer. Laissez vide pour ignorer les notifications de fin.",
"notify_live_services": "Un ou plusieurs services de notification pour recevoir des mises à jour de progression en direct pendant l'exécution du cycle (application mobile compagnon uniquement). Laissez vide pour ignorer les mises à jour en direct.",
"notify_before_end_minutes": "Quelques minutes avant la fin estimée du cycle pour déclencher une notification. Réglez sur 0 pour désactiver. Par défaut : 0.",
"notify_title": "Titre personnalisé pour les notifications. Prend en charge l'espace réservé {device}.",
"notify_icon": "Icône à utiliser pour les notifications (par exemple mdi:washing-machine). Laissez vide pour envoyer sans icône.",
"notify_start_message": "Message envoyé au démarrage d'un cycle. Prend en charge l'espace réservé {device}.",
"notify_finish_message": "Message envoyé lorsqu'un cycle se termine. Prend en charge les espaces réservés {device}, {duration}, {program}, {energy_kwh}, {cost}.",
"notify_pre_complete_message": "Texte des mises à jour récurrentes de la progression en direct pendant l'exécution du cycle. Prend en charge les espaces réservés {device}, {minutes}, {program}."
}
},
"notifications": {
"title": "Notifications",
"description": "Configurez les canaux de notification, les modèles et les mises à jour facultatives de progression mobile en direct.",
"data": {
"notify_actions": "Actions de notification",
"notify_people": "Retarder la livraison jusqu'à ce que ces personnes soient à la maison",
"notify_only_when_home": "Retarder les notifications jusqu'à ce que la personne sélectionnée soit à la maison",
"notify_fire_events": "Déclencher les événements d'automatisation",
"notify_start_services": "Début du cycle  Cibles de notification",
"notify_finish_services": "Fin du cycle  Cibles de notification",
"notify_live_services": "Progression en direct  Objectifs de notification",
"notify_before_end_minutes": "Notification préalable à l'achèvement (minutes avant la fin)",
"notify_live_interval_seconds": "Intervalle de mise à jour en direct (secondes)",
"notify_live_overrun_percent": "Allocation de dépassement de mise à jour en direct (%)",
"notify_live_chronometer": "Chronomètre Compte à rebours",
"notify_title": "Titre de la notification",
"notify_icon": "Icône de notification",
"notify_start_message": "Format du message de démarrage",
"notify_finish_message": "Format du message de fin",
"notify_pre_complete_message": "Format du message de pré-achèvement",
"energy_price_entity": "Prix de l'énergie - Entité (facultatif)",
"energy_price_static": "Prix de l'énergie - Valeur statique (facultatif)",
"go_back": "Revenir sans enregistrer",
"notify_reminder_message": "Format du message de rappel",
"notify_timeout_seconds": "Rejet automatique après (secondes)",
"notify_channel": "Voie de notification (statut/vivant/rappel)",
"notify_finish_channel": "Voie de notification terminée"
},
"data_description": {
"go_back": "Cochez ceci et cliquez sur Envoyer pour annuler les modifications ci-dessus et revenir au menu principal.",
"notify_actions": "Séquence d'actions facultative de Home Assistant à exécuter pour les notifications (scripts, notification, TTS, etc.). Si cette option est définie, les actions sont exécutées avant le service de notification de secours.",
"notify_people": "Entités de personnes utilisées pour le contrôle de présence. Lorsqu'elle est activée, l'envoi des notifications est retardé jusqu'à ce qu'au moins une personne sélectionnée soit à la maison.",
"notify_only_when_home": "Si cette option est activée, retardez les notifications jusqu'à ce qu'au moins une personne sélectionnée soit à la maison.",
"notify_fire_events": "Si activé, déclenchez les événements Home Assistant pour le début et la fin du cycle (ha_washdata_cycle_started et ha_washdata_cycle_ended) pour piloter les automatisations.",
"notify_start_services": "Un ou plusieurs services de notification pour alerter lorsqu'un cycle commence (par exemple notify.mobile_app_my_phone). Laissez vide pour ignorer les notifications de démarrage.",
"notify_finish_services": "Un ou plusieurs services de notification pour alerter lorsqu'un cycle se termine ou est sur le point de se terminer. Laissez vide pour ignorer les notifications de fin.",
"notify_live_services": "Un ou plusieurs services de notification pour recevoir des mises à jour de progression en direct pendant l'exécution du cycle (application mobile compagnon uniquement). Laissez vide pour ignorer les mises à jour en direct.",
"notify_before_end_minutes": "Quelques minutes avant la fin estimée du cycle pour déclencher une notification. Réglez sur 0 pour désactiver. Par défaut : 0.",
"notify_live_interval_seconds": "À quelle fréquence les mises à jour de progression sont envoyées pendant l'exécution. Les valeurs inférieures sont plus réactives mais consomment plus de notifications. Un minimum de 30 secondes est appliqué - les valeurs inférieures à 30 s sont automatiquement arrondies à 30 s.",
"notify_live_overrun_percent": "Marge de sécurité au-dessus du nombre de mises à jour estimé pour les cycles longs/dépassants (par exemple, 20 % autorisent 1,2 fois les mises à jour estimées).",
"notify_live_chronometer": "Lorsqu'elle est activée, chaque mise à jour en direct comprend un compte à rebours du chronomètre jusqu'à l'heure d'arrivée estimée. Le minuteur de notification s'écoule automatiquement sur l'appareil entre les mises à jour (application compagnon Android uniquement).",
"notify_title": "Titre personnalisé pour les notifications. Prend en charge l'espace réservé {device}.",
"notify_icon": "Icône à utiliser pour les notifications (par exemple mdi:washing-machine). Laissez vide pour envoyer sans icône.",
"notify_start_message": "Message envoyé au démarrage d'un cycle. Prend en charge l'espace réservé {device}.",
"notify_finish_message": "Message envoyé lorsqu'un cycle se termine. Prend en charge les espaces réservés {device}, {duration}, {program}, {energy_kwh}, {cost}.",
"energy_price_entity": "Sélectionnez une entité numérique qui contient le prix actuel de l'électricité (par exemple, sensor.electricity_price, input_number.energy_rate). Lorsqu'il est défini, active l'espace réservé {cost}. A priorité sur la valeur statique si les deux sont configurées.",
"energy_price_static": "Prix fixe de l'électricité par kWh. Lorsqu'il est défini, active l'espace réservé {cost}. Ignoré si une entité est configurée ci-dessus. Ajoutez votre symbole monétaire dans le modèle de message, par ex. {cost} €.",
"notify_reminder_message": "Le texte du rappel unique a envoyé le nombre de minutes configuré avant la fin estimée. Distinct des mises à jour récurrentes ci-dessus. Prend en charge {device}, {minutes}, {program} placeholders.",
"notify_timeout_seconds": "Rejeter automatiquement les notifications après cela plusieurs secondes (transféré comme l'application compagne 'timeout'). Réglez à 0 pour les garder jusqu'à ce qu'ils soient renvoyés. Par défaut : 0.",
"notify_channel": "Android canal de notification de l'application compagnon pour l'état, le progrès en direct et les notifications de rappel. Le son et l'importance d'un canal sont configurés dans l'application compagnon la première fois que le nom du canal est utilisé - WashData ne définit que le nom du canal. Laisser vide pour l'application par défaut.",
"notify_finish_channel": "Séparer le canal Android pour l'alerte terminée (également utilisé par le rappel et la relance d'attente de linge) afin qu'il puisse avoir son propre son. Laissez vide pour réutiliser le canal ci-dessus.",
"notify_pre_complete_message": "Texte des mises à jour récurrentes de la progression en direct pendant l'exécution du cycle. Prend en charge les espaces réservés {device}, {minutes}, {program}."
}
},
"advanced_settings": {
"title": "Paramètres avancés",
"description": "Ajustez les seuils de détection, lapprentissage et le comportement avancé. Les valeurs par défaut fonctionnent bien pour la plupart des configurations.",
"sections": {
"suggestions_section": {
"name": "Paramètres suggérés",
"description": "{suggestions_count} suggestions issues de lapprentissage disponibles. Cochez Appliquer les valeurs suggérées pour examiner les modifications proposées avant denregistrer.",
"data": {
"apply_suggestions": "Appliquer les valeurs suggérées"
},
"data_description": {
"apply_suggestions": "Cochez cette case pour ouvrir une étape de révision des valeurs suggérées par l'algorithme d'apprentissage. Rien n'est enregistré automatiquement.\n\nSuggéré (issu de l'apprentissage) :\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": "Détection et seuils de puissance",
"description": "Quand lappareil est considéré comme actif ou inactif, seuils d’énergie et temporisation des transitions d’état.",
"data": {
"start_duration_threshold": "Démarrer la durée anti-rebond (s)",
"start_energy_threshold": "Démarrer le portail énergétique (Wh)",
"completion_min_seconds": "Durée d'exécution minimale d'achèvement (secondes)",
"start_threshold_w": "Seuil de démarrage (W)",
"stop_threshold_w": "Seuil d'arrêt (W)",
"end_energy_threshold": "Fin du portail énergétique (Wh)",
"running_dead_zone": "Zone morte en cours d'exécution (secondes)",
"end_repeat_count": "Fin du décompte des répétitions",
"min_off_gap": "Écart minimum entre les cycles (s)",
"sampling_interval": "Intervalle(s) d'échantillonnage"
},
"data_description": {
"start_duration_threshold": "Ignorez les brèves pointes de puissance inférieures à cette durée (secondes). Filtre les pics de démarrage (par exemple, 60 W pendant 2 s) avant le début du cycle réel. Par défaut : 5 s.",
"start_energy_threshold": "Le cycle doit accumuler au moins autant d’énergie (Wh) pendant la phase START pour être confirmé. Par défaut : 0,005 Wh.",
"completion_min_seconds": "Les cycles plus courts seront marqués comme « interrompus » même sils se terminent naturellement. Par défaut : 600 s.",
"start_threshold_w": "La puissance doit augmenter AU-DESSUS de ce seuil pour DÉMARRER un cycle. Réglez-le à un niveau supérieur à votre consommation en veille. Par défaut : min_power + 1 W.",
"stop_threshold_w": "La puissance doit descendre EN DESSOUS de ce seuil pour TERMINER un cycle. Réglez-le juste au-dessus de zéro pour éviter que le bruit ne déclenche de fausses extrémités. Par défaut : 0,6 * min_power.",
"end_energy_threshold": "Le cycle se termine uniquement si l'énergie dans la dernière fenêtre Off-Delay est inférieure à cette valeur (Wh). Empêche les fausses fins si la puissance fluctue près de zéro. Par défaut : 0,05 Wh.",
"running_dead_zone": "Après le démarrage du cycle, ignorez les baisses de puissance pendant ce nombre de secondes afin d'éviter toute détection de fausse fin pendant la phase de démarrage initiale. Réglez sur 0 pour désactiver. Par défaut : 0s.",
"end_repeat_count": "Nombre de fois où la condition de fin (puissance inférieure au seuil pour off_delay) doit être remplie consécutivement avant de terminer le cycle. Des valeurs plus élevées évitent les fausses fins pendant les pauses. Par défaut : 1.",
"min_off_gap": "Si un cycle commence dans ce nombre de secondes après la fin du précédent, ils seront FUSIONNÉS en un seul cycle.",
"sampling_interval": "Intervalle d'échantillonnage minimum en secondes. Les mises à jour plus rapides que ce taux seront ignorées. Par défaut : 30 s (2 s pour les lave-linge, les lave-linge séchants et les lave-vaisselle)."
}
},
"matching_section": {
"name": "Correspondance de profils et apprentissage",
"description": "À quel point WashData associe agressivement les cycles en cours aux profils appris et quand demander un retour.",
"data": {
"profile_match_min_duration_ratio": "Ratio de durée minimale de correspondance de profil (0,1-1,0)",
"profile_match_interval": "Intervalle de correspondance de profil (secondes)",
"profile_match_threshold": "Seuil de correspondance de profil",
"profile_unmatch_threshold": "Seuil de non-correspondance du profil",
"auto_label_confidence": "Confiance de l'étiquetage automatique (0-1)",
"learning_confidence": "Demande de commentaires Confiance (0-1)",
"suppress_feedback_notifications": "Supprimer les notifications de commentaires",
"duration_tolerance": "Tolérance de durée (0-0,5)",
"smoothing_window": "Fenêtre de lissage (exemples)",
"profile_duration_tolerance": "Tolérance de durée de correspondance de profil (0-0,5)"
},
"data_description": {
"profile_match_min_duration_ratio": "Ratio de durée minimum pour la correspondance de profil. Le cycle dexécution doit correspondre au moins à cette fraction de la durée du profil pour correspondre. Inférieur = correspondance antérieure. Par défaut : 0,50 (50 %).",
"profile_match_interval": "À quelle fréquence (en secondes) tenter de faire correspondre le profil au cours dun cycle. Des valeurs inférieures permettent une détection plus rapide mais utilisent plus de CPU. Par défaut : 300 s (5 minutes).",
"profile_match_threshold": "Score de similarité DTW minimum (0,01,0) requis pour considérer un profil comme une correspondance. Plus élevé = correspondance plus stricte, moins de faux positifs. Par défaut : 0,4.",
"profile_unmatch_threshold": "Score de similarité DTW (0,01,0) en dessous duquel un profil précédemment apparié est rejeté. Doit être inférieur au seuil de correspondance pour éviter le scintillement. Par défaut : 0,35.",
"auto_label_confidence": "Étiquetez automatiquement les cycles égaux ou supérieurs à ce niveau de confiance à la fin (0,01,0).",
"learning_confidence": "Confiance minimale pour demander la vérification de l'utilisateur via un événement (0,01,0).",
"suppress_feedback_notifications": "Lorsqu'il est activé, WashData suivra et demandera toujours des commentaires en interne, mais n'affichera pas de notifications persistantes vous demandant de confirmer les cycles. Utile lorsque les cycles sont toujours détectés correctement et que vous trouvez les invites distrayantes.",
"duration_tolerance": "Tolérance pour les estimations du temps restant au cours d'une exécution (0,0 à 0,5 correspond à 0 à 50 %).",
"smoothing_window": "Nombre de relevés de puissance récents utilisés pour le lissage de la moyenne mobile.",
"profile_duration_tolerance": "Tolérance utilisée par la correspondance de profil pour la variance totale de la durée (0,00,5). Comportement par défaut : ±25 %."
}
},
"timing_section": {
"name": "Temporisation, maintenance et débogage",
"description": "Watchdog, réinitialisation de la progression, maintenance automatique et exposition des entités de débogage.",
"data": {
"watchdog_interval": "Intervalle de surveillance (secondes)",
"no_update_active_timeout": "Délai (s) d'absence de mise à jour",
"progress_reset_delay": "Délai de réinitialisation de la progression (secondes)",
"auto_maintenance": "Activer la maintenance automatique",
"expose_debug_entities": "Exposer les entités de débogage",
"save_debug_traces": "Enregistrer les traces de débogage"
},
"data_description": {
"watchdog_interval": "Secondes entre les vérifications du chien de garde pendant l'exécution. Par défaut : 5 s. AVERTISSEMENT : assurez-vous qu'il est SUPÉRIEUR à l'intervalle de mise à jour de votre capteur pour éviter les faux arrêts (par exemple, si le capteur se met à jour toutes les 60 s, utilisez 65 s+).",
"no_update_active_timeout": "Pour les capteurs de publication sur modification : forcez la fin d'un cycle ACTIF uniquement si aucune mise à jour n'arrive pendant ce nombre de secondes. L'achèvement à faible consommation utilise toujours le délai d'arrêt.",
"progress_reset_delay": "Une fois un cycle terminé (100 %), attendez autant de secondes d'inactivité avant de réinitialiser la progression à 0 %. Par défaut : 300 s.",
"auto_maintenance": "Activer la maintenance automatique (réparer les échantillons, fusionner les fragments).",
"expose_debug_entities": "Afficher les capteurs avancés (Confiance, Phase, Ambiguïté) pour le débogage.",
"save_debug_traces": "Stockez les données détaillées de classement et de trace de puissance dans l'historique (augmente l'utilisation du stockage)."
}
},
"anti_wrinkle_section": {
"name": "Bouclier anti-froissage (sèche-linge)",
"description": "Ignore les rotations du tambour après le cycle pour éviter les cycles fantômes. Sèche-linge / lave-linge séchant uniquement.",
"data": {
"anti_wrinkle_enabled": "Bouclier anti-rides (sèche-linge uniquement)",
"anti_wrinkle_max_power": "Puissance maximale anti-rides (W)",
"anti_wrinkle_max_duration": "Durée Max Anti-Rides (s)",
"anti_wrinkle_exit_power": "Puissance de sortie anti-rides (W)"
},
"data_description": {
"anti_wrinkle_enabled": "Ignorez les courtes rotations du tambour à faible puissance après la fin d'un cycle pour éviter les cycles fantômes (sécheuse/laveuse-sécheuse uniquement).",
"anti_wrinkle_max_power": "Les rafales égales ou inférieures à cette puissance sont traitées comme des rotations antirides au lieu de nouveaux cycles. S'applique uniquement lorsque le bouclier anti-rides est activé.",
"anti_wrinkle_max_duration": "Longueur maximale de rafale à traiter comme rotation anti-rides. S'applique uniquement lorsque le bouclier anti-rides est activé.",
"anti_wrinkle_exit_power": "Si la puissance descend en dessous de ce niveau, quittez immédiatement l'anti-rides (true off). S'applique uniquement lorsque le bouclier anti-rides est activé."
}
},
"delay_start_section": {
"name": "Détection du départ différé",
"description": "Traitez une veille prolongée à faible consommation comme 'En attente de démarrage' jusquau début réel du cycle.",
"data": {
"delay_start_detect_enabled": "Activer la détection de démarrage différé",
"delay_confirm_seconds": "Départ différé : durée de confirmation de veille (s)",
"delay_timeout_hours": "Démarrage différé : temps d'attente maximum (h)"
},
"data_description": {
"delay_start_detect_enabled": "Lorsqu'il est activé, un bref pic de consommation de faible consommation suivi d'une alimentation de veille soutenue est détecté comme un démarrage différé. Le capteur d'état affiche « En attente de démarrage » pendant le délai. Aucune durée ni progression du programme n'est suivie jusqu'à ce que le cycle commence réellement. Nécessite que start_threshold_w soit défini au-dessus de la puissance de pointe de drain.",
"delay_confirm_seconds": "La puissance doit rester entre Seuil darrêt (W) et Seuil de démarrage (W) pendant ce nombre de secondes avant que WashData passe à 'En attente de démarrage'. Filtre les brèves pointes dues à la navigation dans les menus. Par défaut : 60 s.",
"delay_timeout_hours": "Délai d'expiration de sécurité : si la machine est toujours en « En attente de démarrage » après ce nombre d'heures, WashData se réinitialise sur Off. Par défaut : 8 heures."
}
},
"external_triggers_section": {
"name": "Déclencheurs externes, porte et pause",
"description": "Capteur externe facultatif de fin de cycle, capteur de porte pour la détection pause/propre et interrupteur de coupure dalimentation en pause.",
"data": {
"external_end_trigger_enabled": "Activer le déclencheur de fin de cycle externe",
"external_end_trigger": "Capteur de fin de cycle externe",
"external_end_trigger_inverted": "Inverser la logique de déclenchement (déclenchement sur OFF)",
"door_sensor_entity": "Capteur de porte",
"pause_cuts_power": "Couper l'alimentation lors d'une pause",
"switch_entity": "Entité de commutation (pour pause de coupure de courant)",
"notify_unload_delay_minutes": "Délai de notification d'attente de blanchisserie (min)"
},
"data_description": {
"external_end_trigger_enabled": "Activer la surveillance dun capteur binaire externe pour déclencher lachèvement du cycle.",
"external_end_trigger": "Sélectionnez une entité de capteur binaire. Lorsque ce capteur se déclenche, le cycle en cours se terminera avec l'état « terminé ».",
"external_end_trigger_inverted": "Par défaut, le déclencheur se déclenche lorsque le capteur s'allume. Cochez cette case pour qu'elle se déclenche lorsque le capteur s'éteint à la place.",
"door_sensor_entity": "Capteur binaire en option pour la porte de la machine (on = ouvert, off = fermé). Lorsque la porte s'ouvre pendant un cycle actif, WashData confirmera que le cycle est intentionnellement mis en pause. Une fois le cycle terminé, si la porte est toujours fermée, l'état passe à « Nettoyer » jusqu'à ce que la porte soit ouverte. Remarque : la fermeture de la porte ne reprend PAS automatiquement un cycle en pause ; la reprise doit être déclenchée manuellement via le bouton ou le service Reprendre le cycle.",
"pause_cuts_power": "Lors d'une pause via le bouton ou le service Pause Cycle, désactivez également l'entité de commutation configurée. Ne prend effet que si une entité de commutation est configurée pour cet appareil.",
"switch_entity": "L'entité de commutation à activer lors de la pause ou de la reprise. Requis lorsque « Couper l'alimentation en pause » est activé.",
"notify_unload_delay_minutes": "Envoyez une notification via le canal de notification de fin une fois le cycle terminé et que la porte n'a pas été ouverte pendant ce nombre de minutes (nécessite un capteur de porte). Réglez sur 0 pour désactiver. Par défaut : 60 min."
}
},
"pump_section": {
"name": "Surveillance de pompe",
"description": "Type dappareil pompe uniquement. Déclenche un événement si un cycle de pompe dépasse cette durée.",
"data": {
"pump_stuck_duration": "Seuil(s) d'alerte de blocage de pompe (pompe uniquement)"
},
"data_description": {
"pump_stuck_duration": "Si un cycle de pompe est toujours en cours après ce nombre de secondes, un événement ha_washdata_pump_stuck est déclenché une fois. Utilisez-le pour détecter un moteur bloqué (le fonctionnement typique de la pompe de puisard est inférieur à 60 s). Par défaut : 1 800 s (30 min). Type de dispositif de pompe uniquement."
}
},
"device_link_section": {
"name": "Lien du périphérique",
"description": "En option, liez cet appareil WashData à un appareil existant Home Assistant (par exemple la prise intelligente ou l'appareil lui-même). L'appareil WashData est alors affiché comme \"Connected via\" cet appareil. Laissez vide pour garder WashData comme un appareil autonome.",
"data": {
"linked_device": "Appareil relié"
},
"data_description": {
"linked_device": "Sélectionnez l'appareil pour connecter WashData à. Cela ajoute une référence « Connected via » dans le registre des appareils ; WashData conserve sa propre carte de périphérique et ses propres entités. Effacer la sélection pour supprimer le lien."
}
}
}
},
"diagnostics": {
"title": "Diagnostic et entretien",
"description": "Exécutez des actions de maintenance telles que la fusion de cycles fragmentés ou la migration des données stockées.\n\n**Utilisation du stockage**\n\n- Taille du fichier : {file_size_kb} Ko\n-Cycles : {cycle_count}\n- Profils : {profile_count}\n- Traces de débogage : {debug_count}",
"menu_options": {
"reprocess_history": "Maintenance : retraiter et optimiser les données",
"clear_debug_data": "Effacer les données de débogage (libérer de l'espace)",
"wipe_history": "Effacer TOUTES les données de cet appareil (irréversible)",
"export_import": "Exporter/Importer JSON avec paramètres (copier/coller)",
"menu_back": "← Retour"
}
},
"clear_debug_data": {
"title": "Effacer les données de débogage",
"description": "Êtes-vous sûr de vouloir supprimer toutes les traces de débogage stockées ? Cela libérera de l'espace mais supprimera les informations de classement détaillées des cycles précédents."
},
"manage_cycles": {
"title": "Gérer les cycles",
"description": "Cycles récents :\n{recent_cycles}",
"menu_options": {
"auto_label_cycles": "Étiquetage automatique des anciens cycles",
"select_cycle_to_label": "Étiqueter un cycle spécifique",
"select_cycle_to_delete": "Supprimer le cycle",
"interactive_editor": "Fusionner/diviser l'éditeur interactif",
"trim_cycle_select": "Rogner les données de cycle",
"menu_back": "← Retour"
}
},
"manage_cycles_empty": {
"title": "Gérer les cycles",
"description": "Aucun cycle enregistré pour l'instant.",
"menu_options": {
"auto_label_cycles": "Étiquetage automatique des anciens cycles",
"menu_back": "← Retour"
}
},
"manage_profiles": {
"title": "Gérer les profils",
"description": "Résumé du profil :\n{profile_summary}",
"menu_options": {
"create_profile": "Créer un nouveau profil",
"edit_profile": "Modifier/Renommer le profil",
"delete_profile_select": "Supprimer le profil",
"profile_stats": "Statistiques du profil",
"cleanup_profile": "Nettoyer l'historique  Graphiquer et supprimer",
"assign_profile_phases_select": "Attribuer des plages de phases",
"menu_back": "← Retour"
}
},
"manage_profiles_empty": {
"title": "Gérer les profils",
"description": "Aucun profil créé pour l'instant.",
"menu_options": {
"create_profile": "Créer un nouveau profil",
"menu_back": "← Retour"
}
},
"manage_phase_catalog": {
"title": "Gérer le catalogue de phases",
"description": "Catalogue de phases (valeurs par défaut pour cet appareil + phases personnalisées) :\n{phase_summary}",
"menu_options": {
"phase_catalog_create": "Créer une nouvelle phase",
"phase_catalog_edit_select": "Phase d'édition",
"phase_catalog_delete": "Supprimer la phase",
"menu_back": "← Retour"
}
},
"phase_catalog_create": {
"title": "Créer une phase personnalisée",
"description": "Créez un nom et une description de phase personnalisés, puis choisissez le type d'appareil auquel ils s'appliquent.",
"data": {
"target_device_type": "Type de périphérique cible",
"phase_name": "Nom de la phase",
"phase_description": "Description des phases"
}
},
"phase_catalog_edit_select": {
"title": "Modifier une phase personnalisée",
"description": "Sélectionnez une phase personnalisée à modifier.",
"data": {
"phase_name": "Phase personnalisée"
}
},
"phase_catalog_edit": {
"title": "Modifier une phase personnalisée",
"description": "Phase de modification : {phase_name}",
"data": {
"phase_name": "Nom de la phase",
"phase_description": "Description des phases"
}
},
"phase_catalog_delete": {
"title": "Supprimer la phase personnalisée",
"description": "Sélectionnez une phase personnalisée à supprimer. Toutes les plages attribuées utilisant cette phase seront supprimées.",
"data": {
"phase_name": "Phase personnalisée"
}
},
"assign_profile_phases": {
"title": "Attribuer des plages de phases",
"description": "Aperçu de la phase pour le profil : **{profile_name}**\n\n{timeline_svg}\n\n**Gammes actuelles :**\n{current_ranges}\n\nUtilisez les actions ci-dessous pour ajouter, modifier, supprimer ou enregistrer des plages.",
"menu_options": {
"assign_profile_phases_add": "Ajouter une plage de phases",
"assign_profile_phases_edit_select": "Modifier la plage de phases",
"assign_profile_phases_delete": "Supprimer la plage de phases",
"phase_ranges_clear": "Effacer toutes les plages",
"assign_profile_phases_auto_detect": "Détection automatique des phases",
"phase_ranges_save": "Enregistrer et retourner",
"menu_back": "← Retour"
}
},
"assign_profile_phases_add": {
"title": "Ajouter une plage de phases",
"description": "Ajoutez une plage de phases au brouillon actuel.",
"data": {
"phase_name": "Phase",
"start_min": "Minute de début",
"end_min": "Minute de fin"
}
},
"assign_profile_phases_edit_select": {
"title": "Modifier la plage de phases",
"description": "Sélectionnez une plage à modifier.",
"data": {
"range_index": "Plage de phases"
}
},
"assign_profile_phases_edit": {
"title": "Modifier la plage de phases",
"description": "Mettez à jour la plage de phases sélectionnée.",
"data": {
"phase_name": "Phase",
"start_min": "Minute de début",
"end_min": "Minute de fin"
}
},
"assign_profile_phases_delete": {
"title": "Supprimer la plage de phases",
"description": "Sélectionnez une plage à supprimer du brouillon.",
"data": {
"range_index": "Plage de phases"
}
},
"assign_profile_phases_auto_detect": {
"title": "Phases détectées automatiquement",
"description": "Profil : **{profile_name}**\n\n{timeline_svg}\n\n**{detected_count} phase(s) détectée(s) automatiquement.** Choisissez une action ci-dessous.",
"data": {
"action": "Action"
}
},
"assign_profile_phases_auto_detect_name": {
"title": "Nommer les phases détectées",
"description": "Profil : **{profile_name}**\n\n**{detected_count} phase(s) détectée(s) :**\n{ranges_summary}\n\nAttribuez un nom à chaque phase."
},
"assign_profile_phases_select": {
"title": "Attribuer des plages de phases",
"description": "Sélectionnez un profil pour configurer les plages de phases.",
"data": {
"profile": "Profil"
}
},
"profile_stats": {
"title": "Statistiques du profil",
"description": "{stats_table}"
},
"create_profile": {
"title": "Créer un nouveau profil",
"description": "Créez un nouveau profil manuellement ou à partir d'un cycle passé.\n\nExemples de noms de profil : \"Delicates\", \"Heavy Duty\", \"Quick Wash\"",
"data": {
"profile_name": "Nom du profil",
"reference_cycle": "Cycle de référence (facultatif)",
"manual_duration": "Durée manuelle (minutes)"
}
},
"edit_profile": {
"title": "Modifier le profil",
"description": "Sélectionnez un profil à renommer",
"data": {
"profile": "Profil"
}
},
"rename_profile": {
"title": "Modifier les détails du profil",
"description": "Profil actuel : {current_name}",
"data": {
"new_name": "Nom du profil",
"manual_duration": "Durée manuelle (minutes)"
}
},
"delete_profile_select": {
"title": "Supprimer le profil",
"description": "Sélectionnez un profil à supprimer",
"data": {
"profile": "Profil"
}
},
"delete_profile_confirm": {
"title": "Confirmer la suppression du profil",
"description": "⚠️ Cela supprimera définitivement le profil : {profile_name}",
"data": {
"unlabel_cycles": "Supprimer l'étiquette des cycles utilisant ce profil"
}
},
"auto_label_cycles": {
"title": "Étiquetage automatique des anciens cycles",
"description": "J'ai trouvé {total_count} cycles au total. Profils : {profiles}",
"data": {
"confidence_threshold": "Confiance minimale (0,50-0,95)"
}
},
"select_cycle_to_label": {
"title": "Sélectionnez Cycle pour étiqueter",
"description": "✓ = terminé, ⚠ = repris, ✗ = interrompu",
"data": {
"cycle_id": "Cycle"
}
},
"select_cycle_to_delete": {
"title": "Supprimer le cycle",
"description": "⚠️ Cela supprimera définitivement le cycle sélectionné",
"data": {
"cycle_id": "Cycle pour supprimer"
}
},
"label_cycle": {
"title": "Cycle d'étiquetage",
"description": "{cycle_info}",
"data": {
"profile_name": "Profil",
"new_profile_name": "Nouveau nom de profil (en cas de création)"
}
},
"post_process": {
"title": "Historique des processus (fusion/fractionnement)",
"description": "Nettoyez lhistorique des cycles en fusionnant les exécutions fragmentées et en divisant les cycles mal fusionnés dans une fenêtre de temps. Entrez le nombre d'heures pour regarder en arrière (utilisez 999999 pour tout).",
"data": {
"time_range": "Période d'analyse (heures)",
"gap_seconds": "Fusionner/diviser l'espace (secondes)"
},
"data_description": {
"time_range": "Nombre d'heures nécessaires à l'analyse des cycles fragmentés à fusionner. Utilisez 999999 pour traiter toutes les données historiques.",
"gap_seconds": "Seuil pour décider de la scission ou de la fusion. Les espaces PLUS COURTS sont fusionnés. Les espaces PLUS LONGS que cela sont divisés. Réduisez-le pour forcer une division sur un cycle qui na pas été fusionné correctement."
}
},
"cleanup_profile": {
"title": "Nettoyer l'historique  Sélectionner un profil",
"description": "Sélectionnez un profil à visualiser. Cela générera un graphique montrant tous les cycles passés pour ce profil afin d'aider à identifier les valeurs aberrantes.",
"data": {
"profile": "Profil"
}
},
"cleanup_select": {
"title": "Nettoyer l'historique  Graphiquer et supprimer",
"description": "![Graphique]({graph_url})\n\n**Visualisation de {profile_name}**\n\nLe graphique montre les cycles individuels sous forme de lignes colorées. Identifiez les valeurs aberrantes (lignes éloignées du groupe) et faites correspondre leur couleur dans la liste ci-dessous pour les supprimer.\n\n**Sélectionnez les cycles à supprimer définitivement :**",
"data": {
"cycles_to_delete": "Cycles à supprimer (vérifier les couleurs correspondantes)"
}
},
"interactive_editor": {
"title": "Fusionner/diviser l'éditeur interactif",
"description": "Sélectionnez une action manuelle à effectuer sur votre historique de cycle.",
"menu_options": {
"editor_split": "Diviser un cycle (trouver des lacunes)",
"editor_merge": "Fusionner les cycles (joindre des fragments)",
"editor_delete": "Supprimer des cycles",
"menu_back": "← Retour"
}
},
"editor_select": {
"title": "Sélectionnez les cycles",
"description": "Sélectionnez le(s) cycle(s) à traiter.\n\n{info_text}",
"data": {
"selected_cycles": "Cycles"
}
},
"editor_configure": {
"title": "Configurer et appliquer",
"description": "{preview_md}",
"data": {
"confirm_action": "Action",
"merged_profile": "Profil résultant",
"new_profile_name": "Nouveau nom de profil",
"confirm_commit": "Oui, je confirme cette action",
"segment_0_profile": "Profil du segment 1",
"segment_1_profile": "Profil du segment 2",
"segment_2_profile": "Profil du segment 3",
"segment_3_profile": "Profil du segment 4",
"segment_4_profile": "Profil du segment 5",
"segment_5_profile": "Profil du segment 6",
"segment_6_profile": "Profil du segment 7",
"segment_7_profile": "Profil du segment 8",
"segment_8_profile": "Profil du segment 9",
"segment_9_profile": "Profil du segment 10"
}
},
"editor_split_params": {
"title": "Configuration divisée",
"description": "Ajustez la sensibilité pour diviser ce cycle. Tout intervalle d'inactivité plus long entraînera une scission.",
"data": {
"split_mode": "Méthode de division"
}
},
"editor_split_auto_params": {
"title": "Configuration du découpage automatique",
"description": "Ajustez la sensibilité de découpage de ce cycle. Tout intervalle d'inactivité supérieur à cette valeur provoquera un découpage.",
"data": {
"min_gap_seconds": "Seuil d'intervalle de découpage (secondes)"
}
},
"editor_split_manual_params": {
"title": "Horodatages de découpage manuel",
"description": "{preview_md}Fenêtre du cycle : **{cycle_start_wallclock} → {cycle_end_wallclock}** le {cycle_date}.\n\nSaisissez un ou plusieurs horodatages de découpage (`HH:MM` ou `HH:MM:SS`), un par ligne. Le cycle sera coupé à chaque horodatage — N horodatages produisent N+1 segments.",
"data": {
"split_timestamps": "Horodatages de séparation"
}
},
"reprocess_history": {
"title": "Maintenance : retraiter et optimiser les données",
"description": "Effectue un nettoyage en profondeur des données historiques :\n1. Coupe les lectures de puissance nulle (silence).\n2. Corrige le timing/la durée du cycle.\n3. Recalcule tous les modèles statistiques (enveloppes).\n\n**Exécutez ceci pour résoudre les problèmes de données ou appliquer de nouveaux algorithmes.**"
},
"wipe_history": {
"title": "Effacer l'historique (tests uniquement)",
"description": "⚠️ Cela supprimera définitivement TOUS les cycles et profils stockés pour cet appareil. Cela ne peut pas être annulé !"
},
"export_import": {
"title": "Exporter/Importer JSON",
"description": "Copiez/collez les cycles, les profils ET les paramètres de cet appareil. Exportez ci-dessous ou collez JSON pour importer.",
"data": {
"mode": "Action",
"json_payload": "Configuration complète JSON"
},
"data_description": {
"mode": "Choisissez Exporter pour copier les données et paramètres actuels, ou Importer pour coller les données exportées à partir d'un autre appareil WashData.",
"json_payload": "Pour l'exportation : copiez ce JSON (inclut les cycles, les profils et tous les paramètres affinés). Pour l'importation : collez le JSON exporté depuis WashData."
}
},
"record_cycle": {
"title": "Cycle d'enregistrement",
"description": "Enregistrez manuellement un cycle pour créer un profil propre sans interférence.\n\nStatut : **{status}**\nDurée : {duration}s\nÉchantillons : {samples}",
"menu_options": {
"record_refresh": "Actualiser le statut",
"record_stop": "Arrêter l'enregistrement (Enregistrer et traiter)",
"record_start": "Démarrer un nouvel enregistrement",
"record_process": "Traiter le dernier enregistrement (couper et enregistrer)",
"record_discard": "Supprimer le dernier enregistrement",
"menu_back": "← Retour"
}
},
"record_process": {
"title": "Enregistrement du processus",
"description": "![Graphique]({graph_url})\n\n**Le graphique montre l'enregistrement brut.** Bleu = Conserver, Rouge = Découpage proposé.\n*Le graphique est statique et ne se met pas à jour avec les modifications du formulaire.*\n\nL'enregistrement s'est arrêté. Les trims sont alignés sur le taux d'échantillonnage détecté (~ {sampling_rate} s).\n\nDurée brute : {duration} s\nÉchantillons : {samples}",
"data": {
"head_trim": "Démarrage du trim (secondes)",
"tail_trim": "Fin de coupe (secondes)",
"save_mode": "Enregistrer la destination",
"profile_name": "Nom du profil"
}
},
"learning_feedbacks": {
"title": "Commentaires d'apprentissage",
"description": "Retours en attente : {count}\n\n{pending_table}\n\nSélectionnez une demande de révision de cycle à traiter.",
"menu_options": {
"learning_feedbacks_pick": "Examiner un retour en attente",
"learning_feedbacks_dismiss_all": "Ignorer tous les retours en attente",
"menu_back": "← Retour"
}
},
"learning_feedbacks_pick": {
"title": "Choisir un retour à examiner",
"description": "Sélectionnez une demande de révision de cycle à ouvrir.",
"data": {
"selected_feedback": "Sélectionner le cycle à examiner"
}
},
"learning_feedbacks_empty": {
"title": "Commentaires d'apprentissage",
"description": "Aucune demande de commentaires en attente trouvée.",
"menu_options": {
"menu_back": "← Retour"
}
},
"learning_feedbacks_dismiss_all": {
"title": "Ignorer tous les retours en attente",
"description": "Vous êtes sur le point d'ignorer **{count}** demande(s) de retour en attente. Les cycles ignorés restent dans votre historique mais n'apporteront aucun nouveau signal d'apprentissage. Cette action est irréversible.\n\n✅ Cochez la case ci-dessous et cliquez sur **Soumettre** pour tout ignorer.\n❌ Laissez-la décochée et cliquez sur **Soumettre** pour annuler et revenir en arrière.",
"data": {
"confirm_dismiss_all": "Confirmer : ignorer toutes les demandes de retour en attente"
}
},
"resolve_feedback": {
"title": "Résoudre les commentaires",
"description": "{comparison_img}{candidates_table}\n**Profil détecté** : {detected_profile} ({confidence_pct} %)\n**Durée estimée** : {est_duration_min} minutes\n**Durée réelle** : {act_duration_min} minutes\n\n__Choisissez une action ci-dessous :__",
"data": {
"action": "Qu'aimeriez-vous faire ?",
"corrected_profile": "Programme correct (si correction)",
"corrected_duration": "Durée correcte en secondes (si correction)"
}
},
"trim_cycle_select": {
"title": "Cycle de coupe - Sélectionnez le cycle",
"description": "Sélectionnez un cycle à couper. ✓ = terminé, ⚠ = repris, ✗ = interrompu",
"data": {
"cycle_id": "Cycle"
}
},
"trim_cycle": {
"title": "Cycle de coupe",
"description": "Fenêtre actuelle : {trim_summary}\n\n{trim_svg}",
"data": {
"action": "Action"
}
},
"trim_cycle_start": {
"title": "Définir le début du découpage",
"description": "Fenêtre de cycle : {cycle_start_wallclock} → {cycle_end_wallclock}\n\nDémarrage actuel : **{current_wallclock}** (+{current_offset_min} minutes à partir du début du cycle)\n\nChoisissez une nouvelle heure de début à l'aide du sélecteur d'horloge ci-dessous.",
"data": {
"trim_start_time": "Nouvelle heure de début",
"trim_start_min": "Nouveau démarrage (minutes après le début du cycle)"
}
},
"trim_cycle_end": {
"title": "Définir la fin de la coupe",
"description": "Fenêtre de cycle : {cycle_start_wallclock} → {cycle_end_wallclock}\n\nFin actuelle : **{current_wallclock}** (+{current_offset_min} min depuis le début du cycle)\n\nChoisissez une nouvelle heure de fin à l'aide du sélecteur d'horloge ci-dessous.",
"data": {
"trim_end_time": "Nouvelle heure de fin",
"trim_end_min": "Nouvelle fin (minutes depuis le début du cycle)"
}
}
},
"error": {
"import_failed": "L'importation a échoué. Veuillez coller un JSON d'exportation WashData valide.",
"select_exactly_one": "Sélectionnez exactement un cycle pour cette action.",
"select_at_least_one": "Sélectionnez au moins un cycle pour cette action.",
"select_at_least_two": "Sélectionnez au moins deux cycles pour cette action.",
"profile_exists": "Un profil portant ce nom existe déjà",
"rename_failed": "Échec du renommage du profil. Le profil n'existe peut-être pas ou le nouveau nom est déjà pris.",
"assignment_failed": "Échec de l'attribution du profil au cycle",
"duplicate_phase": "Une phase portant ce nom existe déjà.",
"phase_not_found": "La phase sélectionnée n'a pas été trouvée.",
"invalid_phase_name": "Le nom de la phase ne peut pas être vide.",
"phase_name_too_long": "Le nom de la phase est trop long.",
"invalid_phase_range": "La plage de phases n'est pas valide. La fin doit être supérieure au début.",
"invalid_phase_timestamp": "L'horodatage n'est pas valide. Utilisez le format AAAA-MM-JJ HH:MM ou HH:MM.",
"overlapping_phase_ranges": "Les plages de phases se chevauchent. Ajustez les plages et réessayez.",
"incomplete_phase_row": "Chaque ligne de phase doit inclure une phase ainsi que les valeurs complètes de début/fin pour le mode sélectionné.",
"timestamp_mode_cycle_required": "Veuillez sélectionner un cycle source lorsque vous utilisez le mode horodatage.",
"no_phase_ranges": "Aucune plage de phases nest encore disponible pour cette action.",
"feedback_notification_title": "WashData : Vérifier le cycle ({device})",
"feedback_notification_message": "**Appareil** : {device}\n**Programme** : {program} ({confidence} % de confiance)\n**Heure** : {time}\n\nWashData a besoin de votre aide pour vérifier ce cycle détecté.\n\nVeuillez accéder à **Paramètres > Appareils et services > WashData > Configurer > Commentaires d'apprentissage** pour confirmer ou corriger ce résultat.",
"suggestions_ready_notification_title": "WashData : Paramètres suggérés prêts ({device})",
"suggestions_ready_notification_message": "Le capteur **Paramètres suggérés** signale désormais **{count}** recommandations exploitables.\n\nPour les consulter et les appliquer : **Paramètres > Appareils et services > WashData > Configurer > Paramètres avancés > Appliquer les valeurs suggérées**.\n\nLes suggestions sont facultatives et affichées pour examen avant denregistrer.",
"trim_range_invalid": "Le début doit être avant la fin. Veuillez ajuster vos points de coupe.",
"trim_failed": "Le découpage a échoué. Le cycle n'existe peut-être plus ou la fenêtre est vide.",
"invalid_split_timestamp": "Lhorodatage est invalide ou hors de la fenêtre du cycle. Utilisez HH:MM ou HH:MM:SS dans la fenêtre du cycle.",
"no_split_segments_found": "Aucun segment valide na pu être produit à partir de ces horodatages. Assurez-vous que chaque horodatage se trouve dans la fenêtre du cycle et que les segments durent au moins 1 minute.",
"auto_tune_suggestion": "{device_type} {device_title} cycles fantômes détectés. Modification de min_power suggérée : {current_min}W -> {new_min}W (non appliqué automatiquement).",
"auto_tune_title": "Réglage automatique des données WashData",
"auto_tune_fallback": "{device_type} {device_title} cycles fantômes détectés. Modification de min_power suggérée : {current_min}W -> {new_min}W (non appliqué automatiquement)."
},
"abort": {
"no_cycles_found": "Aucun cycle trouvé",
"no_split_segments_found": "Aucun segment divisible na été trouvé dans le cycle sélectionné.",
"cycle_not_found": "Le cycle sélectionné na pas pu être chargé.",
"no_power_data": "Aucune donnée de trace de puissance disponible pour le cycle sélectionné.",
"no_profiles_found": "Aucun profil trouvé. Créez dabord un profil.",
"no_profiles_for_matching": "Aucun profil disponible pour la correspondance. Créez dabord des profils.",
"no_unlabeled_cycles": "Tous les cycles sont déjà étiquetés",
"no_suggestions": "Aucune valeur suggérée disponible pour l'instant. Exécutez quelques cycles et réessayez.",
"no_predictions": "Aucune prédiction",
"no_custom_phases": "Aucune phase personnalisée trouvée.",
"reprocess_success": "{count} cycles ont été retraités avec succès.",
"debug_data_cleared": "Les données de débogage de {count} cycles ont été effacées avec succès."
}
},
"selector": {
"notify_events_option": {
"options": {
"cycle_start": "Démarrage du cycle",
"cycle_finish": "Fin du cycle",
"cycle_live": "Progrès en direct"
}
},
"common_text": {
"options": {
"unlabeled": "(Sans étiquette)",
"create_new_profile": "Créer un nouveau profil",
"remove_label": "Supprimer l'étiquette",
"no_reference_cycle": "(Pas de cycle de référence)",
"all_device_types": "Tous les types d'appareils",
"current_suffix": "(actuel)",
"editor_select_info": "Sélectionnez 1 cycle à diviser ou plus de 2 cycles à fusionner.",
"editor_select_info_split": "Sélectionnez 1 cycle à diviser.",
"editor_select_info_merge": "Sélectionnez 2 cycles ou plus à fusionner.",
"editor_select_info_delete": "Sélectionnez 1 cycle ou plus à supprimer.",
"no_cycles_recorded": "Aucun cycle enregistré pour l'instant.",
"profile_summary_line": "- **{name}** : {count} cycles, {avg} min en moyenne",
"no_profiles_created": "Aucun profil créé pour l'instant.",
"phase_preview": "Aperçu des phases",
"phase_preview_no_curve": "La courbe de profil moyenne n'est pas encore disponible. Exécutez/étiquetez plus de cycles pour ce profil.",
"average_power_curve": "Courbe de puissance moyenne",
"unit_min": "min",
"profile_option_fmt": "{name} ({count} cycles, ~{duration} min en moyenne)",
"profile_option_short_fmt": "{name} ({count} cycles, ~{duration} min)",
"deleted_cycles_from_profile": "{count} cycles supprimés de {profile}.",
"not_enough_data_graph": "Pas assez de données pour générer un graphique.",
"no_profiles_found": "Aucun profil trouvé.",
"cycle_info_fmt": "Cycle : {start}, {duration} min, Étiquette : {label}",
"top_candidates_header": "### Meilleurs candidats",
"tbl_profile": "Profil",
"tbl_confidence": "Confiance",
"tbl_correlation": "Corrélation",
"tbl_duration_match": "Correspondance de durée",
"detected_profile": "Profil détecté",
"estimated_duration": "Durée estimée",
"actual_duration": "Durée réelle",
"choose_action": "__Choisissez une action ci-dessous :__",
"tbl_count": "Nombre",
"tbl_avg": "Moy.",
"tbl_min": "Min.",
"tbl_max": "Max.",
"tbl_energy_avg": "Énergie (moyenne)",
"tbl_energy_total": "Énergie (totale)",
"tbl_consistency": "Cohérence",
"tbl_last_run": "Dernière exécution",
"graph_legend_title": "Légende du graphique",
"graph_legend_body": "La bande bleue représente la plage de consommation électrique minimale et maximale observée. La ligne montre la courbe de puissance moyenne.",
"recording_preview": "Aperçu de l'enregistrement",
"trim_start": "Début de coupe",
"trim_end": "Fin de coupe",
"split_preview_title": "Aperçu fractionné",
"split_preview_found_fmt": "{count} segments trouvés.",
"split_preview_confirm_fmt": "Cliquez sur Confirmer pour diviser ce cycle en {count} cycles distincts.",
"merge_preview_title": "Aperçu de la fusion",
"merge_preview_joining_fmt": "Rejoindre {count} cycles. Les lacunes seront comblées par des lectures de 0 W.",
"editor_delete_preview_title": "Aperçu de suppression",
"editor_delete_preview_intro": "Les cycles sélectionnés seront supprimés définitivement :",
"editor_delete_preview_confirm": "Cliquez sur Confirmer pour supprimer définitivement ces enregistrements de cycle.",
"no_power_preview": "*Aucune donnée de puissance disponible pour l'aperçu.*",
"profile_comparison": "Comparaison de profils",
"actual_cycle_label": "Ce cycle (réel)",
"storage_usage_header": "Utilisation du stockage",
"storage_file_size": "Taille du fichier",
"storage_cycles": "Cycles",
"storage_profiles": "Profils",
"storage_debug_traces": "Traces de débogage",
"overview_suffix": "Aperçu",
"phase_preview_for_profile": "Aperçu de la phase pour le profil",
"current_ranges_header": "Gammes actuelles",
"assign_phases_help": "Utilisez les actions ci-dessous pour ajouter, modifier, supprimer ou enregistrer des plages.",
"profile_summary_header": "Résumé du profil",
"recent_cycles_header": "Cycles récents",
"trim_cycle_preview_title": "Aperçu du découpage du cycle",
"trim_cycle_preview_no_data": "Aucune donnée de puissance disponible pour ce cycle.",
"trim_cycle_preview_kept_suffix": "gardé",
"table_program": "Programme",
"table_when": "Quand",
"table_length": "Durée",
"table_match": "Correspondance",
"table_profile": "Profil",
"table_cycles": "Cycles",
"table_avg_length": "Durée moy.",
"table_last_run": "Dernière exécution",
"table_avg_energy": "Énergie moy.",
"table_detected_program": "Programme détecté",
"table_confidence": "Confiance",
"table_reported": "Signalé",
"phase_builtin_suffix": "(Intégré)",
"phase_none_available": "Aucune phase disponible.",
"settings_deprecation_warning": "⚠️ **Type d'appareil obsolète :** {device_type} devrait être supprimé dans une prochaine version. Le pipeline de correspondance de WashData ne produit pas de résultats fiables pour cette classe d'appliances. Votre intégration continue de fonctionner pendant la période de dépréciation ; pour faire taire cet avertissement, basculez **Type d'appareil** ci-dessous sur l'un des types pris en charge (machine à laver, sèche-linge, lave-linge/sèche-linge combiné, lave-vaisselle, friteuse à air, machine à pain ou pompe), ou sur **Autre (avancé)** si votre appareil ne correspond à aucun des types pris en charge. **Autre (Avancé)** fournit intentionnellement des valeurs par défaut génériques qui ne sont adaptées à aucune appliance spécifique. Vous devrez donc configurer vous-même les seuils, les délais d'attente et les paramètres de correspondance ; tous vos paramètres existants sont conservés lorsque vous changez.",
"phase_other_device_types": "Autres types d'appareils :"
}
},
"interactive_editor_action": {
"options": {
"split": "Diviser un cycle (trouver des lacunes)",
"merge": "Fusionner les cycles (joindre des fragments)",
"delete": "Supprimer des cycles"
}
},
"split_mode": {
"options": {
"auto": "Détecter automatiquement les périodes dinactivité",
"manual": "Horodatage(s) manuel(s)"
}
},
"diagnostics_action": {
"options": {
"reprocess_history": "Maintenance : retraiter et optimiser les données",
"clear_debug_data": "Effacer les données de débogage (libérer de l'espace)",
"wipe_history": "Effacer TOUTES les données de cet appareil (irréversible)",
"export_import": "Exporter/Importer JSON avec paramètres (copier/coller)"
}
},
"export_import_mode": {
"options": {
"export": "Exporter toutes les données",
"import": "Importer/Fusionner des données"
}
},
"manage_cycles_action": {
"options": {
"auto_label_cycles": "Étiquetage automatique des anciens cycles",
"select_cycle_to_label": "Étiqueter un cycle spécifique",
"select_cycle_to_delete": "Supprimer le cycle",
"interactive_editor": "Fusionner/diviser l'éditeur interactif",
"trim_cycle": "Rogner les données de cycle"
}
},
"manage_profiles_action": {
"options": {
"create_profile": "Créer un nouveau profil",
"edit_profile": "Modifier/Renommer le profil",
"delete_profile": "Supprimer le profil",
"profile_stats": "Statistiques du profil",
"cleanup_profile": "Nettoyer l'historique  Graphiquer et supprimer",
"assign_phases": "Attribuer des plages de phases"
}
},
"manage_phase_catalog_action": {
"options": {
"create_custom_phase": "Créer une nouvelle phase",
"edit_custom_phase": "Phase d'édition",
"delete_custom_phase": "Supprimer la phase"
}
},
"assign_profile_phases_action": {
"options": {
"add_range": "Ajouter une plage de phases",
"edit_range": "Modifier la plage de phases",
"delete_range": "Supprimer la plage de phases",
"clear_ranges": "Effacer toutes les plages",
"auto_detect_ranges": "Détection automatique des phases",
"save_ranges": "Enregistrer et retourner"
}
},
"record_cycle_action": {
"options": {
"refresh_status": "Actualiser le statut",
"stop_recording": "Arrêter l'enregistrement (Enregistrer et traiter)",
"start_recording": "Démarrer un nouvel enregistrement",
"process_recording": "Traiter le dernier enregistrement (couper et enregistrer)",
"discard_recording": "Supprimer le dernier enregistrement"
}
},
"record_process_save_mode": {
"options": {
"new_profile": "Créer un nouveau profil",
"existing_profile": "Ajouter au profil existant",
"discard": "Supprimer l'enregistrement"
}
},
"resolve_feedback_action": {
"options": {
"confirm": "Confirmer - Détection correcte",
"correct": "Correct - Choisissez le programme/la durée",
"ignore": "Ignorer - Cycle faux positif/bruyant",
"delete": "Supprimer - Supprimer de l'historique"
}
},
"assign_profile_phases_auto_detect_action": {
"options": {
"name_phases": "Nommer et appliquer les phases",
"cancel": "Revenir sans modifications"
}
},
"trim_cycle_action": {
"options": {
"set_start": "Définir le point de départ",
"set_end": "Définir le point final",
"reset": "Réinitialiser à la durée complète",
"apply": "Appliquer le découpage",
"cancel": "Annuler"
}
},
"device_type": {
"options": {
"washing_machine": "Machine à laver",
"dryer": "Séchoir",
"washer_dryer": "Combo laveuse-sécheuse",
"dishwasher": "Lave-vaisselle",
"coffee_machine": "Machine à café (obsolète)",
"ev": "Véhicule électrique (obsolète)",
"air_fryer": "Friteuse à air",
"heat_pump": "Pompe à chaleur (obsolète)",
"bread_maker": "Machine à pain",
"pump": "Pompe / Pompe de puisard",
"oven": "Four (obsolète)",
"other": "Autre (avancé)"
}
}
},
"services": {
"label_cycle": {
"name": "Cycle d'étiquetage",
"description": "Attribuez un profil existant à un cycle passé ou supprimez l'étiquette.",
"fields": {
"device_id": {
"name": "Appareil",
"description": "L'appareil de la machine à laver à étiqueter."
},
"cycle_id": {
"name": "Identifiant du cycle",
"description": "LID du cycle à étiqueter."
},
"profile_name": {
"name": "Nom du profil",
"description": "Le nom d'un profil existant (créer des profils dans le menu Gérer les profils). Laissez vide pour supprimer l’étiquette."
}
}
},
"create_profile": {
"name": "Créer un profil",
"description": "Créez un nouveau profil (autonome ou basé sur un cycle de référence).",
"fields": {
"device_id": {
"name": "Appareil",
"description": "Le dispositif de la machine à laver."
},
"profile_name": {
"name": "Nom du profil",
"description": "Nom du nouveau profil (par exemple « Heavy Duty », « Delicates »)."
},
"reference_cycle_id": {
"name": "ID du cycle de référence",
"description": "ID de cycle facultatif sur lequel baser ce profil."
}
}
},
"delete_profile": {
"name": "Supprimer le profil",
"description": "Supprimez un profil et éventuellement désétiquetez les cycles qui l'utilisent.",
"fields": {
"device_id": {
"name": "Appareil",
"description": "Le dispositif de la machine à laver."
},
"profile_name": {
"name": "Nom du profil",
"description": "Le profil à supprimer."
},
"unlabel_cycles": {
"name": "Annuler l'étiquetage des cycles",
"description": "Supprimez l’étiquette de profil des cycles utilisant ce profil."
}
}
},
"auto_label_cycles": {
"name": "Étiquetage automatique des anciens cycles",
"description": "Étiquetez rétroactivement les cycles non étiquetés à laide de la correspondance de profil.",
"fields": {
"device_id": {
"name": "Appareil",
"description": "Le dispositif de la machine à laver."
},
"confidence_threshold": {
"name": "Seuil de confiance",
"description": "Confiance de correspondance minimale (0,50-0,95) pour appliquer les étiquettes."
}
}
},
"export_config": {
"name": "Exporter la configuration",
"description": "Exportez les profils, cycles et paramètres de cet appareil vers un fichier JSON (par appareil).",
"fields": {
"device_id": {
"name": "Appareil",
"description": "L'appareil de machine à laver à exporter."
},
"path": {
"name": "Chemin",
"description": "Chemin de fichier absolu facultatif à écrire (par défaut /config/ha_washdata_export_{entry}.json)."
}
}
},
"import_config": {
"name": "Importer la configuration",
"description": "Importez des profils, des cycles et des paramètres pour cet appareil à partir d'un fichier d'exportation JSON (les paramètres peuvent être écrasés).",
"fields": {
"device_id": {
"name": "Appareil",
"description": "Appareil de machine à laver dans lequel importer."
},
"path": {
"name": "Chemin",
"description": "Chemin absolu vers le fichier JSON dexportation à importer."
}
}
},
"submit_cycle_feedback": {
"name": "Soumettre des commentaires sur le cycle",
"description": "Confirmez ou corrigez un programme détecté automatiquement après un cycle terminé. Fournissez soit `entry_id` (avancé) ou `device_id` (recommandé).",
"fields": {
"device_id": {
"name": "Appareil",
"description": "Le périphérique WashData (recommandé à la place de Entry_id)."
},
"entry_id": {
"name": "ID d'entrée",
"description": "LID dentrée de configuration du périphérique (alternative à device_id)."
},
"cycle_id": {
"name": "Identifiant du cycle",
"description": "L'identifiant du cycle affiché dans la notification de retour/les journaux."
},
"user_confirmed": {
"name": "Confirmer le programme détecté",
"description": "Définissez true si le programme détecté est correct."
},
"corrected_profile": {
"name": "Profil corrigé",
"description": "Sil nest pas confirmé, fournissez le nom de profil/programme correct."
},
"corrected_duration": {
"name": "Durée corrigée (secondes)",
"description": "Durée corrigée facultative en secondes."
},
"notes": {
"name": "Remarques",
"description": "Notes facultatives sur ce cycle."
}
}
},
"record_start": {
"name": "Début du cycle denregistrement",
"description": "Commencez à enregistrer manuellement un cycle de nettoyage (contourne toute logique de correspondance).",
"fields": {
"device_id": {
"name": "Appareil",
"description": "L'appareil de la machine à laver à enregistrer."
}
}
},
"record_stop": {
"name": "Arrêt du cycle d'enregistrement",
"description": "Arrêtez l'enregistrement manuel.",
"fields": {
"device_id": {
"name": "Appareil",
"description": "Le dispositif de la machine à laver pour arrêter l'enregistrement."
}
}
},
"trim_cycle": {
"name": "Cycle de coupe",
"description": "Ajustez les données de puissance d'un cycle passé à une fenêtre de temps spécifique.",
"fields": {
"device_id": {
"name": "Appareil",
"description": "Le périphérique WashData."
},
"cycle_id": {
"name": "Identifiant du cycle",
"description": "LID du cycle à découper."
},
"trim_start_s": {
"name": "Démarrage du trim (secondes)",
"description": "Conservez les données de ce décalage en secondes. Par défaut 0."
},
"trim_end_s": {
"name": "Fin de coupe (secondes)",
"description": "Conservez les données jusqu'à ce décalage en secondes. Par défaut = durée complète."
}
}
},
"pause_cycle": {
"name": "Cycle de pause",
"description": "Suspendez le cycle actif dun appareil WashData.",
"fields": {
"device_id": {
"name": "Appareil",
"description": "L'appareil WashData à mettre en pause."
}
}
},
"resume_cycle": {
"name": "Reprendre le cycle",
"description": "Reprendre un cycle en pause pour un appareil WashData.",
"fields": {
"device_id": {
"name": "Appareil",
"description": "Le périphérique WashData à reprendre."
}
}
}
},
"entity": {
"binary_sensor": {
"running": {
"name": "En cours d'exécution"
},
"match_ambiguity": {
"name": "Ambiguïté des correspondances"
}
},
"sensor": {
"washer_state": {
"name": "État",
"state": {
"off": "Désactivé",
"idle": "Inactif",
"starting": "Démarrage",
"running": "En cours d'exécution",
"paused": "En pause",
"user_paused": "En pause par l'utilisateur",
"ending": "En cours d'arrêt",
"finished": "Terminé",
"anti_wrinkle": "Anti-faux plis",
"delay_wait": "En attendant de commencer",
"interrupted": "Interrompu",
"force_stopped": "Arrêt forcé",
"rinse": "Rinçage",
"unknown": "Inconnu",
"clean": "Propre"
}
},
"washer_program": {
"name": "Programme"
},
"time_remaining": {
"name": "Temps restant"
},
"total_duration": {
"name": "Durée totale"
},
"cycle_progress": {
"name": "Progrès"
},
"current_power": {
"name": "Puissance actuelle"
},
"elapsed_time": {
"name": "Temps écoulé"
},
"debug_info": {
"name": "Informations de débogage"
},
"match_confidence": {
"name": "Niveau de confiance"
},
"top_candidates": {
"name": "Meilleurs candidats",
"state": {
"none": "Aucun"
}
},
"current_phase": {
"name": "Phase actuelle"
},
"wash_phase": {
"name": "Phase"
},
"profile_cycle_count": {
"name": "Nombre de cycles du profil {profile_name}",
"unit_of_measurement": "cycles"
},
"suggestions": {
"name": "Paramètres suggérés"
},
"pump_runs_today": {
"name": "La pompe fonctionne (dernières 24 heures)"
},
"cycle_count": {
"name": "Nombre de cycles"
}
},
"select": {
"program_select": {
"name": "Programme des cycles",
"state": {
"auto_detect": "Détection automatique"
}
}
},
"button": {
"force_end_cycle": {
"name": "Forcer la fin du cycle"
},
"pause_cycle": {
"name": "Cycle de pause"
},
"resume_cycle": {
"name": "Reprendre le cycle"
}
}
},
"exceptions": {
"device_id_required": {
"message": "Un device_id valide est requis."
},
"cycle_id_required": {
"message": "Un cycle_id valide est requis."
},
"profile_name_required": {
"message": "Un nom_profil valide est requis."
},
"device_not_found": {
"message": "Appareil introuvable."
},
"no_config_entry": {
"message": "Aucune entrée de configuration trouvée pour l'appareil."
},
"integration_not_loaded": {
"message": "Intégration non chargée pour cet appareil."
},
"cycle_not_found_or_no_power": {
"message": "Cycle introuvable ou ne comportant aucune donnée de puissance."
},
"trim_failed_empty_window": {
"message": "Échec du trim : cycle introuvable, aucune donnée d'alimentation ou la fenêtre résultante est vide."
},
"trim_invalid_range": {
"message": "trim_end_s doit être supérieur à trim_start_s."
}
}
}