{
  "@@locale": "fr",
  "nav.home": "État",
  "status.title": "État",
  "status.sip.connected": "Enregistré",
  "status.sip.connecting": "Connexion…",
  "status.sip.not_configured": "Non configuré",
  "status.sip.since": "depuis {duration}",
  "duration.seconds": "{n} s",
  "duration.minutes": "{n} min",
  "duration.hours": "{n} h",
  "duration.days": "{n} d",
  "status.sip.at": "sur {host} en tant que {user}",
  "status.sip.ext": "Numéro interne {n}",
  "status.sip.public_ip": "IP publique {ip}",
  "status.sip.nat_symmetric": "⚠️ NAT symétrique — l’audio nécessite une redirection de port RTP identique",
  "status.sip.stun": "STUN {server} · NAT : {nat}",
  "status.sip.setup_cta": "Configurer la téléphonie",
  "status.sip.redo_cta": "Reconfigurer la téléphonie",
  "status.token.set": "Jeton PhoneBlock enregistré",
  "status.token.missing": "Aucun jeton PhoneBlock",
  "status.token.rejected": "Jeton refusé",
  "status.token.rejected.msg": "PhoneBlock a rejeté le jeton. Veuillez générer un nouveau jeton en cliquant sur « Demander un nouveau jeton ».",
  "status.token.cta": "Créer un jeton",
  "status.token.test": "Tester",
  "status.token.renew": "Renouveler",
  "status.token.testing": "Vérification du jeton…",
  "status.token.test.ok": "Jeton valide — PhoneBlock joignable.",
  "status.token.test.fail": "Jeton rejeté. Veuillez en demander un nouveau.",
  "status.token.test.none": "Aucun jeton configuré.",
  "status.counters.total": "Total",
  "status.counters.spam": "Spam bloqué",
  "status.counters.legit": "Légitime",
  "status.counters.errors": "Erreurs",
  "status.counters.reset": "Réinitialiser tous les compteurs",
  "status.info": "Firmware {fw} · IP {ip} · Uptime {uptime} · Latence API {api}",
  "status.api.failed": "La dernière requête adressée au serveur PhoneBlock ({when}) a échoué : {reason}.",
  "status.api.fail.dns": "Impossible de résoudre le nom du serveur (DNS)",
  "status.api.fail.connect": "Pas de connexion au serveur",
  "status.api.fail.tls": "Échec de la connexion sécurisée (TLS)",
  "status.api.fail.timeout": "pas de réponse dans le délai imparti",
  "status.api.fail.http": "Le serveur répond avec un statut HTTP {status}",
  "status.api.fail.other": "erreurs de transmission",
  "status.calls.title": "Derniers appels",
  "status.calls.empty": "aucun appel pour l’instant",
  "status.calls.col.when": "Quand",
  "status.calls.col.number": "Numéro",
  "status.calls.col.name": "Nom",
  "status.calls.col.verdict": "Verdict",
  "status.calls.show_all": "Tout afficher ({count})",
  "status.calls.show_less": "Afficher moins",
  "status.calls.time_unknown": "inconnu",
  "status.calls.clear": "Vider la liste",
  "status.calls.log_known": "Journaliser les appels connus",
  "status.calls.log_known.help": "Si désactivé, les appels provenant de numéros du carnet d’adresses et les codes internes (**, *…) n’apparaissent pas dans la liste — les compteurs ci-dessus restent mis à jour.",
  "status.calls.verdict.spam": "SPAM ({direct} direct, {range} plage)",
  "status.calls.verdict.spam_plain": "SPAM",
  "status.calls.verdict.spam_list": "SPAM (liste noire, {scope})",
  "status.calls.verdict.suspect": "SOUPÇON DE SPAM ({direct} direct, {range} plage)",
  "status.calls.verdict.blacklist": "SPAM (liste noire, {scope})",
  "status.calls.verdict.name_pattern": "SPAM (modèle de nom)",
  "status.calls.verdict.legitimate": "légitime",
  "status.calls.verdict.unknown": "inconnu",
  "status.calls.verdict.test": "Test",
  "status.calls.verdict.error": "Erreur",
  "status.calls.verdict.scope.number": "Numéro",
  "status.calls.verdict.scope.range": "Domaine",
  "region.title": "Langue et pays",
  "region.lang": "Langue",
  "region.country": "Pays",
  "region.country.hint": "Les numéros de téléphone sans indicatif de pays sont complétés par ce pays. Si le pays indiqué ici est incorrect, PhoneBlock ne trouvera aucune entrée correspondant à l'appel. La langue s'applique également au message d'accueil du répondeur et à l'e-mail de statut.",
  "status.thresholds.title": "Traverses en blocs",
  "status.thresholds.direct": "Votes directs",
  "status.thresholds.direct.help": "Bloque directement les appels provenant du numéro appelant. Valeur par défaut : 4 — même valeur que la liste de blocage publique de PhoneBlock.",
  "status.thresholds.range": "Voix de la gamme",
  "status.thresholds.range.help": "Votes contre les voisins du même bloc de 10 ou de 100. Valeur par défaut : 10. « Désactivé » désactive le bloc de portée — seuls les coups directs sont alors pris en compte.",
  "status.thresholds.range.off": "Extrait de",
  "status.thresholds.saved": "Enregistré.",
  "status.thresholds.invalid": "Valeur non valide.",
  "status.system.title": "Système",
  "status.system.heap": "Mémoire libre : {free} (minimum : {min}, plus grand bloc : {largest})",
  "status.system.fs": "Partition de données : {free} libres sur {total} ({used} utilisés)",
  "status.system.temp": "Température de la puce : {temp} °C",
  "status.system.wifi": "Signal Wi-Fi : {rssi} dBm ({quality})",
  "status.system.wifi.good": "bien",
  "status.system.wifi.ok": "suffisante",
  "status.system.wifi.weak": "faible",
  "status.system.wifi_tx": "Puissance d'émission : {tx} dBm",
  "status.system.wifi_link": "Réseau Wi-Fi « {ssid} » via le point d'accès {bssid}, canal {channel}, connecté depuis {since}",
  "status.system.wifi_drops": "{drops} Déconnexions depuis le démarrage",
  "status.system.col.task": "Tâche",
  "status.system.col.cpu": "CPU",
  "status.system.col.stack": "Pile libre",
  "status.system.led_quiet": "N’allumer la LED qu’en cas de problème",
  "status.system.led_quiet.hint": "Normalement la LED reste allumée quand tout va bien. Avec cette option elle reste éteinte en fonctionnement normal et ne s’allume ou ne clignote qu’en cas de problème (configuration requise, non enregistré, jeton refusé, pas de connexion). Pratique dans un salon.",
  "status.system.lcd_flip": "Écran à l'envers (rotation de 180°)",
  "status.system.lcd_flip.hint": "Selon l'orientation du port USB de votre Fritz!Box, la clé est orientée dans l'autre sens. Faites pivoter l'image de 180°.",
  "status.system.hostname": "Nom d'hôte sur le réseau domestique",
  "status.system.hostname.save": "Enregistrer",
  "status.system.hostname.unchanged": "Le nom reste inchangé.",
  "status.system.hostname.err": "Nom non valide : uniquement les caractères a–z, 0–9 et -, de 1 à 32 caractères, sans « - » au début ni à la fin. Rien n'a été enregistré.",
  "status.system.hostname.failed": "Échec de l'enregistrement.",
  "status.clock.now": "Heure : {time}",
  "status.clock.pending": "Heure : en cours de synchronisation…",
  "status.time.today": "aujourd'hui {time}",
  "status.time.yesterday": "hier {time}",
  "status.tz.current": "Fuseau horaire : {tz}",
  "status.tz.apply": "Passer à {zone}",
  "status.tz.saved": "Fuseau horaire enregistré.",
  "status.errors.title": "Journal",
  "status.errors.note": "Le journal sert à diagnostiquer les problèmes — toute entrée affichée n'est pas forcément un vrai défaut ; beaucoup d'erreurs sont passagères et disparaissent d'elles-mêmes.",
  "status.errors.empty": "aucune entrée",
  "status.errors.clear": "Vider le journal",
  "status.errors.capture_info": "Journaliser aussi les infos",
  "status.errors.capture_info.hint": "Pour le dépannage : affiche aussi les messages d'info (par ex. le serveur:port essayé). Remplit vite le journal — à désactiver ensuite.",
  "status.auth.title": "Protection d’accès",
  "status.auth.intro": "Protège l’interface de configuration en exploitation. Une fois activée, la page demande une « Connexion avec PhoneBlock » avant d’afficher les appels ou d’accepter des modifications.",
  "status.auth.disabled": "Protection d’accès désactivée — n’importe qui sur le LAN peut atteindre le tableau de bord sans se connecter.",
  "status.auth.enabled": "Protection d’accès active — connecté en tant qu’utilisateur PhoneBlock.",
  "status.auth.enabled.user": "Protection d’accès active — connecté en tant que {user}.",
  "status.auth.enable": "Activer la protection d’accès",
  "status.auth.disable": "Désactiver la protection d’accès",
  "status.auth.logout": "Se déconnecter",
  "status.auth.activate.intro": "Avant d’activer, tu es redirigé vers phoneblock.net pour te connecter — la protection n’est activée qu’après une connexion réussie. Tu ne peux donc pas te bloquer dehors.",
  "login.title": "Connexion requise",
  "login.button": "Se connecter avec PhoneBlock",
  "login.remember": "Rester connecté",
  "login.error.rejected": "Échec de la connexion — le serveur PhoneBlock n’a pas confirmé l’identité.",
  "login.error.expired": "La connexion a expiré ou n’est pas valide. Réessaie.",
  "login.error.persist": "L’activation n’a pas pu être enregistrée. Réessaie.",
  "login.error.missing": "La réponse de phoneblock.net était incomplète. Réessaie.",
  "login.error.generic": "Échec de la connexion. Réessaie.",
  "status.reset.title": "Réinitialisation",
  "status.reset.button": "Réinitialiser la configuration",
  "status.reset.error": "Échec de la réinitialisation : {msg}",
  "status.fw.title": "Mettre à jour le firmware",
  "status.fw.current": "Partition active : {partition} · Version {version}",
  "status.fw.pick": "Choisir le firmware (.bin)",
  "status.fw.submit": "Téléverser et redémarrer",
  "status.fw.uploading": "Téléversement… {pct} %",
  "status.fw.error": "Erreur : {msg}",
  "status.fw.check": "Vérifier les mises à jour",
  "status.fw.checking": "Vérification en cours…",
  "status.fw.check.none": "Aucune nouvelle version disponible (actuellement {version}).",
  "status.fw.check.found": "Nouvelle version {version} en cours d’installation…",
  "status.fw.downgrade": "Installer quand même la {version}",
  "status.fw.downgrade.confirm": "Voulez-vous vraiment revenir à l'ancienne version {version} ? Les fonctionnalités de la version plus récente seront alors perdues.",
  "status.fw.check.error": "Échec de la vérification : {msg}",
  "status.fw.failed": "La dernière mise à jour vers la version {version} n’a pas survécu au démarrage — restauration automatique. La mise à jour automatique ignore cette version. Cliquez sur « Vérifier les mises à jour » pour réessayer.",
  "status.fw.auto_update": "Mise à jour automatique quotidienne",
  "status.fw.channel": "Canal de mise à jour",
  "status.fw.channel.help": "Choisis « Bêta » pour recevoir les versions de test en avance — par exemple pour vérifier un bug que tu as signalé. « Stable » ne fournit que les versions publiées. Dès qu’une version testée est publiée définitivement, tu y reviens automatiquement.",
  "status.fw.channel.stable": "Stable",
  "status.fw.channel.beta": "Bêta (versions de test)",
  "status.fw.crash_report": "Envoyer les rapports d’erreur à phoneblock.net",
  "status.mail.title": "E-mails d’état",
  "status.mail.host": "Serveur SMTP",
  "status.mail.port": "Port (vide = automatique)",
  "status.mail.security": "Chiffrement",
  "status.mail.security.tls": "TLS (port 465)",
  "status.mail.security.starttls": "STARTTLS (port 587)",
  "status.mail.user": "Nom d’utilisateur (identifiant SMTP)",
  "status.mail.pass": "Mot de passe",
  "status.mail.pass.keep": "enregistré — laisser vide pour le conserver",
  "status.mail.from": "Expéditeur (e-mail, vide = nom d’utilisateur)",
  "status.mail.to": "Destinataires (adresse e-mail, séparer les destinataires multiples par « ; »)",
  "status.mail.help": "Astuce : pour Gmail ou Outlook, il faut généralement un « mot de passe d’application » (si la connexion à deux facteurs est activée), pas ton mot de passe habituel. Les fournisseurs classiques comme GMX, web.de ou mailbox.org fonctionnent avec le nom d’utilisateur et le mot de passe.",
  "status.mail.on_error": "E-mail en cas d’erreurs et de plantages",
  "status.mail.on_error.help": "Envoie un e-mail par jour si une erreur est apparue dans le journal depuis la dernière notification — y compris un redémarrage après un plantage.",
  "status.mail.on_spam": "Signaler les appels par e-mail",
  "status.mail.on_spam.help": "Envoie une fois par jour un e-mail récapitulant les appels reçus depuis le dernier rapport – ceux qui ont été bloqués et ceux qui ont été autorisés.",
  "status.mail.spam_only": "Ne signaler que les appels indésirables bloqués",
  "status.mail.on_update": "E-mail lors de la mise à jour du micrologiciel",
  "status.mail.save": "Enregistrer",
  "status.mail.saved": "Enregistré.",
  "status.mail.test": "Envoyer un e-mail de test",
  "status.mail.testing": "Envoi de l’e-mail de test…",
  "status.mail.test.sent": "E-mail de test en cours d’envoi — le résultat apparaîtra dans le journal.",
  "status.mail.test.fail": "Échec de l’envoi — vérifie les réglages et le journal.",
  "status.mail.err.host": "Serveur SMTP manquant",
  "status.mail.err.user": "Nom d’utilisateur manquant",
  "status.mail.err.pass": "Mot de passe manquant",
  "status.mail.err.to": "Destinataire invalide",
  "status.mail.err.to_many": "Nombre maximal de destinataires : {max}",
  "status.mail.err.from": "Expéditeur invalide",
  "status.mail.err.from_user": "Expéditeur requis — le nom d’utilisateur n’est pas une adresse e-mail",
  "status.sync.title": "Synchro liste de blocage",
  "status.sync.intro": "Les numéros bloqués depuis le combiné (« Bloquer le numéro ») sont envoyés à la base PhoneBlock une fois par jour, puis retirés de la Fritz!Box. Le bot répondeur intercepte ensuite ces appelants pour tous les utilisateurs PhoneBlock.",
  "status.sync.unavailable": "Indisponible — nécessite une configuration Fritz!Box.",
  "status.sync.never": "Pas encore exécuté.",
  "status.sync.last_ok": "Dernière exécution il y a {ago} : {n} envoyés.",
  "status.sync.last_partial": "Dernière exécution il y a {ago} : {n} envoyés, {f} en erreur.",
  "status.sync.last_fail": "Dernière exécution il y a {ago} en échec : {err}",
  "status.sync.running": "Synchro en cours…",
  "status.sync.run_now": "Synchroniser maintenant",
  "status.sync.triggered": "Synchro démarrée.",
  "status.sync.busy": "Synchro déjà en cours.",
  "status.sync.enable": "Activer la synchronisation",
  "status.sync.disabled": "Synchro auto désactivée — exécution manuelle toujours possible.",
  "status.localcache.title": "Cache de la liste de blocage",
  "status.localcache.enable": "Utiliser le cache de liste de blocage",
  "status.localcache.disabled": "Désactivé — les appels sont vérifiés directement auprès du serveur.",
  "status.localcache.never": "Pas encore téléchargé.",
  "status.localcache.have": "{community} entrées communes, {personal} personnelles. Rafraîchi il y a {ago}.",
  "status.localcache.last_fail": "Dernier téléchargement il y a {ago} en échec : {err}",
  "status.localcache.running": "Téléchargement en cours…",
  "status.localcache.wildcards": "Appliquer les caractères génériques",
  "status.localcache.wildcards.help": "Bloque aussi des plages de numéros (p. ex. \"030 12 34 56*\") signalées comme spam par la communauté, en plus des correspondances exactes. Désactivez pour ne bloquer que les correspondances exactes.",
  "status.localcache.run_now": "Télécharger maintenant",
  "status.localcache.triggered": "Téléchargement démarré.",
  "status.localcache.busy": "Téléchargement déjà en cours.",
  "status.names.title": "Filtre par nom",
  "status.names.intro": "Si ta FRITZ!Box trouve le correspondant dans un répertoire, elle affiche également son nom. Si tu utilises une liste de spam tierce (par exemple celle de Tellows), toutes les entrées portent un nom révélateur — tu peux alors les marquer comme spam ici. Cela vaut également pour ton propre répertoire, dans lequel tu attribues le même nom à tous les appelants indésirables.",
  "status.names.patterns": "Noms associés au spam (séparés par |)",
  "status.names.help": "Un appel est considéré comme du spam dès lors que le nom signalé contient l'un de ces textes ; la distinction entre majuscules et minuscules n'a pas d'importance. Exemple : « tellows|Score|SPAM ». Tu trouveras le nom de l'appelant dans la liste des derniers appels. Si tu laisses ce champ vide, le filtre par nom est désactivé.",
  "status.names.save": "Enregistrer les filtres de noms",
  "status.names.saved": "Filtre par nom enregistré.",
  "status.names.failed": "Échec de l'enregistrement.",
  "status.names.err.many": "{max} noms au maximum.",
  "status.names.err.long": "Un nom ne doit pas dépasser {max} caractères.",
  "status.webhook.title": "Webhook lors d'appels",
  "status.webhook.url": "Adresse du webhook",
  "status.webhook.help": "Uniquement http:// et uniquement vers des adresses de votre réseau domestique, par exemple http://homeassistant.local:8123/api/webhook/phoneblock. Si vous laissez ce champ vide, le webhook est désactivé.",
  "status.webhook.save": "Enregistrer le webhook",
  "status.webhook.saved": "Webhook enregistré.",
  "status.webhook.failed": "Échec de l'enregistrement.",
  "status.webhook.err.url": "Veuillez saisir une adresse http valide, par exemple http://homeassistant.local:8123/api/webhook/phoneblock.",
  "status.webhook.err.long": "L'adresse ne doit pas dépasser {max} caractères.",
  "status.ann.title": "Message anti-spam",
  "status.ann.default": "Message par défaut intégré ({kb} Ko).",
  "status.ann.custom": "Message personnalisé ({kb} Ko).",
  "status.ann.play": "Écouter le message actuel",
  "status.ann.stop": "Arrêter",
  "status.ann.upload.label": "Téléverser votre message (WAV/MP3/OGG, max {s} s)",
  "status.ann.upload.pick": "Choisir un fichier",
  "status.ann.upload.submit": "Téléverser",
  "status.ann.upload.converting": "Conversion…",
  "status.ann.upload.uploading": "Envoi…",
  "status.ann.upload.done": "Enregistré ({kb} Ko).",
  "status.ann.upload.error": "Erreur : {msg}",
  "status.ann.upload.toolong": "Trop long — {s} secondes maximum.",
  "status.ann.upload.decode_fail": "Impossible de décoder le fichier.",
  "status.ann.reset.button": "Revenir au message par défaut",
  "status.ann.reset.confirm": "Vraiment supprimer le message personnalisé ?",
  "status.ann.accept_test": "Accepter les appels de test locaux",
  "status.dialog.mode": "En cas d'appels indésirables",
  "status.dialog.mode.announcement": "Lire le message et raccrocher",
  "status.dialog.mode.dialog": "Parler avec l'appelant (dialogue)",
  "status.dialog.clips.present": "Phrases de dialogue chargées ({lang}).",
  "status.dialog.clips.pending": "Les phrases de dialogue vont être chargées dans un instant…",
  "status.dialog.clips.downloading": "Chargement des phrases de dialogue ({kb} Ko) …",
  "status.dialog.confirm_delete_own": "Ton message d'accueil sera supprimé si tu passes en mode conversation. Tu pourras le télécharger à nouveau en mode message d'accueil. Tu veux continuer ?",
  "status.dialog.vad_silence_db": "Seuil de silence (dBFS)",
  "status.dialog.vad_silence_db.help": "Si le volume est inférieur à ce niveau, l'appelant est considéré comme parlant à voix basse. Réglez-le sur une valeur plus élevée (par exemple -30) en cas de bruit sur la ligne, et sur une valeur plus basse (par exemple -45) pour les appelants qui parlent à voix basse. Valeur par défaut : -35.",
  "status.dialog.vad_min_silence_ms": "Temps de réponse (ms)",
  "status.dialog.comfort_noise": "Bruit de ligne (dBFS)",
  "status.dialog.comfort_noise.help": "Un léger bruit de fond entre les phrases et pendant celles-ci, pour que la ligne ne semble pas « morte ». -90 correspond pratiquement à l'arrêt total. Valeur par défaut : -60.",
  "status.dialog.saved": "Enregistré.",
  "status.dialog.tuning": "Réglages avancés : détection des pauses et bruit de fond",
  "status.dialog.failed": "Échec de l'enregistrement.",
  "status.dialog.err.range": "Veuillez saisir un nombre entier compris entre {min} et {max}.",
  "status.ann.upload.silent": "L'enregistrement est muet : aucun son n'y dépasse -45 dBFS.",
  "status.dialog.clips.own": "Boîte de dialogue personnalisée active.",
  "status.dialog.speaker": "Voix",
  "status.dialog.speaker.use": "Utiliser",
  "status.dialog.speaker.active": "actif",
  "status.dialog.own": "Boîte de dialogue personnalisée",
  "status.dialog.own.leave_confirm": "Lorsque tu passes en mode annonce, ton propre dialogue est effacé. Voulez-vous continuer ?",
  "status.dialog.own.leave_download": "Souhaites-tu télécharger ton dialogue au préalable sous forme de fichier ?",
  "status.dialog.edit.title": "Créer son propre dialogue",
  "status.dialog.edit.yes_hint": "N'enregistrez jamais un « oui » : un « oui » enregistré peut être utilisé à mauvais escient pour faire passer cela pour un consentement.",
  "status.dialog.phase.hello": "Mot de bienvenue",
  "status.dialog.phase.who-is-there": "L'appelant reste silencieux après la formule d'accueil (« Qui est à l'appareil ? »)",
  "status.dialog.phase.am-aparat": "L'appelant se présente",
  "status.dialog.phase.question": "Questions complémentaires",
  "status.dialog.phase.cant-hear-you": "L'appelant reste silencieux pendant la conversation (« Je n'entends rien »)",
  "status.dialog.edit.add": "+ Ajouter un enregistrement",
  "status.dialog.edit.delete": "Supprimer",
  "status.dialog.edit.gauge": "{kb} sur {max} Ko",
  "status.dialog.edit.download": "Télécharger le fichier de dialogue",
  "status.dialog.edit.load_file": "Charger un fichier de dialogue",
  "status.dialog.edit.reason.empty": "La phase « {phase} » ne comporte encore aucun enregistrement.",
  "status.dialog.edit.reason.many": "La phase « {phase} » comporte plus de {max} prises.",
  "status.dialog.edit.bad_file": "Ce n'est pas un fichier de dialogue valide.",
  "status.dialog.edit.reload": "Annuler et recharger",
  "status.dialog.edit.done": "Boîte de dialogue personnalisée enregistrée ({kb} Ko).",
  "hero.title": "Configuration",
  "hero.step1.done": "Téléphonie configurée",
  "hero.step2.done": "Connecté à PhoneBlock",
  "hero.cta.sip": "Configurer la téléphonie",
  "hero.cta.token": "Connecter PhoneBlock",
  "sip.entry.title": "Configurer la téléphonie",
  "sip.entry.fritzbox": "Fritz!Box (recommandé)",
  "sip.entry.provider": "Autre opérateur",
  "sip.entry.provider.desc": "S’enregistrer directement chez Telekom, Vodafone, 1&1, sipgate ou easybell.",
  "sip.entry.manual": "Manuel (expert)",
  "sip.entry.manual.desc": "Remplir tous les champs SIP manuellement.",
  "sip.fb.title": "Configuration Fritz!Box",
  "sip.fb.intro": "Saisissez une fois le mot de passe administrateur de la Fritz!Box. Il n’est pas conservé.",
  "sip.fb.host": "Fritz!Box (hôte ou IP)",
  "sip.fb.user": "Utilisateur",
  "sip.fb.user.hint": "(laisser vide → utilisateur par défaut de la Fritz!Box)",
  "sip.fb.pass": "Mot de passe",
  "sip.fb.submit": "Créer l’extension",
  "sip.fb.working": "Création de l’extension (~2–5 s)…",
  "sip.fb.done": "Extension créée — l’enregistrement démarre.",
  "sip.fb.done.withnum": "Extension créée (numéro interne {n}) — l’enregistrement démarre.",
  "sip.fb.error": "Erreur : {msg}",
  "sip.fb.2fa.title": "Confirmation à deux facteurs",
  "sip.fb.2fa.button": "appuyer sur un bouton quelconque de la Fritz!Box",
  "sip.fb.2fa.dtmf": "composer {seq} sur un téléphone connecté",
  "sip.fb.2fa.instructions": "Veuillez maintenant {hints}.",
  "sip.fb.2fa.cancelled": "2FA annulée.",
  "sip.fb.2fa.timeout": "Délai dépassé. Veuillez réessayer.",
  "sip.fb.conflict.add": "Ajouter un autre appareil → « {name} »",
  "sip.fb.conflict.submit": "Continuer",
  "sip.fb.conflict.choose": "Veuillez choisir l'une des options suivantes.",
  "sip.prov.title": "Choisir un opérateur",
  "sip.prov.intro": "Choisissez votre opérateur ; les identifiants sont disponibles dans son portail client. Si votre opérateur n’est pas listé, utilisez la configuration manuelle.",
  "sip.prov.provider": "Opérateur",
  "sip.prov.user": "Utilisateur SIP / numéro",
  "sip.prov.pass": "Mot de passe",
  "sip.prov.submit": "Enregistrer les identifiants",
  "sip.prov.done": "Enregistré. L’enregistrement démarre.",
  "sip.prov.error": "Erreur : {msg}",
  "sip.manual.title": "Configuration manuelle",
  "sip.manual.intro": "Tous les champs SIP. Laisser le mot de passe vide signifie « inchangé ».",
  "sip.manual.host": "Registrar SIP",
  "sip.manual.port": "Port SIP",
  "sip.manual.port.hint": "Vide = automatique via DNS-SRV ou la valeur par défaut du transport (5060 UDP/TCP, 5061 TLS).",
  "sip.manual.user": "Utilisateur SIP",
  "sip.manual.pass": "Mot de passe SIP",
  "sip.manual.pass.hint": "Laisser vide = conserver le mot de passe enregistré.",
  "sip.manual.anon": "S'enregistrer sans mot de passe (anonyme)",
  "sip.manual.anon.hint": "Supprime un mot de passe enregistré et s'enregistre sans — par ex. anonymous@t-online.de chez Telekom.",
  "sip.manual.submit": "Enregistrer",
  "sip.manual.done": "Enregistré.",
  "sip.manual.error": "Erreur : {msg}",
  "sip.manual.advanced": "Paramètres avancés",
  "sip.manual.transport": "Transport",
  "sip.manual.transport.hint": "UDP, TCP et TLS sont disponibles. TLS chiffre la connexion et est recommandé si l’opérateur le prend en charge. La voix elle-même n’est pas encore chiffrée.",
  "sip.manual.auth_user": "Utilisateur d’auth",
  "sip.manual.auth_user.hint": "Vide = utiliser l’utilisateur SIP pour l’auth. Telekom : adresse e-mail.",
  "sip.manual.outbound": "Proxy sortant",
  "sip.manual.outbound.hint": "Optionnel, format hôte[:port]. Vide = passer directement par le registrar.",
  "sip.manual.realm": "Realm",
  "sip.manual.realm.hint": "Vide = reprendre la valeur du challenge du serveur.",
  "sip.manual.stun": "Serveur STUN",
  "sip.manual.stun.hint": "Optionnel, format hôte[:port]. Détecte le port RTP public lors d’un enregistrement direct chez l’opérateur. Vide = désactivé. Défini par le préréglage opérateur (Telekom : stun.t-online.de:3478).",
  "sip.manual.srtp": "SRTP",
  "sip.manual.srtp.hint": "Le SRTP est négocié automatiquement : le média est chiffré dès que le fournisseur le propose (p. ex. Telekom), sinon RTP en clair (p. ex. la Fritz!Box sur le LAN).",
  "sip.manual.local_port": "Port SIP local",
  "sip.manual.rtp_port": "Port RTP (audio)",
  "sip.manual.rtp_port.hint": "Port du canal vocal (défaut 16000). Vide = défaut.",
  "sip.manual.fwd.title": "Redirection de ports pour une inscription directe chez l’opérateur",
  "sip.manual.srtp.off": "désactivé",
  "sip.manual.srtp.optional": "optionnel",
  "sip.manual.srtp.mandatory": "obligatoire",
  "token.title": "Connecter PhoneBlock",
  "token.how": "Un clic sur le bouton ci-dessous vous dirige vers phoneblock.net pour une connexion unique (Google, Facebook ou compte). Vous revenez ensuite ici avec le jeton enregistré.",
  "token.current.set": "Un jeton est déjà configuré. Une nouvelle connexion en créera un nouveau.",
  "token.current.missing": "Aucun jeton configuré pour l’instant.",
  "token.submit": "Se connecter à PhoneBlock",
  "link.submit": "Associer un compte PhoneBlock",
  "link.how": "Cliquez sur le bouton pour afficher un code. Ouvrez ensuite phoneblock.net, connectez-vous et saisissez-y ce code. Le service récupérera ensuite le jeton de lui-même.",
  "link.starting": "Le lien est en cours de préparation…",
  "link.compare": "Saisis ce code sur phoneblock.net pour associer le service à ton compte.",
  "link.copy": "Copier le code",
  "link.copied": "Code copié",
  "link.copy_failed": "Impossible de copier – le code est sélectionné, copiez-le avec Ctrl+C.",
  "link.open": "Ouvrir phoneblock.net",
  "link.manual": "La page se trouve à l'adresse {url} – tu peux également saisir le code sur un autre appareil, par exemple sur ton téléphone portable.",
  "link.waiting": "En attente de la saisie du code sur phoneblock.net…",
  "link.approved": "Compte PhoneBlock associé — le jeton est défini.",
  "link.denied": "Le lien a été refusé sur phoneblock.net.",
  "link.expired": "Le code a expiré. Demandez un nouveau code.",
  "link.error": "La connexion a échoué : {msg}",
  "link.retry": "Réessayer",
  "back.status": "← retour à l’état",
  "back.sip": "← retour au choix",
  "i18n.loading": "Chargement de la traduction…",
  "i18n.unavailable": "Traduction indisponible – la langue par défaut s'affiche.",
  "status.calls.add_contact": "Ajouter au répertoire de la Fritz!Box",
  "status.phonebook.title": "Répertoire pour les nouveaux contacts",
  "status.phonebook.current": "Les nouveaux contacts sont enregistrés dans « {name} ».",
  "status.phonebook.unset": "Pas encore défini — cette information sera demandée lors de la première création.",
  "status.phonebook.change": "Modifier",
  "status.phonebook.unavailable": "Indisponible — utilisable uniquement avec la configuration Fritz!Box.",
  "status.phonebook.saved": "Enregistré.",
  "pb.dialog.title": "Créer un contact dans la Fritz!Box",
  "pb.dialog.intro": "Lors du prochain appel, le téléphone affichera le nom à la place du numéro. Le contact reste dans ta Fritz!Box — il n'est pas transféré vers PhoneBlock.",
  "pb.dialog.name": "Nom",
  "pb.dialog.type": "Type de numéro",
  "pb.dialog.type.home": "Vie privée",
  "pb.dialog.type.mobile": "Mobile",
  "pb.dialog.type.work": "Professionnel",
  "pb.dialog.type.fax_home": "Fax privé",
  "pb.dialog.type.fax_work": "Fax professionnel",
  "pb.dialog.vip": "Personnalité importante (VIP)",
  "pb.dialog.book": "Annuaire téléphonique",
  "pb.dialog.book.readonly": "{name} (synchronisé — non modifiable)",
  "pb.dialog.pick": "Dans quel répertoire téléphonique le contact doit-il être enregistré ?",
  "pb.dialog.none_writable": "Aucun répertoire inscriptible n'a été trouvé.",
  "pb.dialog.save": "Créer",
  "pb.dialog.cancel": "Annuler",
  "pb.dialog.working": "En cours de création…",
  "pb.dialog.done": "Contact créé.",
  "pb.dialog.error.name": "Veuillez saisir un nom.",
  "pb.dialog.error.number": "Ce numéro ne peut pas être enregistré comme contact.",
  "pb.dialog.error.not_writable": "Ce répertoire est synchronisé et ne peut pas être modifié. Veuillez en choisir un autre.",
  "pb.dialog.error.no_fritzbox": "Ceci n'est possible qu'avec la configuration d'une Fritz!Box.",
  "pb.dialog.error.unreachable": "La Fritz!Box ne répond pas.",
  "pb.dialog.error.generic": "Échec : {msg}",
  "status.calls.add_contact.help": "Ajouter l'appelant comme contact dans le répertoire de la Fritz!Box",
  "status.calls.report_spam": "Spam",
  "status.calls.report_spam.help": "Signaler ce numéro comme spam sur PhoneBlock",
  "status.calls.whitelist": "Liste blanche",
  "status.calls.whitelist.help": "Ne plus bloquer ce numéro",
  "whitelist.dialog.title": "Ajouter un numéro à la liste blanche",
  "whitelist.dialog.intro": "Les appels provenant de ce numéro ne seront plus bloqués. Tu considères ainsi ce numéro comme légitime sur PhoneBlock ; cette évaluation est associée à ton compte.",
  "whitelist.dialog.submit": "Ne plus bloquer",
  "whitelist.dialog.working": "En cours de transfert…",
  "whitelist.dialog.done": "C'est fait — ce numéro figure désormais sur ta liste blanche.",
  "spam.dialog.title": "Signaler ce numéro comme spam",
  "spam.dialog.rating": "Type d'appel",
  "spam.dialog.rating.B_MISSED": "Inconnu",
  "spam.dialog.rating.C_PING": "Appel Ping",
  "spam.dialog.rating.D_POLL": "Sondage",
  "spam.dialog.rating.E_ADVERTISING": "Publicité",
  "spam.dialog.rating.F_GAMBLE": "Jeu-concours",
  "spam.dialog.rating.G_FRAUD": "Fraude",
  "spam.dialog.submit": "Signaler",
  "spam.dialog.working": "C'est signalé…",
  "spam.dialog.done": "Merci — Évaluation envoyée.",
  "spam.dialog.error.no_token": "Un compte PhoneBlock est nécessaire pour laisser un avis.",
  "pb.dialog.error.moved": "Le répertoire sélectionné n'existe plus. Veuillez en choisir un autre.",
  "spam.dialog.comment": "Raison",
  "spam.dialog.comment.hint": "(facultatif, sera visible publiquement)",
  "status.rec.enable": "Enregistrer des conversations en mode dialogue",
  "status.rec.legal": "L'enregistrement des conversations téléphoniques relève de ta responsabilité (article 201 du Code pénal allemand, RGPD).",
  "status.rec.usage": "{count} fichiers, {used} de {cap} Mo occupés.",
  "status.rec.play": "Lire l'enregistrement",
  "status.rec.stop": "Mettre la lecture en pause",
  "status.rec.download": "Télécharger l'enregistrement (WAV)",
  "status.rec.delete": "Supprimer l'enregistrement",
  "status.rec.delete.confirm": "Supprimer cet enregistrement ? L'appel reste dans la liste.",
  "status.rec.failed": "L'enregistrement n'a pas pu être chargé.",
  "status.api.fail.hint": "Vérifiez la connexion Internet du routeur et les paramètres réseau (passerelle, DNS) des dongles.",
  "status.thresholds.intro": "Nombre de votes « PhoneBlock » à partir duquel le dongle intercepte un appel. Les votes « Direct » ont plus de poids que les votes « Range », d'où des valeurs distinctes.",
  "status.system.wifi.weak_hint": "Signal Wi-Fi faible : rapprochez le dongle de la Fritz!Box ou d'un répéteur. En mode Mesh, l'aperçu Mesh de la Fritz!Box indique à quelle box elle est connectée.",
  "status.system.hostname.help": "C'est sous ce nom que le dongle est accessible sur le réseau domestique. Si vous disposez de plusieurs dongles, chacun doit avoir son propre nom. Les caractères autorisés sont a–z, 0–9 et -, pour un maximum de 32 caractères. Laissez le champ vide pour « answerbot ».",
  "status.system.hostname.saved": "Enregistré. {name}.local est désormais accessible. Dans la Fritz!Box (liste des appareils et http://{name}/), le nouveau nom apparaîtra après le redémarrage des dongles.",
  "status.auth.no_token": "La protection d'accès nécessite un jeton PhoneBlock configuré (voir l'étape 2 ci-dessus). Ce n'est qu'alors que le dongle pourra vérifier ton identité auprès du serveur.",
  "login.intro": "La protection d'accès à ce dongle est activée. Clique ci-dessous pour te connecter via ton compte PhoneBlock — tu seras brièvement redirigé vers phoneblock.net, puis automatiquement renvoyé sur cette page.",
  "login.remember.help": "Enregistre un cookie sur cet appareil afin que le dongle puisse vous reconnaître la prochaine fois sans passer par phoneblock.net. Un seul navigateur à la fois est « mémorisé ».",
  "login.error.mismatch": "Échec de la connexion — ce compte PhoneBlock n'est pas le propriétaire de ce dongle.",
  "login.error.mismatch_named": "Échec de la connexion — ce dongle est associé au compte {expected}, mais vous êtes connecté en tant qu'autre utilisateur.",
  "status.reset.intro": "Efface tous les paramètres du dongle (identifiants SIP, jeton PhoneBlock, historique des erreurs) et redémarre l'appareil.",
  "status.reset.confirm": "Voulez-vous vraiment effacer tous les paramètres du dongle et redémarrer ?",
  "status.reset.running": "Réinitialisation en cours — le dongle va redémarrer dans un instant.",
  "status.fw.intro": "Téléverser un nouveau fichier de micrologiciel ou le vérifier directement par rapport au CDN PhoneBlock. Dans les deux cas, la nouvelle version est enregistrée dans l'emplacement Flash inactif ; après le redémarrage, le dongle démarre avec la nouvelle version et revient automatiquement à la version précédente en cas d'erreurs.",
  "status.fw.confirm": "Installer le nouveau micrologiciel et redémarrer le dongle ?",
  "status.fw.done": "Transfert du micrologiciel — Le dongle redémarre. Veuillez patienter un instant, puis actualiser la page.",
  "status.fw.check.older": "Sur ce canal, seule la version antérieure {version} est disponible (la version installée est {current}). Le dongle reste sur {current} jusqu'à ce qu'une version plus récente soit disponible.",
  "status.fw.check.installed": "Version {version} installée — Le dongle redémarre. Veuillez patienter un instant, puis actualiser la page.",
  "status.fw.auto_update.help": "Lorsque cette option est activée, le dongle vérifie une fois par jour si une version plus récente est disponible sur le CDN PhoneBlock et l'installe automatiquement. Lors du téléchargement manuel d'un firmware, cette option est automatiquement désactivée afin que la vérification quotidienne ne remplace pas la version que vous avez choisie manuellement — réactivez-la ici si vous souhaitez suivre le flux de mises à jour.",
  "status.fw.crash_report.help": "Si le dongle redémarre en raison d'une erreur logicielle, un extrait de mémoire est enregistré sur une partition Flash réservée à cet effet. Si cette option est activée, le dongle télécharge cet extrait sur phoneblock.net lors de son prochain démarrage — cela nous aide à détecter et à corriger les défauts sur le terrain. Désactivez cette option si vous ne souhaitez pas que le dongle envoie ces rapports ; les extraits enregistrés seront alors supprimés localement au lieu d'être envoyés.",
  "status.mail.intro": "Le dongle peut t'envoyer des notifications d'état directement par e-mail, via ton propre compte de messagerie. Saisis les identifiants de ton fournisseur de messagerie ; le dongle n'enverra pas plus d'une notification par jour via ce compte.",
  "status.mail.spam_only.help": "L'e-mail récapitulatif des appels ne répertorie que les appels que le dongle a bloqués en tant que SPAM. Les appelants légitimes et inconnus n'y figurent pas, et si seuls ce type d'appels sont enregistrés, aucun e-mail n'est envoyé.",
  "status.mail.on_update.help": "Envoie un e-mail une fois que le dongle s'est mis à jour vers une nouvelle version du micrologiciel, avec un lien vers le journal des modifications.",
  "status.localcache.intro": "Une fois par jour, le dongle télécharge la liste de blocage actuelle ainsi que vos listes noires et blanches personnelles, puis les enregistre sur sa mémoire flash interne. Les appels entrants sont ainsi traités, dans la plupart des cas, sans requête au serveur — ce qui garantit une plus grande rapidité et une fiabilité même en cas de problèmes de réseau.",
  "status.localcache.enable.help": "Charge la liste noire sur le dongle et traite les appels localement. Désactivé : chaque appel est vérifié directement sur le serveur — ce qui est plus lent et n'est possible que si la connexion Internet fonctionne.",
  "status.webhook.intro": "À chaque appel figurant dans la liste des appels, le dongle envoie les données de l'appel via une requête HTTP POST à cette adresse, par exemple vers Home Assistant, ioBroker ou Node-RED. Le contenu correspond à une entrée de la liste des appels au format JSON, comportant les mêmes champs que /api/calls.",
  "status.webhook.err.https": "Le protocole https n'est pas pris en charge : le dongle envoie uniquement des données via http, et uniquement sur le réseau domestique.",
  "status.ann.accept_test.help": "Lorsqu’elle est activée, le dongle répond aux appels vers les codes internes de la Fritz!Box (**622, *21#, …) comme s’il s’agissait de spam, c’est-à-dire en diffusant un message d’accueil puis en raccrochant. Cela permet de tester le déroulement de l’appel depuis un téléphone interne sans avoir à enregistrer un véritable numéro sur PhoneBlock.",
  "status.dialog.help": "En mode « Dialogue », le dongle prend l'appel indésirable et fait patienter l'appelant à l'aide de phrases courtes qui réagissent à ses réponses, jusqu'à ce qu'il raccroche – sans limite de temps. En mode « Dialogue », il n'y a pas de message d'accueil : tout enregistrement personnalisé est supprimé lors du changement de mode et ne peut être réimporté qu'en mode « Message d'accueil ».",
  "status.dialog.clips.missing": "Les ensembles de dialogues ne sont pas encore chargés ; en attendant, le dongle raccroche les appels indésirables sans message d'accueil.",
  "status.dialog.clips.failed": "Échec du téléchargement des ensembles de dialogues ({error}) – le dongle réessaiera lors de la prochaine synchronisation. D'ici là, il raccrochera les appels indésirables sans message d'accueil.",
  "status.dialog.clips.unavailable": "Aucune séquence de dialogue n'a été publiée pour cette langue et cet appareil : le dongle met fin aux appels indésirables sans message d'accueil.",
  "status.dialog.vad_min_silence_ms.help": "Durée pendant laquelle l'appelant doit rester silencieux avant que le dongle ne réponde. Valeur par défaut : 500.",
  "status.dialog.speaker.none": "Les voix n'ont pas encore été chargées : le dongle les chargera lors de la prochaine synchronisation.",
  "status.dialog.own.replace_confirm": "Votre propre dialogue sera remplacé par les phrases de {name} – le dongle ne peut contenir qu'un seul dialogue. Téléchargez-le au préalable sous « Créer votre propre dialogue » si vous souhaitez le conserver. Continuer ?",
  "status.dialog.edit.intro": "Vous commencez avec les phrases stockées sur le dongle. Supprimez des enregistrements ou ajoutez-en de nouveaux (WAV/MP3/OGG) ; chacun est ajusté au même volume et les silences à la fin sont supprimés. Chaque phase nécessite au moins une phrase, que le dongle sélectionne au hasard parmi celles-ci.",
  "status.dialog.edit.upload": "Télécharger sur le dongle",
  "status.dialog.edit.reason.size": "La taille totale des enregistrements dépasse la capacité du dongle : supprimez ou raccourcissez certains enregistrements.",
  "status.dialog.edit.no_set": "Il n'y a pas encore de boîte de dialogue sur le dongle – ajoutez des enregistrements pour chaque phase.",
  "status.dialog.edit.changed": "Le dongle contient désormais d'autres enregistrements (changement de langue ou de locuteur). Vos modifications dans l'éditeur n'ont pas encore été téléchargées.",
  "hero.intro": "Deux étapes suffisent pour que votre dongle bloque automatiquement les appels indésirables. Cochez les deux cases ; ce n'est qu'alors que l'appareil sera prêt à l'emploi.",
  "hero.step1.todo": "Enregistrer le dongle sur votre système téléphonique",
  "hero.step2.todo": "Se connecter à PhoneBlock — pour que le dongle sache ce qu'est un spam",
  "sip.entry.intro": "Choisissez la manière dont le dongle se connecte à votre système téléphonique.",
  "sip.entry.fritzbox.desc": "Configuration automatique. Le dongle s'enregistre automatiquement en tant que téléphone IP.",
  "sip.fb.conflict.one": "Un dongle PhoneBlock est déjà enregistré dans la Fritz!Box :",
  "sip.fb.conflict.many": "Plusieurs dongles PhoneBlock sont déjà enregistrés dans la Fritz!Box :",
  "sip.fb.conflict.replace": "Remplacer « {entry} » – par exemple après la réinitialisation de ce dongle",
  "sip.manual.local_port.hint": "Port sur lequel le dongle reçoit les messages SIP (par défaut : 15060). Vide = valeur par défaut.",
  "sip.manual.fwd.body": "Si le dongle se connecte directement au fournisseur d'accès (plutôt que via un routeur VoIP) et que ce dernier ne prend en charge que le protocole UDP, configurez dans le routeur une redirection UDP vers le dongle — avec le même port (port externe = port interne) : {sip} (SIP) et {rtp} (RTP). L'adresse IP publique est détectée automatiquement par le dongle (visible en haut dans l'état) ; il n'est pas nécessaire de la saisir. Cela ne fonctionne qu’avec une véritable adresse IPv4 publique (propre) — et non avec DS-Lite/CGNAT (IPv4 partagée), où aucune redirection n’est possible ; dans ce cas, seule la solution TCP/TLS peut aider, si le fournisseur la prend en charge.",
  "token.intro": "Pour chaque appel entrant, le dongle interroge la base de données PhoneBlock. Pour cela, tu as besoin d'un jeton.",
  "status.phonebook.intro": "Les appelants que la Fritz!Box ne reconnaît pas apparaissent sans nom dans la liste des appels. Le bouton « + » situé à côté te permet de les ajouter comme contact dans la Fritz!Box ; le téléphone affiche alors leur nom et le dongle ne demande plus ce numéro à PhoneBlock.",
  "spam.dialog.intro": "Ton évaluation est prise en compte par tous les utilisateurs de PhoneBlock et est associée à ton compte. Elle ne peut pas être annulée via le dongle — cela n'est possible que sur phoneblock.net.",
  "spam.dialog.error.is_contact": "Cet appelant figure dans ton répertoire. Une entrée du répertoire a toujours la priorité sur le dongle ; il n'est donc pas possible de signaler ce numéro comme spam.",
  "status.rec.help": "Le dongle enregistre les conversations qu’il mène en mode dialogue avec les appelants indésirables – les deux côtés, pour une durée maximale de {min} par appel. Tu peux les écouter, les télécharger et les supprimer dans la liste des appels ; lorsqu'un appel disparaît de la liste, son enregistrement est supprimé."
}
