v3 : interface des objections, des coquilles validées et de la messagerie ; contrôles C28–C31

Une version retenue par une objection le dit sous l'article, à chacun
selon son rôle : la personne qui vote voit qu'elle ne se vote plus (les
votes faits restent) ; l'auteur, quoi faire (« Modifier l'article visé »
pour une redite, « Reformuler » pour une contradiction) ; la personne qui
objecte, lever ou réitérer avant l'échéance. Le panier la montre sans
choix et ne l'envoie jamais.

« Détails » : faire une objection (redit / contredit), les objections et
où elles en sont, les coquilles proposées par d'autres avec leur diff
resserré, valider / refuser / revenir, l'historique dit qui a validé.
Une coquille se propose sur toute version ouverte ou en vigueur.

Boîte « Messages » dans le menu, avec le nombre de non-lus (pastille sur
le bouton du menu en mobile) : objet, texte, gestes, échéance ; un message
traité n'a plus de geste. Répondre à une objection lit son message.

Trilingue (fr, en, es). C6 suit la règle : la coquille d'un administrateur
sur un texte du seed passe tout de suite ; C28–C31 couvrent le reste.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Yvv
2026-10-31 04:21:20 +01:00
co-authored by Claude Opus 5.5
parent 3f1f968f16
commit 83f8ca0981
31 changed files with 1732 additions and 197 deletions
+109 -18
View File
@@ -11,6 +11,9 @@ export const en: Messages = {
'nav.mandates': 'Mandates',
'nav.protocols': 'Protocols',
'nav.groups': 'My groups',
'nav.messages': 'Messages',
'nav.messages.count.one': 'Messages, {n} unread',
'nav.messages.count.other': 'Messages, {n} unread',
'nav.docs.count.one': '{label}, {n} document in progress',
'nav.docs.count.other': '{label}, {n} documents in progress',
'nav.access': 'Access',
@@ -137,7 +140,7 @@ export const en: Messages = {
'deep.addition': 'new article',
'deep.removal': 'removal of “{title}”',
'deep.inertia': 'inertia to {level}',
'deep.blocked': 'blocked',
'deep.held': 'not open to vote: objection',
'deep.mine': 'your proposal',
'deep.stale': 'needs reconfirming',
'deep.wellrated': 'well-rated',
@@ -198,7 +201,14 @@ export const en: Messages = {
'vote.stale': 'The text has changed in substance since you voted: your vote no longer counts until you reconfirm it.',
'vote.reconfirm': 'Reconfirm: {choice}',
'vote.private': 'Nobody sees your vote: only the totals are visible.',
'vote.blocked': "A contradiction flag is holding it back: it can't come into force while the flag stands.",
'vote.held': 'An objection is holding this version back: it cannot be voted on until the objection is lifted. Votes already cast stay.',
'vote.held.redit': 'It repeats “{other}”.',
'vote.held.contredit': 'It contradicts “{other}”.',
'vote.held.author.redit': 'For it to be voted on again, change the article it repeats. The person who raised the objection then lifts it or reiterates it; with no answer from them within 3 days, it is lifted.',
'vote.held.author.contredit': 'For it to be voted on again, reword it. The person who raised the objection then lifts it or reiterates it; with no answer from them within 3 days, it is lifted.',
'vote.held.waiting': 'An answer came: {name} lifts or reiterates the objection by {date}; with no answer, it is lifted.',
'vote.held.mine': 'You raised this objection: lift it when the answer suits you.',
'vote.held.mine.asked': 'An answer came: lift your objection if it suits you, or reiterate it, by {date}. With no answer from you, it is lifted.',
'vote.entered': '“{title}” has come into force.',
'vote.entered.remove': '“{title}” has been removed from the text in force.',
'vote.entered.inertia': 'The inertia of “{title}” has changed.',
@@ -217,9 +227,9 @@ export const en: Messages = {
'vote.choice.none': 'withdrawing your vote',
'vote.chain.note': 'Your vote leaves from your Ğ1 wallet: {amount} Ğ1, in a single gesture. The chain shows that you voted, never what you voted.',
'vote.chain.counts': 'Your voice counts for the Ğ1 identity of the wallet that signs, if it is a member of the web of trust.',
'vote.chain.off': 'Voting through the Ğ1 chain is not open yet: the account that receives the votes is still to be created. You can read, propose and flag a contradiction.',
'vote.chain.off': 'Voting through the Ğ1 chain is not open yet: the account that receives the votes is still to be created. You can read, propose and raise an objection.',
'vote.members': 'Only members of this group vote here.',
'vote.details': 'Typos, translations, flags, history',
'vote.details': 'Typos, translations, objections, history',
'ballot.reason.not_member': 'the wallet that signed is not that of a member of the Ğ1 web of trust.',
'ballot.reason.no_identity': 'the wallet that signed is linked to no Ğ1 identity.',
'ballot.reason.transfer': 'the transfer to the vote account is missing, or its amount is too low.',
@@ -246,6 +256,7 @@ export const en: Messages = {
'basket.sent.other': '{n} votes saved.',
'basket.section': 'Vote on this section',
'basket.mine': 'your vote: {choice}',
'basket.held': 'not open to vote: an objection holds it back',
'sign.title': 'Vote with your Ğ1 wallet',
'sign.summary.one': '{n} vote, in one transaction: {amount} Ğ1 to the vote account, with your sealed ballot.',
'sign.summary.other': '{n} votes, in one transaction: {amount} Ğ1 to the vote account, with your sealed ballot.',
@@ -327,27 +338,98 @@ export const en: Messages = {
'history.typo': 'typo fixed',
'history.substantive': 'substantive change (votes to reconfirm)',
'history.amendment': 'starting text replaced',
'history.revert': 'fix taken back by the author',
'history.by': 'by {name}',
'history.typo.validated': 'validated by {name}',
'history.typo.deadline': 'applied with no answer within 3 days',
'typo.title': 'Fix a typo',
'typo.note': 'Accents, capitals, typos, words run together or split: the fix applies without a vote, with its author and its diff. Punctuation, figures, formulas, addresses and any change in meaning go through a proposal.',
'typo.note': "Accents, capitals, typos, words run together or split: the fix is not voted on. On your own text, it applies at once. On someone else's, its author validates it (an administrator for a seed text); with no answer within 3 days, it applies. Punctuation, figures, formulas, addresses and any change in meaning go through a proposal.",
'typo.save': 'Save the fix',
'typo.done': 'Typo fixed, votes untouched.',
'typo.substantive': 'This edit affects the meaning: propose it as a change.',
'typo.asProposal': 'Make it a proposal',
'typo.pending.author': 'Your fix waits for the author of the text: it applies when they validate it, or by itself on {date}.',
'typo.pending.admin': 'Your fix waits for an administrator, as this text comes from the seed: it applies when they validate it, or by itself on {date}.',
'typo.list': 'Suggested typo fixes',
'typo.by': 'suggested by {name}',
'typo.status.pending': 'waiting: applies by itself on {date}',
'typo.status.applied': 'applied',
'typo.status.refused': 'refused',
'typo.status.stale': 'out of date: the text changed meanwhile',
'typo.settled.by': 'by {name}',
'typo.settled.deadline': 'with no answer within 3 days',
'typo.validate': 'Validate',
'typo.refuse': 'Refuse',
'typo.undo': 'Go back to the text before',
'typo.redo': 'Apply after all',
'typo.validated': 'Fix applied.',
'typo.refused': 'Fix refused.',
'signal.title': 'Contradictions',
'signal.none': 'No flags.',
'signal.add': 'Flag a contradiction',
'signal.target': 'Contradicts',
'signal.reason': 'How these two texts contradict each other',
'signal.send': 'Flag',
'signal.sent': 'Flag saved.',
'signal.note': "While a flag stands, these two texts can't be in force together. Its author lifts it; a substantive change makes it lapse.",
'signal.lift': 'Lift',
'signal.lifted': 'lifted',
'signal.lifted.revision': 'lapsed: the text changed',
'signal.by': 'by {name}',
'objection.title': 'Objections',
'objection.none': 'No objection.',
'objection.add': 'Raise an objection',
'objection.kind': 'Your objection',
'objection.kind.redit': 'Repeats',
'objection.kind.contredit': 'Contradicts',
'objection.kind.redit.hint': 'this text repeats another article',
'objection.kind.contredit.hint': 'this text says the opposite of another article',
'objection.target': 'Which article?',
'objection.reason.redit': 'How these two texts say the same thing',
'objection.reason.contredit': 'How these two texts contradict each other',
'objection.send': 'Send the objection',
'objection.sent': 'Objection saved: the later of the two versions cannot be voted on until it is lifted.',
'objection.note': 'An objection makes the later of the two versions not open to vote until it is lifted — never a text in force. Its author answers: for a repetition, they change the article it repeats; for a contradiction, they reword. You then lift the objection or reiterate it; with no answer from you within 3 days, it is lifted.',
'objection.says.redit': '“{held}” repeats “{other}”',
'objection.says.contredit': '“{held}” contradicts “{other}”',
'objection.by': 'objection by {name}',
'objection.held.here': 'this version cannot be voted on',
'objection.phase.author': "waiting for the author's answer",
'objection.phase.objector': 'answer received: lifted or reiterated by {date}, otherwise lifted by itself',
'objection.answer.revision': 'answer: the held text was reworded',
'objection.answer.other': 'answer: the other text changed',
'objection.answer.proposal': 'answer: a linked proposal',
'objection.lifted.objector': 'lifted by the person who raised it',
'objection.lifted.admin': 'lifted by an administrator',
'objection.lifted.deadline': 'lifted: 3 days without follow-up',
'objection.lifted.withdrawn': 'lifted: the proposal was withdrawn',
'objection.lifted.revision': 'lapsed: the text changed',
'objection.lift': 'Lift the objection',
'objection.lift.admin': 'Lift the objection (administrator)',
'objection.reiterate': 'Reiterate the objection',
'objection.done.lifted': 'Objection lifted.',
'objection.done.reiterated': 'Objection reiterated: a new answer is awaited.',
'objection.respond.redit': 'Change the article it repeats',
'objection.respond.contredit': 'Reword',
'objection.linked': 'This proposal answers an objection: once submitted, the person who raised it lifts it or reiterates it.',
'messages.title': 'Messages',
'messages.intro': 'What waits for a gesture from you: an objection to answer, a typo fix to validate. Each message carries its deadline; a message dealt with asks nothing more.',
'messages.none': 'No messages for now.',
'messages.readAll': 'Mark all as read',
'messages.read': 'Mark as read',
'messages.unread': 'unread',
'messages.due': 'deadline: {date}',
'messages.open': 'See it in the text',
'messages.topic.objection': 'Objection',
'messages.topic.typo': 'Typo',
'messages.objection_raised.redit': '{name} raises an objection: your version “{held}” repeats “{other}”. It cannot be voted on until the objection is lifted. To answer, change the article it repeats.',
'messages.objection_raised.contredit': '{name} raises an objection: your version “{held}” contradicts “{other}”. It cannot be voted on until the objection is lifted. To answer, reword it.',
'messages.objection_reiterated': '{name} reiterates their objection: “{held}” still cannot be voted on. Answer again.',
'messages.objection_answered': 'Your objection on “{held}” has been answered. Lift it if the answer suits you, or reiterate it. With no answer from you, it is lifted.',
'messages.typo_pending.author': '{name} suggests a typo fix in your version “{title}”.',
'messages.typo_pending.admin': '{name} suggests a typo fix in “{title}”, a seed text: an administrator validates it.',
'messages.respond': 'Answer',
'messages.outcome.answered': 'answered',
'messages.outcome.reiterated': 'objection reiterated',
'messages.outcome.lifted': 'objection lifted',
'messages.outcome.admin': 'objection lifted by an administrator',
'messages.outcome.deadline.objection': 'objection lifted: 3 days without follow-up',
'messages.outcome.deadline.typo': 'fix applied: 3 days without an answer',
'messages.outcome.withdrawn': 'proposal withdrawn',
'messages.outcome.applied': 'fix applied',
'messages.outcome.refused': 'fix refused',
'messages.outcome.stale': 'fix out of date: the text changed',
'messages.outcome.done': 'dealt with',
'propose.mode.replace': 'Change this text',
'propose.mode.remove': 'Remove this article',
@@ -458,7 +540,7 @@ export const en: Messages = {
'error.internal': 'Something failed on our side. Try again in a moment.',
'error.title': 'The title is empty or too long (120 characters max).',
'error.body': 'The text is empty or too long (4,000 characters max).',
'error.reason': 'Say in a few words how these texts contradict each other (10 to 600 characters).',
'error.reason': 'Say in a few words what your objection rests on (10 to 600 characters).',
'error.substantive_not_author': "This edit affects the meaning: only the proposal's author can make it. Propose your own version.",
'error.substantive_in_force': 'This edit affects the meaning: propose it as a change.',
'error.same_unit': "These two texts target the same article: they can't be in force together anyway.",
@@ -483,6 +565,15 @@ export const en: Messages = {
'error.author': 'This account is not a Ğ1 address.',
'error.not_votable': 'This version is no longer open for voting.',
'error.members_only': 'Only members of this group vote here.',
'error.objection': 'An objection is holding this version back: it cannot be voted on until the objection is lifted.',
'error.kind': 'Say whether this text repeats the other or contradicts it.',
'error.other': 'Choose another article, in force or proposed.',
'error.both_in_force': 'Both texts are in force: an objection always targets a version that is not in force yet.',
'error.objection_exists': 'You already have an objection standing on these two texts.',
'error.nothing_to_reiterate': 'Nothing to reiterate: no answer has come yet.',
'error.lifted': 'This objection is already lifted.',
'error.settled': 'This fix is already decided.',
'error.link': 'This proposal cannot answer this objection: it targets another article, or the objection is lifted.',
'error.retry': 'Try again',
'common.cancel': 'Cancel',
+109 -18
View File
@@ -11,6 +11,9 @@ export const es: Messages = {
'nav.mandates': 'Mandatos',
'nav.protocols': 'Protocolos',
'nav.groups': 'Mis grupos',
'nav.messages': 'Mensajes',
'nav.messages.count.one': 'Mensajes, {n} sin leer',
'nav.messages.count.other': 'Mensajes, {n} sin leer',
'nav.docs.count.one': '{label}, {n} documento en curso',
'nav.docs.count.other': '{label}, {n} documentos en curso',
'nav.access': 'Accesos',
@@ -137,7 +140,7 @@ export const es: Messages = {
'deep.addition': 'artículo nuevo',
'deep.removal': 'retirada de «{title}»',
'deep.inertia': 'inercia a {level}',
'deep.blocked': 'bloqueada',
'deep.held': 'no votable: objeción',
'deep.mine': 'tu propuesta',
'deep.stale': 'por reconfirmar',
'deep.wellrated': 'bien valorada',
@@ -198,7 +201,14 @@ export const es: Messages = {
'vote.stale': 'El texto ha cambiado de fondo desde tu voto: tu voto deja de contar hasta que lo reconfirmes.',
'vote.reconfirm': 'Reconfirmar: {choice}',
'vote.private': 'Tu voto no se muestra a nadie: solo se ven los totales.',
'vote.blocked': 'Un aviso de contradicción la retiene: no puede entrar en vigor mientras se mantenga.',
'vote.held': 'Una objeción retiene esta versión: no se vota hasta que se levante. Los votos ya emitidos se mantienen.',
'vote.held.redit': 'Repite «{other}».',
'vote.held.contredit': 'Contradice «{other}».',
'vote.held.author.redit': 'Para que vuelva a votarse, modifica el artículo que repite. La persona que hizo la objeción la levanta entonces o la reitera; sin respuesta suya en 3 días, se levanta.',
'vote.held.author.contredit': 'Para que vuelva a votarse, reformúlala. La persona que hizo la objeción la levanta entonces o la reitera; sin respuesta suya en 3 días, se levanta.',
'vote.held.waiting': 'Llegó una respuesta: {name} levanta o reitera la objeción antes del {date}; sin respuesta, se levanta.',
'vote.held.mine': 'Hiciste esta objeción: levántala cuando la respuesta te convenga.',
'vote.held.mine.asked': 'Llegó una respuesta: levanta tu objeción si te convence, o reitérala, antes del {date}. Sin respuesta tuya, se levanta.',
'vote.entered': '«{title}» ha entrado en vigor.',
'vote.entered.remove': '«{title}» se ha retirado del texto en vigor.',
'vote.entered.inertia': 'La inercia de «{title}» ha cambiado.',
@@ -217,9 +227,9 @@ export const es: Messages = {
'vote.choice.none': 'retirar tu voto',
'vote.chain.note': 'Tu voto sale de tu monedero Ğ1: {amount} Ğ1, en un solo gesto. La cadena muestra que has votado, nunca lo que has votado.',
'vote.chain.counts': 'Tu voz cuenta para la identidad Ğ1 del monedero que firma, si es miembro de la red de confianza.',
'vote.chain.off': 'La votación por la cadena Ğ1 aún no está abierta: falta crear la cuenta que recibe los votos. Puedes leer, proponer y señalar una contradicción.',
'vote.chain.off': 'La votación por la cadena Ğ1 aún no está abierta: falta crear la cuenta que recibe los votos. Puedes leer, proponer y hacer una objeción.',
'vote.members': 'Aquí solo votan los miembros de este grupo.',
'vote.details': 'Erratas, traducciones, señalamientos, historial',
'vote.details': 'Erratas, traducciones, objeciones, historial',
'ballot.reason.not_member': 'el monedero que firmó no es el de un miembro de la red de confianza Ğ1.',
'ballot.reason.no_identity': 'el monedero que firmó no está vinculado a ninguna identidad Ğ1.',
'ballot.reason.transfer': 'falta la transferencia a la cuenta de los votos, o su importe es demasiado bajo.',
@@ -246,6 +256,7 @@ export const es: Messages = {
'basket.sent.other': '{n} votos registrados.',
'basket.section': 'Votar esta sección',
'basket.mine': 'tu voto: {choice}',
'basket.held': 'no votable: una objeción la retiene',
'sign.title': 'Votar con tu monedero Ğ1',
'sign.summary.one': '{n} voto, en una transacción: {amount} Ğ1 a la cuenta de los votos, con tu papeleta sellada.',
'sign.summary.other': '{n} votos, en una transacción: {amount} Ğ1 a la cuenta de los votos, con tu papeleta sellada.',
@@ -327,27 +338,98 @@ export const es: Messages = {
'history.typo': 'errata corregida',
'history.substantive': 'cambio de fondo (votos por reconfirmar)',
'history.amendment': 'texto de partida sustituido',
'history.revert': 'corrección retirada por el autor',
'history.by': 'por {name}',
'history.typo.validated': 'validada por {name}',
'history.typo.deadline': 'aplicada sin respuesta en 3 días',
'typo.title': 'Corregir una errata',
'typo.note': 'Acentos, mayúsculas, erratas, palabras pegadas o separadas: la corrección se aplica sin votación, con su autor y su diff. La puntuación, las cifras, las fórmulas, las direcciones y todo cambio de sentido pasan por una propuesta.',
'typo.note': 'Acentos, mayúsculas, erratas, palabras pegadas o separadas: la corrección no se vota. En tu texto, se aplica enseguida. En el de otra persona, su autor la valida (un administrador para un texto del seed); sin respuesta en 3 días, se aplica. La puntuación, las cifras, las fórmulas, las direcciones y todo cambio de sentido pasan por una propuesta.',
'typo.save': 'Guardar la corrección',
'typo.done': 'Errata corregida, sin tocar los votos.',
'typo.substantive': 'Este cambio afecta al sentido: proponlo como modificación.',
'typo.asProposal': 'Convertirlo en propuesta',
'typo.pending.author': 'Tu corrección espera al autor del texto: se aplica cuando la valida, o sola el {date}.',
'typo.pending.admin': 'Tu corrección espera a un administrador, porque este texto viene del seed: se aplica cuando la valida, o sola el {date}.',
'typo.list': 'Erratas propuestas',
'typo.by': 'propuesta por {name}',
'typo.status.pending': 'en espera: se aplica sola el {date}',
'typo.status.applied': 'aplicada',
'typo.status.refused': 'rechazada',
'typo.status.stale': 'caducada: el texto cambió entretanto',
'typo.settled.by': 'por {name}',
'typo.settled.deadline': 'sin respuesta en 3 días',
'typo.validate': 'Validar',
'typo.refuse': 'Rechazar',
'typo.undo': 'Volver al texto anterior',
'typo.redo': 'Aplicar al final',
'typo.validated': 'Corrección aplicada.',
'typo.refused': 'Corrección rechazada.',
'signal.title': 'Contradicciones',
'signal.none': 'Ningún aviso.',
'signal.add': 'Señalar una contradicción',
'signal.target': 'Contradice',
'signal.reason': 'En qué se contradicen estos dos textos',
'signal.send': 'Señalar',
'signal.sent': 'Aviso registrado.',
'signal.note': 'Mientras un aviso se mantenga, estos dos textos no pueden estar en vigor a la vez. Su autor lo levanta; un cambio de fondo lo deja sin efecto.',
'signal.lift': 'Levantar',
'signal.lifted': 'levantado',
'signal.lifted.revision': 'sin efecto: el texto ha cambiado',
'signal.by': 'por {name}',
'objection.title': 'Objeciones',
'objection.none': 'Ninguna objeción.',
'objection.add': 'Hacer una objeción',
'objection.kind': 'Tu objeción',
'objection.kind.redit': 'Repite',
'objection.kind.contredit': 'Contradice',
'objection.kind.redit.hint': 'este texto repite otro artículo',
'objection.kind.contredit.hint': 'este texto dice lo contrario de otro artículo',
'objection.target': '¿Qué artículo?',
'objection.reason.redit': 'En qué dicen lo mismo estos dos textos',
'objection.reason.contredit': 'En qué se contradicen estos dos textos',
'objection.send': 'Enviar la objeción',
'objection.sent': 'Objeción registrada: la más reciente de las dos versiones no se vota hasta que se levante.',
'objection.note': 'Una objeción hace no votable la más reciente de las dos versiones hasta que se levante — nunca un texto en vigor. Su autor responde: para una repetición, modifica el artículo que repite; para una contradicción, reformula. Tú levantas entonces la objeción o la reiteras; sin respuesta tuya en 3 días, se levanta.',
'objection.says.redit': '«{held}» repite «{other}»',
'objection.says.contredit': '«{held}» contradice «{other}»',
'objection.by': 'objeción de {name}',
'objection.held.here': 'esta versión no se vota',
'objection.phase.author': 'en espera de la respuesta del autor',
'objection.phase.objector': 'respuesta recibida: levantada o reiterada antes del {date}, si no se levanta sola',
'objection.answer.revision': 'respuesta: el texto retenido se reformuló',
'objection.answer.other': 'respuesta: el otro texto cambió',
'objection.answer.proposal': 'respuesta: una propuesta vinculada',
'objection.lifted.objector': 'levantada por la persona que la hizo',
'objection.lifted.admin': 'levantada por un administrador',
'objection.lifted.deadline': 'levantada: 3 días sin continuación',
'objection.lifted.withdrawn': 'levantada: la propuesta se retiró',
'objection.lifted.revision': 'caída: el texto cambió',
'objection.lift': 'Levantar la objeción',
'objection.lift.admin': 'Levantar la objeción (administrador)',
'objection.reiterate': 'Reiterar la objeción',
'objection.done.lifted': 'Objeción levantada.',
'objection.done.reiterated': 'Objeción reiterada: se espera una nueva respuesta.',
'objection.respond.redit': 'Modificar el artículo que repite',
'objection.respond.contredit': 'Reformular',
'objection.linked': 'Esta propuesta responde a una objeción: una vez enviada, la persona que la hizo la levanta o la reitera.',
'messages.title': 'Mensajes',
'messages.intro': 'Lo que espera un gesto tuyo: una objeción que responder, una corrección de errata que validar. Cada mensaje lleva su plazo; un mensaje tratado ya no pide nada.',
'messages.none': 'Ningún mensaje por ahora.',
'messages.readAll': 'Marcar todo como leído',
'messages.read': 'Marcar como leído',
'messages.unread': 'sin leer',
'messages.due': 'plazo: {date}',
'messages.open': 'Verlo en el texto',
'messages.topic.objection': 'Objeción',
'messages.topic.typo': 'Errata',
'messages.objection_raised.redit': '{name} hace una objeción: tu versión «{held}» repite «{other}». No se vota hasta que se levante. Para responder, modifica el artículo que repite.',
'messages.objection_raised.contredit': '{name} hace una objeción: tu versión «{held}» contradice «{other}». No se vota hasta que se levante. Para responder, reformúlala.',
'messages.objection_reiterated': '{name} reitera su objeción: «{held}» sigue sin votarse. Responde de nuevo.',
'messages.objection_answered': 'Tu objeción sobre «{held}» recibió una respuesta. Levántala si te convence, o reitérala. Sin respuesta tuya, se levanta.',
'messages.typo_pending.author': '{name} propone una corrección de errata en tu versión «{title}».',
'messages.typo_pending.admin': '{name} propone una corrección de errata en «{title}», un texto del seed: un administrador la valida.',
'messages.respond': 'Responder',
'messages.outcome.answered': 'respuesta dada',
'messages.outcome.reiterated': 'objeción reiterada',
'messages.outcome.lifted': 'objeción levantada',
'messages.outcome.admin': 'objeción levantada por un administrador',
'messages.outcome.deadline.objection': 'objeción levantada: 3 días sin continuación',
'messages.outcome.deadline.typo': 'corrección aplicada: 3 días sin respuesta',
'messages.outcome.withdrawn': 'propuesta retirada',
'messages.outcome.applied': 'corrección aplicada',
'messages.outcome.refused': 'corrección rechazada',
'messages.outcome.stale': 'corrección caducada: el texto cambió',
'messages.outcome.done': 'tratado',
'propose.mode.replace': 'Modificar este texto',
'propose.mode.remove': 'Retirar este artículo',
@@ -458,7 +540,7 @@ export const es: Messages = {
'error.internal': 'Algo ha fallado por nuestra parte. Inténtalo de nuevo en un momento.',
'error.title': 'El título está vacío o es demasiado largo (120 caracteres como máximo).',
'error.body': 'El texto está vacío o es demasiado largo (4000 caracteres como máximo).',
'error.reason': 'Di en pocas palabras en qué se contradicen estos textos (de 10 a 600 caracteres).',
'error.reason': 'Di en pocas palabras en qué se basa tu objeción (de 10 a 600 caracteres).',
'error.substantive_not_author': 'Este cambio afecta al sentido: solo el autor de la propuesta puede hacerlo. Propón tu propia versión.',
'error.substantive_in_force': 'Este cambio afecta al sentido: proponlo como modificación.',
'error.same_unit': 'Estos dos textos se refieren al mismo artículo: de todos modos no pueden estar en vigor a la vez.',
@@ -483,6 +565,15 @@ export const es: Messages = {
'error.author': 'Esta cuenta no es una dirección Ğ1.',
'error.not_votable': 'Esta versión ya no está en votación.',
'error.members_only': 'Aquí solo votan los miembros de este grupo.',
'error.objection': 'Una objeción retiene esta versión: no se vota hasta que se levante.',
'error.kind': 'Di si este texto repite el otro o lo contradice.',
'error.other': 'Elige otro artículo, en vigor o propuesto.',
'error.both_in_force': 'Los dos textos están en vigor: una objeción siempre apunta a una versión que aún no lo está.',
'error.objection_exists': 'Ya tienes una objeción en curso sobre estos dos textos.',
'error.nothing_to_reiterate': 'Nada que reiterar: aún no ha llegado ninguna respuesta.',
'error.lifted': 'Esta objeción ya está levantada.',
'error.settled': 'Esta corrección ya está decidida.',
'error.link': 'Esta propuesta no puede responder a esta objeción: apunta a otro artículo, o la objeción está levantada.',
'error.retry': 'Reintentar',
'common.cancel': 'Cancelar',
+109 -18
View File
@@ -14,6 +14,9 @@ export const fr = {
'nav.mandates': 'Mandats',
'nav.protocols': 'Protocoles',
'nav.groups': 'Mes groupes',
'nav.messages': 'Messages',
'nav.messages.count.one': 'Messages, {n} non lu',
'nav.messages.count.other': 'Messages, {n} non lus',
'nav.docs.count.one': '{label}, {n} doc en cours',
'nav.docs.count.other': '{label}, {n} docs en cours',
'nav.access': 'Accès',
@@ -140,7 +143,7 @@ export const fr = {
'deep.addition': 'nouvel article',
'deep.removal': 'retrait de « {title} »',
'deep.inertia': 'inertie vers {level}',
'deep.blocked': 'bloquée',
'deep.held': 'non votable : objection',
'deep.mine': 'ta proposition',
'deep.stale': 'à reconfirmer',
'deep.wellrated': 'bien cotée',
@@ -201,7 +204,14 @@ export const fr = {
'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.held': "Une objection retient cette version : elle ne se vote plus jusqu'à sa levée. Les votes déjà faits restent.",
'vote.held.redit': 'Elle redit « {other} ».',
'vote.held.contredit': 'Elle contredit « {other} ».',
'vote.held.author.redit': "Pour qu'elle se vote à nouveau, modifie l'article visé. La personne qui a fait l'objection la lève alors, ou la réitère ; sans réponse de sa part sous 3 jours, elle est levée.",
'vote.held.author.contredit': "Pour qu'elle se vote à nouveau, reformule-la. La personne qui a fait l'objection la lève alors, ou la réitère ; sans réponse de sa part sous 3 jours, elle est levée.",
'vote.held.waiting': "Une réponse est arrivée : {name} lève ou réitère l'objection d'ici le {date} ; sans réponse, elle est levée.",
'vote.held.mine': 'Tu as fait cette objection : lève-la quand la réponse te convient.',
'vote.held.mine.asked': "Une réponse est arrivée : lève ton objection si elle te convient, ou réitère-la, d'ici le {date}. Sans réponse de ta part, elle est levée.",
'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é.",
@@ -220,9 +230,9 @@ export const fr = {
'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.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 faire une objection.",
'vote.members': 'Seuls les membres de ce groupe votent ici.',
'vote.details': 'Coquilles, traductions, signalements, historique',
'vote.details': 'Coquilles, traductions, objections, 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.',
@@ -249,6 +259,7 @@ export const fr = {
'basket.sent.other': '{n} votes enregistrés.',
'basket.section': 'Voter cette section',
'basket.mine': 'ton vote : {choice}',
'basket.held': 'non votable : une objection la retient',
'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é.',
@@ -330,27 +341,98 @@ export const fr = {
'history.typo': 'coquille corrigée',
'history.substantive': 'changement de fond (votes à reconfirmer)',
'history.amendment': 'texte de départ remplacé',
'history.revert': "correction retirée par l'auteur",
'history.by': 'par {name}',
'history.typo.validated': 'validée par {name}',
'history.typo.deadline': 'appliquée sans réponse sous 3 jours',
'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.note': "Accents, majuscules, faute de frappe, mot collé ou coupé : la correction ne se vote pas. Sur ton texte, elle s'applique tout de suite. Sur celui d'une autre personne, son auteur la valide (un administrateur pour un texte du seed) ; sans réponse sous 3 jours, elle s'applique. 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',
'typo.pending.author': "Ta correction attend l'auteur du texte : elle s'applique quand il la valide, ou d'elle-même le {date}.",
'typo.pending.admin': "Ta correction attend un administrateur, ce texte venant du seed : elle s'applique quand il la valide, ou d'elle-même le {date}.",
'typo.list': 'Coquilles proposées',
'typo.by': 'proposée par {name}',
'typo.status.pending': "en attente : s'applique d'elle-même le {date}",
'typo.status.applied': 'appliquée',
'typo.status.refused': 'refusée',
'typo.status.stale': 'périmée : le texte a changé entre-temps',
'typo.settled.by': 'par {name}',
'typo.settled.deadline': 'sans réponse sous 3 jours',
'typo.validate': 'Valider',
'typo.refuse': 'Refuser',
'typo.undo': "Revenir au texte d'avant",
'typo.redo': 'Appliquer finalement',
'typo.validated': 'Correction appliquée.',
'typo.refused': 'Correction refusée.',
'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}',
'objection.title': 'Objections',
'objection.none': 'Aucune objection.',
'objection.add': 'Faire une objection',
'objection.kind': 'Ton objection',
'objection.kind.redit': 'Redit',
'objection.kind.contredit': 'Contredit',
'objection.kind.redit.hint': 'ce texte répète un autre article',
'objection.kind.contredit.hint': "ce texte dit le contraire d'un autre article",
'objection.target': 'Quel article ?',
'objection.reason.redit': 'En quoi ces deux textes disent la même chose',
'objection.reason.contredit': 'En quoi ces deux textes se contredisent',
'objection.send': "Envoyer l'objection",
'objection.sent': "Objection enregistrée : la dernière arrivée des deux versions ne se vote plus jusqu'à sa levée.",
'objection.note': "Une objection rend la dernière arrivée des deux versions non votable jusqu'à sa levée — jamais un texte en vigueur. Son auteur répond : pour une redite, il modifie l'article visé ; pour une contradiction, il reformule. Tu lèves alors l'objection ou tu la réitères ; sans réponse de ta part sous 3 jours, elle est levée.",
'objection.says.redit': '« {held} » redit « {other} »',
'objection.says.contredit': '« {held} » contredit « {other} »',
'objection.by': 'objection de {name}',
'objection.held.here': 'cette version ne se vote plus',
'objection.phase.author': "en attente d'une réponse de l'auteur",
'objection.phase.objector': "réponse arrivée : levée ou réitérée d'ici le {date}, sinon levée d'elle-même",
'objection.answer.revision': 'réponse : le texte retenu a été reformulé',
'objection.answer.other': "réponse : l'autre texte a changé",
'objection.answer.proposal': 'réponse : une proposition liée',
'objection.lifted.objector': "levée par la personne qui l'a faite",
'objection.lifted.admin': 'levée par un administrateur',
'objection.lifted.deadline': 'levée : 3 jours sans suite',
'objection.lifted.withdrawn': 'levée : la proposition a été retirée',
'objection.lifted.revision': 'tombée : le texte a changé',
'objection.lift': "Lever l'objection",
'objection.lift.admin': "Lever l'objection (administrateur)",
'objection.reiterate': "Réitérer l'objection",
'objection.done.lifted': 'Objection levée.',
'objection.done.reiterated': 'Objection réitérée : une nouvelle réponse est attendue.',
'objection.respond.redit': "Modifier l'article visé",
'objection.respond.contredit': 'Reformuler',
'objection.linked': "Cette proposition répond à une objection : une fois soumise, la personne qui l'a faite la lève ou la réitère.",
'messages.title': 'Messages',
'messages.intro': 'Ce qui attend un geste de toi : une objection à laquelle répondre, une correction de coquille à valider. Chaque message porte son échéance ; un message traité ne demande plus rien.',
'messages.none': "Aucun message pour l'instant.",
'messages.readAll': 'Tout marquer comme lu',
'messages.read': 'Marquer comme lu',
'messages.unread': 'non lu',
'messages.due': 'échéance : {date}',
'messages.open': 'Voir dans le texte',
'messages.topic.objection': 'Objection',
'messages.topic.typo': 'Coquille',
'messages.objection_raised.redit': "{name} fait une objection : ta version « {held} » redit « {other} ». Elle ne se vote plus jusqu'à sa levée. Pour répondre, modifie l'article visé.",
'messages.objection_raised.contredit': "{name} fait une objection : ta version « {held} » contredit « {other} ». Elle ne se vote plus jusqu'à sa levée. Pour répondre, reformule-la.",
'messages.objection_reiterated': '{name} réitère son objection : « {held} » ne se vote toujours pas. Réponds à nouveau.',
'messages.objection_answered': 'Ton objection sur « {held} » a reçu une réponse. Lève-la si elle te convient, ou réitère-la. Sans réponse de ta part, elle est levée.',
'messages.typo_pending.author': '{name} propose une correction de coquille dans ta version « {title} ».',
'messages.typo_pending.admin': '{name} propose une correction de coquille dans « {title} », un texte du seed : un administrateur la valide.',
'messages.respond': 'Répondre',
'messages.outcome.answered': 'réponse donnée',
'messages.outcome.reiterated': 'objection réitérée',
'messages.outcome.lifted': 'objection levée',
'messages.outcome.admin': 'objection levée par un administrateur',
'messages.outcome.deadline.objection': 'objection levée : 3 jours sans suite',
'messages.outcome.deadline.typo': 'correction appliquée : 3 jours sans réponse',
'messages.outcome.withdrawn': 'proposition retirée',
'messages.outcome.applied': 'correction appliquée',
'messages.outcome.refused': 'correction refusée',
'messages.outcome.stale': 'correction périmée : le texte a changé',
'messages.outcome.done': 'traité',
'propose.mode.replace': 'Modifier ce texte',
'propose.mode.remove': 'Retirer cet article',
@@ -461,7 +543,7 @@ export const fr = {
'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.reason': 'Dis en quelques mots ce qui fonde ton objection (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.",
@@ -486,6 +568,15 @@ export const fr = {
'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.objection': "Une objection retient cette version : elle ne se vote plus jusqu'à sa levée.",
'error.kind': "Dis si ce texte redit l'autre ou le contredit.",
'error.other': 'Choisis un autre article, en vigueur ou proposé.',
'error.both_in_force': 'Ces deux textes sont en vigueur : une objection vise toujours une version qui ne l’est pas encore.',
'error.objection_exists': 'Tu as déjà une objection en cours sur ces deux textes.',
'error.nothing_to_reiterate': "Rien à réitérer : aucune réponse n'est encore arrivée.",
'error.lifted': 'Cette objection est déjà levée.',
'error.settled': 'Cette correction est déjà tranchée.',
'error.link': 'Cette proposition ne peut pas répondre à cette objection : elle vise un autre article, ou l’objection est levée.',
'error.retry': 'Réessayer',
'common.cancel': 'Annuler',