// Source unique des libellés de l'interface — en français d'abord. // Ton : on tutoie la personne ; le sujet est la personne ou le collectif, // jamais la formule ni le système. Les clés en/es doivent être identiques // (vérifié à la compilation). Termes interdits : tests/unit/lexicon.test.ts. export const fr = { 'app.name': 'libreDecision', 'app.skip': 'Aller au contenu', 'nav.label': 'Boîte à outils', 'nav.home': 'Accueil', 'nav.decisions': 'Décisions', 'nav.docs': 'Docs de référence', 'nav.mandates': 'Mandats', 'nav.protocols': 'Protocoles', 'nav.groups': 'Mes groupes', 'nav.docs.count.one': '{label}, {n} doc en cours', 'nav.docs.count.other': '{label}, {n} docs en cours', 'nav.access': 'Accès', 'nav.access.hint': 'trustinWallet', 'nav.feedback': 'Faire un retour', 'nav.signin': 'Se connecter', 'nav.signout': 'Se déconnecter', 'nav.mood': 'Ambiance', 'mood.pierre': 'Pierre', 'mood.calcaire': 'Calcaire', 'mood.nuit': 'Nuit', 'mood.ardoise': 'Ardoise', 'nav.lang': 'Langue', 'nav.menu': 'Menu', 'nav.close': 'Fermer', 'home.title': 'Rendre possible la décision collective', 'home.leitmotiv.context': 'contexte et cadrage', 'home.leitmotiv.process': 'processus et modalités', 'home.leitmotiv.tools': 'boîte à outils', 'home.signin': 'Se connecter avec sa clé Ğ1', 'home.signin.note': 'Le même accès que le forum Monnaie libre : tu signes dans Ğecko, sans mot de passe.', 'signin.title': 'Se connecter', 'signin.g1': 'Se connecter avec Ğ1', 'signin.g1.how': "Tu es envoyé sur connect.monnaie-libre.fr, le service de connexion du forum Monnaie libre. Tu y approuves la connexion dans Ğecko (lien ou QR code), puis tu reviens ici. Aucun mot de passe, aucune clé ne nous est transmise.", 'signin.g1.members': 'Réservé aux membres de la toile de confiance Ğ1.', 'signin.g1.pending': "La connexion Ğ1 arrive : l'inscription de libreDecision auprès de connect.monnaie-libre.fr est en cours. En attendant, on entre avec un lien d'invitation.", 'signin.invite': "Tu as reçu un lien d'invitation ? Ouvre-le simplement : il te connecte.", 'signin.dev': 'Connexion de développement', 'signin.dev.name': 'Nom', 'signin.dev.admin': 'administrateur des accès', 'signin.dev.go': 'Entrer', 'signin.error.refus': 'La connexion a été refusée sur connect.monnaie-libre.fr.', 'signin.error.etat': 'La connexion a expiré ou vient d’un autre navigateur. Recommence depuis ce navigateur.', 'signin.error.incomplet': 'Le retour de connect.monnaie-libre.fr était incomplet. Recommence.', 'signin.error.echange': 'connect.monnaie-libre.fr ne répond pas. Réessaie dans un moment.', 'signin.error.interne': 'La connexion a échoué de notre côté. Réessaie dans un moment.', 'invite.title': 'Invitation', 'invite.working': 'Connexion en cours…', 'invite.invalid': "Ce lien d'invitation n'est plus valable : il a déjà servi ou il a expiré. Demande un nouveau lien à la personne qui te l'a envoyé.", 'invite.missing': "Ce lien est incomplet. Ouvre le lien d'invitation entier, tel que tu l'as reçu.", 'team.title': 'Rejoindre une équipe', 'team.working': 'Lecture du lien…', 'team.invalid': "Ce lien d'équipe n'est plus valable : il a expiré, il a été révoqué ou toutes ses places sont prises. Demande un nouveau lien à la personne qui te l'a envoyé.", 'team.missing': "Ce lien est incomplet. Ouvre le lien d'équipe entier, tel que tu l'as reçu.", 'team.opens': '« {label} » t’ouvre : {groups}.', 'team.until': "Lien valable jusqu'au {date}.", 'team.name': 'Ton nom', 'team.name.hint': 'Le nom sous lequel le groupe te verra. Une personne, une identité : si tu as déjà rejoint, reviens dans le navigateur où ta session est ouverte.', 'team.join': 'Rejoindre', 'team.signed': 'Ta session est ouverte sous le nom {name} : ces groupes s’ajoutent à ton identité.', 'team.add': 'Ajouter ces groupes', 'team.notme': "Ce n'est pas moi : me déconnecter", 'groups.title': 'Mes groupes', 'groups.same.key': 'Groupes qui utilisent la même clé', 'groups.locked': 'Réservé à ses membres', 'groups.locked.long': "Ce groupe s'ouvre à ses membres. L'accès se demande à un administrateur de trustinWallet.", 'groups.test': 'Pour les essais', 'groups.open': 'Ouvrir', 'groups.empty': "Aucun groupe n'est visible pour l'instant.", 'group.tools': 'Outils', 'group.current': 'En cours', 'group.current.none': "Aucun doc en cours dans ce groupe pour l'instant.", 'group.upcoming': 'À venir', 'group.upcoming.none': "Rien n'est annoncé ici pour l'instant.", 'pillar.decisions': "Un parcours assisté pour choisir les bonnes modalités de décision, et tenir le journal des décisions.", 'pillar.docs': "Acte d'engagement, licence, charte, constitution : des textes vivants, sous vote permanent.", 'pillar.mandates': 'Créer et révoquer tout type de mandat.', 'pillar.protocols': "Des workflows pour s'organiser sans organe statutaire : rôles tournants et automatisations techniques.", 'pillar.open': 'ouvert', 'pillar.soon': 'à venir', 'decisions.note': "Un module est un article du doc. Il reste à voter tant qu'aucune de ses versions n'a été adoptée par un vote.", 'decisions.toVote.one': '{n} module à voter', 'decisions.toVote.other': '{n} modules à voter', 'decisions.withoutMyVote.one': 'dont {n} sans ton vote', 'decisions.withoutMyVote.other': 'dont {n} sans ton vote', 'docs.title': 'Docs de référence', 'docs.inForce.one': '{n} article en vigueur', 'docs.inForce.other': '{n} articles en vigueur', 'docs.open.one': '{n} proposition en cours', 'docs.open.other': '{n} propositions en cours', 'doc.view.label': 'Lire', 'doc.view.inforce': 'En vigueur', 'doc.view.wellrated': 'Si les bien cotées passent', 'doc.view.all': 'Si tout passe', 'doc.view.wellrated.note': "Aperçu : le texte tel qu'il serait si les propositions bien cotées entraient en vigueur. Rien n'est adopté.", 'doc.view.all.note': "Aperçu : le texte tel qu'il serait si toutes les propositions entraient en vigueur, même peu soutenues. Rien n'est adopté.", 'doc.view.empty': 'Aucune proposition ne change le texte dans cet aperçu.', 'doc.mark.added': 'ajouté', 'doc.mark.replaced': 'modifié', 'doc.mark.removed': 'retiré', 'doc.lang.label': 'Langue du texte', 'doc.lang.translation': 'Traduction éditoriale, sans vote. Le texte qui fait foi est en français.', 'doc.lang.original': "Lire l'original", 'doc.lang.stale': 'traduction à revoir', 'doc.lang.missing': 'pas encore traduit', 'doc.seed': 'seed a minima', 'doc.seed.long': "Entré en vigueur sans vote, pour ne pas partir d'une page blanche. Il reste sous vote : 0 vote pour l'instant.", 'doc.confirmed': 'confirmé par le vote', 'doc.adopted': 'adopté le {date}', 'doc.action.vote': 'Le vote', 'doc.action.proposals': 'Propositions', 'doc.action.propose': 'Proposer une modification', 'doc.basket': 'Voter en lot', 'doc.basket.count': 'Voter en lot · {n}', 'doc.empty': "Aucun article n'est en vigueur. Les propositions ci-dessous remontent dès qu'elles atteignent leur seuil.", 'doc.published': 'Publié sur le dépôt des textes', 'doc.publish.pending': 'Publication en attente', 'deep.title': 'Propositions en cours', 'deep.note': "Pas encore en vigueur. Chacune remonte dès qu'elle atteint son seuil : au moins {floor} voix pour, puis la majorité que demande son inertie.", 'deep.new': 'Proposer un nouvel article', 'deep.drafts': 'Tes brouillons', 'deep.drafts.note': 'Non soumis au vote. Toi seul les vois.', 'deep.rival': 'remplacerait « {title} »', 'deep.addition': 'nouvel article', 'deep.removal': 'retrait de « {title} »', 'deep.inertia': 'inertie vers {level}', 'deep.blocked': 'bloquée', 'deep.mine': 'ta proposition', 'deep.stale': 'à reconfirmer', 'deep.wellrated': 'bien cotée', 'deep.filter.all': 'Toutes', 'deep.filter.wellrated': 'Bien cotées', 'deep.filter.mine': 'Les miennes', 'deep.none': 'Aucune proposition dans ce filtre.', 'deep.variant': 'variante {label}', 'deep.versions.one': '{n} version', 'deep.versions.other': '{n} versions', 'deep.version': 'version {n}', 'deep.lead': 'en tête : {label}', 'section.introduction': 'Introduction', 'section.fondamental': 'Engagements fondamentaux', 'section.technique': 'Engagements techniques', 'section.conclusion': 'Conclusion', 'section.annexe': 'Annexes', 'section.formule': 'Formule de vote', 'section.inertie': 'Inertie', 'section.ordonnancement': 'Ordonnancement', 'tally.short': '{for} pour · {against} contre', 'tally.required': 'Seuil : {n} voix pour', 'tally.missing.one': 'Il manque {n} voix pour.', 'tally.missing.other': 'Il manque {n} voix pour.', 'tally.reached': 'Seuil atteint.', 'tally.level': 'Niveau : {pct} % du seuil', 'inertia.name.1': 'très basse', 'inertia.name.2': 'basse', 'inertia.name.3': 'moyenne', 'inertia.name.4': 'haute', 'inertia.name.5': 'très haute', 'inertia.level': '{k} / 5 · {name}', 'inertia.badge': 'inertie {level}', 'panel.vote': 'Le vote', 'panel.proposals': 'Propositions', 'panel.propose': 'Proposer', 'panel.settings': 'Réglages', 'panel.basket': 'Panier', 'panel.details': 'Détails', 'panel.close': 'Fermer le panneau', 'panel.inforce': 'En vigueur', 'panel.proposal': 'Proposition', 'panel.by': 'proposé par {name}', 'author.invited': 'sur invitation', 'panel.seed.origin': 'texte issu du seed', 'panel.changes': 'Voir les changements', 'panel.text': 'Voir le texte', 'vote.yours': 'Ton vote', 'vote.for': 'Pour', 'vote.against': 'Contre', 'vote.retract': 'Retirer mon vote', 'vote.saved': 'Vote enregistré.', 'vote.retracted': 'Vote retiré.', 'vote.stale': "Le texte a changé de fond depuis ton vote : ton vote ne compte plus tant que tu ne l'as pas reconfirmé.", 'vote.reconfirm': 'Reconfirmer : {choice}', 'vote.private': 'Ton vote ne se montre à personne : seuls les totaux sont visibles.', 'vote.blocked': "Un signalement de contradiction la retient : elle ne peut pas entrer en vigueur tant qu'il tient.", 'vote.entered': '« {title} » est entré en vigueur.', 'vote.entered.remove': '« {title} » est retiré du texte en vigueur.', 'vote.entered.inertia': "L'inertie de « {title} » a changé.", 'vote.closed': 'Cette version ne se vote plus.', 'vote.fold': 'Le vote de « {title} »', 'vote.mine.none': "Tu n'as pas voté sur cette version.", 'vote.mine.for': 'Ton vote : pour', 'vote.mine.against': 'Ton vote : contre', 'vote.mine.chain': 'inscrit sur la chaîne Ğ1', 'vote.mine.saved': 'enregistré', 'vote.mine.pending': 'En attente de la chaîne Ğ1 : {choice}.', 'vote.mine.refused': "Ton dernier vote n'a pas été compté : {reason}", 'vote.mine.expired': "Ton dernier vote n'a pas été vu sur la chaîne Ğ1 à temps : il ne compte pas.", 'vote.mine.receipts': 'Tes bulletins et reçus', 'vote.choice.for': 'pour', 'vote.choice.against': 'contre', 'vote.choice.none': 'retrait de ton vote', 'vote.chain.note': 'Ton vote part de ton portefeuille Ğ1 : {amount} Ğ1, en un seul geste. La chaîne montre que tu as voté, jamais ce que tu as voté.', 'vote.chain.counts': "Ta voix compte pour l'identité Ğ1 du portefeuille qui signe, si elle est membre de la toile de confiance.", 'vote.chain.off': "Le vote par la chaîne Ğ1 n'est pas encore ouvert : le compte qui reçoit les votes reste à créer. Tu peux lire, proposer et signaler une contradiction.", 'vote.members': 'Seuls les membres de ce groupe votent ici.', 'vote.details': 'Coquilles, traductions, signalements, historique', 'ballot.reason.not_member': "le portefeuille qui a signé n'est pas celui d'un membre de la toile de confiance Ğ1.", 'ballot.reason.no_identity': "le portefeuille qui a signé n'est rattaché à aucune identité Ğ1.", 'ballot.reason.transfer': 'le virement vers le compte des votes manque, ou son montant est trop faible.', 'basket.title': 'Panier de vote', 'basket.intro': 'Choisis article par article, une section entière ou tout le document : tout part en un seul geste.', 'basket.doc': 'Tout le document', 'basket.for': 'Tout pour', 'basket.against': 'Tout contre', 'basket.clear': 'Vider', 'basket.pick': 'Ton choix pour « {title} »', 'basket.pick.retract': 'Retirer', 'basket.versions': 'Plusieurs versions : choisis la tienne.', 'basket.waiting.one': '{n} article a plusieurs versions : un geste groupé ne le remplit pas, choisis ta version.', 'basket.waiting.other': '{n} articles ont plusieurs versions : un geste groupé ne les remplit pas, choisis ta version.', 'basket.inforce': 'en vigueur', 'basket.count.one': '{n} choix', 'basket.count.other': '{n} choix', 'basket.send.server': 'Voter ({n})', 'basket.send.chain': 'Signer et envoyer ({n})', 'basket.note.server': "Tes votes comptent dès l'envoi, en une seule fois.", 'basket.note.chain': 'Une seule transaction de {amount} Ğ1, signée par ton portefeuille, pour tous tes choix.', 'basket.empty': "Rien dans le panier pour l'instant.", 'basket.sent.one': '{n} vote enregistré.', 'basket.sent.other': '{n} votes enregistrés.', 'basket.section': 'Voter cette section', 'basket.mine': 'ton vote : {choice}', 'sign.title': 'Voter avec ton portefeuille Ğ1', 'sign.summary.one': '{n} vote, en une transaction : {amount} Ğ1 vers le compte des votes, avec ton bulletin scellé.', 'sign.summary.other': '{n} votes, en une transaction : {amount} Ğ1 vers le compte des votes, avec ton bulletin scellé.', 'sign.wallet': 'Avec quel portefeuille ?', 'sign.account': 'Avec quel compte ?', 'sign.opening': "Ton portefeuille s'ouvre…", 'sign.signing': 'Confirme dans ton portefeuille.', 'sign.waiting': "La chaîne Ğ1 confirme ton vote, en général en moins d'une minute.", 'sign.confirmed': 'Ton vote compte : il est inscrit sur la chaîne Ğ1.', 'sign.confirmed.as': "Compté pour l'identité Ğ1 « {name} ».", 'sign.refused': "Ton vote n'a pas été compté : {reason}", 'sign.expired': "Ton vote n'a pas été vu sur la chaîne Ğ1 à temps : il ne compte pas. Recommence quand tu veux.", 'sign.error.cancelled': "Tu as refusé la signature : rien n'est parti.", 'sign.error.funds': "Ton portefeuille n'a pas assez de Ğ1 : il doit lui rester au moins 1 Ğ1 après le vote.", 'sign.error.node': 'La chaîne Ğ1 ne répond pas. Réessaie dans un moment.', 'sign.error.account': "Ce compte n'est plus dans ton portefeuille.", 'sign.error.wallet': "Ton portefeuille n'a pas pu signer. Réessaie, ou passe par Ğecko.", 'sign.none': "Aucun portefeuille n'est branché à ce navigateur (duniter-connect, par exemple). Sur ton téléphone, Ğecko fait l'affaire.", 'sign.gecko': 'Passer par Ğecko', 'sign.gecko.scan': 'Scanne ce code avec Ğecko, ou touche le lien sur ton téléphone. Vérifie le montant et le commentaire, puis valide.', 'sign.gecko.open': 'Ouvrir dans Ğecko', 'sign.gecko.amount': 'Montant', 'sign.gecko.comment': 'Commentaire', 'sign.gecko.qr': 'Code à scanner avec Ğecko', 'sign.close': 'Fermer', 'sign.later': "Tu peux fermer : la confirmation arrivera seule, et ton vote apparaîtra sous l'article.", 'sign.retry': 'Réessayer', 'sign.error.chain': "La chaîne Ğ1 a refusé la transaction : ton vote n'est pas parti. Réessaie quand tu veux.", 'sign.receipt': 'Télécharger ton reçu', 'sign.history': 'Tes bulletins', 'sign.receipt.note': 'Ton reçu garde ton bulletin et son sel : avec lui, tu vérifies toi-même que la chaîne porte ton vote. Garde-le pour toi.', 'ballots.title': 'Tes bulletins de vote', 'ballots.intro': "Chaque vote par la chaîne Ğ1 part dans un bulletin scellé : la chaîne montre que tu as voté, jamais ce que tu as voté. Ton reçu garde le bulletin et son sel ; avec lui, tu vérifies toi-même ton vote. Personne d'autre ne le reçoit.", 'ballots.mine': 'Tes bulletins', 'ballots.signin': 'Connecte-toi pour retrouver tes bulletins.', 'ballots.none': "Tu n'as encore envoyé aucun bulletin par la chaîne Ğ1.", 'ballots.lines.one': '{n} vote', 'ballots.lines.other': '{n} votes', 'ballots.status.pending': 'En attente de la chaîne Ğ1', 'ballots.status.confirmed': "Compté pour l'identité Ğ1 « {name} »", 'ballots.status.refused': 'Pas compté : {reason}', 'ballots.status.expired': 'Pas vu sur la chaîne Ğ1 à temps : il ne compte pas', 'ballots.block': 'bloc {n}', 'ballots.receipt': 'Télécharger le reçu', 'ballots.verify.title': 'Vérifier un reçu', 'ballots.verify.intro': "Choisis le fichier d'un reçu, ou colle son contenu : la page recalcule l'empreinte du bulletin ici même, sans rien demander au serveur.", 'ballots.verify.file': 'Fichier du reçu', 'ballots.verify.paste': 'Ou colle le reçu', 'ballots.verify.go': 'Vérifier', 'ballots.verify.ok': 'Le reçu tient : ses votes et son sel donnent bien ce commentaire.', 'ballots.verify.line': 'Version {version}, révision {revision} : {choice}', 'ballots.verify.line.label': '{label} — noté dans le reçu, hors du sceau', 'ballots.verify.where': "Cherche ce commentaire dans l'historique de ton portefeuille : c'est ton vote, inscrit sur la chaîne Ğ1.", 'ballots.verify.where.block': "Cherche ce commentaire dans l'historique de ton portefeuille, ou sur la chaîne Ğ1 (le reçu indique le bloc {block}, hors du sceau) : s'il y figure, signé de ton compte, c'est ton vote.", 'ballots.verify.bad': 'Le reçu ne tient pas : ses votes et son sel ne donnent pas son commentaire.', 'ballots.verify.computed': 'Recalculé :', 'ballots.verify.expected': 'Dans le reçu :', 'ballots.verify.unreadable': "Ce n'est pas un reçu de vote lisible.", 'inertia.title': 'Inertie', 'inertia.explain': "Plus l'inertie est haute, plus il faut de voix pour changer ce texte quand peu de gens votent.", 'inertia.change': "Proposer un changement d'inertie", 'inertia.change.to': 'Nouvelle inertie', 'inertia.change.note': "Un changement d'inertie se vote lui-même à l'inertie de l'article : {level}.", 'inertia.change.submit': 'Soumettre au vote', 'inertia.change.open': "Changement d'inertie en cours : vers {level}", 'inertia.change.current': 'actuelle', 'inertia.history.vote': 'Passée de {from} à {to} le {date}, par un vote.', 'inertia.history.amendment': 'Passée de {from} à {to} le {date} : réglage de départ du texte.', 'formula.title': 'La formule du seuil', 'formula.intro': 'Le nombre de voix pour exigé, R, dépend de la participation :', 'formula.W': "W — électorat : {n} ({source})", 'formula.W.wot': 'membres de la toile de confiance Ğ1', 'formula.W.group': 'membres du groupe', 'formula.T': 'T — voix exprimées : {n}', 'formula.M': 'M — majorité à pleine participation : {n} %', 'formula.G': 'G — gradient : {n}', 'formula.B': 'B — base : {n}', 'formula.C': 'C — minimum de voix pour : {n}', 'formula.R': 'R — seuil actuel : {n} voix pour', 'formula.reading': "À faible participation, il faut presque l'unanimité ; quand tout le monde vote, la majorité M suffit. Rien ne passe sous C voix pour.", 'common.pct': '{n} %', 'settings.title': 'Réglages de la formule', 'settings.intro': "Pour changer un texte, le groupe demande un nombre de voix pour qui dépend de son électorat, de sa participation habituelle et de l'inertie de l'article.", 'settings.usual': 'Participation habituelle', 'settings.usual.median.one': '{n} votant sur {electorate} ({pct}) : la médiane des {sample} propositions votées depuis un an.', 'settings.usual.median.other': '{n} votants sur {electorate} ({pct}) : la médiane des {sample} propositions votées depuis un an.', 'settings.usual.reference.one': "{n} votant sur {electorate} ({pct}), deux fois C : la participation de référence, tant que le groupe n'a pas voté sur {min} propositions ({sample} pour l'instant).", 'settings.usual.reference.other': "{n} votants sur {electorate} ({pct}), deux fois C : la participation de référence, tant que le groupe n'a pas voté sur {min} propositions ({sample} pour l'instant).", 'settings.usual.bounded.one': "Ramenée entre {lo} et {hi} de l'électorat : les seuils se calculent sur {n} votant ({pct}).", 'settings.usual.bounded.other': "Ramenée entre {lo} et {hi} de l'électorat : les seuils se calculent sur {n} votants ({pct}).", 'settings.usual.when': 'Mesurée une fois par jour, la dernière fois le {date}.', 'settings.usual.never': 'Mesurée une fois par jour.', 'settings.levels': 'Les cinq crans', 'settings.col.level': 'Cran', 'settings.col.share': 'Part exigée', 'settings.col.required': 'Voix pour', 'settings.current': 'cet article', 'settings.share.note.one': "Part exigée : la part de « pour » au-delà de C quand {n} personne vote, comme d'habitude.", 'settings.share.note.other': "Part exigée : la part de « pour » au-delà de C quand {n} personnes votent, comme d'habitude.", 'settings.required.version.one': 'Voix pour : celles exigées à la participation de cette version, {n} votant.', 'settings.required.version.other': 'Voix pour : celles exigées à la participation de cette version, {n} votants.', 'settings.required.usual.one': 'Voix pour : celles exigées à la participation habituelle, {n} votant.', 'settings.required.usual.other': 'Voix pour : celles exigées à la participation habituelle, {n} votants.', 'settings.reading': "À chaque cran, le groupe demande sa part de « pour » au-delà de C quand il vote comme d'habitude ; plus il y a de votants, plus elle se rapproche de M. Rien ne passe sous C voix pour.", 'history.title': 'Corrections', 'history.initial': 'texte initial', 'history.typo': 'coquille corrigée', 'history.substantive': 'changement de fond (votes à reconfirmer)', 'history.amendment': 'texte de départ remplacé', 'history.by': 'par {name}', 'typo.title': 'Corriger une coquille', 'typo.note': "Accents, majuscules, faute de frappe, mot collé ou coupé : la correction s'applique sans vote, avec son auteur et son diff. La ponctuation, les chiffres, les formules, les adresses et tout changement de sens passent par une proposition.", 'typo.save': 'Enregistrer la correction', 'typo.done': 'Coquille corrigée, sans toucher aux votes.', 'typo.substantive': 'Ce changement touche au sens : propose-le comme modification.', 'typo.asProposal': 'En faire une proposition', 'signal.title': 'Contradictions', 'signal.none': 'Aucun signalement.', 'signal.add': 'Signaler une contradiction', 'signal.target': 'Contredit', 'signal.reason': 'En quoi ces deux textes se contredisent', 'signal.send': 'Signaler', 'signal.sent': 'Signalement enregistré.', 'signal.note': "Tant qu'un signalement tient, ces deux textes ne peuvent pas être en vigueur ensemble. Son auteur le lève ; un changement de fond le fait tomber.", 'signal.lift': 'Lever', 'signal.lifted': 'levé', 'signal.lifted.revision': 'tombé : le texte a changé', 'signal.by': 'par {name}', 'propose.mode.replace': 'Modifier ce texte', 'propose.mode.remove': 'Retirer cet article', 'propose.mode.new': 'Nouvel article', 'propose.after': 'Placer après', 'propose.after.end': 'à la fin', 'propose.title': 'Titre', 'propose.body': 'Texte', 'propose.remove.note': 'La proposition de retrait se vote comme une autre ; si elle passe, l’article sort du texte en vigueur.', 'propose.draft': 'Enregistrer le brouillon', 'propose.submit': 'Soumettre au vote', 'propose.drafted': 'Brouillon enregistré.', 'propose.submitted': 'Proposition soumise au vote.', 'propose.rule': "Tant que c'est un brouillon, tu le modifies librement. Une fois soumis, une coquille se corrige sans toucher aux votes ; un changement de fond demande aux votants de reconfirmer.", 'propose.edit': 'Modifier', 'propose.withdraw': 'Retirer ma proposition', 'propose.withdrawn': 'Proposition retirée.', 'propose.saved.typo': 'Correction enregistrée, les votes restent.', 'propose.saved.substantive': 'Nouvelle version enregistrée : les votants devront reconfirmer.', 'assist.title': 'Assistant', 'assist.quiet': 'Rien à signaler : une proposition, une décision.', 'assist.split': 'Ce texte semble porter {n} décisions. Une proposition = une décision : les découper ?', 'assist.split.do': 'Découper en {n} brouillons', 'assist.split.done': 'Découpé en {n} brouillons.', 'assist.similar': 'Proche de « {title} »{where}.', 'assist.similar.inForce': ' (en vigueur)', 'assist.similar.variant': 'En faire une variante de cet article', 'assist.long': 'Texte long ({n} signes) : un article court se vote mieux.', 'translate.title': 'Traduire ({lang})', 'translate.save': 'Enregistrer la traduction', 'translate.saved': 'Traduction enregistrée.', 'translate.note': 'Les traductions ne se votent pas. Elles passent « à revoir » quand le texte français change de fond.', 'feedback.title': 'Faire un retour', 'feedback.prompt': "Ce que tu as fait, ce que tu attendais, ce qui s'est passé.", 'feedback.send': 'Envoyer le retour', 'feedback.sent': 'Retour envoyé. Merci.', 'feedback.context': "L'adresse de la page, la langue et la taille de l'écran sont jointes.", 'access.title': 'trustinWallet — accès', 'access.intro': "Qui ouvre quel groupe. Monnaie libre s'ouvre de lui-même aux membres de la toile de confiance Ğ1 ; les autres groupes s'ouvrent un par un.", 'access.groups': 'Groupes', 'access.members.none': 'Aucun membre accordé.', 'access.members.wot': '+ tous les membres de la toile Ğ1', 'access.grant': 'Accorder', 'access.revoke': 'Retirer', 'access.choose': 'Choisir une identité', 'access.invitations': 'Invitations', 'access.invite.label': 'Pour qui', 'access.invite.groups': 'Groupes ouverts par le lien', 'access.invite.admin': 'administrateur des accès', 'access.invite.create': "Créer le lien d'invitation", 'access.invite.link': "Lien d'invitation, à usage unique, valable 14 jours. Il ne s'affichera plus : copie-le maintenant.", 'access.invite.copy': 'Copier le lien', 'access.invite.copied': 'Lien copié.', 'access.invite.cancel': 'Annuler', 'access.invite.pending': 'En attente', 'access.team': "Liens d'équipe", 'access.team.intro': "Un lien à partager avec une équipe, jusqu'à une date. Chaque personne qui l'ouvre donne son nom et reçoit sa propre identité, jamais le rôle d'administrateur. Révoquer ferme le lien ; les personnes déjà venues gardent leurs accès, à retirer une par une.", 'access.team.label': 'Pour quelle équipe', 'access.team.days': 'Valable combien de jours', 'access.team.uses': 'Combien de personnes au plus', 'access.team.create': "Créer le lien d'équipe", 'access.team.link': "Lien d'équipe, à partager : il sert jusqu'à sa date ou à sa dernière place. Il ne s'affichera plus : copie-le maintenant.", 'access.team.state': '{uses} / {max} personnes · jusqu’au {date}', 'access.team.revoke': 'Révoquer', 'access.team.via': 'venue par « {label} »', 'access.identities': 'Identités', 'access.admin': 'administrateur', 'access.admin.give': 'Rendre administrateur', 'access.admin.take': 'Retirer le rôle', 'access.relink': 'Nouveau lien de connexion', 'access.relink.link': "Lien de connexion pour {name}, à usage unique, valable 14 jours — pour ouvrir sa session sur un autre appareil. Il ne s'affichera plus : copie-le maintenant.", 'access.sessions.close': 'Fermer ses sessions ({n})', 'access.sessions.closeMine': 'Fermer mes autres sessions ({n})', 'access.sessions.closed.one': '{n} session fermée.', 'access.sessions.closed.other': '{n} sessions fermées.', 'access.sessions.links.one': 'Le lien de connexion encore en attente est annulé.', 'access.sessions.links.other': 'Les {n} liens de connexion encore en attente sont annulés.', 'access.kind.g1': 'Ğ1', 'access.kind.invite': 'invitation', 'access.kind.dev': 'dev', 'access.member': 'membre de la toile', 'access.feedback': 'Retours', 'access.feedback.none': 'Aucun retour.', 'access.feedback.seen': 'Vu', 'access.feedback.done': 'Traité', 'access.publication': "Publication des textes", 'access.publication.remote': "Dépôt : {remote}", 'access.publication.key': "Clé de déploiement du serveur. Ajoute-la avec le droit d'écriture sur ce dépôt (Paramètres › Dépôt › Clés de déploiement) : sans elle, les publications attendent.", 'access.publication.none': "La publication n'est pas configurée sur ce serveur.", 'access.publication.pending.one': '{n} envoi en attente', 'access.publication.pending.other': '{n} envois en attente', 'access.publication.last': 'Dernière publication : {date} (commit {commit})', 'access.publication.never': "Rien n'a encore été publié sur ce dépôt.", 'access.publication.error': 'Dernier échec : {error}', 'access.publication.now': 'Publier maintenant', 'access.publication.queued': 'Publication relancée.', 'access.denied': 'La gestion des accès est réservée aux administrateurs de trustinWallet.', 'error.unauthenticated': 'Connecte-toi pour continuer.', 'error.forbidden': "Tu n'as pas accès à cette page.", 'error.not_found': "Cette page n'existe pas, ou elle ne t'est pas visible.", 'error.network': 'Le serveur ne répond pas. Vérifie ta connexion et réessaie.', 'error.internal': 'Quelque chose a échoué de notre côté. Réessaie dans un moment.', 'error.title': 'Le titre est vide ou trop long (120 signes au plus).', 'error.body': 'Le texte est vide ou trop long (4 000 signes au plus).', 'error.reason': 'Dis en quelques mots en quoi ces textes se contredisent (10 à 600 signes).', 'error.substantive_not_author': "Ce changement touche au sens : seul l'auteur de la proposition peut le faire. Propose ta propre version.", 'error.substantive_in_force': 'Ce changement touche au sens : propose-le comme modification.', 'error.same_unit': "Ces deux textes visent le même article : ils ne peuvent de toute façon pas être en vigueur ensemble.", 'error.last_admin': 'Il faut garder au moins un administrateur.', 'error.g1_not_configured': "La connexion Ğ1 n'est pas encore active.", 'error.invitation_invalid': "Ce lien d'invitation n'est plus valable.", 'error.identity_kind': "Un nouveau lien ne peut viser qu'une personne invitée, jamais une identité Ğ1.", 'error.hidden_characters': "Le texte contient des caractères invisibles (inversion du sens d'écriture, espace de largeur nulle, trait d'union conditionnel, sélecteur de couleur d'un emoji…) : retire-les.", 'error.changed': 'Le texte a changé entre-temps : recharge-le, puis recommence.', 'error.label': 'Le nom est vide ou trop long (60 signes au plus).', 'error.name': "Ton nom fait de 2 à 60 signes, sur une ligne : lettres, chiffres, espaces, trait d'union, apostrophe ou point.", 'error.name_taken': 'Ce nom est déjà pris. Choisis-en un autre, en ajoutant une initiale par exemple.', 'error.team_limits': "Un lien d'équipe vaut de 1 à 90 jours, pour 1 à 500 personnes.", 'error.groups': 'Choisis au moins un groupe.', 'error.publication_off': "La publication n'est pas configurée sur ce serveur.", 'error.chain_vote_off': "Le vote par la chaîne Ğ1 n'est pas encore ouvert.", 'error.chain_only': 'Ici, le vote passe par la chaîne Ğ1, avec ton portefeuille.', 'error.server_vote': 'Ici, le vote se fait directement, sans portefeuille.', 'error.too_many_ballots': 'Tu as déjà beaucoup de bulletins en attente, ou laissés en route depuis une heure : attends leur confirmation, ou réessaie un peu plus tard.', 'error.lines': 'Ce vote ne tient plus : recharge la page, puis recommence.', 'error.choice': "Ce choix n'existe pas.", 'error.author': "Ce compte n'est pas une adresse Ğ1.", 'error.not_votable': 'Cette version ne se vote plus.', 'error.members_only': 'Seuls les membres de ce groupe votent ici.', 'error.retry': 'Réessayer', 'common.cancel': 'Annuler', 'common.close': 'Fermer', 'common.save': 'Enregistrer', 'common.loading': 'Chargement…', 'common.back': 'Retour', } as const; export type Key = keyof typeof fr; export type Messages = Record;