Files
decision/web/src/lib/i18n/fr.ts
T
YvvandClaude Opus 5.5 785580c78f v3 : modules d'ordre et de titre — l'interface, restes mineurs (L11, C25–C27)
Chaque section du lecteur finit par l'ordre de ses articles (inertie 2) : ses
articles numérotés, son vote déplié, « Proposer un autre ordre » — une liste où
l'on clique un article puis sa place, ses flèches, ou le clavier. Le titre du
document (inertie 4) se vote et se propose sous le titre, « traduction à
revoir » quand il a changé. Les deux sont dans la liste des propositions, le
panier et la chaîne Ğ1 ; un nouvel article se propose dans une section, à sa fin.
La liste du groupe compte les propositions ouvertes des modules.

Restes mineurs : la participation ramenée se dit en deux temps (la mesure, puis
ce que le groupe demande), les lignes « habituelle » des réglages resserrées, le
sélecteur d'inertie se parcourt aux flèches (le cran actuel atteignable, jamais
choisi), la marque « seed a minima » porte le vrai nombre de votes.

Contrôles : C25 (ordre, dont la chaîne et le téléphone), C26 (titre), C27
(participation ramenée) ; C3, C17 (41 modules), C20 mis à jour.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 05:35:02 +01:00

540 lines
32 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 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, comme tout texte.",
'doc.seed.votes.one': 'seed a minima · {n} vote',
'doc.seed.votes.other': 'seed a minima · {n} votes',
'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',
'module.title.name': 'Titre du document',
'module.order.name': 'Ordre des articles',
'module.order.named': 'Ordre des articles · {section}',
'module.order.count.one': '{n} article',
'module.order.count.other': '{n} articles',
'module.order.inforce': 'Ordre en vigueur',
'module.order.proposal': 'Ordre proposé',
'module.order.added.one': '{n} article entré depuis, placé à la fin',
'module.order.added.other': '{n} articles entrés depuis, placés à la fin',
'module.order.dropped.one': '{n} article sorti depuis',
'module.order.dropped.other': '{n} articles sortis depuis',
'module.order.same': "c'est l'ordre en vigueur",
'module.order.rule': "Un nouvel article se place à la fin de sa section. S'il arrive pendant le vote d'un ordre, il s'y ajoute à la fin, et les votes restent.",
'order.propose': 'Proposer un autre ordre',
'order.edit.label': 'Nouvel ordre des articles',
'order.edit.help': 'Clique un article, puis sa nouvelle place, ou utilise ses flèches. Au clavier : Entrée pour le choisir, flèches haut et bas pour le déplacer.',
'order.edit.up': 'Monter « {title} »',
'order.edit.down': 'Descendre « {title} »',
'order.edit.chosen': '« {title} » choisi : clique sa nouvelle place.',
'order.edit.moved': '« {title} » en place {n} sur {total}.',
'order.edit.submit': 'Proposer cet ordre',
'order.edit.unchanged': "C'est l'ordre en vigueur : déplace au moins un article.",
'order.edit.note': "Un ordre se vote à l'inertie {level}, comme un article : déplié, dans le panier, par la chaîne Ğ1 dans Monnaie libre.",
'order.submitted': 'Ordre proposé au vote.',
'title.propose': 'Proposer un autre titre',
'title.propose.label': 'Nouveau titre',
'title.propose.note': "Le titre du document se vote à l'inertie {level}. Ses traductions restent éditoriales : elles passeront « à revoir ».",
'title.submitted': 'Titre proposé au vote.',
'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.entered.order': 'Le nouvel ordre de « {section} » est entré en vigueur.',
'vote.entered.title': 'Le titre « {title} » est entré en vigueur.',
'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.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',
'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 : le groupe demande ses voix pour comme si {n} personne votait ({pct}).",
'settings.usual.bounded.other': "Ramenée entre {lo} et {hi} de l'électorat : le groupe demande ses voix pour comme si {n} personnes votaient ({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 : les « pour » demandés au-delà de C, à {n} votant comme d'habitude.",
'settings.share.note.other': "Part exigée : les « pour » demandés au-delà de C, à {n} votants comme d'habitude.",
'settings.required.version.one': 'Voix pour : à {n} votant, la participation de cette version.',
'settings.required.version.other': 'Voix pour : à {n} votants, la participation de cette version.',
'settings.required.usual.one': "Voix pour : à {n} votant, comme d'habitude.",
'settings.required.usual.other': "Voix pour : à {n} votants, comme d'habitude.",
'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.section': 'Dans la section',
'propose.section.note': 'Le nouvel article se place à la fin de la section ; son ordre se vote à part, en fin de section.',
'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 votes en attente de la chaîne Ğ1 : attends leur confirmation.',
'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.module': "Un module se propose à sa place : le titre en tête du document, l'ordre en fin de section.",
'error.order': 'Cet ordre doit reprendre chaque article de la section, une seule fois : recharge la page, puis recommence.',
'error.same_order': "C'est déjà l'ordre en vigueur.",
'error.order_fixed': 'Un ordre ne se corrige pas : propose un autre ordre.',
'error.not_an_order': "Ce module n'est pas l'ordre d'une section.",
'error.not_a_title': "Ce module n'est pas le titre du document.",
'error.same_title': "C'est déjà le titre en vigueur.",
'error.section': "Cette section n'existe pas dans ce document.",
'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<Key, string>;