Files
HomeAssistantVS/custom_components/ha_washdata/translations/panel/fr.json
T

2224 lines
144 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"badge": {
"quiet_tail_tip": "Vers la fin, ce programme reste silencieux environ {mins} min, puis consomme environ {watts} W pendant {secs} s. Observé sur {seen} des {measured} cycles mesurés.",
"quiet_tail": "silence final ~{mins} min",
"artifact_tip": "{n} anomalies détectées (par exemple, porte ouverte en cours de cycle) : ouvrez pour les voir sur le graphique",
"artifact_tip_one": "{n} anomalie détectée (par exemple, porte ouverte en cours de cycle) : ouvrez pour la voir sur le graphique",
"artifact_tip_many": "{n} anomalies détectées (par exemple, porte ouverte en cours de cycle) : ouvrez pour les voir sur le graphique",
"artifact_tip_other": "{n} anomalies détectées (par exemple, porte ouverte en cours de cycle) : ouvrez pour les voir sur le graphique",
"auto": "(détecté automatiquement)",
"built_in_tag": "intégré",
"declining": "↘ en déclin",
"energy_low": "Énergie inférieure à la normale",
"energy_spike": "Énergie supérieure à la normale",
"feedback_requested": "Commentaires demandés",
"golden_cycle": "Cycle de référence enregistré",
"improving": "↗ amélioration",
"manual": "(sélectionné manuellement)",
"needs_review": "Besoin d'un examen",
"overrun": "A couru plus longtemps que d'habitude",
"poor_fit": "qualité médiocre",
"restart_gap_tip": "{n} coupures redémarrage HA : la courbe de puissance a des trous",
"restart_gap_tip_one": "{n} coupure redémarrage HA : la courbe de puissance a un trou",
"restart_gap_tip_many": "{n} coupures redémarrage HA : la courbe de puissance a des trous",
"restart_gap_tip_other": "{n} coupures redémarrage HA : la courbe de puissance a des trous",
"reviewed": "Révisé",
"steady": "→ stable",
"underrun": "Terminé plus vite que d'habitude",
"overrun_ratio": "({x}x le temps prévu)",
"underrun_ratio": "({pct} % du temps prévu)",
"imported_tip": "Importé depuis la boutique communautaire. Utilisé uniquement pour la correspondance, non compté dans les statistiques.",
"unmatchable": "correspondance impossible",
"not_importable": "n/a ici",
"exists": "existe déjà",
"backfilled_tip": "Détecté dans un historique de puissance importé. Influence uniquement la correspondance des programmes, non compté dans les statistiques.",
"armed": "(s'applique au prochain cycle)",
"duration_outlier": "{n} cycle(s) de durée anormale",
"awaiting_tip": "En attente de l'approbation de la communauté",
"awaiting_n": "En attente d'approbation · {n} confirmés",
"awaiting": "En attente d'approbation",
"approved": "Approuvé",
"matcher_unused": "Ne correspond encore à aucun de vos cycles",
"matcher_used": "Correspond à {n} de vos cycles",
"matcher_used_one": "Correspond à {n} de vos cycles",
"matcher_used_many": "Correspond à {n} de vos cycles",
"matcher_used_other": "Correspond à {n} de vos cycles",
"matcher_used_tip": "Cycles de cet appareil que WashData a associés de lui-même à ce programme importé. Un import qui ne correspond jamais ne convient peut-être pas à votre appareil ; vous pouvez le supprimer. Compté localement ; rien n'est envoyé à la boutique communautaire."
},
"btn": {
"log_done_task": "Marquer comme fait : {task}",
"add_task": "Ajouter une tâche",
"pg_preset_delete": "Supprimer le préréglage",
"pg_preset_load": "Charger le préréglage",
"pg_preset_load_tip": "Remplacer les valeurs du Bac à sable par ce préréglage (les réglages actifs ne sont pas modifiés)",
"pg_preset_save": "Enregistrer comme préréglage",
"pg_preset_save_tip": "Enregistrer toutes les valeurs ci-dessous comme préréglage nommé pour cet appareil",
"reset_zoom": "Réinitialiser le zoom",
"set_brand_model": "Définir la marque et le modèle",
"refresh_catalog": "Rafraîchir le catalogue",
"add_device": "+ Ajouter un appareil",
"add_device_tip": "Ajouter un autre appareil WashData",
"add_maintenance": "Ajouter un événement d'entretien",
"add_phase": "+ Ajouter une phase",
"add_timer": "+ Ajouter une minuterie",
"apply_all": "Appliquer tout",
"apply_label": "Appliquer l'étiquette",
"apply_split": "Appliquer le fractionnement",
"apply_trim": "Appliquer le rognage",
"auto_detect_split": "Détection automatique",
"auto_label_cycles": "Cycles d'étiquetage automatique",
"auto_label_cycles_tip": "Nommer les cycles sans étiquette dont la confiance de correspondance dépasse le seuil.",
"cancel": "Annuler",
"clear_debug": "Effacer les données de débogage",
"clear_splits": "Effacer",
"close": "Fermer",
"compare": "Comparer",
"confirm": "Confirmer",
"convert_to_automation": "Convertir en automatisation",
"correct": "Corriger…",
"create": "Créer",
"delete": "Supprimer",
"delete_group": "Supprimer le groupe",
"delete_group_tip": "Supprimer ce groupe uniquement - les profils des membres sont conservés",
"delete_profile": "Supprimer le profil",
"discard": "Jeter",
"discard_tip": "Supprimer la trace enregistrée sans sauvegarder",
"dismiss": "Rejeter",
"done": "Fait",
"edit": "Modifier",
"export": "Exporter",
"force_stop": "Forcer l'arrêt",
"force_stop_tip": "Terminer immédiatement le cycle en cours et le marquer comme arrêté de force",
"from_template": "À partir du modèle ▾",
"ignore": "Ignorer",
"import_json": "Importer depuis JSON",
"inspect": "Inspecter",
"label": "Étiqueter",
"load_more": "Charger plus",
"manage": "Gérer",
"merge": "Fusionner",
"new_automation": "+ Nouvelle automatisation",
"new_group": "+ Nouveau groupe",
"new_group_tip": "Regrouper les profils quasi identiques (même forme, température ou essorage différents) pour que la correspondance puisse les distinguer.",
"new_phase": "+ Nouvelle phase",
"new_profile": "+ Nouveau profil",
"new_profile_tip": "Créer un nouveau profil de programme à partir d'un cycle étiqueté existant ou d'un enregistrement",
"on_cycle_finished": "Le cycle terminé",
"on_cycle_started": "Le cycle a démarré",
"pause_cycle": "Pause",
"pause_cycle_tip": "Mettre en pause le cycle en cours – l'appareil reprendra là où il s'est arrêté",
"pg_load_live": "Charger les réglages actifs",
"pg_load_live_tip": "Relire les réglages actuels de l'intégration et abandonner toutes les modifications faites dans le Bac à sable",
"pg_load_suggested": "Charger les suggestions ({n})",
"pg_load_suggested_tip": "Charger les suggestions actuelles du réglage automatique comme valeurs de remplacement dans le Bac à sable",
"pg_publish_all": "Enregistrer {n} réglage(s) dans l'intégration",
"pg_publish_one": "Enregistrer {label} dans l'intégration",
"process": "Processus",
"process_history": "Traiter maintenant",
"process_recording": "Enregistrer l'enregistrement",
"process_tip": "Enregistrer la trace capturée en tant que profil nouveau ou existant",
"rebuild": "Reconstruire les enveloppes",
"rebuild_envelope": "Reconstruire l'enveloppe",
"rebuild_tip": "Reconstruire la bande de puissance attendue de chaque profil à partir de ses cycles étiquetés. À lancer après avoir étiqueté ou corrigé des cycles.",
"rec_start_tip": "Commencer l'enregistrement de la trace de puissance de l'appareil – démarrer juste avant de lancer un cycle",
"rec_stop": "Arrêt",
"rec_stop_tip": "Arrêter l'enregistrement et conserver la trace capturée pour révision",
"record": "Commencer l'enregistrement",
"refresh": "Rafraîchir",
"refresh_diag_tip": "Recharger les statistiques de stockage",
"refresh_settings_tip": "Recharger les paramètres depuis le serveur",
"relabel": "Réétiqueter ({count})",
"remove": "Retirer",
"remove_timer": "Supprimer la minuterie",
"reset": "Réinitialiser",
"reset_ml_models_tip": "Jetez les modèles affinés et revenez aux modèles intégrés. WashData peut les réapprendre plus tard.",
"reset_to_builtin": "Réinitialiser aux modèles intégrés",
"resume_cycle": "Reprendre le cycle",
"resume_cycle_tip": "Reprendre le cycle mis en pause",
"revert_settings": "Annuler les modifications",
"revert_settings_tip": "Restaurer les paramètres d'avant la dernière sauvegarde",
"revert_settings_tip_none": "Enregistrez d'abord pour activer l'annulation",
"revert": "Rétablir",
"revert_to_previous": "Rétablir ce paramètre à sa valeur précédente",
"review": "Réviser",
"run": "Exécuter",
"run_analysis": "🔍 Exécutez l'analyse des suggestions",
"run_analysis_tip": "Analysez vos cycles enregistrés maintenant et actualisez les suggestions de réglage",
"run_auto_label": "Exécuter l'étiquetage automatique",
"save": "Sauvegarder",
"save_access_control": "Enregistrer le contrôle d'accès",
"save_group": "Enregistrer le groupe",
"save_panel_settings": "Enregistrer les paramètres du panneau",
"save_phases": "Enregistrer les phases",
"save_preferences": "Enregistrer les préférences",
"save_reminders": "Enregistrer les rappels",
"save_review": "Enregistrer la révision",
"save_settings": "Enregistrer les paramètres",
"select": "Sélectionner",
"select_all": "Tout sélectionner",
"select_none": "Aucun",
"show_only": "Afficher uniquement",
"split": "Diviser",
"stop": "Arrêter",
"submit_correction": "Soumettre la correction",
"train_now": "Entraînez-vous maintenant",
"trim": "Rogner",
"trim_split": "Rogner / Diviser",
"undo": "Annuler",
"unlabel_selected": "Retirer l'étiquette de la sélection ({n})",
"unlabel_selected_tip": "Retirer l'étiquette des cycles sélectionnés. Ils restent dans votre historique mais ne façonnent plus ce profil.",
"use": "Utiliser",
"wipe_all": "Effacer toutes les données",
"delete_selected": "Supprimer la sélection ({n})",
"pg_apply_best": "Appliquer le meilleur",
"pg_apply_to_settings_tip": "Copier les valeurs que vous avez modifiées ici dans les réglages actifs de cet appareil",
"import": "Importer",
"disconnect": "Déconnecter",
"connect_github": "Connecter GitHub",
"share_to_store": "Partager sur la boutique",
"share": "Partager",
"browse_community_setups": "Parcourir les configurations de la communauté",
"download_device": "Télécharger cette configuration",
"share_device": "⬆ Partager cet appareil",
"share_device_tip": "Partager cet appareil et ses cycles de référence sur la boutique communautaire, pour que les propriétaires du même modèle puissent les adopter.",
"share_n": "Partager {n} cycle(s)",
"export_selected": "Exporter (choisir les données)",
"export_all": "Exporter tout rapidement",
"download_export": "Télécharger l'export",
"analyze_import": "Analyser le fichier",
"import_selected": "Importer la sélection",
"back": "Retour",
"mute_suggestion": "Ne plus suggérer ce paramètre",
"reset_muted": "Réinitialiser les suggestions masquées",
"reset_phase_tip": "Annuler votre modification et restaurer la phase intégrée",
"import_power_history": "Importer l'historique de puissance",
"hist_read_recorder": "Lire depuis Home Assistant",
"hist_scan": "Rechercher des cycles",
"hist_import_n": "Importer {n} cycles",
"hist_goto_cycles": "Voir les cycles",
"save_total_cycles": "Enregistrer le total",
"clear": "Effacer",
"add_brand": "Ajouter une marque",
"add_appliance": "Ajouter un appareil",
"retry": "Réessayer",
"confirm_appliance": "Confirmer cet appareil",
"confirmed": "Confirmé",
"create_profile_from_gap": "Créer un profil",
"undo_import": "Annuler la dernière importation",
"pg_rerun": "Mettre à jour la simulation"
},
"conflict": {
"anti_wrinkle_max": {
"max": "Doit être supérieur au Seuil de démarrage ({start} W) ; sinon la limite de durée anti-froissage est contournée",
"start": "Doit être inférieur à la Puissance max anti-froissage ({max} W)"
},
"attn_sub": "Corriger les conflits avant d'enregistrer",
"attn_title": "Conflits de paramètres : {n}",
"price_entity": {
"power_sensor": "Il s'agit du Capteur de puissance de l'appareil, pas d'un prix. Les cycles seraient facturés en watts par kWh ; videz ce champ.",
"energy_sensor": "Il s'agit de l'Entité du compteur d'énergie de l'appareil, pas d'un prix. Les cycles seraient facturés au relevé du compteur par kWh ; videz ce champ.",
"device_class": "Ce capteur mesure {dc}, pas un prix par kWh. Videz ce champ ou choisissez un capteur de tarif.",
"unit": "Ce capteur mesure en {unit}, pas en prix par kWh. Videz ce champ ou choisissez un capteur de tarif."
},
"settings_banner": "Conflits de paramètres : {n}. Vérifiez les sections surlignées et corrigez-les avant d'enregistrer.",
"settings_banner_btn": "Aller au premier",
"confidence": {
"auto": "Doit être supérieur ou égal au Seuil de correspondance ({match})",
"learning": "Doit être supérieur ou égal au Seuil de correspondance ({match})",
"match_for_auto": "Doit être inférieur ou égal à la Confiance d'étiquetage automatique ({alc})",
"match_for_learning": "Doit être inférieur ou égal à la Confiance d'apprentissage ({lc})"
},
"duration_ratio": {
"max": "Doit être supérieur au Ratio de durée min ({min})",
"min": "Doit être inférieur au Ratio de durée max ({max})"
},
"hysteresis": {
"start": "Doit être supérieur au Seuil d'arrêt ({stop} W)",
"stop": "Doit être inférieur au Seuil de démarrage ({start} W)"
},
"min_power": {
"min_power": "Doit être inférieur ou égal au Seuil d'arrêt ({stop} W)",
"stop": "Doit être supérieur ou égal à la Puissance minimale ({min} W)"
},
"no_update_timeout": {
"timeout": "Doit être supérieur à l'Intervalle watchdog ({wi} s)",
"watchdog": "Doit être inférieur au Délai d'absence de mise à jour ({to} s)"
},
"off_delay": {
"gap": "L'Écart minimal devrait être au moins égal au Délai d'arrêt ({delay} s)",
"off_delay": "Le Délai d'arrêt ({off_delay} s) dépasse l'Écart minimal entre cycles ({gap} s) ; les cycles consécutifs peuvent fusionner"
},
"power_off": {
"stop": "Doit être supérieur au Seuil de mise hors tension ({pot} W)",
"threshold": "Doit être inférieur au Seuil d'arrêt ({stop} W) pour prendre effet"
},
"pump_stuck": {
"duration": "Doit être inférieur au Délai d'expiration sans mise à jour ({to} s) pour que l'alarme de pompe bloquée puisse se déclencher en premier",
"timeout": "Doit dépasser la Durée de blocage de la pompe ({ps} s) pour que l'alarme de pompe bloquée puisse se déclencher en premier"
},
"start_dur": {
"sampling": "L'Intervalle d'échantillonnage dépasse la Durée de démarrage ({sdt} s) ; des pics sur un seul échantillon peuvent ouvrir un cycle",
"threshold": "Devrait être au moins un Intervalle d'échantillonnage ({si} s) pour éviter les faux démarrages sur un seul échantillon"
},
"unmatch": {
"match": "Doit être supérieur au Seuil de non-correspondance ({un})",
"unmatch": "Doit être inférieur au Seuil de correspondance ({match}) ; sinon une correspondance confirmée est immédiatement annulée"
},
"cascade_toast": "Autres paramètres ajustés pour la cohérence : {n}",
"suggestion_resolves": "Appliquez la suggestion en attente ({val}) ci-dessous pour corriger ceci",
"use_fix": "Utiliser {val}",
"watchdog": {
"interval": "Devrait être au moins 2x l'Intervalle d'échantillonnage ({si} s)",
"sampling": "L'Intervalle d'échantillonnage devrait être au plus la moitié de l'Intervalle watchdog ({wi} s)"
},
"end_energy": {
"energy": "Trop strict pour le Seuil d'arrêt ({w} W) sur le Délai d'arrêt ({d} s) ; le cycle ne peut se terminer que par une voie de secours",
"stop": "L'Énergie de fin ({e} Wh sur {d} s) n'autorise que {p} W"
}
},
"hdr": {
"custom_tasks": "Vos propres tâches",
"maintenance_supporter": "Besoin de plus ?",
"access_control": "Contrôle d'accès",
"add_maintenance": "Ajouter un événement d'entretien",
"automation_delete": "Supprimer cette automatisation",
"automation_needs_review": "Ce cycle doit être revu",
"automation_open": "Ouvrir dans l'éditeur d'automatisation",
"automation_review_this_cycle": "Revoir ce cycle",
"automations": "Automatisations",
"clear_debug": "Effacer les traces de débogage",
"diagnostics_pref": "Diagnostic",
"display": "Afficher",
"export_import": "Exporter/Importer",
"live_power": "Alimentation en direct",
"logs": "Journaux",
"maintenance": "Actions d'entretien",
"maintenance_log": "Journal d'entretien",
"maintenance_reminders": "Rappels d'entretien",
"manual_recording": "Enregistrement manuel",
"manual_recording_tip": "Enregistrez un cycle volontairement : appuyez sur Début juste avant le démarrage de l'appareil et sur Arrêter quand il a fini, puis sur Processus pour l'enregistrer comme profil.",
"ml_learned": "Ce que WashData a appris",
"ml_settings_card": "Paramètres",
"ml_smart_learning": "Apprentissage intelligent",
"my_preferences": "Mes préférences",
"no_automations": "Aucun automatisme ne fait encore référence à cet appareil.",
"panel_settings": "Paramètres du panneau",
"pg_settings_source": "Origine des réglages",
"phase_catalog": "Catalogue de phases",
"playground": "Bac à sable",
"process_history": "Traiter l'historique",
"settings_history": "Historique des paramètres",
"status": "Statut",
"status_graph": "Graphique d'état",
"storage_stats": "Statistiques de stockage",
"toggle_sidebar": "Basculer la barre latérale de Home Assistant",
"wipe_history": "Effacer l'historique",
"pg_detection_params": "Paramètres de détection",
"pg_outcome": "Résultat de la simulation",
"pg_across_cycles": "Sur l'ensemble de vos cycles",
"community_store": "Boutique communautaire",
"online_account": "Boutique communautaire et fonctionnalités en ligne",
"import_power_history": "Importer l'historique de puissance",
"service_status": "État de l'entretien",
"online_account_tab": "En ligne et communauté",
"live_match_debug": "Débogage de la correspondance en direct"
},
"health": {
"fair": "Qualité de profil acceptable",
"good": "✓ Bonne qualité de profil",
"poor": "⚠ Qualité de profil médiocre"
},
"lbl": {
"task_name": "Tâche",
"every_cycles": "Tous les (cycles)",
"every_days": "Tous les (jours)",
"new_task_name": "Nouvelle tâche",
"days_since_service": "{since} / {total} jours",
"envelope_position_tip": "Position sur la courbe enregistrée du programme correspondant : {pct} %. Obtenue en alignant le cycle sur le profil, elle reste juste même si un cycle est plus long ou plus court. Mise à jour pendant que l'appareil est silencieux, elle peut donc être en retard.",
"envelope_position": "courbe {pct} %",
"aria_playground_chart3": "Graphique interactif de puissance du cycle : survolez pour lire le temps/la puissance, faites défiler ou pincez pour zoomer, faites glisser pour vous déplacer",
"device_unresolved": "Appareil indisponible ({id})",
"drag_to_resize": "Faites glisser pour redimensionner",
"actions": "Actions",
"activity": "Activité",
"administrators": "Administrateurs",
"aria_compare_chart": "Graphique de comparaison des cycles",
"aria_cycle_chart": "Courbe de puissance du cycle",
"aria_envelope_chart": "Enveloppe de puissance du profil",
"aria_phase_chart": "Graphique de l'éditeur de phases",
"aria_power_chart": "Graphique de puissance",
"aria_spaghetti_chart": "Courbes de puissance de cycles superposées",
"artifact_anomaly": "Anomalie",
"artifact_high_power": "Puissance élevée",
"artifact_interruption": "Interruption",
"artifact_low_power": "Puissance faible",
"auto_detect": "Détection automatique",
"auto_fine_tune_off": "réglage automatique désactivé",
"auto_fine_tune_on": "affinage automatique activé (vers {hour}h00)",
"avg_cost": "Coût moyen",
"change": "Modification",
"clock_time": "Heure de l'horloge",
"cohesion_good": "cohésion {pct}%",
"cohesion_low": "⚠ cohésion faible {pct}%",
"compare_profiles": "Comparez avec les profils",
"confidence": "Confiance",
"confidence_threshold": "Seuil de confiance",
"correct_duration": "Durée correcte (min, facultatif)",
"correct_profile": "Profil correct",
"cost": "Coût",
"create_new_profile": "+ Créer un nouveau profil…",
"current_phase": "Phase actuelle",
"cycle": "Cycle",
"cycle_date_display": "Affichage de la date du cycle",
"cycle_context": "Historique du recorder autour du cycle",
"cycle_context_off": "Désactivé",
"cycle_context_minutes": "{min} min",
"cycle_context_series": "Historique du recorder",
"before_start": "Avant le début",
"after_end": "Après la fin",
"cycles_count": "Cycles",
"cycles_lc": "cycles",
"date": "Date",
"debug_traces": "Traces de débogage",
"default_access_level": "Niveau par défaut pour les utilisateurs non répertoriés ci-dessous",
"default_other": "Par défaut (autres appareils)",
"default_tab": "Onglet par défaut lors de l'ouverture du panneau",
"description": "Description",
"duration": "Durée",
"enable_access_control": "Activer le contrôle d'accès par utilisateur",
"energy": "Énergie",
"event_type": "Type d'événement",
"expected": "Attendu",
"suspected_profile": "{name} (probable)",
"runner_up_profile": "{name} (deuxième candidat)",
"expected_duration": "Durée prévue (min)",
"file_kb": "Fichier (ko)",
"from": "De",
"gap_s": "Écart(s)",
"group_name": "Nom du groupe",
"head_trim": "Rognage de début (s)",
"hide_tabs": "Masquer les onglets pour les non-administrateurs",
"json_data": "Données JSON",
"label": "Programme associé",
"last": "Derniers",
"last_checked": "Dernière vérification :",
"load_from_file": "Charger à partir d'un fichier",
"manual_duration": "Durée manuelle (min, facultatif)",
"match": "Correspondance",
"members": "Membres",
"mode_existing_profile": "Ajouter au profil existant",
"mode_new_profile": "Créer un nouveau profil",
"models_fine_tuned": "(modèles affinés : {count})",
"n_selected": "{n} sélectionné(s)",
"n_tuning_suggestions": "{n} suggestions de réglage",
"n_tuning_suggestions_one": "{n} suggestion de réglage",
"n_tuning_suggestions_many": "{n} suggestions de réglage",
"n_tuning_suggestions_other": "{n} suggestions de réglage",
"new_profile_name": "Nouveau nom de profil",
"notes": "Notes",
"panel_default_tab": "Onglet par défaut",
"panel_language": "Langue du panneau",
"per_cycle_short": "cycle",
"pg_anti_wrinkle": "Anti-froissement",
"pg_best_value": "Meilleure valeur trouvée",
"pg_current_value": "Valeur actuelle :",
"pg_drag_hint": "Faites glisser la ligne sur le graphique",
"pg_ev_ending": "Se termine",
"pg_ev_running": "En cours",
"pg_group_advanced": "Cas particuliers",
"pg_group_detection": "Déclencheurs de détection",
"pg_group_timing": "Règles de temporisation",
"pg_idle": "Inactif",
"pg_poor_match": "Correspondance médiocre",
"pg_preset": "Préréglage du Bac à sable",
"pg_preset_name": "Nom du nouveau préréglage",
"pg_preset_none": "Sélectionner un préréglage…",
"pg_strong_match": "Correspondance forte",
"pg_weak_match": "Correspondance faible",
"phase_name": "Nom de la phase",
"name": "Nom",
"phase_timeline": "Chronologie des phases",
"power": "Puissance",
"profile": "Profil",
"profile_name": "Nom du profil",
"program": "Programme",
"program_tip": "Choisissez à quel programme le cycle en cours est associé. La détection automatique choisit la meilleure correspondance. Épinglez un programme quand la détection automatique se trompe ; choisi avant le démarrage, il s'applique au cycle suivant.",
"progress": "Progrès",
"raw_socket": "Signal brut",
"ref_cycle": "Cycle de référence (facultatif)",
"remaining": "Restant",
"reminder_every": "Rappeler tous les (cycles)",
"remove_label": "- Supprimer l'étiquette -",
"rename_profile": "Renommer le profil",
"resulting_profile": "Profil résultant",
"save_mode": "Mode Enregistrer",
"seconds_from_start": "Secondes depuis le début",
"select_profile": "Sélectionnez un profil",
"setting": "Paramètre",
"settings_advanced": "Avancé",
"settings_basic": "De base",
"settings_detail_level": "Niveau de détail des paramètres",
"show_debug": "Afficher la carte de débogage de la correspondance en direct sur la page Statut (confiance, ambiguïté, meilleurs candidats)",
"show_expected": "Afficher la superposition de courbe attendue (profil correspondant, orange)",
"show_raw": "Afficher le commutateur de signal brut de la prise dans le graphique de puissance en direct",
"sparkline": "Tendance récente de la durée des cycles",
"status": "Statut",
"tail_trim": "Rognage de fin (s)",
"tap_to_dismiss": "appuyez sur le graphique pour fermer",
"timer_auto_pause": "Pause automatique",
"timer_min": "min",
"timer_msg_placeholder": "Message (facultatif, {device}/{program}/{minutes})",
"to": "À",
"ungrouped": "Non groupé",
"unlabelled": "Sans étiquette",
"unlabelled_paren": "(sans étiquette)",
"input": "Entrée :",
"start": "Début",
"end": "Fin",
"unit_s": "(s)",
"reviewed_on": "examiné le {date}",
"unknown": "Inconnu",
"quality": "Qualité",
"tags": "Étiquettes",
"at": "à",
"pct_match_confidence": "{pct} % de confiance de correspondance",
"ha_restarted": "HA redémarré",
"from_start": "Depuis le début",
"to_end": "Jusqu'à la fin",
"click_to_select": "cliquez pour sélectionner",
"envelope": "Enveloppe",
"zoom_hint": "défiler pour zoomer · double-clic pour réinitialiser",
"loading_paren": "(chargement…)",
"time_remaining": "~{v} restant",
"no_duration": "aucune durée",
"duration_avg": "~{v}m moy.",
"name_placeholder": "(nom)",
"n_shown": ", {n} affichés",
"cycles_title": "Cycles ({n})",
"pg_detecting": "Détection",
"pg_time_left_model": "Temps restant (modèle)",
"pg_time_left_model_tip": "Estimé d'après les phases du programme, pas un compte à rebours fixe",
"phase": "Phase",
"pg_mode_history": "Tester sur l'historique",
"pg_ev_detected": "Détecté",
"pg_ev_match": "Correspondance confirmée",
"pg_ev_match_changed": "Correspondance modifiée",
"pg_ev_ambiguous": "Ambigu",
"pg_ev_unmatched": "Sans correspondance",
"pg_ev_notify_start": "Notification de démarrage",
"pg_ev_notify_pre": "Notification de pré-achèvement",
"pg_ev_notify_finish": "Notification de fin",
"pg_ev_notify_milestone": "Notification de jalon",
"pg_ev_notify_held": "Notification retenue (heures silencieuses)",
"pg_ev_finished": "Terminé",
"pg_ended": "Fin",
"pg_proj_energy": "Énergie proj.",
"pg_alert_overrun": "Trop long",
"pg_alert_underrun": "Trop court",
"pg_alert_did_not_finish": "N'a pas terminé",
"pg_alert_false_end": "Divisé en plusieurs cycles",
"pg_alert_unmatched": "Sans correspondance",
"pg_alert_ambiguous": "Correspondance ambiguë",
"pg_alert_energy": "Anomalie d'énergie",
"pg_newly_correct": "désormais correct",
"pg_regressed": "régressé",
"pg_end_timing_changed": "moment de fin modifié",
"pg_vs_current": "vs actuel",
"pg_fixed": "corrigé",
"pg_broke": "cassé",
"pg_sweep_param": "Paramètre",
"pg_objective": "Objectif",
"pg_steps": "Étapes",
"pg_obj_match": "Précision de correspondance",
"pg_obj_endtiming": "Précision du moment de fin",
"pg_obj_falseend": "Taux de fausses fins",
"pg_obj_overrun": "Écart de durée",
"pg_obj_ambiguity": "Taux d'ambiguïté",
"pg_mode_optimize": "Optimiser",
"pg_group_matching": "Correspondance de programme",
"pg_zoom_hint": "double-cliquez pour réinitialiser le zoom",
"pg_alert_timeout_end": "Terminé par délai d'attente, pas par prédiction",
"pg_alert_indefinite": "Fonctionnerait indéfiniment",
"task_pg_history": "Tester sur l'historique",
"task_pg_sweep": "Optimiser",
"task_reprocess": "Retraitement",
"task_ml_training": "Apprentissage",
"eta_secs": "~{n} s restantes",
"eta_mins": "~{n} min restantes",
"pg_recent_runs": "Exécutions récentes",
"pg_load_run": "Recharger cette exécution",
"pg_match_confidence": "Confiance de correspondance",
"n_imported_note": ", {n} importés",
"enable_online": "Activer les fonctionnalités en ligne",
"anonymous": "Anonyme",
"adopt_settings": "Adopter aussi les paramètres",
"flags": "Indicateurs",
"include_phase_map": "Inclure la carte des phases",
"include_settings": "Inclure les paramètres de détection et de reconnaissance",
"show_contributor": "Afficher les noms des contributeurs",
"task_pg_detail": "Simuler le cycle",
"task_split": "Division du cycle",
"task_trim": "Rognage du cycle",
"task_merge": "Fusion des cycles",
"task_rebuild": "Reconstruction des enveloppes",
"cat_profiles": "Profils (programmes)",
"cat_real_cycles": "Cycles (historique d'utilisation)",
"cat_reference_cycles": "Cycles de référence (importés)",
"cat_custom_phases": "Phases personnalisées",
"cat_profile_groups": "Groupes de profils",
"cat_settings": "Réglages de détection & de reconnaissance",
"cat_ml_models": "Modèles ML",
"cat_feedback": "Retours & étiquettes de révision",
"cat_suggestions": "Suggestions",
"cat_maintenance_log": "Journal de maintenance",
"cat_history_logs": "Historique & journaux de modifications",
"cat_lifetime_stats": "Totaux cumulés",
"cycles_short": "cycles",
"import_mode": "Comment combiner",
"mode_merge": "Fusionner (garder les miens)",
"mode_replace": "Remplacer la sélection",
"cycle_destination": "Où placer les cycles importés ?",
"dest_reference": "Référence (forme uniquement)",
"dest_real_history": "Historique réel (compte dans les stats)",
"conflict_resolution": "Conflits de noms",
"conflict_import_copy": "Importer comme copie",
"conflict_keep_mine": "Garder le mien",
"conflict_overwrite": "Écraser",
"font_size": "Taille de police du panneau",
"hist_csv_data": "Données CSV",
"hist_from_recorder": "Ou le lire depuis Home Assistant",
"hist_since": "Depuis le",
"hist_keep": "Conserver ce cycle",
"hist_looks_complete": "complet",
"peak_power_short": "Crête",
"shape": "Forme",
"hist_skip_idle": "rien en fonctionnement",
"hist_skip_sparse": "mesures trop espacées",
"hist_skip_short": "trop peu de mesures",
"hist_skip_long": "aucune pause assez longue pour découper",
"hist_reason_short": "plus court que le cycle réel le plus court de cet appareil",
"hist_reason_no_end": "ne s'est jamais terminé proprement",
"task_history_import": "Analyse de l'historique de puissance",
"task_history_import_apply": "Importation des cycles",
"evidence_real_cycles": "Cycles effectués par cette machine",
"evidence_reference_cycles": "Téléchargés depuis la boutique communautaire",
"evidence_backfill_cycles": "Trouvés dans un historique de puissance importé",
"zoom_hint_touch": "pincer pour zoomer",
"zoom_hint_touch_zoomed": "pincer pour zoomer · appuyer deux fois pour réinitialiser",
"cycles_since_service": "{since} / {total} cycles",
"total_cycles_run": "cycles effectués au total",
"correct_total_cycles": "Corriger le total",
"hist_reason_already_recorded": "chevauche un cycle déjà enregistré par WashData",
"share_consent": "Je confirme que ces cycles se sont terminés normalement, sans interruption",
"show_internal": "Afficher les paramètres internes",
"show_internal_tip": "Réglages que WashData ajuste pour vous (échantillonnage, chien de garde, cadence de correspondance, seuils). Affichés quand cet appareil a sa propre valeur, un conflit ou une suggestion.",
"rate_n": "{n} étoiles",
"rate_quality": "Évaluer la qualité",
"pg_autolabel": "Étiquetage automatique",
"pg_label_review": "Demande une révision",
"pg_ev_match_reverted": "Correspondance annulée",
"pg_ev_verified_pause": "Pause vérifiée",
"n_samples": "{n} échantillons",
"n_samples_one": "{n} échantillon",
"n_samples_many": "{n} échantillons",
"n_samples_other": "{n} échantillons",
"n_cycles": "{n} cycles",
"n_cycles_one": "{n} cycle",
"n_cycles_many": "{n} cycles",
"n_cycles_other": "{n} cycles",
"energy_per_cycle": "{v}/cycle",
"energy_total": "{v} au total",
"automation_off": "(désactivée)",
"ref_cycle_none": "Aucun",
"share_name": "Afficher mon nom sur ce que je partage",
"cat_backfill_cycles": "Cycles trouvés dans un historique de puissance importé",
"pg_compare_profile": "Comparer avec un profil",
"pg_obj_early": "Taux de fins anticipées",
"pg_obj_endlag": "Retard de fin (médiane)",
"pg_obj_split": "Taux de divisions",
"pg_sweep_cycles": "Cycles récents"
},
"log": {
"all_levels": "Tous niveaux",
"all_devices": "Tous les appareils",
"all_components": "Tous les composants",
"search_ph": "Rechercher dans les journaux…"
},
"ml": {
"builtin_models": "● Utilisation de modèles intégrés",
"fit_good": "Bien",
"fit_slight": "Léger",
"fit_strong": "Fort",
"fit_word": "adéquation",
"personalized": "● Personnalisé pour cette machine",
"better_than_baseline": "{pct} % mieux que l'estimation de référence ({metric})",
"trend_improving_tip": "L'ajustement de ce modèle s'est amélioré au fil des dernières vérifications.",
"trend_declining_tip": "L'ajustement de ce modèle s'est dégradé au fil des dernières vérifications : examiner plus de cycles peut l'aider à réapprendre.",
"trend_steady_tip": "L'ajustement de ce modèle est resté à peu près stable au fil des dernières vérifications.",
"cap_blurb": {
"total_energy": "Prédire l'énergie totale et le coût"
},
"cap_label": {
"total_energy": "Estimation de l'énergie"
},
"metric_mae": "erreur {model} vs référence {baseline}",
"fine_tuned_at": "affiné le {when}",
"held_out_count": "mesuré sur {count} cycles de validation",
"held_out_count_one": "mesuré sur {count} cycle de validation",
"held_out_count_many": "mesuré sur {count} cycles de validation",
"held_out_count_other": "mesuré sur {count} cycles de validation",
"last_run_not_promoted": "Dernière vérification ({when}) : {reason}",
"never": "jamais",
"skip_reason": {
"fit_failed": "L'entraînement a échoué : {error}",
"holdout_too_small": "Trop peu de cycles pour tester équitablement un nouveau modèle : {held_out} ont pu être mis de côté pour le test, il en faut {min}.",
"insufficient_rows": "Pas encore assez de cycles exploitables : {count} cycles étiquetés et propres jusqu'à présent.",
"insufficient_rows_one": "Pas encore assez de cycles exploitables : {count} cycle étiqueté et propre jusqu'à présent.",
"insufficient_rows_many": "Pas encore assez de cycles exploitables : {count} cycles étiquetés et propres jusqu'à présent.",
"insufficient_rows_other": "Pas encore assez de cycles exploitables : {count} cycles étiquetés et propres jusqu'à présent.",
"not_better_than_incumbent": "Le nouveau modèle n'était pas meilleur que celui en service (erreur {model} vs {incumbent}), le modèle actuel a donc été conservé.",
"not_better_than_naive": "Le nouveau modèle n'était pas nettement meilleur que l'estimation simple (erreur {model} vs {naive}).",
"unknown": "Rien de nouveau n'a été appris."
},
"trained_unknown": "à une date inconnue"
},
"modal": {
"remove_task_title": "Retirer la tâche",
"remove_task_msg": "Retirer le rappel « {task} » ? Ses entrées dans le journal d'entretien sont conservées.",
"auto_label": "Cycles d'étiquetage automatique",
"correct_feedback": "Commentaires corrects",
"create_profile": "Créer un profil",
"cycle": "Cycle",
"edit_group": "Modifier le groupe de profils",
"edit_phase": "Phase d'édition",
"label_cycle": "Cycle d'étiquetage",
"merge_cycles": "Fusionner {n} cycles",
"new_group": "Nouveau groupe de profils",
"new_phase": "Nouvelle phase",
"process_history_msg": "Relancez la correspondance, actualisez les suggestions, réentraînez les modèles ML (si activés), recalculez le coût des cycles d'après les prix de l'énergie enregistrés et recalculez la santé des cycles sur tous les cycles enregistrés. Cela peut prendre un moment.",
"process_history_ok": "Traiter",
"process_history_title": "Traiter l'historique",
"process_recording": "Enregistrement du processus",
"delete_maintenance_msg": "Supprimer cet enregistrement d'entretien ? Cette action est irréversible.",
"delete_maintenance_title": "Supprimer l'événement d'entretien",
"relabel_cycles": "Réétiqueter {count} cycles",
"delete_automation_title": "Supprimer l'automatisation",
"delete_automation_msg": "Supprimer l'automatisation « {name} » de Home Assistant ? Cette action est irréversible.",
"remove_legacy_title": "Supprimer les actions héritées",
"reset_phase_msg": "Annuler votre modification de « {name} » et restaurer la phase intégrée ? Les programmes conservent leurs plages.",
"reset_phase_title": "Réinitialiser la phase",
"remove_legacy_msg": "Supprimer les actions personnalisées héritées ? Elles cesseront de se déclencher lors des événements de cycle. Cette action est irréversible depuis le panneau.",
"discard_recording_title": "Supprimer l'enregistrement",
"discard_recording_msg": "Supprimer l'enregistrement sauvegardé ? Cette action est irréversible.",
"dismiss_all_title": "Rejeter tous les retours",
"dismiss_all_msg": "Rejeter les {count} demandes de retour en attente ?",
"dismiss_all_ok": "Tout rejeter",
"delete_phase_title": "Supprimer la phase",
"delete_phase_msg": "Supprimer la phase « {name} » ?",
"clear_debug_title": "Effacer les données de débogage",
"clear_debug_msg": "Supprimer toutes les traces de débogage enregistrées ?",
"wipe_all_title": "Effacer toutes les données",
"wipe_all_msg": "⚠️ Cela supprime définitivement TOUS les cycles et profils. Cette action est irréversible.",
"wipe_all_ok": "Tout effacer",
"force_stop_title": "Forcer l'arrêt du cycle",
"force_stop_msg": "Forcer l'arrêt du cycle actif maintenant ? Le cycle sera enregistré comme interrompu.",
"store_import": "Importer un cycle de référence",
"store_share": "Partager sur la boutique communautaire",
"store_share_device": "Partager cet appareil",
"export_select": "Exporter - choisir les données",
"import_wizard": "Importer - choisir les données",
"history_import": "Importer l'historique de puissance",
"apply_suggestions_title": "Appliquer les suggestions",
"apply_suggestions_msg": "Modifier ces {n} paramètres ? L'intégration se recharge après l'enregistrement.",
"discard_settings_title": "Abandonner les modifications non enregistrées ?",
"discard_settings_msg": "Modifications de paramètres non enregistrées : {n}. Quitter Paramètres et les abandonner ?",
"profile_title": "Profil · {name}",
"undo_import_msg": "Les données et réglages de cet appareil reviennent à leur état d'avant la dernière importation ({when}). Les cycles et modifications depuis sont perdus.",
"undo_import_ok": "Annuler l'importation",
"undo_import_title": "Annuler la dernière importation"
},
"msg": {
"custom_task_limit": "Vous avez atteint la limite de {max} tâches.",
"custom_tasks_intro": "Ajoutez tout ce dont vous souhaitez qu'on vous rappelle. Une tâche est à effectuer dès que l'un des deux intervalles est atteint ; laissez-en un vide ou à 0 pour n'utiliser que l'autre.",
"maintenance_due_sensor_hint": "Le capteur binaire Entretien à effectuer est activé tant qu'une tâche est due, pour vos propres automatisations de notification.",
"maintenance_supporter_intro": "Maintenance Supporter est une intégration distincte qui en fait bien plus : n'importe quel appareil ou tâche, des échéances selon le temps, l'utilisation ou un capteur, des notifications et un historique. Elle peut utiliser le compteur de cycles de WashData.",
"pg_canvas_empty3": "Choisissez un cycle ci-dessus et appuyez sur Exécuter pour le simuler. Survolez ensuite pour lire les valeurs, faites défiler ou pincez pour zoomer et faites glisser pour vous déplacer.",
"pg_preset_delete_confirm": "Supprimer le préréglage « {name} » ?",
"pg_preset_limit": "Limite de préréglages atteinte ({n})",
"pg_preset_overwrite": "Écraser le préréglage « {name} » ?",
"tail_trim_hint": "Nombre de secondes à supprimer à la fin",
"store_sibling_hint": "Rien de partagé pour votre modèle ? Un modèle proche de la même marque est généralement un bon début.",
"store_declare_appliance": "Indiquez à WashData quel appareil vous possédez pour voir les configurations que d'autres ont partagées pour lui. Ou saisissez une marque ci-dessus pour explorer.",
"refresh_catalog_hint": "Les listes de marques et d'appareils de la communauté sont mises en cache pour économiser le quota quotidien de la boutique. Actualisez pour voir les entrées que d'autres ont ajoutées ou approuvées.",
"head_trim_hint": "Nombre de secondes à supprimer au début",
"appliance_monitor": "Moniteur d'appareils",
"artifact_dip_detail": "Est tombé en dessous de la bande de puissance habituelle pendant environ {n} s.",
"artifact_footer": "Mis en évidence sur le graphique ci-dessus. Il s’agit d’artefacts transitoires (par exemple la porte ouverte en cours de cycle), pas nécessairement de problèmes.",
"artifact_header": "{n} anomalies détectées au cours de ce cycle",
"artifact_header_one": "{n} anomalie détectée au cours de ce cycle",
"artifact_header_many": "{n} anomalies détectées au cours de ce cycle",
"artifact_header_other": "{n} anomalies détectées au cours de ce cycle",
"artifact_pause_detail": "La puissance est tombée presque à zéro pendant ~{n}s, puis est revenue. La porte a probablement été ouverte ou le cycle mis en pause.",
"artifact_spike_detail": "A dépassé la bande de puissance habituelle pendant environ {n} s.",
"auto_label_intro": "Attribuez des profils à des cycles non étiquetés dont la confiance de correspondance efface le seuil.",
"automations_intro": "WashData déclenche les événements {start} / {end} et expose des entités, les notifications et actions sont donc mieux construites comme des automatisations Home Assistant normales. Les automatisations utilisant cet appareil apparaissent ci-dessous.",
"cleanup_intro": "Tous les cycles étiquetés superposés. Cochez les valeurs aberrantes, puis retirez-leur l'étiquette (conservés dans l'historique, mais ne façonnant plus ce profil) ou supprimez-les.",
"clear_debug_hint": "Supprimez les données de débogage stockées pour libérer de l'espace.",
"collecting_data": "Collecte de données. Cycles encore nécessaires avant que l'affinage puisse commencer : {need} ({current}/{min}).",
"compare_overlay_profiles": "Profils de superposition (faible)",
"compare_profiles_tip": "Superposez d'autres profils sur le graphique pour voir lequel correspond le mieux à ce cycle.",
"compare_selected_cycles": "Cycles sélectionnés (solides) – afficher/masquer",
"cycles_deleted": "{count} cycle(s) supprimé(s)",
"cycle_context_loading": "Chargement de l'historique du recorder…",
"cycle_context_note": "Gris : l'historique du recorder du capteur de puissance autour de ce cycle. Il ne fait pas partie du cycle et n'affecte ni la durée, ni l'énergie, ni la correspondance.",
"cycle_context_none": "Le recorder ne contient aucun relevé autour de ce cycle (Home Assistant conserve 10 jours d'historique par défaut).",
"cycle_context_tip": "Affichage uniquement : montre l'historique du recorder du capteur de puissance autour de ce cycle, s'il est encore conservé. Pour ajouter les tentatives de démarrage échouées aux cycles futurs, utilisez Amorce de courbe (Paramètres > Détection > Début de cycle), qui modifie les durées enregistrées.",
"enough_data": "Suffisamment de données pour apprendre ({current}/{min} cycles).",
"export_description": "Choisissez précisément quels profils, cycles, réglages et autres exporter vers un JSON, ou analysez un fichier pour n'importer que les éléments souhaités.",
"feedback_cycles_pending": "À réviser : {n}",
"feedback_prompt": "Confirmez que c'était correct, corrigez le programme ou ignorez-le.",
"feedback_relabel_hint": "Réétiqueter ce cycle le résout également.",
"filter_by_profile": "Filtrer par profil…",
"group_modal_help": "Regroupez les programmes de même forme qui diffèrent par la température ou l'essorage. La correspondance note le groupe comme un seul, puis choisit le membre qui correspond le mieux. Choisissez-en au moins 2 ; la superposition montre à quel point ils se ressemblent.",
"group_not_cohesive": "Ces profils ne sont pas suffisamment similaires pour être regroupés de manière fiable. La correspondance les traite donc individuellement jusqu'à ce que vous supprimiez la valeur aberrante ou divisiez le groupe.",
"group_preview_hint": "Cochez 2 membres ou plus pour prévisualiser et comparer leurs courbes de puissance.",
"legacy_actions_title": "{count} actions personnalisées héritées toujours en cours d'exécution",
"legacy_actions_title_one": "{count} action personnalisée héritée toujours en cours d'exécution",
"legacy_actions_title_many": "{count} actions personnalisées héritées toujours en cours d'exécution",
"legacy_actions_title_other": "{count} actions personnalisées héritées toujours en cours d'exécution",
"live_chart_loading": "Le tableau de puissance en direct apparaît à mesure que les lectures arrivent.",
"loading": "Chargement…",
"loading_curve": "Courbe de chargement…",
"loading_settings": "Chargement des paramètres…",
"log_buffer_hint": "Le plus récent en premier · Met en mémoire tampon les 500 derniers enregistrements ha_washdata depuis le redémarrage · Faites glisser le bord inférieur pour redimensionner.",
"maintenance_due": "Entretien à effectuer : {items}",
"maintenance_intro": "Consignez l'entretien de cet appareil et recevez un rappel quand chaque tâche revient.",
"maintenance_load_error": "Impossible de charger les données d'entretien : {error}",
"maintenance_requires_access": "La maintenance et l'exportation/importation nécessitent un accès complet.",
"manual_duration_hint": "Durée de cycle attendue du profil, utilisée pour estimer le temps restant. Laissez-la inchangée pour garder la valeur actuelle.",
"merge_intro": "Les cycles sélectionnés sont regroupés en un seul (ordre chronologique ; espaces remplis avec 0 W). Choisissez le profil résultant.",
"ml_intro": "WashData est livré avec des modèles intelligents qui fonctionnent immédiatement.",
"ml_learned_intro": "Modèles adaptés à cette machine.",
"ml_settings_intro": "Deux commutateurs indépendants : l'un applique les modèles pendant l'exécution d'un cycle, l'autre permet à WashData de les ajuster avec précision à votre machine au fil du temps.",
"no_cycles_match": "Aucun cycle ne correspond au filtre actuel.",
"no_cycles_profile": "Aucun cycle pour ce profil.",
"no_cycles_selected": "Sélectionnez d'abord au moins un cycle.",
"no_cycles_yet": "Aucun cycle enregistré pour l'instant.",
"no_device_selected": "Aucun appareil sélectionné.",
"no_devices": "Aucun appareil WashData n'est encore configuré.",
"no_envelope": "Pas encore d'enveloppe - reconstruisez après les cycles d'étiquetage.",
"no_envelope_overlay": "Aucune enveloppe disponible à superposer.",
"no_fine_tuned": "Rien de peaufiné pour l'instant : WashData utilise ses modèles intégrés.",
"no_logs": "Aucun enregistrement de journal n'a encore été mis en mémoire tampon.",
"no_maintenance": "Aucun entretien enregistré pour le moment.",
"no_match_yet": "Aucune tentative de correspondance pour l'instant : ce champ est renseigné pendant un cycle en cours d'exécution.",
"no_other_users": "Aucun autre utilisateur de Home Assistant trouvé.",
"no_phases": "Aucune phase définie.",
"no_phases_assigned": "Aucune phase assignée.",
"no_profiles_compare": "Aucun profil à comparer.",
"no_profiles_overlay": "Aucun profil à superposer.",
"no_profiles_yet": "Aucun profil pour l'instant. Créez-en un à partir d’un cycle étiqueté.",
"no_profiles_yet_short": "Aucun profil pour l'instant.",
"no_settings_match": "Aucun paramètre ne correspond à \"{q}\"",
"no_split_points": "Pas encore de points de partage.",
"no_suggestions": "Aucune suggestion active.",
"notify_services_hint": "Utilisez les IDs de service {entity} (séparés par des virgules pour plusieurs). Variables de gabarit : {vars}.",
"old_actions_warning": "Configuré avec l'ancien éditeur d'actions (maintenant supprimé). Ils se déclenchent toujours sur les événements du cycle mais ne peuvent plus être modifiés ici. Convertissez-les en une automatisation normale ou supprimez-les.",
"pending_feedback": "En attente de retour de détection",
"performance_trend": "Tendance des performances ({n} cycles)",
"pg_apply_confirm": "Appliquer la meilleure valeur : {label} = {value} ?",
"pg_ctrl_intro": "Les valeurs partent des réglages actifs de cet appareil dans l'intégration. Les modifications restent dans le Bac à sable tant que vous ne les enregistrez pas dans l'intégration.",
"pg_live_unavailable": "Réglages actifs indisponibles, affichage des valeurs par défaut.",
"pg_load_live_confirm": "Abandonner {n} modification(s) du Bac à sable et recharger les réglages actuels de l'intégration ?",
"pg_matches_live": "Identique aux réglages actifs",
"pg_n_changed": "{n} valeur(s) modifiée(s) par rapport aux réglages actifs",
"pg_sugg_none": "Toutes les suggestions correspondent déjà aux réglages actuels",
"pg_publish_one_confirm": "Enregistrer {label} = {value} dans les réglages de cet appareil ?",
"pg_restart_note": "Redémarrez Home Assistant pour activer les outils de simulation.",
"phase_catalog_intro": "Segments nommés d'un cycle (Prélavage, Chauffage, Essorage…). Attribuez-les à un profil depuis son panneau de contrôle.",
"phase_ranges_intro": "Plages de phases (minutes à partir du début du cycle) superposées sur la courbe moyenne. Modifiez les valeurs pour prévisualiser en direct.",
"playground_intro": "Essayez des réglages sur les données réelles de vos cycles. Rien ici ne modifie vos réglages actifs tant que vous ne l'appliquez pas.",
"prefs_personal": "Celles-ci s'appliquent uniquement à votre compte Home Assistant.",
"process_history_hint": "Relance la correspondance sur tous les cycles enregistrés, actualise les suggestions, réentraîne les modèles ML (si activés), recalcule le coût à partir des prix enregistrés et recalcule la santé des cycles. À lancer après une série de vérifications.",
"profile_deleted": "Profil supprimé",
"profiles_intro": "Cliquez sur un profil pour les statistiques, les phases et le nettoyage. Regroupez des programmes presque identiques (même forme/durée, température ou essorage différents) afin de faire correspondre de manière fiable les choix entre eux.",
"rbac_hint": "Désactivé : chaque utilisateur de Home Assistant a un accès complet (par défaut). Les administrateurs ont toujours un accès complet et peuvent gérer tout le monde.",
"recording_in_progress": "Enregistrement en cours",
"reminders_intro": "Affiche un rappel dans le panneau autant de cycles après le dernier entretien. Laissez vide ou 0 pour désactiver un rappel.",
"restart_gap_footer": "Mis en évidence sur le graphique. Les données de puissance sont manquantes pour ces intervalles ; la correspondance n'a utilisé que les relevés réels.",
"restart_gap_header": "{n} coupures redémarrage HA pendant ce cycle",
"restart_gap_header_one": "{n} coupure redémarrage HA pendant ce cycle",
"restart_gap_header_many": "{n} coupures redémarrage HA pendant ce cycle",
"restart_gap_header_other": "{n} coupures redémarrage HA pendant ce cycle",
"restart_gap_item": "{dur} coupure",
"review_confirm_help": "Ce cycle a-t-il été bien détecté ? Confirmer des cycles améliore la correspondance pour votre machine. Un rapide Bien/Mauvais suffit.",
"review_in_settings": "Vérifier dans les paramètres",
"review_notes_placeholder": "Remarques (facultatif)",
"review_notes_tip": "Notes en texte libre pour votre propre référence. Non utilisé par jumelage ou formation.",
"review_profile_tip": "Le programme sous lequel ce cycle est étiqueté. S'il est faux, corrigez-le ici ; les étiquettes entraînent la correspondance.",
"review_quality_tip": "La propreté de ce cycle. Bien : un exemple type de ce programme. Mauvais : détecté, mais bruité ou inhabituel. Inutilisable : mal détecté (fusionné, tronqué ou parasite). Influe sur le score de santé et sur les cycles qui entraînent le modèle.",
"review_recorded_tip": "Marquez-le comme cycle de référence choisi à la main pour son programme, comme un cycle enregistré manuellement. Les cycles de référence sont toujours conservés, servent de base au modèle de correspondance et ne sont jamais supprimés par le nettoyage.",
"review_tags_tip": "Indicateurs facultatifs sur ce qui s'est mal passé, pour que l'entraînement et le nettoyage en tiennent compte.",
"review_to_cycles": "Ouvrir la file d'attente de révision des cycles",
"samples_decimated": "Affichage de {shown} sur {total} échantillons (réduits pour l'affichage ; pics conservés). Un grand écart ici est dû à la réduction, pas à des données manquantes.",
"saving_triggers_reload": "L'enregistrement recharge l'intégration. Les entités peuvent apparaître brièvement comme indisponibles.",
"search_placeholder": "Paramètres de recherche…",
"see_recorder": "Voir le widget enregistreur ci-dessous",
"setting_changed": "Modifié de {old} à {new} le {date}",
"settings_basic_note": "Affichage des paramètres essentiels. Passez à Avancé pour la liste complète.",
"show_all_settings": "Afficher tous les paramètres",
"showing_suggestions": "Affichage de {count} paramètres avec des suggestions.",
"showing_suggestions_one": "Affichage de {count} paramètre avec des suggestions.",
"showing_suggestions_many": "Affichage de {count} paramètres avec des suggestions.",
"showing_suggestions_other": "Affichage de {count} paramètres avec des suggestions.",
"split_intro": "Cliquez sur le graphique pour ajouter ou retirer un point de découpe, ou détectez automatiquement par les pauses inactives. Chaque partie peut avoir son propre profil.",
"sug_staged": "{key} = {val} défini. Enregistrez pour appliquer.",
"toast_auto_detect_enabled": "Détection automatique activée",
"toast_auto_label_complete": "Étiquetage automatique terminé",
"toast_auto_label_failed": "Étiquetage automatique échoué : {error}",
"toast_automation_failed": "Impossible de créer l'automatisation : {error}",
"toast_automation_migrated": "Actions migrées vers une automatisation ; ouverture de l'éditeur",
"toast_convert_failed": "Échec de la conversion : {error}",
"toast_create_failed": "Échec de la création : {error}",
"toast_delete_failed": "Échec de la suppression : {error}",
"toast_error": "Erreur : {error}",
"toast_failed": "Échec : {error}",
"toast_force_stop_failed": "Échec de l'arrêt forcé : {error}",
"toast_name_required": "Nom requis",
"toast_no_automation": "Impossible de créer une automatisation ici",
"toast_profile_name_required": "Le nom du profil est requis",
"toast_program_set": "Programme défini : {program}",
"toast_resume_failed": "Échec de la reprise : {error}",
"toast_revert_failed": "Échec du rétablissement : {error}",
"toast_reverted": "{key} rétabli",
"toast_save_failed": "Échec de l'enregistrement : {error}",
"trend_duration_longer": "Durée tendance plus longue ({pct} %/cycle) – moyenne récente {avg}",
"trend_duration_shorter": "Tendance de durée plus courte ({pct} %/cycle) – moyenne récente {avg}",
"trend_energy_down": "Tendance à la baisse de l'énergie ({pct} %/cycle)",
"trend_energy_up": "Tendance énergétique à la hausse ({pct} %/cycle) – moyenne récente {avg}",
"trim_destructive_confirm": "Cela ne conserve que {pct} % du cycle et est irréversible. Continuer ?",
"trim_intro": "Faites glisser les poignées rouges ou entrez des valeurs. Tout ce qui se trouve à l'extérieur de la fenêtre est supprimé.",
"tuning_suggestions_available": "{count} suggestions de réglage disponibles à partir des cycles observés. Elles apparaissent à côté des champs concernés.",
"tuning_suggestions_available_one": "{count} suggestion de réglage disponible à partir des cycles observés. Elle apparaît à côté du champ concerné.",
"tuning_suggestions_available_many": "{count} suggestions de réglage disponibles à partir des cycles observés. Elles apparaissent à côté des champs concernés.",
"tuning_suggestions_available_other": "{count} suggestions de réglage disponibles à partir des cycles observés. Elles apparaissent à côté des champs concernés.",
"unsure_detected_prefix": "WashData n'est pas sûr d'avoir été détecté",
"warmup_badge": "Apprentissage en cours ({done}/{needed} cycles)",
"warmup_detail": "La correspondance fonctionne déjà. WashData vous demande de confirmer les {needed} premiers cycles de ce profil avant d'étiqueter de lui-même.",
"wipe_history_warning": "Supprimez définitivement tous les cycles et profils. Ne peut pas être annulé.",
"compare_overlay_tip": "Superposez les enveloppes des profils appris pour voir à quel programme ressemble chaque cycle.",
"diagnostics_load_failed": "Impossible de charger les diagnostics : {error}",
"manual_duration_ref_hint": "Utilisé uniquement sans cycle de référence ; un cycle de référence fixe la durée d'après sa propre longueur.",
"duration_learned_hint": "Calculée à partir des cycles de ce programme (valeurs aberrantes exclues) et mise à jour après chaque nouveau cycle. Pour la modifier, rognez ou supprimez les cycles qui s'écartent.",
"toast_convert_rolled_back": "La conversion a échoué et a été annulée (aucune automatisation laissée) : {error}",
"toast_convert_orphan": "L'automatisation a été créée, mais la suppression des anciennes actions a échoué. Ne réessayez pas : supprimez les anciennes actions manuellement pour éviter une automatisation en double.",
"advisory_duration_trend_up": "Les cycles de '{name}' s'allongent sans cesse (environ +{pct}% par cycle). Si l'appareil a changé, réenregistrez ou reconstruisez ce profil.",
"advisory_energy_trend_up": "'{name}' consomme plus d'énergie à chaque cycle (environ +{pct}% par cycle). Vérifiez l'appareil si c'est inattendu.",
"advisory_poor_health": "'{name}' correspond mal : ses cycles récents varient beaucoup ou correspondent faiblement. Vérifiez ses cycles ou réenregistrez-le pour garder une correspondance et des estimations précises.",
"advisory_shape_drift": "'{name}' s'est éloigné de sa courbe de puissance d'origine, peut-être à cause du calcaire ou de l'usure. Envisagez de le réenregistrer avec des cycles récents.",
"advisory_shape_drift_corr": "'{name}' s'est éloigné de sa courbe de puissance d'origine (corrélation {corr}), peut-être à cause du calcaire ou de l'usure. Envisagez de le réenregistrer avec des cycles récents.",
"advisory_unmatchable": "'{name}' ne pourra jamais correspondre : aucun cycle avec des données de puissance ne lui est associé. Étiquetez ou enregistrez un cycle de ce programme pour y remédier.",
"advisory_unmatchable_no_duration": "'{name}' ne pourra jamais correspondre : son cycle n'a pas de durée exploitable. Réenregistrez ce programme ou définissez sa durée attendue.",
"pg_no_alerts": "Aucun problème détecté lors de cette exécution.",
"pg_override_active": "Utilisation de vos paramètres modifiés vs actuels",
"pg_history_empty": "Appuyez sur Exécuter pour rejouer vos cycles.",
"pg_history_summary": "{detected}/{total} détectés · {correct} correctement reconnus",
"pg_sweep_no_metric": "Données insuffisantes pour évaluer cet objectif.",
"pg_sweep_intro2": "Trouvez le paramètre qui répond le mieux à un objectif sur vos cycles récents. Rien ne change tant que vous ne l'appliquez pas.",
"pg_row_load_hint": "Charger ce cycle dans le graphique ci-dessus",
"pg_history_intro2": "Rejouez les cycles récents dans le vrai détecteur et le vrai moteur de correspondance avec les réglages ci-dessus. Cliquez sur une ligne pour la charger dans le graphique ; modifiez un réglage pour comparer avant et après.",
"pg_simulating": "Simulation du cycle…",
"pg_apply_settings_confirm": "Enregistrer ces {n} réglage(s) sur cet appareil ? {list}",
"no_logs_match": "Aucun enregistrement de journal ne correspond à ces filtres.",
"pg_analysis_hint2": "Sélectionnez un cycle et cliquez sur Exécuter pour charger l'analyse de correspondance.",
"imported_readonly": "Importé depuis la boutique communautaire. Sert de référence et à la correspondance, n'est pas compté dans vos statistiques et ne peut pas être modifié.",
"merge_no_imports": "Les enregistrements importés ne peuvent pas être fusionnés dans un cycle réel. Désélectionnez-les pour fusionner.",
"store_enable_hint": "Activez les fonctionnalités en ligne dans Préférences > En ligne et communauté pour parcourir et importer les cycles de référence de la communauté.",
"store_share_intro": "Téléversez ce cycle de référence pour que d'autres personnes possédant le même appareil puissent l'utiliser. Il est examiné avant d'apparaître publiquement.",
"online_intro_global": "Parcourez et partagez des enregistrements de référence avec d'autres utilisateurs de WashData. Une connexion couvre tous vos appareils WashData ; la marque et le modèle se règlent par appareil sous Général. Les fonctions en ligne restent désactivées jusqu'à ce que vous les activiez.",
"online_unavailable": "Les fonctionnalités en ligne ne sont pas disponibles sur ce serveur.",
"store_picker_offline": "Activez les fonctionnalités en ligne dans l'icône des paramètres pour choisir dans le catalogue de la communauté.",
"pick_brand_first": "Choisissez d'abord une marque d'appareil.",
"adopt_settings_hint": "Remplacer les seuils de détection et de reconnaissance de cet appareil par ceux partagés. Vos notifications, entités et prix de l'énergie ne sont jamais modifiés.",
"include_settings_hint": "Partager les seuils de détection et de correspondance de cet appareil (pas les notifications, entités ni prix de l'énergie). Les autres choisissent de les appliquer ou non.",
"onboard_download": "Nouvel appareil ? Adoptez une configuration prête à l'emploi (programmes, cycles de référence et phases) d'un autre utilisateur WashData avec le même appareil.",
"share_device_none": "Aucun cycle partageable pour l'instant. Marquez d'abord un cycle enregistré ou sélectionné à la main comme cycle de référence (⭐) dans l'onglet Cycles.",
"share_guideline_naming": "Nommez chaque profil exactement comme indiqué sur le cadran ou l'afficheur de l'appareil (p. ex. 'Cotton 40', 'Eco 60').",
"share_guideline_quality": "Ne partagez que des cycles terminés normalement : sans interruption, ouverture de porte ni micro-coupure.",
"share_guideline_review": "Votre envoi commence en attente de validation et apparaît publiquement dès que suffisamment de membres de la communauté le confirment.",
"share_guidelines_title": "Avant de partager",
"store_download_device_intro": "Ajoute tous les programmes partagés et leurs cycles de référence à votre appareil. Vos propres cycles et statistiques ne sont pas touchés.",
"store_share_device_intro": "Envoyez {brand} {model} avec les cycles de référence que vous sélectionnez. D'autres utilisateurs du même appareil peuvent adopter vos programmes. Les entrées sont examinées avant d'apparaître publiquement.",
"share_profile_no_cycles": "Aucun cycle de référence -- marquez un cycle comme ⭐ dans l'onglet Cycles pour inclure ce profil",
"export_select_intro": "Cochez ce qu'il faut inclure. Des profils sans leurs cycles exportent tout de même un programme reconnaissable.",
"import_analyze_hint": "Chargez un fichier exporté (ou collez son JSON). WashData montre ce qui peut être importé avant tout changement.",
"analyzing": "Analyse en cours…",
"device_type_mismatch_warn": "Cet export provient d'un autre type d'appareil ({src} au lieu de {local}). Les programmes et cycles peuvent encore être importés comme données de référence, mais pas les réglages de l'appareil ni l'historique réel.",
"merge_hint": "Les éléments importés sont ajoutés ; rien de local n'est perdu. Les conflits de noms sont résolus ci-dessous.",
"replace_warn": "Chaque catégorie cochée est effacée et remplacée par le contenu du fichier. Les catégories non cochées restent intactes.",
"dest_reference_hint": "Les cycles importés améliorent uniquement la reconnaissance des programmes et n'affectent jamais les statistiques d'utilisation/d'énergie.",
"dest_real_history_hint": "Les cycles importés comptent comme l'historique et les statistiques propres de cet appareil. À utiliser pour déplacer un appareil vers une nouvelle installation.",
"sug_muted": "Ce paramètre ne sera plus suggéré",
"sug_mute_failed": "Impossible de masquer la suggestion",
"sug_unmuted_all": "Les suggestions masquées ont été réinitialisées",
"n_suggestions_muted": "{count} suggestions masquées ; le réglage automatique ne les proposera plus.",
"n_suggestions_muted_one": "{count} suggestion masquée ; le réglage automatique ne la proposera plus.",
"n_suggestions_muted_many": "{count} suggestions masquées ; le réglage automatique ne les proposera plus.",
"n_suggestions_muted_other": "{count} suggestions masquées ; le réglage automatique ne les proposera plus.",
"font_size_hint": "Agrandir ou réduire tout le contenu de ce panneau. S'applique à votre compte sur cet appareil.",
"import_history_description": "Vous aviez une prise connectée avant WashData ? Chargez son historique de puissance ou lisez-le depuis Home Assistant. La détection le parcourt et les cycles passés apparaissent dans votre liste Cycles, prêts à être nommés.",
"hist_input_hint": "Chargez un CSV du panneau Historique (entité, état, dernière modification), ou laissez WashData lire directement l'historique du capteur. La détection en direct le parcourt et vous choisissez les cycles à conserver.",
"hist_recorder_hint": "Lit de la date choisie jusqu'à maintenant. Home Assistant conserve l'historique détaillé 10 jours par défaut ; les moyennes horaires plus anciennes sont trop grossières pour détecter des cycles.",
"hist_scanning": "Votre historique passe dans le détecteur en arrière-plan. Vous pouvez fermer cette fenêtre et revenir plus tard.",
"hist_imported_count": "{n} cycles importés.",
"hist_duplicates": "{n} avaient déjà été importés et ont été ignorés.",
"hist_capped": "La limite de cycles importés par appareil a été atteinte ; le reste n'a pas été enregistré.",
"hist_next_step": "Ils sont dans votre liste Cycles, marqués comme historique importé. Ouvrez-en un et utilisez Étiqueter pour nommer son programme.",
"hist_rows_read": "{n} mesures lues",
"hist_breaks": "{n} coupures où le capteur était indisponible",
"hist_other_entity": "{n} mesures d'autres entités ignorées",
"hist_entity_substituted": "{used} lu (cet appareil est configuré pour {wanted})",
"hist_skipped_spans": "Plages ignorées",
"hist_settings_used": "Détecté avec les réglages actuels de cet appareil (puissance minimale {w} W, délai d'arrêt {s} s).",
"hist_none_found": "Aucun cycle n'a pu être détecté dans cet historique.",
"hist_found": "{n} cycles trouvés. Décochez tout ce qui ne ressemble pas à un cycle réel : rien n'est enregistré avant l'importation.",
"hist_scan_capped": "Seuls les premiers candidats sont affichés ({n} ont été trouvés).",
"hist_recorder_empty": "Home Assistant n'a pas d'historique détaillé pour ce capteur sur cette période.",
"hist_scan_failed": "L'analyse a échoué.",
"hist_scan_expired": "Cette analyse n'est plus disponible. Relancez l'analyse.",
"hist_import_failed": "L'importation a échoué.",
"imported_history_readonly": "Trouvé dans un historique de puissance importé. Il aide la correspondance, mais n'est pas compté dans vos statistiques et ne peut être ni rogné ni scindé. Étiquetez-le pour nommer le programme.",
"odometer_intro": "Ce total ne fait qu'augmenter. Supprimer un cycle ne le fait pas baisser, pour que les rappels d'entretien restent justes.",
"odometer_correct_hint": "Renseignez cette valeur si WashData a compté un cycle qui n'a jamais eu lieu, ou si l'appareil a effectué des cycles avant l'installation de WashData.",
"no_reminders_set": "Aucun rappel d'entretien n'est encore configuré.",
"toast_program_armed": "Programme prévu pour le prochain cycle : {program}",
"standby_above_stop_title": "Consomme encore {idle} W à la fin du cycle",
"standby_above_stop_sub": "{n} des {total} derniers cycles. Le Délai d'arrêt ne démarre qu'une fois la puissance descendue sous le Seuil d'arrêt ({stop} W) : les cycles se terminent donc en retard ou doivent être arrêtés à la main.",
"advisory_duration_outlier": "{n} cycle(s) étiquetés '{name}' s'écartent trop de sa durée habituelle pour pouvoir correspondre (pire cas : {ratio}x). Ils sont probablement mal étiquetés ou contiennent deux cycles. Réétiquetez-les ou scindez-les pour qu'ils cessent de fausser son estimation de durée.",
"toast_range_required": "Définissez une plage De/À valide",
"no_profiles_option": "(aucun profil, ajoutez-en un)",
"compare_cycles_title": "Comparer {count} cycles",
"edit_builtin_phase": "Ceci est une phase intégrée. L'enregistrement crée une copie personnalisée ; supprimez la copie pour restaurer l'original.",
"fetch_error": "Échec du chargement des données.",
"connection_lost": "Connexion perdue - affichage des données de {time}.",
"pg_notify_partial": "Les marqueurs ne montrent que les notifications de démarrage, de presque terminé, de fin, de jalons et d'heures silencieuses. Les mises à jour en direct, les rappels de déchargement et les alertes de dépassement ne sont pas simulés.",
"connect_to_confirm": "Connectez-vous dans l'icône des paramètres pour confirmer ou évaluer.",
"coverage_gap_cluster": "{count} cycles récents sans étiquette d'environ {min} min ressemblent à un programme que vous n'avez pas encore créé.",
"pg_label_yes": "Serait étiqueté « {name} » en fin de cycle",
"pg_label_no": "Demanderait une révision : {reason}",
"live_match_debug_tip": "Confiance : degré de correspondance entre la courbe de puissance actuelle et le profil candidat en tête (0-100 %). Ambigu : les scores des deux meilleurs candidats sont à moins de 5 % l'un de l'autre ; l'étiquette reste incertaine jusqu'à la fin du cycle.",
"automation_alias_started": "{device} : cycle démarré",
"automation_alias_finished": "{device} : cycle terminé",
"automation_desc_started": "S'exécute lorsqu'un cycle de {device} démarre. Ajoutez vos actions (notification, lumières, ...).",
"automation_desc_finished": "S'exécute lorsqu'un cycle de {device} se termine. Ajoutez vos actions (notification, lumières, ...).",
"feedback_detected": "WashData a détecté : {name}",
"import_undo_hint": "Un point de restauration d'avant la dernière importation ({when}) est conservé : {profiles} profil(s) et {cycles} cycle(s).",
"replace_undo_hint": "Un point de restauration est d'abord enregistré, vous pouvez donc annuler cette importation depuis Exporter/Importer.",
"pg_in_sample_note": "Ces cycles ont servi à construire les profils auxquels ils sont comparés, les résultats sont donc optimistes : attendez-vous à un peu moins de correspondances justes sur de nouveaux cycles.",
"hist_tail_trimmed": "{min} min d'attente après la fin du cycle ont été supprimées, comme le fait l'intégration en direct",
"invalid_threshold_pair": "Le Seuil d'arrêt ({stop} W) doit être inférieur au Seuil de démarrage ({start} W). Rien n'a été enregistré ; modifiez les deux ensemble.",
"hist_truncated": "arrêté à la limite de {n} mesures, le reste de l'historique n'a donc pas été analysé",
"hist_warn_kw": "La mesure la plus élevée n'est que de {w}. Ce capteur semble indiquer des kilowatts ; WashData a besoin de watts, donc aucun cycle ne peut être détecté.",
"hist_warn_naive_time": "{n} horodatages n'ont pas de fuseau horaire et ont été lus en UTC. Si le fichier est en heure locale, les cycles sont décalés de votre écart avec UTC et des mesures proches d'un changement d'heure peuvent être perdues.",
"hist_warn_naive_time_one": "{n} horodatage n'a pas de fuseau horaire et a été lu en UTC. Si le fichier est en heure locale, les cycles sont décalés de votre écart avec UTC et des mesures proches d'un changement d'heure peuvent être perdues.",
"hist_warn_naive_time_many": "{n} horodatages n'ont pas de fuseau horaire et ont été lus en UTC. Si le fichier est en heure locale, les cycles sont décalés de votre écart avec UTC et des mesures proches d'un changement d'heure peuvent être perdues.",
"hist_warn_naive_time_other": "{n} horodatages n'ont pas de fuseau horaire et ont été lus en UTC. Si le fichier est en heure locale, les cycles sont décalés de votre écart avec UTC et des mesures proches d'un changement d'heure peuvent être perdues.",
"pg_compare_profile_tip": "Choisit uniquement le profil tracé sur le graphique. La simulation recherche toujours elle-même la correspondance du cycle, comme le fait l'intégration en direct.",
"pg_outcome_stale": "Les réglages ont changé depuis l'exécution de cette simulation. Elle affiche encore l'ancien résultat.",
"pg_sweep_guarded": "Termine plus de cycles trop tôt, en divise davantage ou manque des cycles que le réglage actuel détecte : cette valeur n'est donc jamais recommandée.",
"pg_sweep_keep_current": "Conservez la valeur actuelle ({value}, {metric}) : aucune valeur n'a fait mieux d'au moins un cycle.",
"pg_sweep_n_cycles": "sur {count} cycles",
"pg_sweep_n_cycles_one": "sur {count} cycle",
"pg_sweep_n_cycles_many": "sur {count} cycles",
"pg_sweep_n_cycles_other": "sur {count} cycles",
"pg_task_busy": "Un test sur l'historique ou une optimisation est déjà en cours pour cet appareil. Attendez qu'il se termine ou annulez-le."
},
"pg_desc": {
"dishwasher_end_spike_quiet_release": "Lave-vaisselle : secondes de silence après la durée prévue avant de libérer l'attente de vidange de fin de cycle",
"smart_termination_duration_ratio": "Fraction de la durée moyenne du programme qu'un cycle doit atteindre avant que la Terminaison intelligente puisse l'arrêter plus tôt ; baissez-la si les durées varient",
"anti_crease_finalize_ratio": "Fraction de la durée moyenne du programme qu'un cycle doit atteindre avant que la traîne anti-froissement puisse le terminer ; baissez-la sur les sèche-linge, gardez la valeur par défaut sur les lave-linge",
"anti_wrinkle_enabled": "Absorber les impulsions de culbutage après la phase principale au lieu de les lire comme de nouveaux cycles",
"anti_wrinkle_exit_power": "Niveau considéré comme silence entre les impulsions de culbutage ; n'agit qu'au-dessus du Seuil d'arrêt",
"anti_wrinkle_idle_timeout": "Temps de silence autorisé entre deux impulsions de culbutage avant la fin de l'anti-froissement",
"anti_wrinkle_max_duration": "Une impulsion plus longue met fin à l'anti-froissement et ouvre un nouveau cycle",
"anti_wrinkle_max_power": "Une impulsion au-dessus de ce seuil met fin à l'anti-froissement et ouvre un nouveau cycle",
"completion_min_seconds": "Plus courte exécution comptant comme un vrai cycle",
"interrupted_min_seconds": "Cycles courts signalés comme interrompus",
"min_off_gap": "Écart requis pour séparer deux cycles",
"off_delay": "Secondes de faible puissance avant la fin du cycle",
"start_duration_threshold": "Secondes au-dessus du seuil pour confirmer le démarrage",
"start_threshold_w": "Watts minimum pour être compté comme démarré",
"stop_threshold_w": "En dessous, la machine est comptée comme éteinte",
"profile_match_min_duration_ratio": "Durée de cycle minimale en fraction de la durée du profil ; défaut 0,1 (10 %)",
"profile_match_max_duration_ratio": "Durée de cycle maximale en fraction de la durée du profil ; défaut 1,8 (180 %)",
"curve_preroll_seconds": "Secondes de relevés issus de tentatives de démarrage avortées reportées au début de la courbe d'un cycle ; 0 = désactivé"
},
"phase_desc": {
"anti_crease": "Courts culbutages occasionnels après completion pour réduire le froissement du linge.",
"anti_wrinkle": "Culbutage périodique post-cycle pour réduire le froissement du linge.",
"baking": "Résistance à haute température active pour former la croûte et la mie.",
"cooking": "Phase principale de cuisson, résistance et ventilateur actifs.",
"cool_down": "Culbutage sans chaleur vers la fin du cycle.",
"cool_down_af": "Refroidissement par ventilateur seul après la chauffe.",
"drain_and_switch": "Période de transition du mode lavage au mode séchage.",
"dry": "Étape de séchage par chauffage et/ou chaleur résiduelle.",
"drying": "Période principale de culbutage chauffé.",
"heat_up": "Préchauffage initial du radiateur avant le début du séchage complet.",
"keep_warm": "Maintien à basse température pour garder les aliments chauds.",
"keep_warm_bm": "Maintien à basse température pour garder le pain chaud après la cuisson.",
"kneading": "Le moteur mélange et pétrit la pâte. Forte consommation.",
"pause_af": "Courte pause pour secouer ou vérifier les aliments.",
"pre_heat": "Chauffe initiale de la chambre de cuisson avant la cuisson complète.",
"pre_rinse": "Pulvérisation initiale avant le lavage au détergent.",
"proving": "Levée à basse température pour que la levure fermente et que la pâte gonfle.",
"resting": "Courte pause à faible puissance entre deux pétrissages pour détendre le gluten.",
"pre_wash": "Trempage initial ou prétraitement avant le lavage principal.",
"rinse": "Étape de rinçage à l’eau propre. Cette phase peut se répéter plusieurs fois.",
"sanitize": "Étape de nettoyage à haute température pour les programmes de désinfection.",
"sensor_check": "Courte pause à faible puissance pendant que la sécheresse est mesurée.",
"soak": "Période de trempage de faible activité entre les étapes de lavage actives.",
"soak_dw": "Période de trempage prolongée pour les sols lourds.",
"spin": "Extraction à grande vitesse pour éliminer l'eau de la charge.",
"spin_wd": "Extraction à grande vitesse avant transition de séchage.",
"wash": "Cycle de lavage principal avec mouvement du tambour et chauffage en option.",
"wash_dw": "Lavage avec détergent principal avec chauffage."
},
"placeholder": {
"custom_task": "p. ex. nettoyer le joint de porte",
"add": "ajouter…",
"group_name": "ex. Coton 2:47",
"json_buttons": "[{\"action\":\"ID\",\"title\":\"Label\"}]",
"notify": "ajouter un service de notification…",
"notify_services_list": "notify.mobile_app_phone, ...",
"person": "ajouter une personne…",
"phase_name": "ex. Prélavage",
"profile_name": "ex. Coton 40°C",
"maintenance_notes": "p. ex. filtre remplacé, joint de porte nettoyé",
"store_brand": "p. ex. Bosch",
"store_model": "p. ex. WAT28401"
},
"pref": {
"date_absolute": "Absolu (par exemple, 14 h 32 le 2 juillet)",
"date_relative": "Parent (par exemple, il y a 2 heures)",
"lang_auto": "Langue système ({lang})",
"lang_en": "Anglais",
"use_panel_default": "(défaut du panneau)"
},
"quality": {
"bad": "Mauvais",
"good": "Bien",
"unusable": "Inutilisable"
},
"section": {
"dishwasher": {
"label": "Lave-vaisselle",
"intro": "Gestion de fin pour les lave-vaisselle, qui sèchent souvent longtemps en silence avant une courte vidange finale."
},
"anti_wrinkle": {
"intro": "Rattache au cycle terminé les impulsions de rotation à faible puissance d'un sèche-linge après la phase principale.",
"label": "Anti-froissement"
},
"basic": {
"intro": "Identité principale et l'essentiel dont la plupart des configurations ont besoin.",
"label": "Général"
},
"delay": {
"intro": "Détecte un appareil allumé qui attend un départ différé.",
"label": "Démarrage différé"
},
"detection": {
"intro": "Comment un cycle est détecté comme démarrant, en cours et se terminant.",
"label": "Détection"
},
"matching": {
"intro": "Comment les cycles terminés sont associés aux profils appris et étiquetés.",
"label": "Correspondance"
},
"ml_training": {
"intro": "Calendrier de réentraînement de l'apprentissage automatique sur l'appareil et paramètres de données.",
"label": "Formation ML"
},
"notifications": {
"intro": "Quand et comment vous êtes informé des événements de cycle.",
"label": "Notifications"
},
"timing": {
"intro": "Cadence en arrière-plan, le chien de garde hors ligne et l'entretien.",
"label": "Chronométrage et surveillance"
},
"triggers": {
"intro": "Options facultatives : déclencheur de fin, capteur de porte, interrupteur de pause et rappel de déchargement.",
"label": "Déclencheurs et portes"
}
},
"setting": {
"dishwasher_end_spike_quiet_release": {
"label": "Libération au silence du séchage passif",
"doc": "Après la durée attendue : temps pendant lequel le lave-vaisselle doit rester sous le Seuil d'arrêt avant que WashData cesse d'attendre la vidange finale. Augmentez-le si une vidange tardive après un long séchage est manquée. L'attente ne dépasse jamais 30 minutes."
},
"anti_crease_finalize_ratio": {
"label": "Ratio de finalisation anti-froissement",
"doc": "Fraction de la durée moyenne du programme qu'un cycle doit atteindre avant que sa rotation à faible puissance compte comme traîne anti-froissement. Baissez-la (p. ex. 0,75) sur les sèche-linge à détection de charge. Gardez la valeur par défaut (0,98) sur les lave-linge, sinon un lavage peut s'arrêter à mi-parcours."
},
"anti_wrinkle_enabled": {
"doc": "Rattacher au cycle terminé les courtes impulsions de rotation à faible puissance d'un sèche-linge après la phase de chauffe principale, au lieu de les lire comme de nouveaux cycles.",
"label": "Activer la détection anti-froissement"
},
"anti_wrinkle_exit_power": {
"doc": "En mode anti-froissement, une puissance sous cette valeur compte comme du silence entre les impulsions de culbutage, et un silence plus long que l'Intervalle maximal entre impulsions termine le mode. Le Seuil d'arrêt est utilisé s'il est plus élevé : ce réglage n'a donc d'effet qu'au-dessus du Seuil d'arrêt.",
"label": "Seuil de puissance de sortie"
},
"anti_wrinkle_idle_timeout": {
"doc": "Durée pendant laquelle le sèche-linge peut rester silencieux entre deux impulsions avant la fin du mode anti-froissement. Réglez-la au-dessus de la plus longue pause de votre sèche-linge, sinon les impulsions suivantes sont lues comme de faux démarrages.",
"label": "Intervalle maximal entre impulsions"
},
"anti_wrinkle_max_duration": {
"doc": "Une impulsion plus longue compte comme un vrai cycle, pas comme une rotation anti-froissement.",
"label": "Durée maximale"
},
"anti_wrinkle_max_power": {
"doc": "Une impulsion au-dessus de cette puissance compte comme un vrai nouveau cycle, pas comme une rotation. Réglez-la juste au-dessus de la puissance de vos impulsions.",
"label": "Puissance maximale anti-froissement"
},
"auto_label_confidence": {
"doc": "Score de correspondance en fin de cycle à partir duquel le programme est étiqueté sans demander. Augmentez-le pour plus de certitude ; baissez-le pour étiqueter plus de cycles automatiquement. Gardez-le au-dessus de la Confiance d'apprentissage.",
"label": "Confiance d'étiquetage automatique"
},
"auto_maintenance": {
"doc": "Nettoyage nocturne : étiquette les anciens cycles qui correspondent désormais clairement à un programme, reconstruit les courbes des programmes, actualise les marques d'anomalie et la santé des cycles, et supprime les traces de débogage si Enregistrer les traces de débogage est désactivé. Les cycles et leurs traces de puissance sont toujours conservés.",
"label": "Maintenance automatique (nettoyage nocturne)"
},
"completion_min_seconds": {
"doc": "Les cycles plus courts que cette durée (essais, porte ouverte pour ajouter une chaussette) sont enregistrés comme Interrompu et ne reçoivent pas de notification de fin.",
"label": "Durée minimale du cycle"
},
"curve_preroll_seconds": {
"label": "Amorce de courbe",
"doc": "Ajoute au début d'un cycle les mesures des tentatives de démarrage échouées, pour les machines qui tâtonnent avant de démarrer (verrouillage de porte, premier remplissage). 300 s suffisent le plus souvent ; 0 = désactivé. Les débuts enregistrés avancent, donc les durées apprises dérivent un moment."
},
"delay_confirm_seconds": {
"doc": "La puissance doit rester dans la bande de veille aussi longtemps avant que l'appareil soit considéré comme en attente de démarrage.",
"label": "Secondes de confirmation"
},
"delay_start_detect_enabled": {
"doc": "Détecter un appareil allumé qui attend un départ différé, pour que sa consommation en veille ne soit pas prise pour un cycle en cours.",
"label": "Activer la détection de démarrage différé"
},
"delay_timeout_hours": {
"doc": "Cesser d'attendre un départ différé après ce nombre d'heures et revenir à l'inactivité.",
"label": "Heures de délai d'expiration"
},
"device_type": {
"doc": "Définit les valeurs de détection par défaut (seuils, délai d'arrêt, gestion de fin) pour ce type d'appareil. Ne le changez que si l'appareil a été configuré avec un mauvais type.",
"label": "Type d'appareil"
},
"door_sensor_entity": {
"doc": "Capteur de porte facultatif. Indique quand l'appareil a été ouvert pour être déchargé après un cycle.",
"label": "Entité capteur de porte"
},
"duration_tolerance": {
"doc": "Retour d'apprentissage uniquement : un cycle à +/-X % de sa durée estimée compte comme une bonne estimation. N'affecte pas la correspondance.",
"label": "Tolérance d'estimation"
},
"enable_ml_models": {
"doc": "Utiliser un modèle entraîné sur cette machine pour prévoir l'énergie et le coût d'un cycle en cours, et laisser un programme bien connu qui s'arrête anormalement tôt se terminer sans tout le délai d'arrêt. Désactivé : logique basée sur la puissance uniquement.",
"label": "Appliquer les modèles intelligents pendant un cycle"
},
"end_energy_threshold": {
"doc": "Énergie autorisée pendant le délai d'arrêt. Au-delà, le cycle continue, pour que les rotations et les traînes de séchage en fassent toujours partie. Baissez-la si des cycles se terminent pendant une traîne ; augmentez-la si des cycles terminés continuent d'attendre.",
"label": "Énergie de fin"
},
"energy_price_entity": {
"doc": "Capteur indiquant le prix actuel par kWh (p. ex. un tarif dynamique). Il prévaut sur le prix fixe ci-dessous, il doit donc s'agir d'un prix, pas du capteur de puissance ou d'énergie de la prise.",
"label": "Entité de prix de l'énergie"
},
"energy_price_static": {
"doc": "Prix fixe par kWh, utilisé quand aucune entité de prix n'est définie.",
"label": "Prix de l'énergie statique (par kWh)"
},
"energy_sensor": {
"doc": "Compteur facultatif en kWh ou Wh (total_increasing, p. ex. le compteur intégré de la prise). L'énergie du cycle y est alors lue, ce qui est plus précis qu'un calcul à partir d'un capteur de puissance lent. Si son relevé est inexploitable, la valeur calculée est utilisée.",
"label": "Entité du compteur d'énergie"
},
"expose_debug_entities": {
"doc": "Ajouter des entités de diagnostic (confiance de correspondance, ambiguïté, état interne). Désactivé garde la liste des entités épurée.",
"label": "Exposer les entités de débogage"
},
"external_end_trigger": {
"doc": "Capteur binaire dont le changement marque la fin du cycle (p. ex. un contact « terminé » ou une autre intégration).",
"label": "Entité de déclencheur externe"
},
"external_end_trigger_enabled": {
"doc": "Laisser un capteur binaire signaler la fin d'un cycle, en plus de la détection basée sur la puissance.",
"label": "Activer le déclencheur de fin externe"
},
"external_end_trigger_inverted": {
"doc": "Considérer le passage du capteur à OFF (et non à ON) comme signal de fin.",
"label": "Inverser le déclencheur externe (déclencher sur ARRÊT)"
},
"learning_confidence": {
"doc": "Score de correspondance minimal pour étiqueter un cycle terminé. Un gagnant net est étiqueté ; un cas serré va dans la file de vérification de Cycles. En dessous, rien n'est étiqueté ni demandé. Gardez-le sous la Confiance d'étiquetage automatique.",
"label": "Confiance d'apprentissage"
},
"linked_device": {
"doc": "Facultatif. Afficher cet appareil WashData sous un autre appareil (p. ex. la prise connectée) dans Home Assistant, comme « Connecté via ... ».",
"label": "Regrouper sous un appareil"
},
"min_off_gap": {
"doc": "Une période d'arrêt plus courte ne coupe pas un cycle, pour que les pauses de trempage restent dans un même lavage. Gardez-la plus courte que la pause entre deux lavages enchaînés, sinon ils fusionnent en un seul cycle.",
"label": "Intervalle d'arrêt minimal"
},
"min_power": {
"doc": "Les mesures en dessous comptent comme 0 W (veille). Filtre la consommation au repos des prises connectées et des voyants de veille.",
"label": "Puissance minimale"
},
"ml_training_enabled": {
"doc": "Réentraîner de temps en temps le modèle d'énergie sur les cycles terminés de cette machine. Un nouveau modèle n'est gardé que s'il bat l'estimation simple sur des cycles de test.",
"label": "Apprendre de cette machine"
},
"ml_training_hour": {
"doc": "Heure de la journée (0-23) pour l'entraînement nocturne. Choisissez une heure calme, p. ex. 2.",
"label": "Apprendre à l'heure"
},
"ml_training_interval_days": {
"doc": "Nombre minimal de jours entre deux réentraînements.",
"label": "Vérifier au plus tous les"
},
"ml_training_min_cycles": {
"doc": "Attendre au moins ce nombre de cycles enregistrés avant l'entraînement.",
"label": "Cycles nécessaires d'abord"
},
"name": {
"doc": "Nom affiché dans Home Assistant pour cet appareil.",
"label": "Nom de l'appareil"
},
"no_update_active_timeout": {
"doc": "Si aucune mise à jour de puissance n'arrive pendant ce délai au cours d'un cycle, la prise est supposée hors ligne et le cycle est arrêté de force. La valeur par défaut de 600 s laisse de la marge aux délais du cloud ou du maillage.",
"label": "Délai d'expiration sans mise à jour"
},
"notify_before_end_minutes": {
"doc": "Envoyez une alerte Presque terminé lorsque le temps restant estimé tombe en dessous de cette valeur. 0 le désactive.",
"label": "Alerte de pré-fin"
},
"notify_channel": {
"doc": "Canal Android pour les messages de démarrage et en direct ; le canal définit le son et la priorité. Vide : valeur par défaut de l'application.",
"label": "Canal Android (démarrage/direct)"
},
"notify_cycle_timers": {
"doc": "Notifications à des minutes précises d'un cycle (p. ex. pour ajouter de l'adoucissant). Le message prend en charge {device}, {program}, {minutes}. Avec Pause automatique, le cycle se met aussi en pause à ce moment et la notification reçoit un bouton Reprendre.",
"label": "Minuteries de cycle"
},
"notify_finish_channel": {
"doc": "Canal Android pour le message de fin. Vide : réutilise le canal de démarrage/en direct.",
"label": "Canal Android (fin)"
},
"notify_finish_message": {
"doc": "Corps envoyé à la fin d'un cycle. Variables : {device}, {program}, {duration} (minutes), {duration_hm} (1 h 05 min), {energy_kwh}, {cost}, {time_finished}, {vs_typical}, {cycle_count}, {status} (completed ou force_stopped ; les cycles interrompus n'envoient rien). Avec toute autre variable, le texte par défaut est utilisé.",
"label": "Message de fin"
},
"notify_finish_services": {
"doc": "Services notify.* à appeler à la fin d'un cycle. Laissez vide pour aucun.",
"label": "Services de fin"
},
"notify_fire_events": {
"doc": "Émettre aussi des événements ha_washdata_* au début et à la fin du cycle, pour vos propres automatisations.",
"label": "Déclencher des événements HA pour les notifications"
},
"notify_icon": {
"doc": "Petite icône de la notification (p. ex. mdi:washing-machine). Envoyée uniquement aux cibles mobile_app, pas aux groupes notify. Sur iOS, elle remplace l'icône de l'application et nécessite l'application compagnon 2026.8 ou plus récente. Vide : valeur par défaut de la plateforme.",
"label": "Icône de notification"
},
"notify_live_chronometer": {
"doc": "Afficher un compte à rebours en direct dans la notification (si pris en charge) au lieu d'une estimation fixe.",
"label": "Utiliser le chronomètre en direct"
},
"notify_live_interval_seconds": {
"doc": "La fréquence à laquelle les notifications de progression en direct sont actualisées pendant l'exécution d'un cycle.",
"label": "Intervalle de mise à jour en direct"
},
"notify_live_overrun_percent": {
"doc": "Les mises à jour en direct s'arrêtent dès qu'un cycle dépasse sa durée prévue de ce pourcentage (20 = jusqu'à 1,2x le temps prévu).",
"label": "% de dépassement en direct avant alerte"
},
"notify_live_services": {
"doc": "Services notify.* pour les mises à jour de progression en direct pendant un cycle. Laissez vide pour les désactiver.",
"label": "Services de progression en direct"
},
"notify_only_when_home": {
"doc": "Notifier uniquement quand au moins une des personnes ci-dessus est à la maison.",
"label": "Notifier uniquement à la maison"
},
"notify_people": {
"doc": "Entités person.* que « Notifier uniquement à la maison » vérifie.",
"label": "Personnes (pour Notifier uniquement à la maison)"
},
"notify_pre_complete_message": {
"doc": "Texte de chaque mise à jour de progression en direct. Variables du modèle : {device}, {program}, {minutes} (minutes restantes). Avec toute autre variable, le texte par défaut est utilisé.",
"label": "Message de pré-achèvement"
},
"notify_reminder_message": {
"doc": "Texte de l'Alerte de pré-fin, envoyée une seule fois. Variables du modèle : {device}, {program}, {minutes} (le réglage Alerte de pré-fin). Avec toute autre variable, le texte par défaut est utilisé.",
"label": "Message de rappel"
},
"notify_start_message": {
"doc": "Corps envoyé au démarrage d'un cycle. Variables du modèle : {device}, {program}. Avec toute autre variable, le texte par défaut est utilisé.",
"label": "Message de démarrage"
},
"notify_start_services": {
"doc": "Services notify.* à appeler au démarrage d'un cycle (téléphone, tableau de bord, ...). Laissez vide pour aucun.",
"label": "Services de démarrage"
},
"notify_timeout_seconds": {
"doc": "Fermer la notification après ce nombre de secondes (si pris en charge). 0 la garde jusqu'à ce que vous la fermiez.",
"label": "Masquer automatiquement après"
},
"notify_title": {
"doc": "Titre de la notification. Seule {device} est remplacée ; avec toute autre variable, le titre par défaut est utilisé.",
"label": "Titre de notification"
},
"notify_unload_delay_minutes": {
"doc": "Minutes après la fin d'un cycle avant le rappel « décharger la machine ». 0 le désactive.",
"label": "Délai de rappel de déchargement"
},
"notify_unload_repeat": {
"doc": "Renvoyer le rappel de déchargement toutes les « Délai de rappel de déchargement » minutes jusqu'à ce que le déchargement soit confirmé ou que vous appuyiez sur « Arrêter les rappels » (application mobile). Nécessite une Entité capteur de porte, une Entité de confirmation de déchargement ou « Confirmer le déchargement manuellement ».",
"label": "Répéter jusqu'au déchargement"
},
"off_delay": {
"doc": "Durée pendant laquelle la puissance doit rester basse avant que le cycle soit terminé. Si la puissance revient dans ce délai, le cycle continue. Les lave-vaisselle peuvent rester au repos 20 à 60 min pendant le séchage, réglez-le donc plus long que cela.",
"label": "Délai d'arrêt"
},
"pause_cuts_power": {
"doc": "Quand un cycle est mis en pause, éteindre aussi l'Entité interrupteur ci-dessous. Uniquement pour les appareils pouvant perdre l'alimentation en cours de cycle sans risque.",
"label": "La pause coupe aussi l'alimentation (via un interrupteur)"
},
"power_off_delay": {
"doc": "Durée pendant laquelle la puissance doit rester sous le Seuil de mise hors tension après un cycle avant que l'état repasse à Arrêt. Utilisé uniquement quand ce seuil est supérieur à 0. Vérifié périodiquement, l'attente réelle peut donc être un peu plus longue.",
"label": "Délai de mise hors tension"
},
"power_off_threshold_w": {
"doc": "Après un cycle, une puissance sous cette valeur pendant le Délai de mise hors tension fait passer l'état à Arrêt, au lieu du Délai de réinitialisation de progression. Réglez-la au-dessus de la consommation éteinte, sous la veille et le Seuil d'arrêt. 0 la désactive (par défaut).",
"label": "Seuil de mise hors tension"
},
"power_sensor": {
"doc": "Le capteur qui indique la puissance actuelle de cet appareil en watts (p. ex. sensor.washer_power). Toute la détection repose sur lui.",
"label": "Capteur de puissance"
},
"profile_match_interval": {
"doc": "Fréquence à laquelle un cycle en cours est comparé aux profils. 300 s (5 min) par défaut.",
"label": "Intervalle de correspondance"
},
"profile_match_max_duration_ratio": {
"doc": "Un programme est écarté dès que le cycle dépasse ce multiple de sa durée habituelle. 1,8 : un cycle 80 % plus long que le programme ne lui correspond plus.",
"label": "Ratio de durée maximale"
},
"profile_match_min_duration_ratio": {
"doc": "Un programme n'est envisagé qu'une fois que le cycle a atteint cette fraction de sa durée habituelle. 0,10 : un programme de 2 heures devient candidat après 12 minutes. Non appliqué pendant les 15 premières minutes d'un cycle.",
"label": "Ratio de durée minimale"
},
"profile_match_threshold": {
"doc": "Score de correspondance en direct dont un cycle a besoin avant que la Terminaison intelligente ou la fin anti-froissement puisse l'arrêter plus tôt. Ne change pas le programme affiché. Augmentez-le si des correspondances faibles arrêtent des cycles trop tôt ; baissez-le si des correspondances nettes attendent tout le délai d'arrêt.",
"label": "Seuil de correspondance"
},
"profile_unmatch_threshold": {
"doc": "Si le score de correspondance en direct passe sous cette valeur, l'hypothèse de programme actuelle est effacée. Gardez-le un peu sous le Seuil de correspondance pour qu'une brève baisse ne la réinitialise pas.",
"label": "Seuil de non-correspondance"
},
"progress_reset_delay": {
"doc": "Après un cycle, garder la progression à 100 % pendant ce délai avant de revenir à Inactif.",
"label": "Délai de réinitialisation de progression"
},
"pump_stuck_duration": {
"doc": "Durée pendant laquelle une pompe peut tourner sans arrêt avant le déclenchement de l'événement de pompe bloquée.",
"label": "Durée de blocage de la pompe"
},
"sampling_interval": {
"doc": "Temps minimal entre deux mesures traitées. Les mesures arrivées plus tôt sont ignorées (les mesures basses pendant un cycle sont toujours conservées). Réglez-le sur l'intervalle de remontée de votre prise ou moins ; une valeur plus élevée ne fait que jeter des mesures.",
"label": "Intervalle d'échantillonnage"
},
"save_debug_traces": {
"doc": "Enregistrer aussi avec chaque cycle les données de débogage du moteur de correspondance (les scores de chaque candidat), pour le dépannage. Ajoute environ 20 Ko par cycle.",
"label": "Enregistrer les traces de débogage"
},
"smart_termination_duration_ratio": {
"doc": "Fraction de la durée moyenne du programme qu'un cycle doit atteindre avant que la Terminaison intelligente puisse l'arrêter plus tôt. Si les durées varient (température de l'eau, séchage par sonde, taille de la charge), baissez-la (p. ex. 0,85). Laissez vide pour 0,98 (0,99 sur les lave-vaisselle).",
"label": "Ratio de terminaison intelligente"
},
"start_duration_threshold": {
"doc": "La puissance doit rester au-dessus du Seuil de démarrage aussi longtemps avant qu'un cycle démarre, pour ignorer les brefs à-coups marche/arrêt.",
"label": "Durée de démarrage"
},
"start_energy_threshold": {
"doc": "Énergie que l'appareil doit consommer avant que le cycle soit considéré en marche. Un bref pic de puissance consomme peu d'énergie, il ne démarre donc pas de cycle.",
"label": "Énergie de démarrage"
},
"start_threshold_w": {
"doc": "La puissance doit dépasser cette valeur pour démarrer un cycle. Trop bas : la veille provoque de faux démarrages. Trop haut : les programmes à démarrage lent (remplissage à froid) sont manqués.",
"label": "Seuil de démarrage"
},
"stop_threshold_w": {
"doc": "La puissance doit passer sous cette valeur avant que le délai d'arrêt commence à compter. Gardez-le sous le Seuil de démarrage. Trop haut, et les phases à faible puissance (pauses de rinçage, anti-froissement) lancent par erreur le compte à rebours de fin.",
"label": "Seuil d'arrêt"
},
"switch_entity": {
"doc": "Interrupteur facultatif éteint à la pause et rallumé à la reprise, avec « La pause coupe aussi l'alimentation ».",
"label": "Entité interrupteur"
},
"watchdog_interval": {
"doc": "Fréquence à laquelle la vérification en arrière-plan cherche les capteurs figés et les délais expirés. 30 s par défaut.",
"label": "Intervalle du chien de garde"
},
"notify_milestone_message": {
"doc": "Message pour la notification de jalon. Variables du modèle : {device}, {cycle_count}.",
"label": "Message de jalon"
},
"notify_milestones": {
"doc": "Nombres de cycles déclenchant une notification de célébration unique, séparés par des virgules (p. ex. 50, 100, 500, 1000). Vide les désactive.",
"label": "Jalons de cycles"
},
"notify_quiet_end_hour": {
"doc": "Fin de la plage Ne pas déranger (0-23) ; les notifications retenues sont alors envoyées. Vide la désactive.",
"label": "Fin des heures silencieuses"
},
"notify_quiet_start_hour": {
"doc": "Début d'une plage Ne pas déranger (0-23). Les notifications de fin, de rappel et de linge propre dans cette plage sont retenues jusqu'à sa fin. Peut passer minuit (p. ex. de 22 à 7). Vide la désactive.",
"label": "Début des heures silencieuses"
},
"peak_rate_message": {
"doc": "Texte personnalisé pour l'astuce heure pleine. Variables de modèle : {device}, {price}. Vide utilise le texte par défaut.",
"label": "Message de tarif de pointe"
},
"peak_rate_threshold": {
"doc": "Si le prix par kWh est égal ou supérieur à cette valeur au démarrage d'un cycle, une astuce heure pleine est ajoutée à la notification de démarrage. 0 ou vide la désactive.",
"label": "Seuil de tarif de pointe (par kWh)"
},
"store_brand": {
"label": "Marque de l'appareil",
"doc": "Facultatif. La marque de votre appareil dans le catalogue communautaire, pour trouver et partager des enregistrements de référence. Laissez vide si vous n'utilisez pas les fonctions en ligne."
},
"store_model": {
"label": "Modèle de l'appareil",
"doc": "Facultatif. Le modèle de votre appareil dans le catalogue communautaire (choisissez d'abord une marque). S'il n'est pas listé, vous pouvez l'ajouter."
},
"show_contributor": {
"doc": "Afficher l'attribution « par <contributeur> » sur les appareils de la communauté et les cycles de référence."
},
"power_profile_interval_min": {
"label": "Intervalle du profil de puissance",
"doc": "Taille des tranches de l'attribut power_profile (watts moyens par tranche) utilisé par des planificateurs comme EMHASS et tibber_prices. Plus petit conserve les pics courts ; plus grand lisse la courbe. 15 min par défaut. N'affecte pas la détection."
},
"notify_live_silent": {
"label": "Mises à jour en direct silencieuses",
"doc": "iOS uniquement. Mettre à jour la progression en direct en silence, avec une priorité économe en batterie que iOS peut regrouper. La première mise à jour et les notifications de début et de fin alertent toujours. Désactivé : chaque mise à jour alerte."
},
"notify_live_sticky": {
"label": "Conserver la notification en direct au toucher",
"doc": "Android uniquement. Garder la notification de progression en direct quand on appuie dessus. Désactivé : un appui la ferme."
},
"notify_live_click_action": {
"label": "Destination au toucher de la notification",
"doc": "Ce qu'ouvre un appui sur la notification de cet appareil. Vide : le panneau WashData sur cet appareil. Saisissez un chemin de tableau de bord (p. ex. /lovelace/laundry) ou une URL, ou « none » pour aucune action."
},
"door_opens_at_end": {
"label": "La porte s'ouvre automatiquement en fin de cycle",
"doc": "Pour les lave-vaisselle qui ouvrent la porte en fin de cycle pour sécher (p. ex. AirDry). Une porte restée ouverte pendant le délai ci-dessous termine le cycle au lieu de le mettre en pause ; une brève ouverture est ignorée. Nécessite une Entité capteur de porte."
},
"door_end_dwell_seconds": {
"label": "Durée d'attente porte ouverte",
"doc": "Avec « La porte s'ouvre automatiquement en fin de cycle » activé : durée pendant laquelle la porte doit rester ouverte avant la fin du cycle. Assez longue pour ignorer l'ajout d'une assiette (60 s par défaut)."
},
"profile_evidence_sources": {
"label": "Cycles qui façonnent un programme",
"doc": "Quels types de cycles façonnent la courbe et la correspondance de chaque programme. Décocher un type ne supprime rien ; utile si vous ne faites pas confiance aux données importées. Les statistiques ne comptent toujours que les cycles de cette machine. Tout décocher est ignoré."
},
"energy_price_dynamic": {
"label": "Coût pondéré dans le temps",
"doc": "Facturer chaque cycle au prix de chaque instant de son fonctionnement, au lieu du prix à la fin. Nécessite une entité de prix. Traiter l'historique (Diagnostic) recalcule les anciens cycles."
},
"unload_confirm_entity": {
"label": "Entité de confirmation de déchargement",
"doc": "Facultatif. Toute entité qui confirme que la charge a été sortie, pour les machines sans capteur de porte (un bouton, input_button, détecteur de mouvement, scène). Chaque changement d'état compte, sauf le passage à éteint ou indisponible. Active aussi le rappel de déchargement."
},
"unload_track_without_door": {
"label": "Confirmer le déchargement manuellement",
"doc": "Utiliser le rappel de déchargement sans capteur de porte ni entité de confirmation. Confirmez le déchargement depuis votre propre automatisation avec le bouton « Marquer comme déchargé » ou le service ha_washdata.mark_unloaded. Ignoré si une Entité capteur de porte est définie."
},
"notify_icon_color": {
"label": "Couleur de notification",
"doc": "Couleur d'accent des notifications de cet appareil, pour distinguer facilement lave-linge, sèche-linge et lave-vaisselle. Sur iOS, elle remplit le cercle derrière l'icône et colore la barre de la Live Activity. Beaucoup de téléphones Android (surtout Samsung) l'ignorent. Utilisez un code hex, p. ex. #03A9F4. Vide : valeur par défaut de la plateforme."
},
"share_name": {
"doc": "Afficher le nom de votre compte comme auteur des cycles que vous partagez. Désactivé : partagés sans nom."
}
},
"setting_group": {
"auto_labeling": {
"label": "Étiquetage automatique"
},
"cycle_end": {
"label": "Fin de cycle"
},
"cycle_start": {
"label": "Début de cycle"
},
"cycle_timers": {
"label": "Minuteries de cycle"
},
"data_management": {
"label": "Gestion des données"
},
"debug": {
"label": "Débogage"
},
"dishwasher_end": {
"label": "Fin du lave-vaisselle"
},
"door_pause": {
"label": "Porte et pause"
},
"duration_gates": {
"label": "Portes de durée"
},
"energy": {
"label": "Énergie"
},
"external_end_trigger": {
"label": "Déclencheur de fin externe"
},
"housekeeping": {
"label": "Entretien"
},
"match_scoring": {
"label": "Score de correspondance"
},
"messages": {
"label": "Messages"
},
"power_off": {
"label": "Mise hors tension"
},
"predictive_end": {
"label": "Fin prédictive"
},
"schedule": {
"label": "Calendrier"
},
"services": {
"label": "Services"
},
"signal_processing": {
"label": "Traitement du signal"
},
"thresholds_gap": {
"label": "Seuils et intervalle"
},
"timing": {
"label": "Chronométrage"
},
"unload_reminder": {
"label": "Rappel de déchargement"
},
"watchdog": {
"label": "Chien de garde"
},
"quiet_hours_milestones": {
"label": "Heures silencieuses et jalons"
},
"device_info": {
"label": "Informations sur l'appareil"
},
"basic_configuration": {
"label": "Configuration de base"
},
"profile_evidence": {
"label": "Base des profils"
}
},
"status": {
"active": "Actif",
"all_statuses": "Tous les statuts",
"ambiguous": "Ambiguë",
"auto_detect": "Détection automatique",
"clear": "Sans ambiguïté",
"completed": "Complété",
"fine_tuning": "peaufiner maintenant…",
"force_stopped": "Forcer arrêté",
"idle": "Inactif",
"interrupted": "Interrompu",
"ready": "Prêt à traiter",
"recording": "Enregistrement",
"training": "Entraînement…",
"saving": "Enregistrement…",
"rebuilding": "Reconstruction…",
"analyzing": "Analyse…",
"resetting": "Réinitialisation…",
"trimming": "Rognage…",
"splitting": "Fractionnement…",
"stalled": "Bloqué",
"deleting": "Suppression…",
"imported": "Importé",
"preparing": "Préparation…",
"unlabelling": "Retrait de l'étiquette…",
"working": "Traitement…",
"match_uncertain": "Incertain : {top} ou {runner}",
"match_uncertain_single": "Incertain : peut-être {top}",
"match_sure": "~{pct} % de certitude",
"match_uncertain_tip": "WashData n'a pas encore arrêté son choix de programme. Le chiffre indique à quelle fréquence l'hypothèse en tête, {top}, était juste dans les cycles passés quand elle menait d'autant. À titre indicatif uniquement."
},
"tab": {
"advanced": "Avancé",
"diagnostics": "Diagnostic",
"history": "Cycles",
"ml": "Formation ML",
"pp_cleanup": "Nettoyage",
"pp_manage": "Gérer",
"pp_overview": "Aperçu",
"pp_phases": "Phases",
"profiles": "Profils",
"settings": "Paramètres",
"status": "Aperçu",
"subtab_phase_catalog": "Catalogue de phases",
"subtab_profiles": "Profils",
"maintenance": "Maintenance",
"playground": "Bac à sable",
"store": "Boutique"
},
"tag": {
"early_end": "Fin anticipée",
"late_start": "Départ tardif",
"merged": "Cycles fusionnés",
"noise": "Bruit",
"sensor_gap": "Écart du capteur",
"split": "Cycle fractionné",
"wrong_profile": "Mauvais profil"
},
"toast": {
"task_name_required": "Donnez un nom à la tâche",
"task_added": "Tâche ajoutée",
"task_save_failed": "Impossible d'enregistrer la tâche : {error}",
"task_removed": "Tâche retirée",
"maint_logged": "Marqué comme fait : {task}",
"catalog_refreshed": "Catalogue de la communauté rafraîchi",
"access_saved": "Contrôle d'accès enregistré",
"all_wiped": "Toutes les données effacées",
"analysis_complete_none": "Analyse terminée : aucune nouvelle suggestion",
"auto_label_complete": "Étiquetage automatique terminé",
"automation_deleted": "Automatisation supprimée",
"correction_submitted": "Correction soumise",
"cycle_force_stopped": "Cycle forcé arrêté",
"cycle_labelled": "Cycle labellisé",
"cycle_paused": "Cycle en pause",
"cycle_resumed": "Cycle repris",
"cycle_trimmed": "Cycle rogné",
"cycles_merged": "Cycles fusionnés",
"envelope_rebuilt": "Enveloppe reconstruite",
"envelopes_rebuilt": "Enveloppes reconstruites",
"export_downloaded": "Exporter téléchargé",
"feedback_all_dismissed": "Tous les commentaires rejetés",
"feedback_confirmed": "Commentaires confirmés",
"feedback_dismissed": "Commentaires rejetés",
"group_deleted": "Groupe supprimé",
"group_name_required": "Le nom du groupe est obligatoire",
"group_saved": "Groupe enregistré",
"json_required": "Les données JSON sont requises",
"legacy_removed": "Actions héritées supprimées",
"logs_exported": "Journaux exportés",
"min_2_profiles": "Sélectionnez au moins 2 profils pour un groupe",
"ml_training_no_improvement": "Formation terminée : base de référence conservée (pas d'amélioration)",
"models_reverted": "Les modèles sur l'appareil sont revenus à la référence",
"name_required": "Nom requis",
"no_split_found": "Aucun espace vide trouvé sur lequel se diviser",
"panel_settings_saved": "Paramètres du panneau enregistrés",
"pg_preset_loaded": "Préréglage « {name} » chargé",
"pg_preset_saved": "Préréglage « {name} » enregistré",
"pg_sugg_loaded": "{n} valeur(s) suggérée(s) chargée(s) - lancez le Bac à sable pour comparer",
"phase_name_required": "Le nom de la phase est obligatoire",
"phase_reset": "Phase « {name} » restaurée dans sa version intégrée",
"phase_updated": "Phase mise à jour",
"phases_saved": "Phases enregistrées",
"preferences_saved": "Préférences enregistrées",
"processed": "Traité {bits}",
"processed_cycles": "{n} cycles",
"processed_models": "{n} modèles promus",
"processed_suggestions": "{n} suggestions",
"profile_name_required": "Le nom du profil est requis",
"profile_renamed": "Profil renommé",
"recording_discarded": "Enregistrement supprimé",
"recording_saved": "Enregistrement enregistré dans le profil",
"recording_started": "L'enregistrement a commencé",
"recording_stopped": "L'enregistrement s'est arrêté",
"review_saved": "Avis enregistré",
"settings_conflicts": "Corrigez les conflits de réglages mis en évidence avant d'enregistrer.",
"settings_no_changes": "Aucune modification à enregistrer",
"settings_reverted": "Paramètres rétablis ; rechargement de l'intégration",
"settings_saved": "Paramètres enregistrés ; rechargement de l'intégration",
"suggestions_applied": "Suggestions appliquées ; rechargement de l'intégration",
"suggestions_dismissed": "Suggestions rejetées",
"apply_failed": "Échec de l'application : {error}",
"delete_failed": "Échec de la suppression : {error}",
"load_more_failed": "Impossible de charger plus : {error}",
"maint_add_failed": "Impossible d'ajouter l'événement : {error}",
"maint_added": "Événement d'entretien ajouté",
"maint_delete_failed": "Impossible de supprimer l'événement : {error}",
"maint_deleted": "Événement d'entretien supprimé",
"relabel_done": "{count} cycle(s) réétiqueté(s)",
"relabel_failed": "Échec du réétiquetage : {error}",
"reminders_save_failed": "Impossible d'enregistrer les rappels : {error}",
"reminders_saved": "Rappels d'entretien enregistrés",
"pause_no_cycle": "Aucun cycle actif à mettre en pause",
"resume_no_cycle": "Aucun cycle en pause à reprendre",
"delete_partial_failed": "Certains éléments n'ont pas pu être supprimés et ont été restaurés",
"pg_run_gone": "Cette exécution n'est plus disponible.",
"task_cancelled": "Annulé.",
"store_search_failed": "Échec de la recherche : {error}",
"store_connect_failed": "Échec de la connexion : {error}",
"store_connected": "Connecté à la boutique communautaire",
"store_disconnected": "Déconnecté de la boutique communautaire",
"store_error": "Erreur : {error}",
"store_unavailable": "La boutique communautaire n'est pas disponible.",
"store_pick_profile": "Choisissez un profil dans lequel fusionner",
"store_name_required": "Saisissez un nom de profil",
"store_import_failed": "Échec de l'importation : {error}",
"store_imported": "Importé dans {profile}",
"store_no_appliance": "Définissez d'abord la marque et le modèle de votre appareil dans les Paramètres.",
"store_share_failed": "Échec du partage : {error}",
"store_shared": "Partagé sur la boutique communautaire, en attente de révision.",
"appliance_added": "Appareil ajouté, en attente d'approbation",
"contrib_device_changed": "Ajouté à la boutique communautaire, mais l'appareil sélectionné a changé pendant que le formulaire était ouvert. Sélectionnez-le dans les Paramètres.",
"brand_added": "Marque ajoutée, en attente d'approbation",
"profile_added": "Profil ajouté, en attente d'approbation",
"saved_except_conflicts": "Enregistré. Corrigez les conflits mis en évidence pour enregistrer le reste.",
"share_device_none_sel": "Sélectionnez au moins un cycle à partager",
"store_device_downloaded": "{p} programme(s), {c} enregistrement(s) ajouté(s)",
"store_device_downloaded_phases": "{p} programme(s), {c} enregistrement(s), {ph} carte(s) de phases ajoutée(s)",
"store_device_downloaded_settings": "{p} programme(s), {c} enregistrement(s), {ph} carte(s) de phases, {s} paramètre(s) ajouté(s)",
"store_device_shared": "{n} cycle(s) partagé(s) sur la boutique communautaire -- en attente de validation.",
"store_device_shared_all_dup": "Les {n} cycle(s) étaient déjà dans la boutique communautaire.",
"store_device_shared_partial": "{n} cycle(s) partagé(s) ; {failed} n'ont pas pu être envoyés.",
"store_device_shared_some_dup": "{created} cycle(s) partagé(s) ; {dup} étaient déjà dans la boutique.",
"store_download_failed": "Échec du téléchargement : {error}",
"store_download_nothing": "Rien de nouveau à télécharger -- cette configuration est déjà sur votre appareil.",
"export_selective_done": "Export téléchargé",
"import_selective_done": "{profiles} profil(s) et {cycles} cycle(s) importés",
"hist_csv_required": "Chargez d'abord un fichier CSV ou collez son contenu",
"file_read_failed": "Impossible de lire ce fichier",
"unlabel_done": "Étiquette retirée de {count} cycle(s)",
"unlabel_failed": "Échec du retrait de l'étiquette : {error}",
"odometer_saved": "Total des cycles enregistré",
"odometer_save_failed": "Impossible d'enregistrer le total : {error}",
"store_pick_profile_share": "Choisissez un profil dans lequel partager",
"remove_failed": "Échec du retrait : {error}",
"analysis_complete": "Analyse terminée : {count} suggestion(s)",
"analysis_failed": "Échec de l'analyse : {error}",
"auto_detect_failed": "Échec de la détection automatique : {error}",
"auto_label_failed": "Échec de l'étiquetage automatique : {error}",
"could_not_load_cycle": "Impossible de charger le cycle : {error}",
"create_failed": "Échec de la création : {error}",
"cycles_deleted": "{count} cycle(s) supprimé(s)",
"debug_cleared": "{count} traces de débogage effacées",
"discard_failed": "Échec de l'abandon : {error}",
"error": "Erreur : {error}",
"export_failed": "Échec de l'exportation : {error}",
"import_failed": "Échec de l'importation : {error}",
"invalid_json": "« {key} » n'est pas un JSON valide ; corrigez-le ou videz le champ avant d'enregistrer.",
"label_failed": "Échec de l'étiquetage : {error}",
"ml_training_promoted": "Entraînement terminé : {count} modèle(s) promu(s)",
"pause_failed": "Échec de la mise en pause : {error}",
"phase_created": "Phase « {name} » créée",
"phase_deleted": "Phase « {name} » supprimée",
"profile_created": "Profil « {name} » créé",
"rename_failed": "Échec du renommage : {error}",
"save_failed": "Échec de l'enregistrement : {error}",
"split_complete": "Divisé en {count} cycles",
"start_failed": "Échec du démarrage : {error}",
"stop_failed": "Échec de l'arrêt : {error}",
"update_failed": "Échec de la mise à jour : {error}",
"store_download_skipped": "{n} enregistrement(s) ignoré(s) : trop court(s), trop lacunaire(s) ou déjà sur votre appareil.",
"store_import_low_quality": "Cet enregistrement est trop court, trop lacunaire ou invraisemblable pour être importé.",
"store_import_duplicate": "Cet enregistrement est déjà sur votre appareil.",
"device_approved": "Approuvé par la communauté",
"thanks_confirming": "Merci d'avoir confirmé",
"rating_saved": "Évaluation de la qualité enregistrée",
"store_download_partial": "{n} programme(s) n'ont pas pu être téléchargé(s) ; réessayez plus tard.",
"import_no_restore_point": "Importé, mais aucun point de restauration n'a pu être enregistré, cette importation ne peut donc pas être annulée",
"import_undo_failed": "Impossible d'annuler l'importation : {error}",
"import_undone": "Importation annulée : {profiles} profil(s) et {cycles} cycle(s) restaurés",
"auto_label_cancelled": "Étiquetage automatique annulé après l'étiquetage de {count} cycles.",
"auto_label_cancelled_one": "Étiquetage automatique annulé après l'étiquetage de {count} cycle.",
"auto_label_cancelled_many": "Étiquetage automatique annulé après l'étiquetage de {count} cycles.",
"auto_label_cancelled_other": "Étiquetage automatique annulé après l'étiquetage de {count} cycles.",
"auto_label_done": "Étiquetage automatique terminé : {count} cycles étiquetés, {skipped} sans étiquette.",
"auto_label_done_one": "Étiquetage automatique terminé : {count} cycle étiqueté, {skipped} sans étiquette.",
"auto_label_done_many": "Étiquetage automatique terminé : {count} cycles étiquetés, {skipped} sans étiquette.",
"auto_label_done_other": "Étiquetage automatique terminé : {count} cycles étiquetés, {skipped} sans étiquette."
},
"suggestion": {
"observed_label": "Observé",
"impact": {
"auto_label_confidence": {
"higher": "Étiquette moins de cycles automatiquement ; davantage sont envoyés en révision",
"lower": "Étiquette plus de cycles automatiquement ; certains peuvent être mal identifiés"
},
"duration_tolerance": {
"higher": "Accepte une plage de durée plus large – correspondance plus flexible",
"lower": "Exige une durée plus proche – plus strict, peut rejeter des cycles inhabituels"
},
"end_energy_threshold": {
"higher": "Clôture uniquement les cycles ayant consommé une énergie significative",
"lower": "Clôture aussi les cycles courts ou à faible consommation"
},
"learning_confidence": {
"higher": "N'apprend que des correspondances très confiantes – plus lent mais plus fiable",
"lower": "Apprend à partir de plus de cycles ; le modèle peut être moins précis"
},
"min_off_gap": {
"higher": "Repos plus long requis avant le démarrage d'un nouveau cycle",
"lower": "Un bref repos déclenche un nouveau cycle – des cycles successifs peuvent être scindés"
},
"min_power": {
"higher": "Moins sensible à la consommation au repos ; peut manquer des programmes très silencieux",
"lower": "Plus sensible ; peut enregistrer la consommation en veille comme activité"
},
"no_update_active_timeout": {
"higher": "Plus de temps avant de déclarer un cycle bloqué",
"lower": "Arrête un cycle bloqué plus tôt"
},
"off_delay": {
"higher": "Plus de temps pour les pauses de l'appareil – gère les longues phases de trempage ou de séchage",
"lower": "Détection de fin plus rapide – adapté aux appareils marche/arrêt nets"
},
"profile_match_threshold": {
"higher": "Ne valide que les correspondances très confiantes ; plus de cycles restent non étiquetés",
"lower": "Fait correspondre plus de cycles ; certains peuvent être légèrement erronés"
},
"start_threshold_w": {
"higher": "Évite les faux démarrages dus à de brèves pointes de puissance",
"lower": "Capte les programmes à faible puissance ; peut se déclencher sur du bruit"
},
"stop_threshold_w": {
"higher": "Termine le cycle plus vite – peut se clôturer lors d'une pause",
"lower": "Attend plus longtemps pour terminer – moins de fins prématurées"
},
"watchdog_interval": {
"higher": "Phases silencieuses plus longues autorisées ; moins de faux arrêts forcés",
"lower": "Détecte les cycles bloqués de manière plus agressive"
}
},
"reason": {
"completion_min_seconds": "La moitié de la durée p05 des cycles propres ({minutes} min) sur {cycles} cycles ; filtre les cycles fantômes.{excl}",
"match_interval": "D'après la cadence de mise à jour observée (médiane={median}s) * 10.",
"match_interval_capped": "Plafonné pour que {persistence} correspondances consécutives tiennent dans {pct} % du programme le plus court ({shortest}s) ; la cadence de mise à jour seule (médiane={median}s) aurait suggéré un intervalle plus long.",
"match_interval_floored": "Le programme le plus court ({shortest}s) limiterait cette valeur à {cap}s, sous le minimum de {minimum}s, donc le minimum est utilisé : {persistence} correspondances consécutives prennent {budget}s, plus de {pct}% de ce programme. La correspondance ne tourne qu'à l'arrivée d'une mesure (médiane={median}s), cela ne coûte donc rien.",
"max_duration_ratio": "D'après les durées des cycles étiquetés (p95={p95}).",
"min_off_gap": "D'après {gaps} intervalles entre cycles observés (p05={p05}s). Plancher de l'appareil : {floor}s.",
"min_off_gap_bridge": "Dimensionné pour couvrir la plus longue période calme au sein d'un cycle : {span}s + 60s de marge, à partir de {spans} intervalles couverts sur {cycles} cycles propres (reste sous votre intervalle minimal de {ceiling}s entre deux charges consécutives).",
"min_power": "40% de la puissance active la plus basse au p05 ({p05}W) sur {cycles} cycles propres, pour garder le seuil d'arrêt sous la consommation réelle.{excl}",
"no_update_timeout": "D'après la cadence de mise à jour observée (p95={p95}s) * 20 (min 60s).",
"off_delay_cadence": "D'après la cadence de mise à jour observée (p95={p95}s) * 5",
"off_delay_device_floor": "Minimum de sécurité spécifique à l'appareil utilisé pour {device} ({floor}s).",
"off_delay_generic_floor": "Minimum de sécurité générique utilisé ({floor}s).",
"off_delay_pauses": "Dimensionné pour dépasser les vraies pauses : pause intra-cycle p95 {p95}s + 60s de marge, à partir de {pauses} pauses sur {cycles} cycles propres (plancher {floor}s).",
"standby_floor": "Chaque cycle récent consommait encore {idle}W à sa fin, donc un seuil en dessous ne pourra jamais détecter que l'appareil s'éteint. Maintenu au-dessus ; les {cycles} cycles propres enregistrés n'ont jamais chuté en dessous pendant plus de {pause}s.",
"thr_batch": "Juste au-dessus de la puissance active la plus basse (p05) sur {cycles} cycles ({p05}W), pour détecter les démarrages tôt et garder le seuil d'arrêt sous la puissance de fonctionnement la plus basse.",
"watchdog": "Maintenu aussi bas que possible en toute sécurité (juste au-dessus de l'écart de mise à jour p95 de {p95}s et au moins 2x l'intervalle d'échantillonnage de {median}s, min 30s) pour détecter rapidement les blocages sans faux arrêts.",
"end_energy_floor": "Relevé au plancher qu'impliquent le seuil d'arrêt ({stop} W) sur le délai d'arrêt ({off_delay} s) ; en dessous, le cycle ne peut se terminer que par une voie de secours.",
"max_duration_ratio_default": "Retour à la valeur par défaut : un plafond plus bas rejette le bon programme chaque fois qu'un cycle dure plus longtemps que d'habitude.",
"min_duration_ratio_default": "Retour à la valeur par défaut : un plancher plus haut empêche de reconnaître un cycle en cours tant qu'il n'est pas bien avancé."
},
"exclusions": {
"summary": "{total} cycle(s) mal détecté(s) exclu(s) : {parts}.",
"reason": {
"force_stopped": "arrêtés de force",
"user_stopped": "arrêtés manuellement",
"interrupted": "interrompus",
"incomplete": "incomplets",
"noise": "bruit",
"unlabeled": "sans étiquette",
"no_trace_short": "trop courts à inspecter",
"high_start": "démarrés à puissance élevée",
"abrupt_end": "terminés brusquement",
"mid_restart": "redémarrage en milieu de cycle",
"no_power": "sans puissance",
"no_active_power": "sans puissance active"
}
},
"now_value": "(actuellement {v})"
},
"trend": {
"down": "Tendance à la baisse",
"up": "Tendance à la hausse"
},
"maint": {
"salt": "Recharger le sel",
"rinse_aid": "Recharger le liquide de rinçage",
"lint_filter": "Nettoyer le filtre à peluches",
"condenser_clean": "Nettoyer le condenseur",
"bearing_service": "Entretien des roulements",
"descale": "Détartrer",
"drum_clean": "Nettoyer le tambour",
"filter_clean": "Nettoyer le filtre",
"other": "Autre"
},
"col": {
"profile_tip": "Nom du programme correspondant. Sans étiquette signifie qu'aucun profil n'a correspondu à la fin du cycle.",
"status_tip": "Résultat du cycle : Terminé (fin naturelle), Interrompu (chute brusque de puissance), Arrêt forcé (manuel) ou Besoin d'un examen (retour en attente).",
"date_tip": "Date et heure de début du cycle.",
"duration_tip": "Durée totale d'exécution du cycle, du début à la fin.",
"energy_tip": "Énergie totale consommée (kWh), calculée à partir de la puissance au fil du temps.",
"cost_tip": "Coût énergétique de ce cycle, figé à la fin. Avec Coût pondéré dans le temps activé, chaque instant est facturé à son propre prix ; sinon au prix de la fin. Définissez un prix dans Paramètres pour remplir cette colonne.",
"confidence_tip": "Confiance de correspondance du profil (0-100 %). À quel point la courbe de puissance du cycle correspondait au programme identifié.",
"flags_tip": "Indicateurs de révision, d'anomalie et de source pour le cycle. Survolez une icône pour plus de détails.",
"cost_dynamic_tip": "Pondéré dans le temps : facturé au prix en vigueur pendant le cycle (prix effectif {price} {cur}/kWh).",
"dbg_conf": "Conf.",
"dbg_mae": "MAE",
"dbg_corr": "Corr."
},
"stat": {
"avg": "moy.",
"min": "min {v}",
"max": "max {v}",
"consistency": "cohérence ±{v}",
"total": "total {v}",
"last_run": "dernière exéc. {v}",
"score": "score {pct} %",
"duration_cv": "CV de durée {pct} %",
"avg_confidence": "confiance moy. {pct} %"
},
"pg_evd": {
"detected": "Le détecteur a reconnu qu'un cycle avait démarré.",
"match_commit": "Le moteur de correspondance a retenu un programme avec suffisamment de confiance.",
"match_changed": "Le programme en tête a changé à mesure qu'une plus grande partie du cycle était observée.",
"match_ambiguous": "Deux programmes ont obtenu des scores proches, la correspondance était donc incertaine.",
"unmatched": "Aucun programme enregistré ne correspondait à ce cycle.",
"notify_start": "Une notification de démarrage serait envoyée.",
"notify_pre_complete": "Une notification de fin imminente serait envoyée.",
"notify_finish": "Une notification de fin serait envoyée.",
"notify_milestone": "Une notification d'étape serait envoyée.",
"notify_held": "Une notification a été différée pour les heures silencieuses.",
"finished": "Le cycle a atteint son état final et s'est terminé.",
"match_reverted": "Le programme est revenu en détection : son score est tombé bien en dessous de son propre pic.",
"verified_pause": "L'alignement en direct a confirmé (ou levé) une pause au sein du programme. Tant qu'elle est maintenue, le cycle n'est pas terminé.",
"stalled": "Le cycle est resté à sa consommation de veille plus longtemps que ce programme ne fait jamais de pause à cet endroit, alors qu'il restait du travail. Affiché comme En pause (Bloqué) ; le cycle reste ouvert."
},
"store": {
"search_ph2": "Rechercher par marque ou modèle…",
"your_model_tip": "C'est l'appareil que vous avez déclaré dans les Paramètres",
"your_model": "Le vôtre",
"programs_count": "Programmes : {n}",
"browse": "Parcourir",
"device": "Appareil",
"no_results": "Aucun appareil correspondant trouvé. Essayez une autre recherche.",
"no_programs": "Aucun programme partagé pour cet appareil pour le moment.",
"no_cycles": "Aucun cycle de référence partagé pour ce programme pour le moment.",
"anon": "anonyme",
"uploaded_by": "Partagé par {name}",
"connected_as": "Connecté en tant que {name}",
"not_connected": "Non connecté. Connectez un compte GitHub pour partager vos propres cycles.",
"import_new": "Nouveau profil",
"import_merge": "Fusionner dans un profil existant",
"merge_target": "Fusionner dans le profil",
"description": "Description (facultatif)",
"contributed_by": "par {name}",
"website": "Site de la boutique ↗",
"website_tip": "Ouvrir le site de la boutique communautaire",
"favorites": "Favoris",
"rating_summary": "★ {avg} ({n})",
"no_ratings": "Aucune évaluation pour le moment",
"unreachable": "Impossible de joindre la boutique communautaire. Vérifiez votre connexion et réessayez."
},
"settings": {
"gear": {
"title": "Préférences"
}
},
"link": {
"maintenance_supporter": "Maintenance Supporter sur GitHub ↗",
"manual": "Manuel ↗"
},
"tip": {
"add_brand": "Marque absente de la liste ? Ajoutez-la au catalogue de la communauté",
"add_appliance": "Modèle absent de la liste ? Ajoutez votre appareil au catalogue de la communauté",
"add_profile": "Ajoutez un profil pour cet appareil sur le site de la communauté"
},
"task": {
"reprocess": {
"matching": "Retraitement : correspondance des cycles",
"golden": "Retraitement : marquage des cycles de référence",
"suggestions": "Retraitement : suggestions",
"ml_training": "Retraitement : entraînement ML",
"health": "Retraitement : santé des cycles",
"costs": "Retraitement : coûts énergétiques"
},
"pg_sweep": {
"optimize": "Optimiser : {param}"
},
"pg_detail": {
"simulate": "Simuler le cycle"
},
"split": {
"apply": "Division du cycle"
},
"trim": {
"apply": "Rognage du cycle"
},
"merge": {
"apply": "Fusion des cycles"
},
"rebuild": {
"envelopes": "Reconstruction des enveloppes"
},
"cancelling": "Annulation...",
"auto_label": {
"running": "Étiquetage automatique des cycles"
},
"store_download": {
"running": "Téléchargement depuis la boutique"
}
},
"setup": {
"hdr": {
"card": "Configuration de l'appareil",
"healthy_chip": "Configuration terminée"
},
"phase0": {
"washer": "WashData détecte déjà vos cycles. Enregistrez votre premier cycle pour activer les noms de programmes et les estimations de durée.",
"dishwasher": "WashData observe. Les cycles de lave-vaisselle sont complexes, enregistrez donc votre premier cycle. Si un cycle détecté dure trop longtemps, rognez-le dans l'éditeur de cycles avant de l'enregistrer comme profil.",
"generic": "WashData surveille. Enregistrez ou étiquetez un cycle détecté pour commencer à créer des profils."
},
"phase1a": {
"labelled": "Bon début : votre premier programme est enregistré. Pour des données plus propres, enregistrez votre prochain cycle avec l'enregistreur."
},
"phase1b": {
"recorded": "Votre enregistrement a été sauvegardé sous {profile_name}. Enregistrez ou étiquetez maintenant vos autres programmes courants."
},
"phase1c": {
"verify": "Vous avez {count} programmes de la communauté. Lancez un cycle pour vérifier que WashData le reconnaît ; la correspondance s'améliore à mesure que votre appareil constitue son propre historique."
},
"phase2": {
"cluster": "WashData a vu {count} cycles similaires qui ne correspondent à aucun programme enregistré. Créer un nouveau profil pour eux ?",
"unmatched": "Votre dernier cycle ne correspond à aucun programme enregistré. S'agit-il d'un nouveau programme ?"
},
"phase3": {
"suggestions": "WashData a des suggestions de réglages tirées de votre historique de cycles. Consultez-les pour améliorer la détection."
},
"phase4": {
"healthy": "Cet appareil est entièrement configuré ({profile_count} profils)."
},
"cta": {
"start_recording": "Démarrer l'enregistrement",
"label_detected_cycle": "J'ai déjà un cycle détecté – l'étiqueter à la place",
"browse_cycles": "Parcourir les cycles pour en étiqueter un autre",
"view_profiles": "Voir vos profils",
"create_from_cluster": "Créer un profil à partir de ces cycles",
"create_profile": "Créer un profil pour ce programme",
"review_suggestions": "Examiner les suggestions",
"skip_step": "Ignorer cette étape",
"skip_forever": "Ne plus afficher",
"hide_guidance": "Masquer le guide",
"show_guidance": "Afficher le guide"
}
},
"card": {
"min": "min",
"entity_not_found": "Entité introuvable",
"running_long": "Dépassement",
"stalled": "Bloqué",
"remaining": "restant",
"progress": "progression",
"show_time_remaining": "Afficher le temps restant",
"show_percentage": "Afficher le pourcentage",
"layout": {
"tile": "Tuile (compact)",
"detail": "Détail (complet)",
"glance": "Aperçu (plusieurs appareils)"
},
"btn": {
"pause": "Pause",
"resume": "Reprendre",
"terminate": "Terminer le cycle",
"record_start": "Commencer l'enregistrement",
"record_stop": "Arrêter l'enregistrement",
"program": "Programme",
"open_panel": "Ouvrir WashData"
},
"editor": {
"layout": "Disposition",
"entity": "Entité de l'appareil",
"entities": "Appareils",
"title": "Titre",
"icon": "Icône",
"show_state": "Afficher l'état",
"show_program": "Afficher le programme",
"show_progress_bar": "Afficher la barre de progression",
"spin_icon": "Faire tourner l'icône pendant le fonctionnement",
"display_mode": "Ligne de détail",
"active_color": "Couleur active personnalisée",
"show_phase": "Afficher la phase",
"show_energy": "Afficher l'énergie et le coût",
"show_anomaly": "Afficher l'avertissement de dépassement",
"show_sparkline": "Afficher le graphique de puissance en direct",
"buttons": "Boutons d'action",
"program_entity": "Entité de programme (personnalisée)",
"time_entity": "Entité de temps (personnalisée)",
"pct_entity": "Entité de progression (personnalisée)",
"power_entity": "Entité de puissance (personnalisée)",
"tap_action": "Action au toucher",
"hold_action": "Action au maintien",
"double_tap_action": "Action au double toucher"
}
},
"note": {
"off_delay": {
"effective": "Un cycle terminé attend en réalité {eff} s, et non {delay} s : l'Intervalle d'arrêt minimal ({gap} s) est plus long et prime."
}
},
"access": {
"edit": "Modification",
"full": "Complet",
"inherit": "Hériter",
"none": "Aucun (masqué)",
"read": "Lecture"
},
"pg_label_reason": {
"no_winner": "Aucun programme ne correspond",
"below_floor": "Sous la Confiance d'apprentissage",
"ambiguous": "Correspondance signalée comme ambiguë",
"margin": "Trop proche du deuxième candidat",
"unknown_profile": "Le programme n'existe plus",
"not_evaluated": "Non évalué"
},
"diagram": {
"accum": "cumul",
"auto": "auto",
"below_off": "en dessous = arrêt",
"confirmed": "confirmé",
"energy_counts": "énergie comptée",
"feedback": "révision",
"gap_below_min": "intervalle sous le min = un cycle",
"heat_phase": "phase de chauffe",
"held_at_100": "maintenu à 100 %",
"ignored": "ignoré",
"kept": "conservé",
"max": "max",
"min": "min",
"minus_tol": "-tol",
"no_match": "non reconnu",
"no_updates": "aucune mise à jour",
"off_delay_wait": "délai d'arrêt",
"off_gap": "intervalle",
"plus_tol": "+tol",
"profile": "profil",
"reading_interval": "intervalle de lecture typique",
"sensor_offline": "capteur hors ligne : arrêt forcé",
"si": "IE",
"spike_ignored": "pic ignoré",
"spike_ignored_short": "pic : ignoré",
"start": "démarrage",
"stop": "arrêt",
"tail_energy_resets": "énergie de fin > seuil : délai relancé",
"thr": "seuil",
"too_short": "trop court",
"tumble_kept": "culbutages conservés"
}
}