Russian, and the first real use of the plural machinery #155

Closed
opened 2026-08-31 19:38:48 +00:00 by jcoffey-dev · 0 comments
Owner

781 of 796 strings. Generated by AI, unreviewed, marked Beta. First of Phase 2.

This is the catalogue plural() was designed for

Russian needs three forms where English has two, and the choice isn't a question about the number 1:

n category renders
1, 21 one 1 письмо
2–4, 22 few 2 письма
5–20, 25 many 5 писем
11–14 many 11 писем — despite ending in 1–4

Intl.PluralRules knows all of that. A two-form assumption would have shipped "5 письмо" and read as machine output however good the vocabulary was.

Tested against the shipped catalogue, not a fixture — 1, 2, 3, 5, 11, 21, 22, 25 and 0 — plus a check that every counted string carries all four categories. A missing few falls back to other silently, and is grammatical often enough to go unnoticed.

"Выбрано: {n}" for the selection count rather than an agreeing form: the impersonal construction sidesteps agreement entirely, and is what Russian interfaces actually do there.

Decisions

Register is вы, lowercase. Capitalised «Вы» is correspondence style — it reads as a letter addressed to one person rather than as software, so it'd be a small constant wrongness on every screen. Most of the interface avoids the question anyway: Russian UI convention is the infinitive for actions («Удалить», «Ответить»).

«Письмо» not «сообщение» for a mail message — what Russian mail clients call one; «сообщение» reads as a chat message.

«Ярлык» for label — Gmail's word in Russian. A fifth answer to the same rule about using what the reader will meet elsewhere.

One thing worth recording

A stray CJK character got typed into one Russian sentence while drafting, and was caught by sweeping the file for anything outside the expected scripts. Not a mistake a spellcheck would find, and not one a reader would forgive.

Checks

461 tests (+2), typecheck, build clean. npm run i18n:check reports ru at 98% with no stale keys. 61 kB chunk — larger than the Latin-script catalogues, as Cyrillic costs more per character before gzip.

Still Beta. First things I'd want a Russian speaker to check: «Цепочка» for conversation (vs «Переписка»), and «Профиль отправителя» for identity, which is descriptive rather than a term of art.

Merged 2026-08-31 as coffey-labs/ihasmail@1eb31450a4

Rebuilt from: git history, session transcript.

**781 of 796 strings.** Generated by AI, unreviewed, marked **Beta**. First of Phase 2. ## This is the catalogue `plural()` was designed for Russian needs three forms where English has two, and the choice isn't a question about the number 1: | n | category | renders | |---|---|---| | 1, 21 | `one` | `1 письмо` | | 2–4, 22 | `few` | `2 письма` | | 5–20, 25 | `many` | `5 писем` | | **11–14** | `many` | `11 писем` — despite ending in 1–4 | `Intl.PluralRules` knows all of that. A two-form assumption would have shipped **"5 письмо"** and read as machine output however good the vocabulary was. **Tested against the shipped catalogue, not a fixture** — 1, 2, 3, 5, 11, 21, 22, 25 and 0 — plus a check that every counted string carries all four categories. A missing `few` falls back to `other` silently, and is grammatical often enough to go unnoticed. `"Выбрано: {n}"` for the selection count rather than an agreeing form: the impersonal construction sidesteps agreement entirely, and is what Russian interfaces actually do there. ## Decisions **Register is `вы`, lowercase.** Capitalised «Вы» is correspondence style — it reads as a letter addressed to one person rather than as software, so it'd be a small constant wrongness on every screen. Most of the interface avoids the question anyway: Russian UI convention is the infinitive for actions («Удалить», «Ответить»). **«Письмо» not «сообщение»** for a mail message — what Russian mail clients call one; «сообщение» reads as a chat message. **«Ярлык» for label** — Gmail's word in Russian. A fifth answer to the same rule about using what the reader will meet elsewhere. ## One thing worth recording A stray CJK character got typed into one Russian sentence while drafting, and was caught by sweeping the file for anything outside the expected scripts. Not a mistake a spellcheck would find, and not one a reader would forgive. ## Checks 461 tests (+2), typecheck, build clean. `npm run i18n:check` reports ru at 98% with no stale keys. 61 kB chunk — larger than the Latin-script catalogues, as Cyrillic costs more per character before gzip. Still Beta. First things I'd want a Russian speaker to check: «Цепочка» for conversation (vs «Переписка»), and «Профиль отправителя» for identity, which is descriptive rather than a term of art. **Merged** 2026-08-31 as coffey-labs/ihasmail@1eb31450a41c <sub>Rebuilt from: git history, session transcript.</sub>
This repo is archived. You cannot comment on issues.