/** * French — translated from locales/en.js. * * Register: formal (vouvoiement). * `hub`, `node` and `GEK` are left in English: they name the CLI * (`meshbay-node`), node.toml and the docs, which are English throughout. */ export default { // Nav 'nav.toggle_menu': 'Afficher le menu', 'nav.light_mode': 'Thème clair', 'nav.dark_mode': 'Thème sombre', 'nav.logout': 'Déconnexion', 'nav.login': 'Connexion', // Sidebar 'sidebar.my_groups': 'Mes groupes', 'sidebar.no_groups': 'Aucun groupe pour le moment', 'sidebar.discover': 'Découvrir', 'sidebar.public_groups': 'Groupes publics', // Login 'login.title': 'Connexion', 'login.username': "Nom d'utilisateur", 'login.password': 'Mot de passe', 'login.submit': 'Se connecter', 'login.loading': 'Connexion en cours...', 'login.no_account': 'Pas encore de compte ?', 'login.register_link': 'Créer un compte', // Register 'register.title': 'Créer un compte', 'register.username': "Nom d'utilisateur", 'register.email': 'Adresse e-mail', 'register.password': 'Phrase secrète (12 caractères minimum)', 'register.confirm': 'Confirmer le mot de passe', 'register.submit': 'Créer le compte', 'register.loading': 'Création du compte...', 'register.has_account': 'Vous avez déjà un compte ?', 'register.login_link': 'Se connecter', 'register.success_title': 'Compte créé', 'register.success_msg': 'Vous pouvez maintenant vous connecter avec vos identifiants.', 'register.go_login': 'Aller à la connexion', 'register.err_mismatch': 'Les mots de passe ne correspondent pas', 'register.err_min_len': { one: 'Utilisez au moins {n} caractère', other: 'Utilisez au moins {n} caractères', }, 'register.err_too_weak': 'Trop facile à deviner. Votre phrase secrète est ce qui ' + 'protège vos clés là où elles sont stockées — quelques mots sans rapport entre ' + 'eux font très bien l’affaire.', 'register.strength': 'Robustesse : environ {bits} bits. Elle protège la copie de ' + 'vos clés conservée sur les nodes que vous rejoignez, cela vaut donc la peine ' + 'de la soigner.', // Home 'home.welcome': 'Bienvenue sur MeshBay', 'home.no_groups': "Vous n'êtes membre d'aucun groupe pour le moment.", 'home.browse_prefix': 'Parcourez les ', 'home.browse_link': 'groupes publics', 'home.browse_suffix': " ou demandez à l'administrateur d'un groupe de vous inviter.", 'home.my_groups': 'Mes groupes', // Explore 'explore.title': 'Groupes publics', 'explore.search': 'Rechercher un groupe...', 'explore.loading': 'Chargement...', 'explore.empty': 'Aucun groupe public disponible.', 'explore.create_group': 'Créer un groupe', 'explore.join': 'Rejoindre', 'explore.member': 'Membre', 'explore.disabled': "Ce hub n'a pas de groupes publics.", // Group page 'group.default_name': 'Groupe', 'group.tab_files': 'Fichiers', 'group.tab_chat': 'Discussion', 'group.tab_video': 'Vidéos', 'group.tab_music': 'Musique', 'group.tab_photos': 'Photos', 'group.tab_members': 'Membres', 'group.tab_settings': "Paramètres", 'members.danger_leave_hint': "Vous perdrez l’accès aux fichiers et à la discussion de ce groupe.", 'members.uploads_title': "Envois de fichiers", 'members.uploads_on': "Les membres peuvent ajouter des fichiers", 'members.uploads_off': "Vous seul pouvez ajouter des fichiers", 'members.uploads_disable': "Désactiver", 'members.uploads_enable': "Activer", 'members.uploads_hint': "S’applique à tout le monde sauf vous. C’est le nœud qui refuse l’envoi : il ne s’agit pas de masquer un bouton.", 'members.apps_title': "Applications", 'members.apps_hint': "Les parties de ce groupe visibles par les membres. Au moins une doit rester activée.", 'members.apps_need_one': "Au moins une application doit rester activée.", 'members.danger_delete_hint': "Le groupe disparaît pour tous ses membres. C’est irréversible.", 'group.filter': 'Filtrer les fichiers...', 'group.refresh_index': 'Actualiser la liste', 'group.col_name': 'Nom', 'group.col_size': 'Taille', 'group.col_type': 'Type', 'group.col_date': 'Date', 'group.empty_filter': 'Aucun fichier ne correspond au filtre', 'group.empty_dir': 'Ce dossier est vide', 'group.download': 'Télécharger', 'group.play': 'Lire', 'group.offline_title': "Aucun node n'est actuellement en ligne pour ce groupe.", 'group.offline_hint': 'Les fichiers apparaîtront dès qu’un node hébergeant ce ' + 'groupe se connectera.', 'group.upload': 'Envoyer', 'group.mkdir': 'Nouveau dossier', 'group.mkdir_prompt': 'Nom du nouveau dossier :', 'device.add_title': 'Ce navigateur n’est pas encore lié à ce nœud', 'device.add_hint': 'Votre compte est connu ici, mais ce navigateur détient une autre clé. Approuvez-le depuis un appareil déjà lié — sans passer par l’opérateur.', 'device.add_btn': 'Obtenir un code de liaison', 'device.add_show': 'Saisissez ce code sur un appareil déjà lié à ce nœud, dans l’heure :', 'device.mine_title': 'Vos appareils sur ce nœud', 'device.mine_hint': 'Chaque navigateur ou client que vous utilisez ici détient sa propre clé. Ils sont distincts de vos appareils sur les autres nœuds.', 'device.mine_empty': 'Aucun appareil lié ici pour le moment.', 'device.this_one': 'celui-ci', 'device.revoke': 'Retirer', 'device.revoke_confirm': 'Retirer cet appareil ? Il perdra l’accès à ce nœud jusqu’à une nouvelle liaison.', 'device.approve_hint': 'Vous liez un nouvel appareil ? Saisissez le code qu’il affiche.', 'device.approve_btn': 'Approuver', 'device.approved': 'Appareil lié.', 'group.root_unavailable': '(indisponible — le disque est déconnecté)', 'group.view': 'Afficher', 'group.delete': 'Supprimer', 'group.delete_confirm': 'Supprimer {name} ?', 'group.delete_group': 'Supprimer le groupe', 'group.delete_group_confirm': 'Supprimer définitivement « {name} » et en retirer ' + 'tous les membres ? Les fichiers présents sur le node sont conservés.', 'group.err_transport': 'Module de transport non chargé', // Status 'status.idle': 'Inactif', 'status.discovering': 'Recherche de nodes...', 'status.connecting': 'Connexion…', 'status.connecting_short': 'Connexion…', 'status.fetching': "Récupération de l'index...", 'status.files': { one: '{n} fichier', other: '{n} fichiers', }, 'status.offline': 'Aucun node en ligne', 'status.error': 'Échec de la connexion', // Chat 'chat.empty': 'Aucun message pour le moment. Lancez la conversation !', 'chat.placeholder': 'Écrivez un message...', 'chat.send': 'Envoyer', 'chat.attach': 'Joindre un fichier', // Video player 'video.loading': 'Chargement de {name}...', 'video.buffering': 'Mise en mémoire tampon...', 'video.resumed_at': "Reprise à {time}", 'video.from_start': "Reprendre depuis le début", 'video.close': 'Fermer (Échap)', 'preview.pdf_fallback': 'Ce navigateur n’affichera pas le PDF directement. ' + 'Téléchargez-le plutôt — il a été déchiffré ici dans les deux cas.', 'group.upload_indexing': 'indexation…', 'video.err_transport': 'Transport non connecté', 'video.err_mse': 'Codec non pris en charge pour la diffusion : {codec}', 'video.mode_poster': 'Affiches', 'video.mode_flat': 'Liste à plat', 'video.filter_all': 'Tous', 'video.filter_movies': 'Films', 'video.filter_series': 'Séries', 'video.empty': 'Aucune vidéo trouvée.', 'video.no_root_configured': "Aucun dossier racine des Vidéos n'est encore défini pour ce groupe — un opérateur peut en choisir un dans les Paramètres.", 'music.no_root_configured': 'Aucun dossier racine de Musique n\'est encore défini pour ce groupe — un opérateur peut en choisir un dans les Paramètres.', 'video.director': 'Réalisateur', 'video.specials': 'Bonus', 'video.season_n': 'Saison {n}', 'video.episode_n': 'Épisode {n}', 'video.n_episodes': { one: '{n} épisode', other: '{n} épisodes', }, 'video.fix_match': 'Corriger la correspondance…', 'video.search_title': 'Corriger la correspondance TMDB', 'video.search_placeholder': 'Rechercher sur TMDB…', 'video.search_button': 'Rechercher', 'video.search_no_results': 'Aucune correspondance trouvée.', 'video.search_apply_hint': 'S’applique à tous les fichiers actuellement regroupés sous ce titre.', 'video.search_apply_hint_movie': 'Ne s’applique qu’à ce fichier.', 'video.source_file': 'Fichier : {name}', 'video.no_match': 'Aucune correspondance TMDB fiable — nom de fichier affiché.', 'video.versions': '{n} versions', 'video.rematch_one': 'Relancer la recherche', // Musique 'music.mode_grid': 'Albums', 'music.mode_flat': 'Liste à plat', 'music.empty': 'Aucune musique trouvée.', 'music.unknown_album': 'Album inconnu', 'music.various': 'Divers', 'music.play_all': 'Tout lire', 'music.n_tracks': { one: '{n} piste', other: '{n} pistes', }, 'music.err_transport': 'Transport non connecté', 'music.err_playback': 'Erreur de lecture', 'music.err_transcode': 'Échec de la conversion du format', 'music.player_play': 'Lecture', 'music.player_pause': 'Pause', 'music.player_prev': 'Précédent', 'music.player_next': 'Suivant', 'music.player_shuffle': 'Lecture aléatoire', 'music.player_repeat_off': 'Répétition désactivée', 'music.player_repeat_all': 'Tout répéter', 'music.player_repeat_one': 'Répéter le morceau', 'music.player_volume': 'Volume', 'music.player_close': 'Fermer le lecteur', 'music.player_queue': 'File en cours', 'music.queue_title': 'En cours de lecture', // Photos 'photo.empty': 'Aucune photo trouvée.', 'photo.no_roots_configured': "Aucun dossier racine des Photos n'est encore défini pour ce groupe — un opérateur peut en choisir dans les Paramètres.", 'photo.root_album': '(niveau racine)', 'photo.n_photos': { one: '{n} photo', other: '{n} photos', }, 'photo.back': 'Retour', 'photo.prev': 'Précédent (←)', 'photo.next': 'Suivant (→)', 'photo.zip_album': "Télécharger l'album en zip", 'photo.zoom_in': 'Zoomer', 'photo.zoom_out': 'Dézoomer', 'photo.zoom_fit_title': 'Ajuster à la fenêtre', 'photo.zoom_fit_label': 'Ajusté', 'photo.zoom_100': 'Taille réelle (100 %)', // LAN cast 'cast.start': 'Diffuser sur un appareil', 'cast.stop': 'Arrêter la diffusion', 'cast.copy_url': "Copier l'URL du flux", 'cast.copied': 'URL copiée', 'cast.scanning': "Recherche d'appareils…", 'cast.no_devices': 'Aucun appareil trouvé', // Settings 'settings.title': 'Paramètres', 'settings.coming_soon': 'Bientôt disponible.', 'settings.downloads': 'Téléchargements', 'settings.dl_auto': 'Enregistrer automatiquement', 'settings.dl_auto_hint': 'Les fichiers vont directement dans le dossier choisi ' + 'ci-dessous, sans boîte de dialogue. Télécharger vingt fichiers en dépose vingt.', 'settings.dl_ask': 'Demander à chaque fois', 'settings.dl_ask_hint': 'Une boîte de dialogue « Enregistrer sous » par fichier — ' + 'un par fichier, y compris lorsque vous téléchargez une sélection.', 'settings.dl_folder': 'Dossier : {name}', 'settings.dl_no_folder': 'Aucun dossier choisi — les téléchargements vont là où ' + 'votre navigateur les place', 'settings.dl_choose': 'Choisir un dossier', 'settings.dl_change': 'Changer', 'settings.dl_forget': 'Oublier', 'settings.profile': 'Profil', 'settings.username': "Nom d'utilisateur", 'settings.email': 'E-mail', 'settings.email_save': 'Enregistrer', 'settings.email_saved': 'E-mail mis à jour', 'settings.notif_global_disable': 'Désactiver toutes les notifications', 'settings.notif_global_hint': 'Quand activé, aucune notification n\x27est créée pour aucun groupe.', 'settings.defaults': 'Valeurs par défaut', 'settings.default_tab': 'Onglet par défaut', 'settings.default_tab_hint': 'L\'onglet qui s\'ouvre en premier quand vous entrez dans un groupe.', 'settings.music_keep_screen_on': 'Garder l\'écran allumé pendant l\'écoute', 'settings.music_keep_screen_on_hint': 'Empêche le téléphone de se verrouiller automatiquement pendant qu\'un morceau joue. Désactivé par défaut — la plupart des gens préfèrent que leur téléphone se verrouille normalement pendant l\'écoute, comme sur Spotify ou Deezer.', 'settings.node_pins': 'Identités des nodes', 'settings.node_pins_hint': "La clé d'identité de chaque node est mémorisée lors de " + 'la première connexion. Si elle change, la connexion est refusée — ce qui n’est ' + 'normal que lorsqu’un opérateur réinstalle un node. Vérifiez auprès de lui ' + 'avant d’effacer.', 'settings.node_pins_count': { one: '{n} épinglée', other: '{n} épinglées', }, 'settings.node_pins_clear': 'Effacer les identités épinglées', 'settings.danger': 'Supprimer le compte', 'settings.delete_hint': 'Supprime votre compte, vos adhésions aux groupes et vos ' + 'notifications du hub, et libère votre nom d’utilisateur. Cela n’atteint pas ' + 'ce qui se trouve sur les nodes : les fichiers que vous avez envoyés restent là ' + 'où leur opérateur les conserve, et chaque node garde l’identité qu’il a ' + 'épinglée pour vous jusqu’à ce que son opérateur la retire. Les journaux de ' + 'connexion sont conservés un an, comme la loi l’exige.', 'settings.delete_account': 'Supprimer mon compte', 'settings.delete_confirm': 'Saisissez votre phrase secrète pour confirmer. ' + 'Cette action est irréversible.', 'settings.delete_confirm_btn': 'Supprimer définitivement', 'settings.cancel': 'Annuler', 'settings.appearance': 'Apparence', 'settings.theme': 'Thème', 'settings.theme_light': 'Clair', 'settings.theme_dark': 'Sombre', 'settings.theme_system': 'Système', 'settings.language': 'Langue', 'settings.about': 'À propos', 'firstrun.title': 'Quel hub ?', 'firstrun.hint': 'Un hub détient votre compte et vous met en relation avec les nœuds. Il ne voit ni vos fichiers, ni vos messages, ni vos clés.', 'firstrun.btn': 'Continuer', 'firstrun.checking': 'Vérification…', 'firstrun.note': 'Il n’y a volontairement pas de valeur par défaut : cette application ne fait confiance à un hub que pour son API, jamais pour l’interface, qui est livrée avec l’application.', 'device.this_device': 'Cet appareil', 'settings.keys_heading': 'Clés sur cet appareil', 'settings.hub_heading': 'Hub', 'settings.hub_current': 'Actuellement', 'settings.hub_hint': 'Changer cette adresse vous déconnecte et redémarre la fenêtre. Un hub sur votre propre machine est généralement en http, pas en https.', 'settings.hub_change': 'Changer', 'settings.keys_where': 'Protégées par', 'settings.keys_unprotected': 'Aucun trousseau système ne fonctionne : vos clés sont chiffrées avec une clé qui n’est pas secrète. Quiconque peut lire les fichiers de cette machine peut les lire. Démarrez un trousseau, ou considérez cet appareil comme non fiable.', 'settings.keys_unavailable': 'Ce système n’offre aucun stockage de clés, donc cet appareil ne peut pas être mémorisé — votre phrase secrète vous sera redemandée à chaque fois. C’est le comportement sûr : rien n’a été stocké sans protection.', 'settings.version': 'Version', 'settings.protocol': 'Protocole', 'settings.role': 'Rôle', 'settings.groups': 'Notifications de groupe', 'settings.notifications': 'Notifications', 'settings.node_key': 'Associer un node', 'settings.node_key_desc': 'Si vous exploitez un node MeshBay, collez ici sa clé ' + 'publique Ed25519 pour l’associer à votre compte. Vous trouverez cette clé ' + 'dans le tableau de bord d’administration de votre node.', 'settings.node_key_placeholder': 'Collez la clé publique Ed25519 du node (base64)', 'settings.node_key_submit': 'Associer le node', 'settings.node_key_success': 'Node associé avec succès', 'settings.node_key_current': 'Clé du node associé', // Sidebar 'sidebar.create_group': 'Créer un groupe', 'sidebar.settings': 'Paramètres', 'sidebar.admin': 'Administration', // User menu 'usermenu.language': 'Langue', 'usermenu.settings': 'Paramètres', 'usermenu.theme_light': 'Thème clair', 'usermenu.theme_dark': 'Thème sombre', 'usermenu.logout': 'Déconnexion', // Admin panel 'admin.title': 'Administration', 'admin.tab_stats': 'Statistiques', 'admin.tab_users': 'Utilisateurs', 'admin.tab_groups': 'Groupes', 'admin.tab_nodes': 'Nodes', 'admin.tab_logs': 'Journaux', 'admin.col_observed_ip': 'Vu depuis', 'admin.col_hint': 'Adresse annoncée', 'admin.col_last_seen': 'Dernière annonce', 'admin.node_online': 'en ligne', 'admin.node_offline': 'hors ligne', 'admin.no_nodes': 'Aucun node enregistré', 'admin.nodes_hint': '« Vu depuis » est l’adresse d’où l’annonce nous est ' + 'parvenue, sur une requête signée avec la clé du node — c’est celle sur ' + 'laquelle s’appuyer pour répondre à une réquisition. L’adresse annoncée est ' + 'celle que le node croit être la sienne, apprise d’un serveur STUN puis ' + 'transmise ; elle sert à joindre le node et ne prouve rien.', 'admin.tab_blocklist': 'Liste de blocage', 'admin.tab_general': "Général", 'admin.general_groups_heading': "Groupes", 'admin.allow_public_groups_label': "Autoriser les membres à créer des groupes publics", 'admin.allow_public_groups_hint': "Désactivé, les nouveaux groupes ne peuvent être que privés et sur invitation. Les groupes publics existants ne sont pas affectés — suspendez-les un par un depuis l'onglet Groupes.", 'admin.settings_readonly': "Seul un administrateur peut modifier ces paramètres.", // Admin stats 'admin.stat_users': 'Utilisateurs', 'admin.stat_groups': 'Groupes', 'admin.stat_nodes': 'Nodes', 'admin.stat_online': 'Nodes en ligne', // Admin users 'admin.users_search': 'Rechercher un utilisateur...', 'admin.col_username': "Nom d'utilisateur", 'admin.col_role': 'Rôle', 'admin.col_status': 'Statut', 'admin.col_created': 'Création', 'admin.col_actions': 'Actions', 'admin.col_email': 'E-mail', 'admin.col_groups': 'Groupes', 'admin.no_users': 'Aucun utilisateur trouvé', 'admin.btn_suspend': 'Suspendre', 'admin.btn_unsuspend': 'Réactiver', 'admin.btn_revoke': "Révoquer", 'admin.revoke_group_confirm': "Révoquer le groupe « {group} » ? Une révocation signée est envoyée à chaque node qui l'héberge, et c'est irréversible depuis cette page. Suspends-le plutôt si tu veux seulement le mettre en pause.", 'admin.btn_details': 'Détails', 'admin.btn_delete': 'Supprimer', 'admin.delete_confirm': 'Supprimer le compte « {user} » ? Cette action est ' + 'irréversible. Les fichiers qu’il a envoyés restent sur les nodes qui les ' + 'hébergent, et chaque node conserve l’identité qu’il a épinglée jusqu’à ce ' + 'que son opérateur la retire. La suspension est l’option réversible.', 'admin.user_detail': "Détails de l'utilisateur", 'admin.btn_close': 'Fermer', 'admin.self_note': '(vous)', // Admin groups 'admin.col_name': 'Nom', 'admin.col_visibility': 'Visibilité', 'admin.col_members': 'Membres', 'admin.no_groups': 'Aucun groupe trouvé', // Admin logs 'admin.col_time': 'Horodatage', 'admin.col_event': 'Événement', 'admin.col_user': 'Utilisateur', 'admin.col_ip': 'IP', 'admin.col_detail': 'Détail', 'admin.filter_all': 'Tous les événements', 'admin.no_logs': 'Aucun journal trouvé', 'admin.btn_load_more': 'Charger plus', // Admin blocklist 'admin.col_hash': 'Empreinte', 'admin.col_reason': 'Motif', 'admin.col_date': 'Date', 'admin.col_added_by': 'Ajoutée par', 'admin.no_blocked': 'Aucune empreinte bloquée', 'admin.add_hash': 'Ajouter une empreinte à la liste de blocage', 'admin.hash_placeholder': 'empreinte blake3 (64 caractères hexadécimaux)', 'admin.reason_placeholder': 'Motif', 'admin.btn_block': 'Bloquer', 'admin.btn_unblock': 'Débloquer', // Notifications // Create group 'create_group.title': 'Créer un groupe', 'create_group.name': 'Nom du groupe', 'create_group.name_placeholder': 'ex. Photos de famille, Documents du projet...', 'create_group.join_policy': "Politique d'adhésion", 'create_group.invite': 'Sur invitation', 'create_group.invite_desc': "Les membres doivent être invités par un administrateur. Le groupe n’est pas listé publiquement.", 'create_group.open': 'Ouvert (tout le monde peut rejoindre)', 'create_group.open_desc': "Listé dans les groupes publics — n’importe qui peut le trouver et le rejoindre sans approbation.", 'create_group.description': 'Description', 'create_group.description_hint': 'De quoi parle ce groupe ? (facultatif)', 'create_group.submit': 'Créer', 'create_group.hint': 'Un groupe a besoin d’un node pour héberger les fichiers. ' + 'Vous pouvez créer le groupe maintenant et connecter un node plus tard.', 'create_group.creating': 'Création...', // Members 'members.col_role': 'Rôle', 'members.group_role': 'Rôle dans le groupe', 'members.admin': 'Administrateur', 'members.group_admin': 'Administrateur du groupe', 'members.owner': 'Propriétaire', 'members.member': 'Membre', 'members.invite_title': 'Inviter un membre', 'members.username_placeholder': "Nom d'utilisateur", 'members.invite_btn': 'Inviter', 'members.invite_needs_pairing': 'Les invitations sont signées avec la clé que ce ' + 'node a épinglée pour votre navigateur : appairez-le ci-dessous avant ' + 'd’inviter qui que ce soit.', 'members.invite_ask_operator': 'Seul l’opérateur du node qui héberge ce groupe ' + 'peut inviter, depuis un navigateur appairé avec lui.', 'members.remove': 'Retirer', 'members.remove_confirm': 'Retirer {user} de ce groupe ? Son compte, ses autres ' + 'groupes et les fichiers qu’il a envoyés ne sont pas affectés.', 'members.remove_hint': 'Retirer quelqu’un lui ôte son adhésion et empêche le node ' + 'de lui remettre la clé du groupe. Cela ne supprime pas son compte, et cela ne ' + 'reprend pas la clé qu’il détient déjà — faites-la tourner sur le node ' + '(meshbay-node gek-init) si cela compte.', 'members.pair_title': 'Appairer ce navigateur avec votre node', 'members.pair_hint': 'Votre node n’accepte les actions d’opérateur — invitations, ' + 'suppression de fichiers — que depuis un navigateur avec lequel il a été ' + 'appairé. Lancez `meshbay-node operator pair` sur le node et saisissez le code ' + 'ici. Le code ne transite jamais par le hub.', 'members.pair_btn': 'Appairer', 'members.pair_success': 'Ce navigateur est désormais appairé avec le node.', 'members.invite_code_ready': 'Code d’invitation pour {user} — transmettez-le-lui ' + 'par le moyen dont vous avez l’habitude. Il ne fonctionne qu’une fois, et ne ' + 'transite jamais par le hub.', 'members.invite_code_hint': 'La personne le saisit la première fois qu’elle ouvre ' + 'ce groupe. Vous n’avez pas besoin d’être en ligne à ce moment-là.', 'transfers.title': 'Transferts', 'transfers.clear': 'Effacer les terminés', 'transfers.cancel': 'Annuler', 'transfers.open': 'Ouvrir', 'transfers.done': 'Terminé', 'transfers.cancelled': 'Annulé', 'transfers.failed': 'Échec', 'group.select': 'Sélectionner', 'group.select_done': 'Terminé', 'group.actions': 'Actions ({n})', 'group.download_n': 'Télécharger ({n})', 'group.download_zip_n': 'Télécharger les dossiers en zip ({n})', 'group.delete_n': 'Supprimer ({n})', 'group.delete_n_confirm': { one: 'Supprimer {n} élément ? {names}', other: 'Supprimer {n} éléments ? {names}', }, 'group.download_zip': { one: 'Télécharger en zip ({n} fichier)', other: 'Télécharger en zip ({n} fichiers)', }, 'group.zip_empty': 'Ce dossier ne contient rien à télécharger.', 'group.zip_no_stream': 'Ce navigateur ne sait pas écrire un téléchargement ' + 'directement sur le disque : {name} ({size}) doit donc être assemblé en mémoire ' + 'au préalable. Sur une archive volumineuse, cela peut échouer. Continuer ?', 'group.rmdir': 'Supprimer le dossier', 'group.rmdir_confirm': 'Supprimer le dossier « {name} » ? Il doit être vide.', 'group.rmdir_not_empty': 'Ce dossier n’est pas vide. Supprimez d’abord ce qu’il ' + 'contient — rien ici ne supprime des fichiers que vous ne voyez pas.', 'group.desc_edit': 'Modifier la description', 'group.desc_add': 'Ajouter une description', 'group.desc_save': 'Enregistrer', 'group.desc_cancel': 'Annuler', 'group.desc_placeholder': 'À quoi sert ce groupe — les membres le voient sur leur ' + 'page d’accueil.', 'group.join_code_title': 'Ce node doit vous reconnaître', 'group.join_code_hint': 'Demandez son code à usage unique à la personne qui vous a ' + 'invité, et saisissez-le ici. Ensuite, ce navigateur est reconnu et la question ' + 'ne vous sera plus posée.', 'group.join_code_btn': 'Rejoindre', 'notif.purge': 'Tout effacer', 'notif.title': 'Notifications', 'notif.empty': 'Aucune notification', 'notif.mark_all_read': 'Tout marquer comme lu', // Sidebar 'sidebar.search': 'Rechercher des fichiers', // Status // Search 'search.placeholder': 'Rechercher dans tous les groupes...', 'search.no_results': 'Aucun fichier ne correspond à votre recherche.', 'search.col_group': 'Groupe', 'search.result_count': { one: '{n} fichier trouvé', other: '{n} fichiers trouvés', }, 'search.hint': 'Saisissez un terme pour rechercher dans tous vos groupes.', 'search.indexing': 'Indexation de {done} / {total} groupes…', 'search.unreachable': { one: '{n} groupe injoignable', other: '{n} groupes injoignables' }, 'search.view_files': 'Fichiers', 'search.view_videos': 'Vidéos', 'search.view_music': 'Musique', 'search.view_photos': 'Photos', 'search.connecting': 'Connexion aux groupes…', // Presence, chat paging, leaving a group, the profile page 'presence.online': 'Un node servant ce groupe est en ligne', 'presence.offline': 'Aucun node joignable pour ce groupe', 'presence.unknown': 'Pas encore vérifié', 'presence.indexing': 'Indexation en cours — {pct} %', 'chat.load_older': 'Charger {n} messages plus anciens', 'chat.start_of_history': 'Début de la conversation', 'chat.today': 'Aujourd’hui', 'chat.yesterday': 'Hier', 'chat.unread': 'Nouveaux messages', 'chat.jump_latest': 'Aller au plus récent', 'chat.jump_new': 'Nouveaux messages', 'group.leave': 'Quitter le groupe', 'group.leave_confirm': 'Quitter « {name} » ? Vous perdrez l’accès à ses fichiers et à sa discussion. Les fichiers que vous avez envoyés restent sur le node, et celui-ci conserve l’identité qu’il a épinglée pour vous jusqu’à ce que son opérateur la retire.', 'group.mute': 'Couper les notifications', 'group.unmute': 'Réactiver les notifications', 'profile.title': 'Profil', 'usermenu.profile': 'Profil', // First-run setup wizard 'setup.welcome_title': 'Bienvenue sur MeshBay', 'setup.welcome_message': 'Votre node héberge vos fichiers — chiffrés, sur votre machine. Démarrons-le et créons votre premier groupe.', 'setup.node_detected': 'Node local détecté et en fonctionnement.', 'setup.node_not_running': 'Votre node est installé mais ne tourne pas.', 'setup.node_start': 'Démarrer le node', 'setup.node_starting': 'Démarrage du node…', 'setup.node_started': 'Node démarré.', 'setup.node_not_installed': 'meshbay-node n\'est pas installé sur cette machine.', 'setup.node_install_hint': 'Installez-le avec votre gestionnaire de paquets, puis revenez ici.', 'setup.skip': 'Passer — créer un groupe sans node local', 'setup.create_group': 'Créer votre premier groupe', 'setup.dismiss': 'Passer la configuration', // Group 'group.retry': 'Réessayer', // Sidebar 'sidebar.node': 'Node', // Node admin 'node.title': 'Node', 'node.service_checking': 'Vérification du service du nœud…', 'node.service_not_installed': 'Non installé en tant que service', 'node.service_state_active': 'En cours d’exécution', 'node.service_state_inactive': 'Arrêté', 'node.service_state_failed': 'Échec', 'node.service_state_activating': 'Démarrage…', 'node.service_state_deactivating': 'Arrêt en cours…', 'node.service_state_unknown': 'Inconnu', 'node.service_start': 'Démarrer', 'node.service_starting': 'Démarrage…', 'node.service_stop': 'Arrêter', 'node.service_stopping': 'Arrêt…', 'node.service_restart': 'Redémarrer', 'node.service_restarting': 'Redémarrage…', 'node.not_operator': 'Impossible de joindre votre node. Vérifiez qu\'il est en cours d\'exécution.', 'node.offline': 'Node hors ligne', 'node.retry': 'Réessayer', 'node.pair_needed': "Aucun opérateur appairé. Entrez un code d'appairage pour activer les opérations d'administration (invitations, suppression de fichiers).", 'node.pair_code_placeholder': "Code d'appairage", 'node.pair_button': 'Appairer ce navigateur', 'node.pair_success': 'Appairage réussi.', 'node.reload': 'Recharger la configuration', 'node.reloaded': 'Configuration rechargée. Les modifications de répertoires sur les groupes existants sont maintenant actives.', 'node.restart_needed': 'Après l\'ajout : initialisez la clé de groupe (meshbay-node gek-init --group ).', 'node.no_groups': 'Aucun groupe configuré sur ce node.', 'node.stale': 'absent du hub', 'node.settings': 'Paramètres du node', 'node.settings_edit_hint': 'Les modifications sont appliquées immédiatement et sauvegardées dans node.toml.', 'node.settings_save': 'Enregistrer', 'node.settings_saving': 'Enregistrement…', 'node.settings_saved': 'Paramètres enregistrés.', 'node.setting_invite_ttl': 'Durée des invitations', 'node.setting_pair_ttl': 'Durée du code d\'appairage', 'node.setting_device_ttl': 'Durée des demandes d\'appareil', 'node.setting_max_streams': 'Flux vidéo simultanés max', 'node.setting_transcode': 'Transcoder les vidéos incompatibles', 'node.setting_unit_hours': 'heures', 'node.setting_unit_minutes': 'min', 'node.setting_on': 'Activé', 'node.setting_off': 'Désactivé', 'node.unavailable': 'indisponible', 'node.files': { one: '1 fichier', other: '{n} fichiers', }, 'node.peers': { one: '1 pair', other: '{n} pairs', }, 'node.roots': 'Répertoires', 'node.add_root': 'Ajouter un répertoire', 'node.remove_root': 'Retirer', 'node.root_added': 'Répertoire ajouté.', 'node.root_remove_confirm': 'Retirer « {name} » de ce groupe ?', 'node.root_removed': 'Répertoire retiré. Un redémarrage est recommandé pour mettre à jour l\'index.', 'node.upload_root': 'uploads', 'node.attach_group': 'Ajouter un groupe', 'node.attach_pick': 'Groupe à héberger', 'node.attach_dir': 'Répertoire partagé', 'node.attach_upload_dir': 'Répertoire d\'upload', 'node.attach_upload_label': 'Répertoire d\'upload (pour les fichiers envoyés et les pièces jointes du chat)', 'node.attached': 'Groupe ajouté et chargé. Lancez meshbay-node gek-init --group {name} si ce n\'est pas encore fait.', 'node.detach_group': 'Retirer le groupe', 'node.detach_confirm': 'Retirer « {name} » de ce node ?', 'node.detached': 'Groupe retiré.', 'node.gek': 'Clé de groupe', 'node.no_gek': 'Pas de clé de groupe', 'node.gek_init_hint': 'Aucune clé de groupe pour l\'instant. Lancez GEK init depuis la ligne de commande pour en créer une.', 'node.gek_public_hint': 'La rotation de clé n\'est pas disponible pour les groupes publics.', 'node.gek_rotate': 'Rotation de la clé de groupe', 'node.gek_rotate_confirm': 'Effectuer la rotation de la clé de groupe ? Les membres connectés recevront la nouvelle clé automatiquement. Le contenu déjà téléchargé n\'est pas affecté.', 'node.gek_rotated': 'Clé de groupe renouvelée.', 'node.roster': 'Registre', 'node.roster_load': 'Charger le registre', 'node.roster_empty': 'Aucun membre enregistré pour l\'instant.', 'node.roster_user': 'Utilisateur', 'node.roster_role': 'Rôle', 'node.roster_status': 'Statut', 'node.roster_via': 'Enregistré via', 'node.roster_invites': { one: '1 invitation en attente', other: '{n} invitations en attente', }, 'node.unpin': 'Retirer l\'identité', 'node.unpin_confirm': 'Retirer l\'identité de « {name} » ? Cette personne devra se ré-apparier.', 'node.unpin_done': 'Identité retirée.', 'node.denylist': 'Liste de blocage', 'node.denylist_load': 'Charger la liste de blocage', 'node.denylist_empty': 'La liste de blocage est vide.', 'node.denylist_count': { one: '1 entrée', other: '{n} entrées', }, 'node.denylist_remove': 'Retirer', 'node.denylist_clear_all': 'Tout effacer', 'node.denylist_clear_confirm': 'Retirer « {subject} » de la liste de blocage ?', 'node.denylist_cleared': 'Entrée retirée de la liste de blocage.', // Node settings 'settings_node.detach_failed_continue': 'Impossible de détacher le groupe du node. Supprimer quand même sur le hub ?', 'settings_node.roots': 'Répertoires partagés', 'settings_node.scan_title': 'Analyse', 'settings_node.scan_hint': 'À quelle fréquence le node revérifie ses répertoires à la recherche de changements manqués, et combien de temps il attend après une modification avant d\'indexer un fichier.', 'settings_node.scan_reconcile_label': 'Intervalle de revérification (minutes)', 'settings_node.scan_debounce_label': 'Attente après un changement (secondes)', 'settings_node.scan_save': 'Enregistrer', 'settings_node.scan_saving': 'Enregistrement…', 'settings_node.scan_saved': 'Enregistré.', 'settings_node.tmdb_title': 'Métadonnées TMDB', 'settings_node.tmdb_hint': "Permet à l'application Vidéos d'afficher affiches, résumés et distribution depuis TMDB. Désactivé signifie navigation par vignettes uniquement, sans aucune requête vers un tiers.", 'settings_node.tmdb_enabled': 'Activé', 'settings_node.tmdb_disabled': 'Désactivé', 'settings_node.tmdb_token_label': "Jeton d'API personnalisé (facultatif)", 'settings_node.tmdb_token_placeholder': 'Laisser vide pour utiliser le jeton fourni par défaut', 'settings_node.tmdb_token_customized': 'Un jeton personnalisé est défini.', 'settings_node.tmdb_token_default': 'Utilise le jeton fourni par défaut.', 'settings_node.tmdb_save': 'Enregistrer', 'settings_node.tmdb_language_label': 'Langue', 'settings_node.tmdb_language_hint': "S'applique à tout le monde — un cache partagé, pas une requête par personne.", 'settings_node.video_root_title': 'Dossier racine des Vidéos', 'settings_node.video_root_hint': "Quel dossier (ou sous-dossier) sert de point d'entrée à l'application Vidéos pour ce groupe. Rien ne s'affiche dans Vidéos, et aucune recherche TMDB n'est effectuée, tant qu'aucun n'est choisi.", 'settings_node.video_root_none': '— aucun choisi —', 'settings_node.musicbrainz_title': 'Métadonnées MusicBrainz', 'settings_node.musicbrainz_hint': "Permet à l'app Musique d'afficher les pochettes et les noms canoniques depuis MusicBrainz quand un morceau n'a pas de pochette intégrée utilisable. Désactivé signifie une navigation par tags/nom de fichier uniquement, sans requête vers un tiers.", 'settings_node.musicbrainz_enabled': 'Activé', 'settings_node.musicbrainz_disabled': 'Désactivé', 'settings_node.video_root_save': 'Enregistrer', 'settings_node.video_root_change_confirm': "Changer la racine des Vidéos remplace ce que chaque membre voit dans l'onglet Vidéos. Continuer ?", 'settings_node.audio_root_title': 'Dossier racine de la Musique', 'settings_node.audio_root_hint': 'Quel dossier (ou sous-dossier) sert de point d\'entrée à l\'application Musique pour ce groupe. Rien ne s\'affiche dans Musique, et aucune lecture de tags/pochettes n\'est effectuée, tant qu\'aucun n\'est choisi.', 'settings_node.audio_root_none': '— aucun choisi —', 'settings_node.audio_root_save': 'Enregistrer', 'settings_node.audio_root_change_confirm': 'Changer la racine de la Musique remplace ce que chaque membre voit dans l\'onglet Musique. Continuer ?', 'settings_node.photo_roots_title': 'Dossiers racines des Photos', 'settings_node.photo_roots_hint': 'Quel(s) dossier(s) l\'application Photos traite comme points d\'entrée pour ce groupe — une photothèque est souvent répartie sur plusieurs dossiers, donc plusieurs peuvent être choisis. Rien ne s\'affiche dans Photos tant qu\'aucun n\'est ajouté.', 'settings_node.photo_roots_none': '— aucun choisi —', 'settings_node.photo_roots_add_placeholder': 'Ajouter un dossier…', 'settings_node.photo_roots_add': 'Ajouter', 'settings_node.photo_roots_remove': 'Retirer', 'settings_node.photo_roots_save': 'Enregistrer', 'settings_node.directories_title': 'Répertoires', 'settings_node.directories_hint': 'Dossiers partagés, et lequel d\'entre eux les applications Vidéos, Musique et Photos utilisent comme leur(s) propre(s) point(s) d\'entrée.', // Create group wizard 'wizard.title': 'Créer un groupe', 'wizard.detecting': 'Détection du node local…', 'wizard.node_not_found': 'Aucun node local détecté. Vérifiez que meshbay-node est en cours d\'exécution.', 'wizard.node_offline_warning': 'Le node ne tourne pas. Le groupe sera créé sur le hub uniquement. Vous pourrez connecter le node plus tard depuis la page Node.', 'wizard.retry': 'Réessayer', 'wizard.wrong_account': "Le node tourne mais le nom d'utilisateur configuré ne correspond pas à votre compte. Vérifiez hub.username dans node.toml.", 'wizard.skip_node': 'Continuer sans node', 'wizard.directories': 'Répertoires partagés', 'wizard.directories_hint': 'Choisissez les répertoires que ce groupe partagera. Au moins un est requis.', 'wizard.add_directory': 'Ajouter un répertoire', 'wizard.remove': 'Retirer', 'wizard.set_upload': 'Définir comme cible d\'upload', 'wizard.upload_target': 'cible d\'upload', 'wizard.create_and_setup': 'Créer et configurer', 'wizard.create_hub_only': 'Créer sur le hub uniquement', 'wizard.setting_up': 'Configuration de votre groupe…', 'wizard.step_create_hub': 'Création du groupe sur le hub', 'wizard.step_attach': 'Rattachement au node', 'wizard.step_apps': 'Choix des applications', 'wizard.step_add_roots': 'Ajout des répertoires', 'wizard.step_gek': 'Initialisation de la clé de chiffrement', 'wizard.step_pair': 'Mise en place de l\'appariement', 'wizard.step_index': 'Indexation des fichiers', 'wizard.indexing_progress': 'Indexation… {pct} %', 'wizard.indexing_current_dir': 'Analyse : {dir}', 'wizard.done_title': 'Groupe créé', 'wizard.done_message': 'Votre groupe est prêt. Votre node l\'héberge et le chiffrement est configuré.', 'wizard.go_to_group': 'Aller au groupe', 'wizard.finish_later': 'Terminer la configuration plus tard', };