{
  "_display_name": "Français",
  "app.tab.core": "⚙️ Cœur",
  "app.tab.diagnostics": "🔍 Diagnostics",
  "app.tab.help": "❓ Aide",
  "app.tab.servers": "🖥️ Serveurs",
  "core.already_running": "Sing-Box déjà en cours (selon l'état interne).",
  "core.already_running_app_message": "L'application est déjà en cours d'exécution. Utilisez l'instance existante ou fermez-la avant d'en lancer une nouvelle.",
  "core.already_running_app_title": "Information",
  "core.button_download": "Télécharger",
  "core.button_download_from_github": "Télécharger depuis GitHub",
  "core.button_download_template": "Télécharger le modèle de configuration",
  "core.button_download_version": "Télécharger v%s",
  "core.button_exit": "Quitter",
  "core.button_open_bin": "Ouvrir le dossier bin",
  "core.button_restart": "Redémarrer",
  "core.button_start": "Démarrer",
  "core.button_stop": "Arrêter",
  "core.button_update": "🔄 Mettre à jour",
  "core.button_update_version": "Mettre à jour v%s",
  "core.button_wizard": "⚙️ Assistant",
  "core.config_not_found_message": "⚠️ Fichier de configuration introuvable !\n\nLe fichier %s est absent du dossier bin.\n\nPour commencer :\n1. télécharger l'Assistant\n2. utilisez l'Assistant pour générer un fichier de configuration\n3. appuyez sur Démarrer\n",
  "core.config_not_found_title": "Configuration introuvable",
  "core.crash_restarting": "Sing-Box a planté, redémarrage... (tentative %d/%d)",
  "core.crash_title": "Plantage",
  "core.dialog_download_complete_title": "Téléchargement terminé",
  "core.dialog_singbox_close": "Fermer",
  "core.dialog_singbox_title": "Sing-box",
  "core.dialog_template_saved": "Modèle enregistré dans %s",
  "core.dialog_template_title": "Modèle de configuration",
  "core.dialog_update_available_title": "Mise à jour disponible",
  "core.dialog_update_close": "Fermer",
  "core.dialog_update_current": "Version actuelle : %s",
  "core.dialog_update_msg": "Une nouvelle version de l'application est disponible",
  "core.dialog_update_new": "Nouvelle version : %s",
  "core.dialog_wintun_close": "Fermer",
  "core.dialog_wintun_title": "Wintun",
  "core.info_title": "Infos",
  "core.label_config": "Configuration",
  "core.label_singbox": "Sing-box",
  "core.label_wintun": "Wintun",
  "core.latest_version_message": "Vous utilisez la dernière version.\n\nInstallé : %s\nDernière : %s",
  "core.no_updates_title": "Aucune mise à jour",
  "core.singbox_help_extract": "Extraire le binaire dans le dossier bin.\n\n",
  "core.singbox_help_look_for": "Rechercher : %s\n",
  "core.singbox_help_manual": "Vous pouvez le télécharger avec le bouton ci‑dessus, ou manuellement depuis :",
  "core.singbox_help_msg": "sing-box est le binaire principal.\n\n",
  "core.singbox_status_checking": "Vérification...",
  "core.singbox_status_not_found": "❌ introuvable",
  "core.status_checking": "Vérification du cœur...",
  "core.status_checking_config": "Vérification de la configuration...",
  "core.status_config_error": "Erreur de configuration : %v",
  "core.status_config_not_found": "%s ❌ introuvable",
  "core.status_config_ok": "%s ✅ %s",
  "core.status_error_not_found": "Erreur du cœur ❌ : sing-box introuvable",
  "core.status_parser_starting": "Démarrage...",
  "core.status_restarting": "Redémarrage du cœur 🔄...",
  "core.status_running": "Cœur ✅ En fonctionnement",
  "core.status_stopped": "Cœur ⏸️ Arrêté",
  "core.update_available_message": "Mise à jour disponible !\n\nInstallé : %s\nDernière : %s\n\nVous pouvez télécharger la mise à jour depuis l'onglet Cœur.",
  "core.update_available_title": "Mise à jour disponible",
  "core.wintun_help_in_archive": "Dans l'archive de téléchargement, prenez wintun.dll \n\n Votre système est %s.\n\n ",
  "core.wintun_help_manual": "Vous pouvez le télécharger avec le bouton ci‑dessus, ou manuellement depuis :",
  "core.wintun_help_msg": "wintun.dll est requis pour le mode TUN sous Windows.\n\n",
  "core.wintun_help_place": "Placez-le dans le dossier bin : bin\n\n",
  "core.wintun_status_checking": "Vérification...",
  "core.wintun_status_error": "❌ Erreur lors de la vérification de wintun.dll",
  "core.wintun_status_not_found": "❌ introuvable",
  "core.wintun_status_ok": "OK",
  "diag.cancel": "Annuler",
  "diag.close": "Fermer",
  "diag.copied_title": "Copié",
  "diag.copy_ip": "Copier l'IP",
  "diag.external_ip_format": "Votre IP externe : %s\n%s",
  "diag.ip_check_services": "Services de vérification d'IP :",
  "diag.ip_copied": "Adresse IP copiée dans le presse-papiers.",
  "diag.open_log_window": "Ouvrir la fenêtre des logs",
  "diag.open_logs_folder": "Ouvrir le dossier des logs",
  "diag.save": "Enregistrer",
  "diag.stun_button": "STUN [UDP]",
  "diag.stun_check_title": "Vérification STUN",
  "diag.stun_checking": "Vérification en cours, veuillez patienter...",
  "diag.stun_result_title": "Résultat du test STUN",
  "diag.stun_server_label": "Serveur STUN (hôte:port):",
  "diag.stun_settings": "Paramètres STUN",
  "diag.use_system_socks5": "Utiliser le proxy SOCKS5 système",
  "dialog.close": "Fermer",
  "dialog.close_warning": "Fermer cet avertissement",
  "dialog.copy": "Copier",
  "dialog.download_failed": "Téléchargement échoué. Consultez le log pour les détails.",
  "dialog.download_failed_manual_hint": "Veuillez télécharger le fichier manuellement et le placer dans le dossier ci-dessous.",
  "dialog.error_prefix": "❌ ",
  "dialog.kill_process": "Tuer le processus",
  "dialog.ok": "OK",
  "dialog.open_download_page": "Ouvrir la page de téléchargement",
  "dialog.open_folder": "Ouvrir le dossier",
  "dialog.process_already_running": "Sing-Box semble déjà en cours d'exécution.\nSouhaitez-vous tuer le processus existant ?",
  "dialog.warning": "Avertissement",
  "error.check_updates_failed": "Échec de la vérification des mises à jour",
  "error.linux_capabilities": "Les capacités Linux sont requises",
  "error.parser": "Le parseur a échoué :\n\n%s\n\nVeuillez vérifier :\n1. l'URL d'abonnement est valide\n2. la connexion réseau\n3. Consultez parser.log pour plus de détails",
  "error.restart_failed": "Échec du redémarrage de Sing-Box après %d tentatives. Consultez sing-box.log pour les détails.",
  "error.startup": "Échec du démarrage de sing-box :\n\n%s\n\nVeuillez vérifier :\n1. config.json est valide\n2. l'exécutable sing-box existe\n3. Consultez les logs pour plus de détails",
  "error.version_check": "Erreur lors de la vérification de la version : %s",
  "help.checking_updates": "Vérification des mises à jour...",
  "help.dev_build_format": "✅ Vous utilisez une build de développement\nActuelle : %s\nDernière release : %s",
  "help.download_locales": "📥 Télécharger les traductions",
  "help.download_locales_btn": "⬇",
  "help.download_locales_failed": "Échec du téléchargement des traductions",
  "help.download_locales_success": "Traductions téléchargées (%d). Redémarrez pour voir les nouvelles langues.",
  "help.downloading_locales": "Téléchargement...",
  "help.downloading_locales_btn": "🔄",
  "help.github_link": "🐙 Dépôt GitHub",
  "help.kill_result": "Sing-Box tué si en cours d'exécution.",
  "help.kill_singbox": "🛑 Tuer Sing-Box",
  "help.kill_title": "Tuer",
  "help.language_changed": "Langue modifiée. Redémarrez l'application pour appliquer complètement.",
  "help.language_label": "Langue :",
  "help.latest_version_format": "✅ Vous utilisez la dernière version\nActuelle : %s",
  "help.open_config_folder": "⚙️ Ouvrir le dossier de configuration",
  "help.telegram_link": "💬 Canal Telegram",
  "help.unable_to_check_updates": "Impossible de vérifier les mises à jour",
  "help.update_available_format": "🆕 Mise à jour disponible : %s\nActuelle : %s",
  "help.version_label": "📦 Version : %s",
  "log.api_tab": "API",
  "log.core_tab": "Cœur",
  "log.file_not_available": "Fichier de log non disponible.",
  "log.internal_tab": "Interne",
  "log.level_error": "Erreur",
  "log.level_info": "Infos",
  "log.level_label": "Niveau :",
  "log.level_trace": "Traçage",
  "log.level_verbose": "Détaillé",
  "log.level_warn": "Avertissement",
  "log.refresh": "Rafraîchir",
  "log.window_title": "Journaux",
  "servers.button_ping": "Ping",
  "servers.button_test": "Tester",
  "servers.tooltip_hide_ping_errors": "Masquer les serveurs en erreur de ping",
  "servers.tooltip_show_ping_errors": "Afficher tous les serveurs",
  "servers.tooltip_sort_by_name": "Trier par nom (A–Z / Z–A)",
  "servers.tooltip_sort_by_delay": "Trier par délai de ping (plus rapide / plus lent en premier)",
  "servers.tooltip_ping_all": "Pinguer tous les proxys de ce groupe",
  "servers.tooltip_ping_settings": "URL du test de ping et requêtes parallèles",
  "servers.button_export": "Exporter",
  "servers.tooltip_export_uris": "Toutes les lignes visibles, ordre actuel, une URI par ligne (erreurs de ping masquées exclues ; sans selector, urltest, direct).",
  "servers.tooltip_export_uris_selected": "Proxys sélectionnés uniquement (sélection multiple), ordre de la liste (mêmes règles d’URI).",
  "servers.status_export_nothing_visible": "Rien à exporter (aucune ligne dans la vue actuelle).",
  "servers.status_export_nothing_selected": "Rien à exporter (aucune ligne sélectionnée dans la vue).",
  "servers.status_export_uris_building": "Préparation de l’export…",
  "servers.status_export_uris_done": "Presse-papiers : %d lignes (une URI par ligne)",
  "servers.status_export_uris_none": "Aucun lien share n’a pu être généré pour cette liste.",
  "servers.error_export_no_config": "Chemin de configuration non défini.",
  "servers.dialog_ping_settings_title": "Paramètres du test de ping",
  "servers.dialog_selector_active_title": "Sélecteur → Sortie active",
  "servers.dialog_selector_close": "Fermer",
  "servers.error_api_disabled": "L'API est désactivée : erreur de configuration",
  "servers.error_api_not_initialized": "Le service API n'est pas initialisé",
  "servers.label_proxy_name": "Nom du proxy",
  "servers.label_selector_group": "Groupe de sélecteurs :",
  "servers.label_sort_by_name": "A…Z",
  "servers.ping_button_cancel": "Annuler",
  "servers.ping_button_error": "Erreur",
  "servers.ping_button_save": "Enregistrer",
  "servers.ping_format_ms": "%d ms",
  "servers.ping_label_custom_url": "URL personnalisée :",
  "servers.ping_label_parallel": "Requêtes parallèles (ping tout) :",
  "servers.ping_label_url": "URL du test de ping",
  "servers.ping_option_custom": "Personnalisée",
  "servers.ping_placeholder_url": "https://example.com/generate_204",
  "servers.placeholder_select_group": "Sélectionner le groupe de sélecteurs",
  "servers.selector_active": "%s → %s",
  "servers.selector_error": "%s → erreur : %v",
  "servers.selector_no_active": "%s → (aucune sortie active)",
  "servers.status_clash_api_disabled": "API Clash désactivée en raison d'une erreur de config",
  "servers.status_clash_api_off_config": "❌ Clash API Désactivée (Erreur de configuration)",
  "servers.status_clash_api_off_error": "❌ Clash API Désactivée (Erreur)",
  "servers.status_clash_api_on": "✅ Clash API Activée",
  "servers.status_click_load": "Cliquez sur 'Charger les proxies'",
  "servers.status_delay_error": "Erreur de délai : %s",
  "servers.status_delay_format": "Délai : %d ms pour %s",
  "servers.status_loaded": "Proxies chargés pour '%s'. Actif : %s",
  "servers.status_loading": "Chargement des proxies pour '%s'...",
  "servers.status_no_proxies": "Aucun proxy à pinguer",
  "servers.status_list_counts": "Total / dispo : %d / %d",
  "servers.status_not_checked": "Statut : Non vérifié",
  "servers.status_not_running": "Statut : Non en cours",
  "servers.status_ping_completed": "Test de ping terminé pour %d proxies",
  "servers.status_ping_url_updated": "URL de test de ping mise à jour : %s",
  "servers.status_pinging": "Ping de %d proxies...",
  "servers.status_pinging_progress": "Ping %d/%d...",
  "servers.status_selected": "Sélectionné : %s",
  "servers.status_selected_multi": "Sélectionnés : %d proxies",
  "servers.status_selected_none": "Aucun proxy sélectionné",
  "servers.status_selected_group": "Groupe sélectionné '%s'. Dernier proxy utilisé : %s",
  "servers.status_selected_group_only": "Groupe sélectionné '%s'.",
  "servers.status_singbox_stopped": "Sing-box est arrêté.",
  "servers.status_sorted_delay_fast": "Trié par délai (le plus rapide en premier)",
  "servers.status_sorted_delay_slow": "Trié par délai (le plus lent en premier)",
  "servers.status_sorted_name_az": "Trié par nom (A-Z)",
  "servers.status_sorted_name_za": "Trié par nom (Z-A)",
  "servers.status_switch_error": "Erreur de commutation : %s",
  "servers.status_switched": "'%s' commuté vers %s",
  "tray.hide_app_from_dock": "Masquer l'application du Dock",
  "tray.no_proxies_available": "Aucun proxy disponible",
  "tray.open": "Ouvrir",
  "tray.quit": "Quitter",
  "tray.select_proxy": "Sélectionner un proxy",
  "tray.start_vpn": "Démarrer le VPN",
  "tray.stop_vpn": "Arrêter le VPN",
  "wizard.add_rule.button_add": "Ajouter",
  "wizard.add_rule.button_add_process": "+ Ajouter",
  "wizard.add_rule.button_cancel": "Annuler",
  "wizard.add_rule.button_close": "Fermer",
  "wizard.add_rule.button_open": "Ouvrir",
  "wizard.add_rule.button_refresh": "Rafraîchir",
  "wizard.add_rule.button_remove": "−",
  "wizard.add_rule.button_save": "Enregistrer",
  "wizard.add_rule.button_select_processes": "Sélectionner les processus...",
  "wizard.add_rule.check_match_by_path": "Correspondance par chemin",
  "wizard.add_rule.dialog_not_recognized_msg": "Impossible de reconnaître la règle, le formulaire ne peut pas être chargé ; restez en mode Brut.",
  "wizard.add_rule.dialog_not_recognized_title": "Règle non reconnue",
  "wizard.add_rule.domain_exact": "Domaines exacts",
  "wizard.add_rule.domain_keyword": "Mot-clé",
  "wizard.add_rule.domain_regex": "Regex",
  "wizard.add_rule.domain_suffix": "Suffixe",
  "wizard.add_rule.error_custom_empty": "Le JSON personnalisé est vide",
  "wizard.add_rule.error_custom_object": "Le JSON personnalisé doit être un objet",
  "wizard.add_rule.error_must_be_object": "la règle doit être un objet JSON",
  "wizard.add_rule.error_must_have_outbound": "la règle doit contenir \"outbound\" ou \"action\"",
  "wizard.add_rule.error_name_required": "Le nom de la règle est requis",
  "wizard.add_rule.error_path_required": "saisissez au moins un motif de chemin",
  "wizard.add_rule.error_raw_empty": "Le JSON brut est vide",
  "wizard.add_rule.error_srs_required": "saisissez au moins une URL SRS",
  "wizard.add_rule.error_srs_valid": "saisissez au moins une URL SRS valide",
  "wizard.add_rule.label_custom_json": "JSON personnalisé :",
  "wizard.add_rule.label_domain_regex": "Regex de domaine :",
  "wizard.add_rule.label_domains": "Domaines (une par ligne) :",
  "wizard.add_rule.label_ip": "Adresses IP (une par ligne, format CIDR) :",
  "wizard.add_rule.label_keywords": "Mots-clés de domaine (une par ligne) :",
  "wizard.add_rule.label_name": "Nom de la règle :",
  "wizard.add_rule.label_outbound": "Sortie :",
  "wizard.add_rule.label_path_patterns": "Motifs de chemin (un par ligne) :",
  "wizard.add_rule.label_processes": "Processus (sélectionnez un ou plusieurs via le popup) :",
  "wizard.add_rule.label_srs_urls": "URLs SRS (une par ligne) :",
  "wizard.add_rule.label_suffixes": "Suffixes de domaine (une par ligne) :",
  "wizard.add_rule.label_type": "Type de règle :",
  "wizard.add_rule.placeholder_custom": "JSON personnalisé (ex : {})",
  "wizard.add_rule.placeholder_domain_regex": "Ex : ^.*\\.google\\.com$ ou .*\\.(google|youtube)\\.com$ (regex complet, pas d'encapsulation /)",
  "wizard.add_rule.placeholder_ip": "Saisissez les adresses IP (format CIDR)\nex : 192.168.1.0/24",
  "wizard.add_rule.placeholder_name": "Nom de la règle",
  "wizard.add_rule.placeholder_path_regex": "Un par ligne. Regex complet tel quel (pas de /regex/i). Ex : ^C:\\\\Games\\\\.* ou .*steam.*",
  "wizard.add_rule.placeholder_path_simple": "Un par ligne. Utilisez * comme joker (ex : */steam/* ou *\\Steam\\*).",
  "wizard.add_rule.placeholder_raw": "{\"ip_cidr\": [], \"outbound\": \"proxy-out\"}",
  "wizard.add_rule.placeholder_srs_urls": "URLs SRS (une par ligne)\nex : https://raw.githubusercontent.com/.../file.srs",
  "wizard.add_rule.placeholder_url": "Saisissez des domaines ou des URLs (une par ligne)\nex : example.com",
  "wizard.add_rule.radio_regex": "Regex",
  "wizard.add_rule.radio_simple": "Simple",
  "wizard.add_rule.srs_dialog_close": "Fermer",
  "wizard.add_rule.srs_dialog_title": "Jeux de règles SRS",
  "wizard.add_rule.srs_hint": "Nous recommandons de rechercher des fichiers de jeu de règles (SRS) adaptés dans le projet :",
  "wizard.add_rule.tab_form": "Formulaire",
  "wizard.add_rule.tab_raw": "Brut",
  "wizard.add_rule.title_add": "Ajouter une règle",
  "wizard.add_rule.title_edit": "Modifier la règle",
  "wizard.add_rule.type_custom": "JSON personnalisé",
  "wizard.add_rule.type_domain": "Domaines/URLs",
  "wizard.add_rule.type_ip": "Adresses IP (CIDR)",
  "wizard.add_rule.type_process": "Processus",
  "wizard.add_rule.type_srs": "SRS",
  "wizard.add_rule.window_select_processes": "Sélectionner les processus",
  "wizard.button_close": "Fermer",
  "wizard.button_next": "Suiv",
  "wizard.button_prev": "Préc",
  "wizard.button_read": "Lire",
  "wizard.button_save": "Enregistrer",
  "wizard.button_save_as": "Enregistrer sous",
  "wizard.dialog_cancel": "Annuler",
  "wizard.shared.button_edit": "Modifier",
  "wizard.shared.button_del": "Suppr",
  "wizard.dialog_confirmation": "Confirmation",
  "wizard.dialog_discard": "Ignorer",
  "wizard.dialog_save_before_close": "Enregistrer les modifications avant de fermer ?",
  "wizard.dialog_unsaved_changes": "Les modifications en cours seront perdues. Enregistrer l'état courant ?",
  "wizard.error_load_config": "Échec du chargement de la configuration existante",
  "wizard.error_load_state": "Échec du chargement de l'état",
  "wizard.error_restore_state": "Échec de la restauration de l'état",
  "wizard.error_save_state": "Échec de l'enregistrement de l'état",
  "wizard.error_template_failed": "Échec du chargement du modèle de configuration",
  "wizard.error_template_missing": "Modèle de configuration manquant",
  "wizard.get_free.button_apply": "Appliquer la configuration",
  "wizard.get_free.button_close": "Fermer",
  "wizard.get_free.dialog_apply_confirm": "L'application de cette configuration remplacera vos sources et règles actuelles. Continuer ?",
  "wizard.get_free.dialog_apply_title": "Appliquer la configuration",
  "wizard.get_free.dialog_success_msg": "La configuration depuis get_free.json a été appliquée avec succès !",
  "wizard.get_free.dialog_success_title": "Succès",
  "wizard.get_free.dialog_title": "Obtenir un VPN gratuit",
  "wizard.get_free.error_apply": "Échec de l'application de la configuration",
  "wizard.get_free.error_data_not_loaded": "Erreur : les données n'ont pas été chargées",
  "wizard.get_free.error_download": "Échec du téléchargement de get_free.json :\n\nVérifiez votre connexion internet et réessayez.",
  "wizard.get_free.error_load": "Échec du chargement de get_free.json :\n\nVérifiez le fichier ou tentez de le retélécharger.",
  "wizard.get_free.error_occurred": "Une erreur est survenue : %v",
  "wizard.get_free.error_process": "Échec du traitement de get_free.json",
  "wizard.get_free.loading_msg": "Téléchargement de get_free.json...",
  "wizard.get_free.loading_title": "Chargement",
  "wizard.load_state.button_cancel": "Annuler",
  "wizard.load_state.button_delete": "Suppr",
  "wizard.load_state.button_load": "Charger",
  "wizard.load_state.button_new": "Nouveau",
  "wizard.load_state.dialog_delete_confirm": "Supprimer l'état '%s' ?",
  "wizard.load_state.dialog_delete_title": "Supprimer l'état",
  "wizard.load_state.error_delete": "Échec de la suppression de l'état",
  "wizard.load_state.error_delete_current": "Impossible de supprimer l'état courant (state.json)",
  "wizard.load_state.error_load_list": "Échec du chargement de la liste d'états",
  "wizard.load_state.suffix_current": " (Actuel)",
  "wizard.load_state.title": "Charger l'état",
  "wizard.outbound.button_add": "Ajouter",
  "wizard.outbound.button_cancel": "Annuler",
  "wizard.outbound.button_docs": "📖 Documentation",
  "wizard.outbound.button_save": "Enregistrer",
  "wizard.outbound.configurator_label": "Sorties :",
  "wizard.outbound.error_config": "ParserConfig non disponible",
  "wizard.outbound.error_invalid_json": "JSON invalide",
  "wizard.outbound.error_open_docs": "échec de l'ouverture de la documentation",
  "wizard.outbound.error_tag_required": "le tag est requis",
  "wizard.outbound.label_add_outbounds": "Ajouter des sorties au début (direct-out, reject, autres)",
  "wizard.outbound.label_comment": "Commentaire",
  "wizard.outbound.label_filters": "Filtres (clé et valeur; utilisez !/regex/i pour la négation)",
  "wizard.outbound.label_preferred": "Par défaut préféré (filtre pour le nœud par défaut)",
  "wizard.outbound.label_raw_json": "JSON brut de la sortie",
  "wizard.outbound.label_scope": "Portée",
  "wizard.outbound.label_source": "Source ",
  "wizard.outbound.label_tag": "Balise",
  "wizard.outbound.label_tag_field": "Balise",
  "wizard.outbound.label_type": "Type",
  "wizard.outbound.placeholder_comment": "Commentaire optionnel",
  "wizard.outbound.placeholder_filter": "ex. /🇳🇱/i ou !/(🇷🇺)/i",
  "wizard.outbound.placeholder_preferred": "ex. /🇳🇱/i",
  "wizard.outbound.placeholder_tag": "ex. proxy-out",
  "wizard.outbound.preview_also_includes": " | Inclut aussi : %s",
  "wizard.outbound.preview_cache_failed": "Échec de construction du cache d'aperçu : %v",
  "wizard.outbound.preview_default": ", défaut : %s",
  "wizard.outbound.preview_invalid_json": "Échec de la construction de l'aperçu : JSON de sortie invalide. Passez à l'onglet 'Brut' et corrigez le JSON d'abord.",
  "wizard.outbound.preview_model_nil": "Aperçu non disponible : modèle de l'assistant nul.",
  "wizard.outbound.preview_no_nodes": "Aucun nœud disponible pour l'aperçu. Configurez les sources et réessayez.",
  "wizard.outbound.preview_no_presenter": "L'aperçu n'est pas disponible dans ce contexte (aucun présentateur).",
  "wizard.outbound.preview_source_errors": " | ⚠️ %d erreur(s) de source",
  "wizard.outbound.preview_status": "%d nœud(s) au total, %d correspondent aux filtres",
  "wizard.outbound.preview_switch": "Basculez sur Aperçu pour voir les nœuds pour cette sortie.",
  "wizard.outbound.preview_unknown_source": "Source inconnue",
  "wizard.outbound.scope_all": "Pour tout",
  "wizard.outbound.scope_source": "Pour la source : ",
  "wizard.outbound.tab_preview": "Aperçu",
  "wizard.outbound.tab_raw": "Brut",
  "wizard.outbound.tab_settings": "Paramètres",
  "wizard.outbound.title_add": "Ajouter une sortie",
  "wizard.outbound.title_edit": "Modifier la sortie",
  "wizard.outbound.type_auto": "auto (test d'URL)",
  "wizard.outbound.type_manual": "manuel (sélecteur)",
  "wizard.outbounds.button_docs": "📖 Documentation",
  "wizard.outbounds.error_invalid_config": "ParserConfig invalide",
  "wizard.outbounds.error_invalid_json": "JSON ParserConfig invalide",
  "wizard.outbounds.error_open_docs": "échec de l'ouverture de la documentation",
  "wizard.outbounds.error_serialize": "Échec de la sérialisation de ParserConfig",
  "wizard.outbounds.label": "ParserConfig :",
  "wizard.outbounds.placeholder": "Entrez le JSON ParserConfig ici...",
  "wizard.preview.button_show": "Afficher l'aperçu",
  "wizard.preview.error": "Erreur d'aperçu : %v",
  "wizard.preview.label": "Aperçu",
  "wizard.preview.loading_large": "Chargement d'un grand aperçu...",
  "wizard.preview.placeholder": "L'aperçu apparaîtra ici",
  "wizard.preview.status_building": "⏳ Construction de la configuration d'aperçu...",
  "wizard.preview.status_click_show": "Cliquez sur 'Afficher l'aperçu' pour générer l'aperçu (cela peut prendre du temps pour de grandes configurations)",
  "wizard.preview.status_error": "❌ Erreur : %v",
  "wizard.preview.status_loading_large": "⏳ Chargement d'un grand aperçu...",
  "wizard.preview.status_parsing": "⏳ Analyse des abonnements et génération des sorties...",
  "wizard.preview.status_parsing_config": "⏳ Analyse de ParserConfig...",
  "wizard.preview.status_ready": "✅ Aperçu prêt",
  "wizard.preview.text_building": "Construction de l'aperçu...",
  "wizard.preview.text_parsing": "Analyse de la configuration... Veuillez patienter.",
  "wizard.rules.button_add_rule": "➕ Ajouter une règle",
  "wizard.rules.button_delete": "Delete rule",
  "wizard.rules.dialog_delete_unnamed": "(unnamed rule)",
  "wizard.rules.dialog_delete_confirm": "Delete custom rule \"%s\"?",
  "wizard.rules.button_edit": "✏️",
  "wizard.rules.button_info": "?",
  "wizard.rules.button_srs_done": "✔️ srs",
  "wizard.rules.button_srs_download": "⬇ srs",
  "wizard.rules.button_srs_loading": "🔄 srs",
  "wizard.rules.checkbox_tun": "TUN",
  "wizard.rules.error_srs_failed": "Le téléchargement du jeu de règles (SRS) a échoué",
  "wizard.rules.label_final_outbound": "Sortie finale :",
  "wizard.rules.label_outbound": "Sortie :",
  "wizard.rules.label_selectable": "Règles sélectionnables",
  "wizard.rules.no_selectable_rules": "Aucune règle sélectionnable définie dans le modèle.",
  "wizard.rules.template_create_hint": "Créez le fichier modèle pour activer cet onglet.",
  "wizard.rules.template_not_found": "Fichier modèle bin/%s introuvable.",
  "wizard.rules.tun_help": "Activer TUN demandera la saisie de votre mot de passe lors du démarrage ou de l'arrêt du VPN.",
  "wizard.save.button_copy": "Copier la config",
  "wizard.save.dialog_copied_message": "Config copiée dans le presse-papiers.",
  "wizard.save.dialog_copied_title": "Copié",
  "wizard.save.dialog_in_progress": "Une opération d'enregistrement est déjà en cours... Veuillez patienter.",
  "wizard.save.dialog_saving": "Enregistrement",
  "wizard.save.dialog_success_message": "Config écrite dans %s\n\n✅ Validation : Réussie",
  "wizard.save.dialog_success_title": "Config enregistrée",
  "wizard.save.dialog_validation_failed": "La validation a échoué",
  "wizard.save.error_config_empty": "ParserConfig est vide",
  "wizard.save.error_config_invalid": "ParserConfig est invalide",
  "wizard.save.error_controller": "contrôleur non disponible",
  "wizard.save.error_no_sources": "Ajoutez au moins une source : utilisez l'onglet Sources (Ajouter) ou ajoutez des proxies dans ParserConfig sur l'onglet Sorties.",
  "wizard.save.error_parse_failed": "Échec de l'analyse des abonnements",
  "wizard.save.status_building": "Construction de la configuration...",
  "wizard.save.status_done": "Terminé",
  "wizard.save.status_parsing": "Analyse des abonnements...",
  "wizard.save.status_preparing": "Préparation...",
  "wizard.save.status_saving_state": "Enregistrement de l'état...",
  "wizard.save.status_validating": "Validation...",
  "wizard.save.status_waiting": "En attente d'analyse...",
  "wizard.save_state.button_cancel": "Annuler",
  "wizard.save_state.button_save": "Enregistrer",
  "wizard.save_state.error_empty": "L'ID ne peut pas être vide",
  "wizard.save_state.label_comment": "Commentaire :",
  "wizard.save_state.label_id": "ID d'état :",
  "wizard.save_state.placeholder_comment": "Commentaire (optionnel)",
  "wizard.save_state.placeholder_id": "Saisir l'ID d'état (a-z, A-Z, 0-9, -, _)",
  "wizard.save_state.title": "Enregistrer l'état",
  "wizard.save_state.warning_exists": "Un état avec cet ID existe déjà. Il sera écrasé.",
  "wizard.source.button_add": "Ajouter",
  "wizard.source.button_del": "Suppr",
  "wizard.source.button_get_free": "Obtenir VPN gratuit !",
  "wizard.source.button_refresh": "Rafraîchir",
  "wizard.source.button_view": "Afficher",
  "wizard.source.connections_n": "Connexions %d",
  "wizard.source.dialog_copied_message": "Source copiée dans le presse-papiers.",
  "wizard.source.dialog_copied_title": "Copié",
  "wizard.source.hint": "Prend en charge les URL d'abonnement (http/https) ou les liens directs (vless://, vmess://, trojan://, ss://, hysteria2://, ssh://). Pour plusieurs liens, utilisez une nouvelle ligne pour chaque.",
  "wizard.source.label_sources": "Sources",
  "wizard.source.label_url": "URL d'abonnement ou liens directs :",
  "wizard.source.no_sources": "Aucune source définie dans ParserConfig.",
  "wizard.source.placeholder_prefix": "préfixe",
  "wizard.source.placeholder_url": "https://votre-url-d-abonnement-ici",
  "wizard.source.preview_click_refresh": "Cliquez sur Rafraîchir pour charger les serveurs de toutes les sources.",
  "wizard.source.preview_error": "Erreur : %s",
  "wizard.source.preview_errors": "  ⚠️ %d erreur(s)",
  "wizard.source.preview_loading": "Chargement...",
  "wizard.source.preview_no_sources": "Aucune source. Ajoutez des URLs et cliquez sur Rafraîchir.",
  "wizard.source.preview_servers": "%d serveur(s) depuis %d source(s)",
  "wizard.source.source_n": "Source %d",
  "wizard.source.view_close": "Fermer",
  "wizard.source.view_no_servers": "Aucun serveur trouvé.",
  "wizard.source.view_server_count": "%d serveur(s)",
  "wizard.source.view_title": "Serveurs — %s",
  "wizard.tab_outbounds": "Sorties",
  "wizard.tab_preview": "Aperçu",
  "wizard.tab_rules": "Règles",
  "wizard.tab_sources": "Sources",
  "wizard.window_title": "Assistant de configuration"
}
