diff --git a/src/lib/i18n/fr-CA.json b/src/lib/i18n/fr-CA.json new file mode 100644 index 0000000..ab4dc62 --- /dev/null +++ b/src/lib/i18n/fr-CA.json @@ -0,0 +1,531 @@ +{ + "nav.recording": "Enregistrement", + "nav.hardware": "Matériel", + "nav.storage": "Stockage", + "nav.calendar": "Calendrier", + "nav.sync": "Synchronisation", + "nav.ai": "IA", + "nav.mcp": "Serveur MCP", + "nav.privacy": "Confidentialité", + "nav.about": "À propos", + "nav.language": "Langue", + + "settings.language.title": "Langue", + "settings.language.display": "Langue d'affichage", + "settings.language.display_hint": "La langue de l'interface de l'application. Ajouter une langue est aussi simple que de déposer un seul fichier de traduction.", + + "settings.transcription.title": "Langue de transcription", + "settings.transcription.label": "Langue", + "settings.transcription.auto": "Détection automatique", + "settings.transcription.applies_hint": "S'applique au prochain enregistrement. La langue réellement utilisée est ensuite affichée sur chaque réunion.", + "settings.transcription.english_only": "Anglais seulement", + "settings.transcription.model_english_only": "« {model} » est en anglais seulement.", + "settings.transcription.no_model": "Aucun modèle sélectionné.", + "settings.transcription.switch_multilingual": "Passez à un modèle multilingue ci-dessus pour choisir une langue.", + + "settings.hardware.title": "Matériel", + "settings.hardware.active_backend": "Moteur actif", + "settings.hardware.model_meta": "· modèle {size}", + "settings.hardware.preferred_backend": "Moteur préféré", + "settings.hardware.auto_backend": "Automatique (le meilleur disponible)", + "settings.hardware.not_available": "non disponible", + "settings.hardware.fallback_hint": "Bascule automatiquement (NPU → NVIDIA → AMD → Intel → CPU) si le moteur choisi ne se charge pas.", + "settings.hardware.audio_devices": "Périphériques audio", + "settings.hardware.recording_device": "Périphérique d'enregistrement", + "settings.hardware.default_system_audio": "Audio système par défaut", + "settings.hardware.recording_device_hint": "WhispAssist enregistre ce que ce périphérique restitue (loopback) — l'autre côté de l'appel. Choisissez une sortie précise si vous ne voulez pas qu'il suive le périphérique par défaut de Windows.", + "settings.hardware.microphone": "Microphone", + "settings.hardware.mic_off": "Désactivé — ne pas capturer mon microphone", + "settings.hardware.default_mic": "Microphone par défaut", + "settings.hardware.mic_hint": "Ajoute votre propre voix à la transcription en direct afin que les deux côtés de la réunion soient captés. Reste sur votre appareil — rien n'est téléversé. Choisissez « Désactivé » pour ne transcrire que l'audio système ci-dessus.", + "settings.hardware.npu_detected": "Accélérateur NPU détecté", + "settings.hardware.ready": "Prêt", + "settings.hardware.downloading": "Téléchargement…", + "settings.hardware.package_needed": "Paquet requis", + "settings.hardware.npu_hint": "Votre NPU nécessite un paquet d'accélération unique (modèle Whisper ONNX{extra}). Il se télécharge en arrière-plan ; vous pouvez aussi le démarrer maintenant.", + "settings.hardware.plus_openvino": " + environnement d'exécution OpenVINO", + "settings.hardware.download_npu": "Télécharger le paquet NPU", + "settings.hardware.dml_title": "Accélération GPU (DirectML)", + "settings.hardware.dml_hint": "Votre GPU peut être accéléré sans Vulkan via DirectML — un paquet unique (modèle Whisper ONNX{extra}).", + "settings.hardware.plus_directml": " + environnement d'exécution DirectML", + "settings.hardware.download_dml": "Télécharger le paquet DirectML", + "settings.hardware.detection_unavailable": "Détection du matériel indisponible.", + "settings.hardware.low_overhead": "Préréglage à faible charge", + "settings.hardware.low_overhead_note": "CPU + plus petit modèle, pour une utilisation sur batterie/en arrière-plan", + "settings.hardware.models": "Modèles", + "settings.hardware.downloading_model": "Téléchargement de {name}", + "settings.hardware.active_badge": "Actif", + "settings.hardware.installed": "Installé", + "settings.hardware.use": "Utiliser", + "settings.hardware.remove": "Supprimer", + "settings.hardware.cant_remove_active": "Impossible de supprimer le modèle actif", + "settings.hardware.download": "Télécharger", + "settings.hardware.diarization": "Diarisation des locuteurs", + "settings.hardware.diarization_hint": "Installez les deux modèles pour que les enregistrements terminés soient séparés par locuteur (Locuteur 1, Locuteur 2, …) au lieu d'une seule transcription continue. Fonctionne entièrement hors ligne, une fois par réunion après son arrêt. Sans eux, chaque ligne est attribuée à un seul locuteur.", + + "settings.storage.title": "Stockage", + "settings.storage.location_label": "Emplacement", + "settings.storage.location_hint": "Changer l'emplacement de stockage n'est pas encore pris en charge — c'est ici que résident actuellement les réunions, les modèles et la base de données.", + "settings.storage.retention_title": "Conservation", + "settings.storage.retention_hint": "Supprime automatiquement les réunions les plus anciennes au-delà d'une limite. Vérifié une fois au démarrage ; vide signifie aucune limite. Ne touche jamais à une réunion en cours d'enregistrement.", + "settings.storage.max_age": "Âge maximal (jours)", + "settings.storage.max_size": "Taille maximale (Go)", + "settings.storage.no_limit": "aucune limite", + "settings.storage.export_import_title": "Exportation et importation", + "settings.storage.export_hint_1": "Déplacez les enregistrements entre ordinateurs sous forme de dossiers de paquets portables (audio, transcription, notes, résumé et un", + "settings.storage.export_hint_2": "manifeste). Exportez vers n'importe quel dossier — un lecteur synchronisé, une clé USB ou le point de montage local d'une cible de synchronisation — puis importez-le sur l'autre machine. Les réunions importées obtiennent un nouvel identifiant, de sorte qu'une réimportation n'écrase jamais rien.", + "settings.storage.export_dialog_title": "Exporter toutes les réunions vers…", + "settings.storage.import_dialog_title": "Importer un paquet (ou un dossier de paquets)…", + "settings.storage.exporting": "Exportation…", + "settings.storage.export_all": "Exporter toutes les réunions…", + "settings.storage.importing": "Importation…", + "settings.storage.import_all": "Importer des réunions…", + "settings.storage.exported_one": "{n} réunion exportée.", + "settings.storage.exported_many": "{n} réunions exportées.", + "settings.storage.imported_one": "{n} réunion importée.", + "settings.storage.imported_many": "{n} réunions importées.", + + "settings.calendar.title": "Calendrier et Outlook .pst", + "settings.calendar.intro_1": "Importez des événements et des participants depuis une sauvegarde Outlook locale", + "settings.calendar.intro_2": "— en lecture seule, rien n'est réécrit dans le fichier. Rien ne quitte cet appareil.", + "settings.calendar.pst_file": "Fichier .pst", + "settings.calendar.no_file": "Aucun fichier sélectionné", + "settings.calendar.browse": "Parcourir…", + "settings.calendar.password": "Mot de passe", + "settings.calendar.password_note": "rarement nécessaire", + "settings.calendar.optional": "facultatif", + "settings.calendar.import_range": "Plage d'importation", + "settings.calendar.range_30": "30 derniers jours", + "settings.calendar.range_90": "90 derniers jours", + "settings.calendar.range_180": "6 derniers mois", + "settings.calendar.range_365": "Dernière année", + "settings.calendar.range_all": "Toute la période", + "settings.calendar.range_hint": "Une boîte de courriel ancienne peut contenir des années d'entrées récurrentes/de congés — réduire la plage limite le calendrier importé à ce qui est réellement pertinent. S'applique à ce bouton d'importation ainsi qu'à la réimportation automatique au lancement.", + "settings.calendar.importing": "Importation…", + "settings.calendar.import": "Importer", + "settings.calendar.import_progress": "{processed}/{total} événements", + "settings.calendar.auto_reimport": "Réimporter ce fichier automatiquement au lancement", + "settings.calendar.auto_reimport_hint": "S'exécute une fois au démarrage, pas sur une minuterie — la réimportation peut être répétée sans risque (les événements existants sont mis en correspondance et mis à jour, pas dupliqués).", + "settings.calendar.import_failed": "Échec de l'importation : {error} — le fichier lui-même n'est pas modifié ; vérifiez le chemin et réessayez.", + "settings.calendar.cleanup_title": "Nettoyer", + "settings.calendar.cleanup_hint": "Les événements déjà rattachés à une réunion enregistrée sont toujours conservés, quelle que soit l'option choisie ci-dessous.", + "settings.calendar.cleanup_30": "Plus anciens que 30 jours", + "settings.calendar.cleanup_90": "Plus anciens que 90 jours", + "settings.calendar.cleanup_180": "Plus anciens que 6 mois", + "settings.calendar.cleanup_365": "Plus anciens que 1 an", + "settings.calendar.cleanup_all": "Tout supprimer", + "settings.calendar.cleaning": "Nettoyage…", + "settings.calendar.cleanup_btn": "Nettoyer le calendrier", + "settings.calendar.cleanup_result": "{deleted}{extra} supprimés.", + "settings.calendar.cleanup_kept": ", {n} conservés (liés à une réunion)", + "settings.calendar.cleanup_failed": "Échec du nettoyage : {error}", + "settings.calendar.imported_events": "Événements importés", + "settings.calendar.no_events": "Aucun événement importé pour l'instant.", + "settings.calendar.search_title": "Rechercher un titre", + "settings.calendar.search_placeholder": "Nom de la réunion…", + "settings.calendar.date_label": "Date", + "settings.calendar.events_count": "{shown} sur {total} événements", + "settings.calendar.untitled": "(sans titre)", + + "settings.dialog_title": "Paramètres", + "settings.close": "Fermer", + "settings.close_title": "Fermer (Échap)", + + "settings.sync.stub": "Mode aperçu — le moteur de synchronisation n'est pas encore implémenté (Phase 9). Les modifications ne sont conservées que dans l'interface.", + "settings.sync.title": "Synchronisation et téléversement", + "settings.sync.enable_label": "Activer le téléversement des artefacts de réunion vers les cibles configurées", + "settings.sync.enable_hint": "Désactivé par défaut. Rien n'est téléversé sauf si ceci est activé et qu'une cible est activée. Les cibles auto-hébergées conservent les données sur votre propre serveur ; les nuages tiers sont clairement étiquetés.", + "settings.sync.targets_title": "Cibles", + "settings.sync.no_targets": "Aucune cible pour l'instant. Ajoutez-en une ci-dessous.", + "settings.sync.third_party": "tiers", + "settings.sync.your_server": "votre serveur", + "settings.sync.edit": "Modifier", + "settings.sync.remove": "Supprimer", + "settings.sync.edit_target": "Modifier la cible", + "settings.sync.add_target": "Ajouter une cible", + "settings.sync.webdav_hint": "WebDAV couvre Nextcloud, ownCloud, Cloudreve, Seafile et Synology. (Seafile : activez SeafDAV côté serveur.)", + "settings.sync.name": "Nom", + "settings.sync.name_placeholder": "Nextcloud maison", + "settings.sync.provider": "Fournisseur", + "settings.sync.server_url": "URL du serveur", + "settings.sync.server_url_note_1": "Juste l'URL de votre serveur — WhispAssist ajoute", + "settings.sync.server_url_note_2": "automatiquement.", + "settings.sync.remote_folder": "Dossier distant", + "settings.sync.username": "Nom d'utilisateur", + "settings.sync.app_password": "Mot de passe d'application", + "settings.sync.pw_keep": "laissez vide pour conserver le mot de passe actuel", + "settings.sync.pw_store": "stocké dans le gestionnaire d'identifiants du système d'exploitation", + "settings.sync.upload_legend": "Téléverser", + "settings.sync.artifact_transcript": "transcription", + "settings.sync.artifact_notes": "notes", + "settings.sync.artifact_summary": "résumé", + "settings.sync.artifact_recording": "enregistrement (.wav, si conservé)", + "settings.sync.allow_plaintext": "Autoriser le http en clair pour une adresse LAN (non recommandé)", + "settings.sync.encrypt_before": "Chiffrer avant le téléversement (la destination ne stocke que le texte chiffré)", + "settings.sync.requires_vault": "— nécessite un coffre déverrouillé", + "settings.sync.test_connection": "Tester la connexion", + "settings.sync.save_changes": "Enregistrer les modifications", + "settings.sync.add_target_btn": "Ajouter la cible", + "settings.sync.cancel": "Annuler", + "settings.sync.third_party_banner": "{kind} est un nuage tiers — le téléversement envoie vos données hors de votre appareil vers {kind}.", + "settings.sync.link_account": "Lier le compte {kind}…", + "settings.sync.oauth_hint": "Ouvre une connexion OAuth (redirection loopback) ; le jeton est stocké dans le gestionnaire d'identifiants du système d'exploitation.", + "settings.sync.footnote": "Les identifiants ne sont jamais écrits dans les paramètres ni dans la base de données — uniquement dans le gestionnaire d'identifiants du système d'exploitation. TLS est requis pour les cibles hors LAN.", + + "settings.ai.title": "Fournisseur de résumés IA", + "settings.ai.intro_1": "Les résumés s'exécutent par défaut sur un LLM local. Pointez ceci vers Ollama sur ce PC ou une autre machine de votre LAN (par ex.", + "settings.ai.intro_2": "— les deux comptent comme local, donc rien ne quitte votre réseau. Les fournisseurs hébergés (Anthropic) sont facultatifs, désactivés par défaut, et envoient la transcription à un tiers dès que vous en activez un.", + "settings.ai.provider": "Fournisseur", + "settings.ai.off": "Désactivé", + "settings.ai.provider_ollama": "Ollama (local / LAN)", + "settings.ai.provider_custom": "Personnalisé (compatible OpenAI)", + "settings.ai.provider_anthropic": "Anthropic (Claude) — hébergé, quitte cet appareil", + "settings.ai.endpoint": "Point de terminaison", + "settings.ai.model": "Modèle", + "settings.ai.api_key": "Clé API", + "settings.ai.api_key_set_placeholder": "•••••••••••••••• (déjà définie — laissez vide pour la conserver)", + "settings.ai.show_api_key": "Afficher la clé API", + "settings.ai.hide_api_key": "Masquer la clé API", + "settings.ai.anthropic_banner": "Anthropic est un service hébergé tiers — la transcription de cette réunion quitte votre appareil lorsque vous générez un résumé.", + "settings.ai.endpoint_banner": "Ce point de terminaison n'est pas sur votre machine ni sur votre LAN — votre transcription quitterait votre réseau.", + "settings.ai.saving": "Enregistrement…", + "settings.ai.save": "Enregistrer", + "settings.ai.test_connection": "Tester la connexion", + "settings.ai.this_hosted_provider": "ce fournisseur hébergé", + "settings.ai.reachable": "Joignable", + "settings.ai.unreachable": "Injoignable", + "settings.ai.model_count_one": "· {n} modèle", + "settings.ai.model_count_many": "· {n} modèles", + "settings.ai.on_lan": "· sur votre machine / LAN", + "settings.ai.leaves_network": "· quitte votre réseau", + "settings.ai.advanced_title": "Configuration avancée d'Ollama", + "settings.ai.changed": "{n} modifiés", + "settings.ai.reset_all": "Tout réinitialiser aux valeurs par défaut", + "settings.ai.system_prompt": "Invite système", + "settings.ai.system_prompt_placeholder": "par ex. Vous êtes un rédacteur de résumés de réunion concis.", + "settings.ai.system_prompt_hint": "Ajoutée avant le format de sortie requis par WhispAssist, afin que vos instructions ne puissent pas casser l'analyse du résumé/des actions à mener.", + "settings.ai.think": "Réfléchir", + "settings.ai.think_help": "Effort de raisonnement (modèles de raisonnement uniquement).", + "settings.ai.keep_alive": "Maintenir en vie", + "settings.ai.keep_alive_help": "Durée pendant laquelle le modèle reste en RAM. par ex. 5m, 1h, 0 (décharger), -1 (indéfiniment).", + "settings.ai.runtime_hardware": "Exécution et matériel", + "settings.ai.rarely_needed": "— rarement nécessaire", + "settings.ai.save_advanced": "Enregistrer les options avancées", + "settings.ai.saved": "Enregistré", + "settings.ai.turn_off": "Désactiver", + "settings.ai.default_value": "Par défaut {value}.", + "settings.ai.reset_default": "Réinitialiser à la valeur par défaut", + "settings.ai.reset_field": "Réinitialiser {name}", + + "settings.mcp.title": "Serveur MCP", + "settings.mcp.banner_1": "Cela permet à votre propre agent de codage (Claude Code, Codex, Copilot, OpenCode, …) de récupérer le contexte de la réunion sur votre machine locale. Une fois connecté,", + "settings.mcp.banner_agent": "cet agent", + "settings.mcp.banner_2": "peut transmettre ce qu'il lit au nuage de son propre fournisseur de modèle — hors du contrôle de WhispAssist. WhispAssist lui-même n'envoie jamais ces données où que ce soit ; le serveur n'écoute que sur cet appareil (", + "settings.mcp.banner_3": ") et chaque lecture est journalisée ci-dessous.", + "settings.mcp.enable": "Activer le serveur MCP", + "settings.mcp.enable_hint": "Désactivé par défaut. Loopback uniquement, protégé par jeton — rien n'est accessible depuis le réseau.", + "settings.mcp.transport": "Transport", + "settings.mcp.transport_http": "HTTP en flux continu", + "settings.mcp.transport_stdio": "stdio (l'agent lance un processus)", + "settings.mcp.port": "Port", + "settings.mcp.transport_change_hint": "Pour changer de transport/port, désactivez d'abord le serveur, puis réactivez-le.", + "settings.mcp.scope_title": "Portée", + "settings.mcp.expose": "Exposer", + "settings.mcp.scope_none": "Aucune — rien n'est partagé", + "settings.mcp.scope_selected": "Sélectionnés — uniquement les briefs de fonctionnalité que vous avez marqués comme partagés", + "settings.mcp.scope_all": "Tout — réunions, transcriptions, actions à mener et briefs partagés", + "settings.mcp.expose_recordings": "Autoriser aussi les réunions avec un enregistrement sauvegardé (désactivé par défaut — la transcription d'une réunion enregistrée est retenue même en portée « Tout » jusqu'à ce que ceci soit activé)", + "settings.mcp.token_title": "Nouveau jeton d'authentification — affiché une seule fois, copiez-le maintenant", + "settings.mcp.token_hint": "Ceci ne sera plus affiché. Il est stocké dans le gestionnaire d'identifiants du système d'exploitation ; si vous le perdez, désactivez puis réactivez le serveur pour en générer un nouveau.", + "settings.mcp.copied": "Copié", + "settings.mcp.copy": "Copier", + "settings.mcp.endpoint": "Point de terminaison", + "settings.mcp.endpoint_hint": "Pointez la configuration du client MCP de votre agent vers {kind}, avec le jeton ci-dessus comme identifiant bearer.", + "settings.mcp.kind_command": "commande", + "settings.mcp.kind_url": "URL", + "settings.mcp.access_log": "Journal d'accès", + "settings.mcp.access_log_hint": "Chaque lecture d'outil effectuée par un agent, autorisée ou refusée (FR-MCP-5).", + "settings.mcp.no_reads": "Aucun agent n'a encore rien lu.", + "settings.mcp.log_meeting": "réunion {id}", + "settings.mcp.refresh": "Actualiser", + + "settings.privacy.title": "Confidentialité", + "settings.privacy.intro": "Ce que WhispAssist est réellement autorisé à envoyer hors de cet appareil actuellement. Avec tout désactivé (le réglage par défaut), rien ne quitte l'appareil.", + "settings.privacy.llm_endpoint": "Point de terminaison LLM", + "settings.privacy.off": "désactivé", + "settings.privacy.local_only": "local uniquement", + "settings.privacy.leaves_device": "quitte cet appareil", + "settings.privacy.sync_label": "Synchronisation", + "settings.privacy.enabled": "activée", + "settings.privacy.mcp_label": "Serveur MCP", + "settings.privacy.mcp_on": "activé · {scope}", + "settings.privacy.mcp_loopback_note": "Entrant sur loopback uniquement — n'ajoute rien à la liste de sortie ci-dessus. Un agent connecté peut néanmoins transmettre ce qu'il lit à son propre fournisseur de modèle ; voir l'onglet du serveur MCP.", + "settings.privacy.egress_title": "Liste d'autorisation de sortie", + "settings.privacy.no_egress": "Aucun hôte n'est autorisé — WA n'effectue aucune sortie de contenu.", + "settings.privacy.sync_targets_title": "Cibles de synchronisation", + "settings.privacy.third_party": "tiers", + "settings.privacy.your_server": "votre serveur", + "settings.privacy.tls": "TLS", + "settings.privacy.no_tls": "sans TLS", + "settings.privacy.refresh": "Actualiser", + "settings.privacy.unavailable": "Autovérification de confidentialité indisponible.", + "settings.privacy.vault_title": "Coffre de chiffrement", + "settings.privacy.vault_intro": "Chiffrez les notes, transcriptions et résumés au repos avec un mot de passe. (Les fichiers audio ne sont pas encore chiffrés.)", + "settings.privacy.vault_password": "Mot de passe du coffre", + "settings.privacy.enable_vault": "Activer le coffre", + "settings.privacy.vault_pw_hint": "Utilisez au moins 8 caractères. Si vous l'oubliez, le contenu chiffré ne pourra pas être récupéré.", + "settings.privacy.vault_locked_1": "Le coffre est ", + "settings.privacy.locked_word": "verrouillé", + "settings.privacy.vault_locked_2": ". Déverrouillez pour lire les réunions chiffrées.", + "settings.privacy.password": "Mot de passe", + "settings.privacy.unlock": "Déverrouiller", + "settings.privacy.vault_unlocked_1": "Le coffre est ", + "settings.privacy.unlocked_word": "déverrouillé", + "settings.privacy.vault_unlocked_2": ". Les nouvelles notes, transcriptions et résumés sont chiffrés au repos.", + "settings.privacy.lock_now": "Verrouiller maintenant", + "settings.privacy.change_password": "Changer le mot de passe", + "settings.privacy.current_password": "Mot de passe actuel", + "settings.privacy.new_password": "Nouveau mot de passe", + + "settings.about.title": "À propos", + "settings.about.tagline": "Un assistant de réunion entièrement local, à code source ouvert et natif Windows.", + "settings.about.build_commit": "Commit de compilation", + + "consent.heading": "Avant d'enregistrer", + "consent.body": "Enregistrer des conversations sans le consentement des participants peut être illégal dans votre région. Vérifiez les lois locales sur l'enregistrement. Ceci est une mise en garde, pas un avis juridique.", + "consent.accept": "Je comprends — activer l'enregistrement", + "consent.cancel": "Annuler", + + "hosted.heading": "Avant d'utiliser {provider}", + "hosted.body_1": "Générer avec", + "hosted.body_2": "envoie la transcription de cette réunion sur leurs serveurs — elle quitte cet appareil et est soumise à leur politique de confidentialité. WhispAssist n'a aucun contrôle sur le traitement des données une fois qu'elles quittent votre appareil. Ceci est désactivé par défaut ; vous le choisissez maintenant.", + "hosted.accept": "Je comprends — continuer", + "hosted.cancel": "Annuler", + + "theme.group": "Thème", + "theme.system": "Suivre le système", + "theme.light": "Clair", + "theme.dark": "Sombre", + + "import.dialog_label": "Ajouter une réunion depuis un fichier ou une URL", + "import.title": "Ajouter une réunion", + "import.close": "Fermer", + "import.close_title": "Fermer (Échap)", + "import.body": "Importez un enregistrement existant — un fichier audio/vidéo local ou un lien (YouTube, une page de diffusion en continu ou une URL média directe). Il est transcrit et diarisé comme un enregistrement en direct.", + "import.file_or_url": "Fichier ou URL", + "import.source_placeholder": "Collez une URL ou parcourez pour trouver un fichier…", + "import.choose_file": "Choisir un fichier local", + "import.browse": "Parcourir…", + "import.title_label": "Titre", + "import.optional": "facultatif", + "import.title_placeholder": "Par défaut, le nom du fichier", + "import.filter_av": "Audio / vidéo", + "import.requires_1": "Nécessite", + "import.requires_2": "installé et dans votre PATH (plus", + "import.requires_3": "pour les URL). WhispAssist ne les inclut pas.", + "import.importing": "Importation… cela peut prendre un moment", + "import.import": "Importer", + "import.cancel": "Annuler", + + "tagchip.filter": "Filtrer les réunions marquées « {tag} »", + "tagchip.remove": "Supprimer l'étiquette {tag}", + + "levelmeter.system_mic": "Niveau d'entrée du système et du microphone", + "levelmeter.system": "Niveau d'entrée du système", + + "app.tagline": "local · privé", + "app.note_template": "Modèle de notes", + "app.no_template": "Aucun modèle", + "app.add_meeting": "Ajouter une réunion", + "app.add_meeting_title": "Ajouter une réunion depuis un fichier ou une URL", + "app.record": "Enregistrer", + "app.record_title": "Démarrer l'enregistrement (Ctrl+Maj+R)", + "app.stop": "Arrêter", + "app.stop_title": "Arrêter l'enregistrement (Ctrl+Maj+R)", + "app.cancel": "Annuler", + "app.cancel_title": "Abandonner cet enregistrement et le supprimer", + "app.recording": "Enregistrement…", + "app.backend_title": "Moteur de transcription actif", + "app.retention_title": "Enregistrer l'audio en .wav pour cette réunion", + "app.saving": "enregistrement", + "app.not_saved": "non enregistré", + "app.reconnecting": "reconnexion du périphérique audio…", + "app.settings": "Paramètres", + "app.settings_title": "Paramètres (Ctrl+,)", + "app.discard_confirm": "Abandonner cet enregistrement ? Son audio et sa transcription seront supprimés.", + "app.announce_started": "Enregistrement démarré", + "app.announce_paused": "Enregistrement en pause", + "app.announce_stopped": "Enregistrement arrêté", + "app.consent_dialog": "Consentement à l'enregistrement", + "app.vault_dialog": "Déverrouiller le coffre de chiffrement", + "app.vault_title": "Déverrouiller le coffre de chiffrement", + "app.vault_desc": "Vos réunions sont chiffrées au repos. Saisissez votre mot de passe pour les lire.", + "app.vault_password": "Mot de passe du coffre", + "app.vault_incorrect": "Mot de passe incorrect", + "app.unlock": "Déverrouiller", + "app.continue_locked": "Continuer verrouillé", + "app.show_meetings": "Afficher la liste des réunions", + "app.hide_meetings": "Masquer la liste des réunions", + "app.show_summary": "Afficher le panneau de résumé", + "app.hide_summary": "Masquer le panneau de résumé", + "app.resize_meetings": "Redimensionner la liste des réunions", + "app.resize_summary": "Redimensionner le panneau de résumé", + + "meetings.search_placeholder": "Rechercher des réunions…", + "meetings.search_aria": "Rechercher des réunions", + "meetings.filter_tag_aria": "Filtrer par étiquette", + "meetings.all_tags": "Toutes les étiquettes", + "meetings.from_date_aria": "À partir de la date", + "meetings.to_date_aria": "Jusqu'à la date", + "meetings.bulk_format_aria": "Format d'exportation groupée", + "meetings.bulk_export": "Exportation groupée", + "meetings.bulk_export_title": "Exporter toutes les réunions correspondant aux filtres d'étiquette/date ci-dessus", + "meetings.exporting": "Exportation…", + "meetings.exported_one": "{n} réunion exportée.", + "meetings.exported_many": "{n} réunions exportées.", + "meetings.searching": "Recherche…", + "meetings.loading": "Chargement des réunions…", + "meetings.no_matches": "Aucun résultat.", + "meetings.empty": "Aucune réunion pour l'instant — cliquez sur Enregistrer ci-dessus pour commencer.", + "meetings.status.recording": "enregistrement", + "meetings.status.transcribing": "transcription", + "meetings.status.recovering": "récupération", + "meetings.status.error": "erreur", + "meetings.resume": "Reprendre la transcription", + "meetings.delete_aria": "Supprimer la réunion", + "meetings.delete_confirm": "Supprimer cette réunion ? Cela supprime son enregistrement, sa transcription et ses notes.", + + "transcript.heading": "Transcription", + "transcript.title_aria": "Titre de la réunion", + "transcript.lang_title": "Langue de transcription", + "transcript.lang_auto": "détection en cours…", + "transcript.show": "Afficher la transcription", + "transcript.hide": "Masquer la transcription", + "transcript.empty": "Aucune transcription pour cette réunion.", + "transcript.will_appear": "La transcription apparaîtra ici au fur et à mesure de l'enregistrement.", + "transcript.play_from_here": "Lire à partir d'ici", + "transcript.resize": "Redimensionner la transcription et les notes", + "transcript.reprocess_placeholder": "Re-transcrire avec…", + "transcript.reprocess_lang_aria": "Langue de retraitement", + "transcript.reprocess_keep_lang": "Conserver la langue actuelle", + "transcript.reprocess_go": "Lancer", + "transcript.retranscribing": "Re-transcription…", + "transcript.has_note": "Comporte une note", + "transcript.note_placeholder": "Ajouter une note pour ce moment…", + "transcript.note_aria": "Note pour cette ligne de transcription", + "transcript.filter_md": "Markdown", + "transcript.filter_pdf": "PDF", + "transcript.filter_docx": "Document Word", + "transcript.filter_obsidian": "Note Obsidian", + + "notes.heading": "Notes", + "notes.show": "Afficher les notes", + "notes.hide": "Masquer les notes", + "notes.placeholder": "Notes…", + "notes.live_placeholder": "Tapez des notes pendant que vous parlez…", + "notes.toolbar_aria": "Mise en forme des notes", + "notes.bold": "Gras", + "notes.italic": "Italique", + "notes.h1": "Titre 1", + "notes.h2": "Titre 2", + "notes.bullet": "Liste à puces", + "notes.checkbox_title": "Case à cocher", + "notes.checkbox_aria": "Élément de liste à cocher", + "notes.edit_raw": "Modifier le markdown brut", + "notes.render": "Afficher le markdown", + "notes.editor": "Éditeur", + "notes.preview": "Aperçu", + "notes.export_md_title": "Exporter les notes en .md", + "notes.export_pdf_title": "Exporter les notes en .pdf", + "notes.export_docx_title": "Exporter les notes en .docx", + "notes.export_bundle_title": "Exporter audio + transcription + notes vers un dossier", + "notes.export_obsidian_title": "Exporter une note Obsidian (notes + résumé + transcription, sans audio)", + + "summary.recording_heading": "Enregistrement", + "summary.loading_recording": "Chargement de l'enregistrement…", + "summary.sync_heading": "Synchronisation", + "summary.uploading": "Téléversement…", + "summary.upload_now": "Téléverser maintenant", + "summary.no_uploads": "Aucun téléversement pour cette réunion pour l'instant.", + "summary.retry": "réessayer", + "summary.tags_heading": "Étiquettes", + "summary.tags_select": "Sélectionnez une réunion pour l'étiqueter.", + "summary.tag_add_placeholder": "Ajouter une étiquette…", + "summary.tag_first_placeholder": "projet, client, sujet…", + "summary.generating": "Génération…", + "summary.generate_tags": "Générer des étiquettes", + "summary.saving": "Enregistrement…", + "summary.save_tags": "Enregistrer les étiquettes", + "summary.summary_heading": "Résumé", + "summary.ai_provider": "Fournisseur d'IA", + "summary.provider_off": "Désactivé", + "summary.provider_custom": "Personnalisé", + "summary.local": "local", + "summary.leaves_device": "quitte cet appareil", + "summary.this_hosted_provider": "ce fournisseur hébergé", + "summary.select_generate": "Sélectionnez une réunion pour générer un résumé.", + "summary.decisions_heading": "Décisions", + "summary.regenerate": "Régénérer", + "summary.generated_hint": "Généré localement après la réunion (nécessite un fournisseur LLM local).", + "summary.no_provider": "Aucun fournisseur d'IA configuré — activez-en un dans les Paramètres.", + "summary.generate_summary": "Générer un résumé", + "summary.briefs_heading": "Briefs de fonctionnalité", + "summary.briefs_select": "Sélectionnez une réunion pour créer ou consulter des briefs de fonctionnalité.", + "summary.briefs_desc": "Distille cette réunion en une spécification prête pour un agent (nécessite un fournisseur LLM local) — remettez-la à un agent de codage, ou servez-la via le serveur MCP une fois celui-ci activé.", + "summary.brief_repo_placeholder": "Dépôt cible (facultatif), par ex. acme/reporting-web", + "summary.distilling": "Distillation…", + "summary.create_brief": "Créer un brief de fonctionnalité", + "summary.brief_mcp_title": "Disponible lorsque le serveur MCP est activé", + "summary.copied": "Copié", + "summary.copy_md": "Copier en Markdown", + "summary.copy_json": "Copier en JSON", + "summary.brief_problem": "Problème", + "summary.brief_outcome": "Résultat souhaité", + "summary.brief_criteria": "Critères d'acceptation", + "summary.brief_none": "Rien de capturé.", + "summary.brief_context": "Contexte", + "summary.action_items_heading": "Actions à mener", + "summary.ai_select": "Sélectionnez une réunion pour voir ses actions à mener.", + "summary.ai_empty": "Aucune pour l'instant — ajoutez-en une ci-dessous, ou générez un résumé pour les extraire automatiquement.", + "summary.confirmed": "Confirmée", + "summary.ai_text_placeholder": "Action à mener…", + "summary.ai_text_aria": "Texte de l'action à mener", + "summary.owner": "Responsable", + "summary.due_date": "Date d'échéance", + "summary.reminder_title": "Planifier un rappel local pour cette date d'échéance", + "summary.ai_delete_title": "Supprimer cette action à mener", + "summary.ai_delete_aria": "Supprimer l'action à mener", + "summary.add_action_item": "Ajouter une action à mener", + "summary.save_action_items": "Enregistrer les actions à mener", + "summary.calendar_heading": "Événement du calendrier", + "summary.cal_select": "Sélectionnez une réunion pour la lier à un événement du calendrier.", + "summary.event_search_placeholder": "Rechercher un titre d'événement…", + "summary.linked_event": "Événement lié", + "summary.change_event": "Changer d'événement…", + "summary.link_event": "Lier un événement…", + "summary.untitled_event": "(sans titre)", + "summary.no_events_1": "Aucun événement importé pour l'instant — importez-en un", + "summary.no_events_2": "depuis Paramètres → Calendrier.", + "summary.no_events_match": "Aucun événement ne correspond à cette recherche/date — essayez d'en effacer une.", + "summary.organizer_label": "Organisateur : {name}", + "summary.participants_heading": "Participants", + "summary.participants_hint": "Renseigné à partir de l'événement du calendrier lié.", + "summary.speakers_heading": "Locuteurs", + "summary.speakers_select": "Sélectionnez une réunion pour nommer ses locuteurs.", + "summary.no_speakers": "Aucun locuteur détecté pour l'instant.", + "summary.speaker_name_placeholder": "Nom du locuteur", + "summary.save": "Enregistrer", + "summary.cancel": "Annuler", + "summary.name_speaker": "Nommer ce locuteur…", + "summary.add_new_name": "+ Ajouter un nouveau nom…", + + "settings.recording.title": "Enregistrement", + "settings.recording.record_default": "Enregistrer les réunions par défaut", + "settings.recording.save_audio_as": "enregistrer l'audio en", + "settings.recording.default_hint": "Désactivé par défaut. Lorsqu'il est désactivé, l'audio n'est utilisé que pour produire la transcription et est supprimé lorsque la réunion est finalisée. Vous pouvez aussi activer l'enregistrement par réunion.", + "settings.recording.consent_label": "Consentement : {status}.", + "settings.recording.consent_ack": "accepté", + "settings.recording.consent_not": "pas encore accepté", + "settings.recording.auto_label": "Démarrer automatiquement l'enregistrement au début d'un événement du calendrier", + "settings.recording.auto_hint": "Uniquement lorsque WhispAssist est ouvert. Lorsque l'heure de début d'un événement de calendrier importé arrive, un enregistrement commence automatiquement (en utilisant votre réglage de conservation par défaut ci-dessus). Rien ne s'exécute en arrière-plan — la minuterie n'est armée que pendant que l'application est en cours d'exécution. Importez des événements sous Paramètres → Calendrier." +}