Found by widening the coverage check to plural() forms in every file rather than only the ones being worked on.
Seven counted strings had never been in any of the nine catalogues, so they rendered in English whatever language was selected:
String
Where
Delete {n} items? / Delete {n} items
Files view
Move {n} items / Move {n} items…
Files view
{n} items selected
Files view
The event runs {n} days longer than this shows.
Event editor
{n} guests are not on this server…
Event editor
Not a regression from the recent work — they have been missing since those features landed. Every earlier scan looked at t("literal") call sites plus the plurals of whichever file was in hand, which is exactly the blind spot that also hid Add star earlier.
All nine languages in one commit rather than nine PRs: this is a single gap in a check, not a translation pass, and splitting it per language would imply nine decisions where there is one.
After this, a scan of 1,149 strings — every t() literal, every value reaching t() through a variable, and every plural() form — reports 0 missing in all nine catalogues.
Typecheck clean, 101 test files / 1016 tests pass.
Found by widening the coverage check to `plural()` forms in **every** file rather than only the ones being worked on.
Seven counted strings had never been in any of the nine catalogues, so they rendered in English whatever language was selected:
| String | Where |
|---|---|
| `Delete {n} items?` / `Delete {n} items` | Files view |
| `Move {n} items` / `Move {n} items…` | Files view |
| `{n} items selected` | Files view |
| `The event runs {n} days longer than this shows.` | Event editor |
| `{n} guests are not on this server…` | Event editor |
**Not a regression** from the recent work — they have been missing since those features landed. Every earlier scan looked at `t("literal")` call sites plus the plurals of whichever file was in hand, which is exactly the blind spot that also hid `Add star` earlier.
All nine languages in one commit rather than nine PRs: this is a single gap in a check, not a translation pass, and splitting it per language would imply nine decisions where there is one.
After this, a scan of **1,149 strings** — every `t()` literal, every value reaching `t()` through a variable, and every `plural()` form — reports **0 missing** in all nine catalogues.
Typecheck clean, 101 test files / 1016 tests pass.
**Merged** 2026-09-03 as coffey-labs/ihasmail@17d98748c466
<sub>Rebuilt from: git history, session transcript.</sub>
This repo is archived. You cannot comment on issues.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Found by widening the coverage check to
plural()forms in every file rather than only the ones being worked on.Seven counted strings had never been in any of the nine catalogues, so they rendered in English whatever language was selected:
Delete {n} items?/Delete {n} itemsMove {n} items/Move {n} items…{n} items selectedThe event runs {n} days longer than this shows.{n} guests are not on this server…Not a regression from the recent work — they have been missing since those features landed. Every earlier scan looked at
t("literal")call sites plus the plurals of whichever file was in hand, which is exactly the blind spot that also hidAdd starearlier.All nine languages in one commit rather than nine PRs: this is a single gap in a check, not a translation pass, and splitting it per language would imply nine decisions where there is one.
After this, a scan of 1,149 strings — every
t()literal, every value reachingt()through a variable, and everyplural()form — reports 0 missing in all nine catalogues.Typecheck clean, 101 test files / 1016 tests pass.
Merged 2026-09-03 as coffey-labs/ihasmail@17d98748c4
Rebuilt from: git history, session transcript.