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.
**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.
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.
781 of 796 strings. Generated by AI, unreviewed, marked Beta. First of Phase 2.
This is the catalogue
plural()was designed forRussian needs three forms where English has two, and the choice isn't a question about the number 1:
one1 письмоfew2 письмаmany5 писемmany11 писем— despite ending in 1–4Intl.PluralRulesknows 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
fewfalls back toothersilently, 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:checkreports 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.