ADR-0019: pluralisation is a translator concern, not deferred work

Per follow-up review: §8.5's framing read as "we'll do this
properly later". Reword to make it explicit that real
plural-form rules per locale (Fluent / ICU) are NOT a goal of
this project. Translators handle pluralisation in their
wording (`(s)` shorthand or rephrased templates) — sufficient
for a teaching tool's output surface, and we're not planning
to revisit it.

Matching Out-of-Scope entry tightened the same way.
This commit is contained in:
claude@clouddev1
2026-05-09 08:57:23 +00:00
parent 2a8618c783
commit d4801ea52f
+21 -10
View File
@@ -369,19 +369,28 @@ up the value in the supplied keyword arguments, and inserts it.
Unknown placeholders → translation error (caught at test time Unknown placeholders → translation error (caught at test time
when the catalog is exercised). when the catalog is exercised).
#### 8.5 Pluralisation — `(s)` suffix for now #### 8.5 Pluralisation — translator's choice, not a system feature
The existing codebase uses the The existing codebase uses the
`"{count} row(s) inserted"` style. The catalog continues this. `"{count} row(s) inserted"` style. The catalog continues this.
Real plural-form rules per locale (Fluent / ICU MessageFormat
have zero / one / few / many / two / other tagged forms,
language-specific) are explicitly **deferred**. Adding them is
a meaningful design lift, not a drop-in upgrade, and the H1
scope here is already wide enough.
A future "advanced i18n" ADR would address pluralisation, Pluralisation is **a translator concern, not a system
gendered forms, ordinals, and date/number formatting hooks. concern**. Placeholders only carry values (§8.4); the wording
This ADR documents that the limitation is known and intentional. around them is fully under the translator's control. Languages
that have an equivalent of the `(s)` shorthand can use it;
languages that don't can rephrase to avoid the question
entirely (`"applied to {count} row(s)"`
`"applied to {count} rows in total"` works for every count).
For a teaching tool with a narrow output surface this is
sufficient.
Real plural-form rules per locale (Fluent / ICU MessageFormat,
with zero / one / few / many / two / other tagged forms) are
**explicitly not a goal of this project**. They would let a
template supply separate singular and plural strings indexed
by the same count, which is technically nicer but not
materially better for the kind of output this app produces.
We are not going to add them.
#### 8.6 Validation #### 8.6 Validation
@@ -518,7 +527,9 @@ These are deliberately deferred to keep H1 shippable:
ADR-0002. Today's H1 does not handle this path. ADR-0002. Today's H1 does not handle this path.
3. **Settings persistence for the `messages` command.** Lives in 3. **Settings persistence for the `messages` command.** Lives in
a future settings ADR. a future settings ADR.
4. **Plural-form rules per locale.** §8.5. 4. **Plural-form rules per locale.** §8.5 — explicitly not a
goal, not just deferred. Translations handle pluralisation
in their wording (`(s)` shorthand or rephrased).
5. **Runtime locale selection.** §8.2. 5. **Runtime locale selection.** §8.2.
6. **Locale-aware value formatting.** §8.7 — explicitly rejected, 6. **Locale-aware value formatting.** §8.7 — explicitly rejected,
not just deferred. not just deferred.