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:
@@ -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.
|
||||||
|
|||||||
Reference in New Issue
Block a user