Translate the rule sentences into French

#261 rebuilt the Sieve rule summaries and the recurrence descriptions as whole
sentences with placeholders, so that a translator can move the parts rather
than being handed " and " on its own. This is the French half of that.

32 strings and 9 plural forms. The ordinals are words -- there is no suffix to
append here, which was the point -- and the day and item lists are joined by
Intl.ListFormat rather than a translated separator.
This commit is contained in:
2026-09-03 14:22:28 -07:00
parent 22f39a4507
commit 4c430ea995
+46
View File
@@ -1260,8 +1260,54 @@ export const catalog: Catalog = {
"This message was sent automatically, so no read receipt is offered.": "Ce message a été envoyé automatiquement, aucun accusé de lecture n'est donc proposé.",
"This server will not hold a message longer than {span}.": "Ce serveur ne retient pas un message plus de {span}.",
"Upload failed": "Échec de l'envoi",
// ── Third pass ──────────────────────────────────────────────────────
// Sentences that lib/ and store/ were building in English, and the two
// swipe labels that reach t() through a variable and so were invisible
// to a scan for t("literal"). See #259.
"Every {n} {frequency}": "Tous les {n} {frequency}",
"Monthly": "Chaque mois",
"Monthly on day {days}": "Chaque mois le {days}",
"Monthly on the {ordinal} {weekday}": "Chaque mois le {ordinal} {weekday}",
"Monthly on {weekday}": "Chaque mois le {weekday}",
"Weekly": "Chaque semaine",
"Weekly on {days}": "Chaque semaine le {days}",
"add {flag}": "ajouter {flag}",
"always": "toujours",
"body contains \"{value}\"": "le corps contient \"{value}\"",
"body does not contain \"{value}\"": "le corps ne contient pas \"{value}\"",
"delete it": "le supprimer",
"fifth": "cinquième",
"first": "premier",
"forward to {address}": "transférer à {address}",
"fourth": "quatrième",
"keep it": "le conserver",
"last": "dernier",
"mark it read": "le marquer comme lu",
"move to {folder}": "déplacer vers {folder}",
"reject it": "le rejeter",
"remove {flag}": "retirer {flag}",
"second": "deuxième",
"size is over {n} KB": "la taille dépasse {n} Ko",
"size is under {n} KB": "la taille est inférieure à {n} Ko",
"star it": "le suivre",
"stop": "arrêter",
"third": "troisième",
"{header} address {op} \"{value}\"": "l'adresse {header} {op} \"{value}\"",
"{header} {op} \"{value}\"": "{header} {op} \"{value}\"",
"{rule}, until {date}": "{rule}, jusqu'au {date}",
"{tests} → {actions}": "{tests} → {actions}",
},
plurals: {
// ── Third pass ─────────────────────────────────────────────────────
"Every {n} days": { one: "Chaque jour", other: "Tous les {n} jours" },
"Every {n} months": { one: "Chaque mois", other: "Tous les {n} mois" },
"Every {n} months on day {days}": { one: "Chaque mois le {days}", other: "Tous les {n} mois le {days}" },
"Every {n} months on the {ordinal} {weekday}": { one: "Chaque mois le {ordinal} {weekday}", other: "Tous les {n} mois le {ordinal} {weekday}" },
"Every {n} months on {weekday}": { one: "Chaque mois le {weekday}", other: "Tous les {n} mois le {weekday}" },
"Every {n} weeks": { one: "Chaque semaine", other: "Toutes les {n} semaines" },
"Every {n} weeks on {days}": { one: "Chaque semaine le {days}", other: "Toutes les {n} semaines le {days}" },
"Every {n} years": { one: "Chaque année", other: "Tous les {n} ans" },
"{rule}, {n} times": { one: "{rule}, {n} fois", other: "{rule}, {n} fois" },
// ── Third pass ─────────────────────────────────────────────────────
"Move {n} messages to Trash?": { one: "Déplacer {n} message vers la Corbeille ?", other: "Déplacer {n} messages vers la Corbeille ?" },
"{n} days": { one: "{n} jour", other: "{n} jours" },