Report the stale keys that are stale, and remove them
The check reported 41 stale keys per catalogue. Ten of them were.
The other 31 were strings held in constants and translated where they render --
t(b.description), t(group), t(c.label) -- so they reach t() as a variable and
there is no literal at the call site to find. The script already chased two of
those shapes, `label:` and objects named *_LABELS, with a comment about crying
wolf 33 times. The shapes kept coming: `description:` and `group:` on the
keyboard bindings, the calendar's view names, the read-receipt refusals, the
palette names.
Chasing them one at a time is the wrong shape of fix. Stale detection now asks
only "is this key still written down anywhere in the source" -- any string
literal counts. That under-reports, and that is the right way round: a missed
stale key costs a line of dead translation, a false one costs the credibility
of the check and every real finding after it. Which is what happened here --
these sat unread long enough to need a commit of their own.
Coverage keeps the strict set. The two questions need different nets, and
widening the one that measures what a catalogue *owes* would count every CSS
class and JMAP method name as an untranslated string -- it read 29% while I had
them sharing a set. `wanted` is the obligation, `seen` is the evidence.
What was actually dead, removed from all nine: "Availability on {date}",
"Import vCard", "PDF", two settings hints replaced by rewordings that are still
live, the Catppuccin palette description, and Tuesday through Friday -- left
behind when the week-start dropdown narrowed to the three days a week actually
starts on, and appearing since only in comments.
Coverage is unchanged at 1269/1285: none of the ten was ever owed.
This commit is contained in:
@@ -324,7 +324,6 @@ export const catalog: Catalog = {
|
||||
"Busy": "Occupé",
|
||||
"Free/busy": "Disponibilité",
|
||||
"Show as": "Afficher comme",
|
||||
"Availability on {date}": "Disponibilité le {date}",
|
||||
"Count all events as busy": "Compter tous les événements comme occupé",
|
||||
"Only events I'm attending": "Uniquement les événements auxquels je participe",
|
||||
"Don't include in availability": "Ne pas inclure dans la disponibilité",
|
||||
@@ -363,7 +362,6 @@ export const catalog: Catalog = {
|
||||
"New address book": "Nouveau carnet d'adresses",
|
||||
"No address books yet.": "Aucun carnet d'adresses pour le moment.",
|
||||
"Choose from address books": "Choisir dans les carnets d'adresses",
|
||||
"Import vCard": "Importer une vCard",
|
||||
"Export all contacts": "Exporter tous les contacts",
|
||||
"Export address book": "Exporter ce carnet d’adresses",
|
||||
"Import contacts…": "Importer des contacts…",
|
||||
@@ -438,7 +436,6 @@ export const catalog: Catalog = {
|
||||
"Make ihasmail yours.": "Faites de ihasmail le vôtre.",
|
||||
"Reading": "Lecture",
|
||||
"Reading pane": "Volet de lecture",
|
||||
"Reading, sending and list behaviour. Settings are stored in this browser.": "Comportement de lecture, d'envoi et de liste. Les paramètres sont enregistrés dans ce navigateur.",
|
||||
"Right of the list": "À droite de la liste",
|
||||
"Below the list": "Sous la liste",
|
||||
"Hidden (open full width)": "Masqué (ouvrir en pleine largeur)",
|
||||
@@ -481,10 +478,6 @@ export const catalog: Catalog = {
|
||||
"Time zone": "Fuseau horaire",
|
||||
"Week starts on": "La semaine commence le",
|
||||
"Monday": "Lundi",
|
||||
"Tuesday": "Mardi",
|
||||
"Wednesday": "Mercredi",
|
||||
"Thursday": "Jeudi",
|
||||
"Friday": "Vendredi",
|
||||
"Saturday": "Samedi",
|
||||
"Sunday": "Dimanche",
|
||||
"12-hour clock (6:23 PM)": "Format 12 heures (6:23 PM)",
|
||||
@@ -730,10 +723,8 @@ export const catalog: Catalog = {
|
||||
"Manage labels": "Gérer les libellés",
|
||||
"Create “{name}”": "Créer « {name} »",
|
||||
"Type a name to create your first label.": "Saisissez un nom pour créer votre premier libellé.",
|
||||
"Labels are IMAP keywords stored on your messages, so they sync to other clients. Names and colours are kept in this browser.": "Les libellés sont des mots-clés IMAP enregistrés dans vos messages : ils se synchronisent donc avec les autres clients. Les noms et couleurs restent dans ce navigateur.",
|
||||
"New label": "Nouveau libellé",
|
||||
"Delete label": "Supprimer le libellé",
|
||||
"PDF": "PDF",
|
||||
"Large attachments may be rejected by some servers": "Les pièces jointes volumineuses peuvent être refusées par certains serveurs",
|
||||
"Images are stored in your Files (folder “ihasmail”) and embedded when you send.": "Les images sont enregistrées dans vos Fichiers (dossier « ihasmail ») et intégrées à l'envoi.",
|
||||
"Thanks for your message. I'm away until … and will reply when I'm back.": "Merci pour votre message. Je suis absent jusqu'au … et vous répondrai à mon retour.",
|
||||
@@ -867,7 +858,6 @@ export const catalog: Catalog = {
|
||||
"Only languages ihasmail has been translated into appear here, so this list grows as translations land rather than ahead of them — a language offered without strings behind it would leave the page claiming to be in a language it is not.": "Seules les langues dans lesquelles ihasmail a été traduit apparaissent ici : la liste s'allonge donc à mesure que les traductions arrivent, et non avant — une langue proposée sans textes derrière elle ferait prétendre à la page qu'elle est dans une langue qui n'est pas la sienne.",
|
||||
"tell us about it": "signalez-le-nous",
|
||||
"This translation was generated by AI and has not been checked by a native speaker, so it is marked Beta until somebody who speaks it signs it off. Anything that reads wrongly is worth reporting — {report}.": "Cette traduction a été générée par une IA et n'a pas été relue par une personne de langue maternelle française ; elle est donc marquée Beta jusqu'à validation. Tout ce qui sonne faux mérite d'être signalé — {report}.",
|
||||
"{name} is the palette from {site}, and what a new account starts on. It is a dark theme, so it counts as dark wherever that matters, and the accent colour below still applies on top of it.": "{name} est la palette de {site}, et celle d'un nouveau compte. C'est un thème sombre : il compte donc comme sombre partout où cela importe, et la couleur d'accentuation ci-dessous s'y applique toujours.",
|
||||
"ihasmail's own version is the date of the commit it was built from, followed by where that commit came from: {example} was built from a commit dated the 30th of August 2026 that arrived through pull request 129. A commit that did not come through one carries its short SHA instead — {sha}. The version deliberately says nothing about Stalwart; what this build needs from the server is the line above.": "La version de ihasmail est la date du commit à partir duquel elle a été construite, suivie de l'origine de ce commit : {example} provient d'un commit daté du 30 août 2026 arrivé via la pull request 129. Un commit qui n'est pas passé par là porte à la place son SHA court — {sha}. La version ne dit délibérément rien de Stalwart ; ce dont cette build a besoin du serveur figure à la ligne ci-dessus.",
|
||||
|
||||
// ── Composer status, calendar title ────────────────────────────────
|
||||
|
||||
Reference in New Issue
Block a user