You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Add Russian (ru) as a first-class Windshift UI locale with the same catalog coverage and runtime behavior as the existing supported locales.
Context
Windshift already has a mature localization layer with lazy-loaded locale modules, browser-language negotiation, persisted user preference, localized date formatting, fallback to English, and automated catalog validation.
The English reference catalog currently contains 5,651 leaf keys (approximately 20,000 source words) split across 16 translation modules.
Russian needs locale-specific CLDR plural categories (one, few, many, and other). The runtime already uses Intl.PluralRules, but the locale parity validator currently treats locale-specific plural variants such as _few and _many as unexpected extra keys.
Scope
Register ru / Русский as an LTR locale in SUPPORTED_LOCALES.
Add a complete frontend/src/lib/locales/ru catalog matching the English reference catalog.
Preserve all interpolation placeholders, product names, URLs, query syntax, and technical identifiers.
Add natural Russian plural variants for every count-dependent message.
Update the i18n validator so valid locale-specific CLDR plural variants are accepted and checked for placeholder parity.
Ensure browser negotiation selects ru for Russian browsers when no saved preference exists.
Ensure the language can be selected and persisted from the user profile.
Perform a focused audit of user-visible hard-coded English strings encountered on primary application, portal, and public-board flows; migrate them to i18n or document follow-up issues.
Add regression coverage for Russian locale negotiation and plural selection.
Acceptance criteria
“Русский” is available in the language selector.
Selecting Russian updates the interface without requiring a restart and persists across sessions.
A browser locale such as ru-RU resolves to ru when no explicit preference is stored.
The Russian catalog has full reference-key coverage and no unexpected non-plural keys.
Interpolation placeholders match the English reference catalog.
Russian plural forms render correctly, including representative values such as 1, 2, 5, 11, 21, 22, and 25.
Missing translations fall back to English without exposing raw translation keys.
Core navigation, authentication, workspace/item views, settings, mobile UI, portal, and public surfaces receive a desktop/mobile smoke test.
Long Russian labels do not cause obvious clipping, overflow, or broken controls at supported breakpoints.
npm run check, npm run typecheck, relevant tests, and the production frontend build pass.
Translation guidance
Create a small glossary before bulk translation so recurring domain terms remain consistent, especially “workspace”, “work item”, “collection”, “iteration”, “milestone”, “workflow”, “issue”, “request”, and “approval”.
Product names, API/CLI syntax, code identifiers, URLs, and user-provided content should remain unchanged.
Out of scope
Backend logs, API field names, CLI commands, and user-created content. Localizing transactional email templates or the TUI can be handled separately if they are not already covered by the frontend catalog.
Summary
Add Russian (
ru) as a first-class Windshift UI locale with the same catalog coverage and runtime behavior as the existing supported locales.Context
Windshift already has a mature localization layer with lazy-loaded locale modules, browser-language negotiation, persisted user preference, localized date formatting, fallback to English, and automated catalog validation.
The English reference catalog currently contains 5,651 leaf keys (approximately 20,000 source words) split across 16 translation modules.
Russian needs locale-specific CLDR plural categories (
one,few,many, andother). The runtime already usesIntl.PluralRules, but the locale parity validator currently treats locale-specific plural variants such as_fewand_manyas unexpected extra keys.Scope
ru/Русскийas an LTR locale inSUPPORTED_LOCALES.frontend/src/lib/locales/rucatalog matching the English reference catalog.rufor Russian browsers when no saved preference exists.Acceptance criteria
ru-RUresolves toruwhen no explicit preference is stored.npm run check,npm run typecheck, relevant tests, and the production frontend build pass.Translation guidance
Create a small glossary before bulk translation so recurring domain terms remain consistent, especially “workspace”, “work item”, “collection”, “iteration”, “milestone”, “workflow”, “issue”, “request”, and “approval”.
Product names, API/CLI syntax, code identifiers, URLs, and user-provided content should remain unchanged.
Out of scope
Backend logs, API field names, CLI commands, and user-created content. Localizing transactional email templates or the TUI can be handled separately if they are not already covered by the frontend catalog.