Skip to content

feat(i18n): add Russian (ru) localization - #238

Merged
meauxt merged 1 commit into
donetick:developfrom
everysingletear:i18n/ru-locale
Aug 27, 2026
Merged

feat(i18n): add Russian (ru) localization#238
meauxt merged 1 commit into
donetick:developfrom
everysingletear:i18n/ru-locale

Conversation

@everysingletear

Copy link
Copy Markdown
Contributor

Adds public/locales/ru/* for all eleven namespaces — auth, chores, common, filters, history, labels, points, projects, settings, things, timer — covering every key currently in public/locales/en on develop.

Two one-line source changes are needed for it to work:

  • LocalizationContext.jsx — registers ru in AVAILABLE_LANGUAGES, so the language appears in the picker.
  • i18n/config.jsimport 'moment/locale/ru'. Without it the UI translates but every date stays English, which reads worse than no translation at all. This is the same one-line-per-language change as fix: localize dates for all shipped languages (import moment locales) #147; only the ru line is here so this PR stands on its own.

Notes for review

  • Plural forms use the full Russian set (_one/_few/_many/_other). Russian has four plural categories, not two — with only _one/_other, a count of 5 falls through to _other and renders ungrammatically.
  • Terminology is held consistent across all namespaces. Donetick uses "chore" and "task" for the same object; Russian picks one word and keeps it everywhere.
  • No English strings were changed, and no keys were added or removed.
  • eslint, prettier -c, npm run lint:i18n and npm run build are all green on this branch.

On routing

If you'd rather Russian came through Crowdin like the other languages, that works for me too — ru just isn't a target language in the project yet, so nothing can flow through it today (#230 brings ar, de, es, fr, ja, nl, pt, zh but not ru). Enable it and I'll upload this set there instead; close this PR in that case.

Supersedes #143, which I closed in August because it covered three namespaces when there were already eleven.

Related: #145, #213.

Adds `public/locales/ru/*` for all eleven namespaces — auth, chores,
common, filters, history, labels, points, projects, settings, things,
timer — covering every key currently in `public/locales/en` on develop.

Two one-line source changes are needed for it to work:

- `LocalizationContext.jsx` — registers `ru` in AVAILABLE_LANGUAGES, so
  the language shows up in the picker.
- `i18n/config.js` — `import 'moment/locale/ru'`. Without it the UI
  translates but every date stays English, which reads worse than no
  translation at all. This is the same one-line-per-language change as
  donetick#147; only the `ru` line is here so this PR stands alone.

Notes for review:

- Plural forms use the full Russian set (`_one/_few/_many/_other`).
  Russian has four plural categories, not two — with only `_one/_other`
  a count of 5 falls through to `_other` and renders ungrammatically.
- Terminology is held consistent across all namespaces. Donetick uses
  "chore" and "task" for the same object; Russian picks one word and
  keeps it everywhere.
- No English strings were changed, and no keys were added or removed.
- `eslint`, `prettier -c`, `npm run lint:i18n` and `npm run build` are
  all green on this branch.

Supersedes donetick#143, which I closed in August because it covered three
namespaces when there were already eleven.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@meauxt
meauxt merged commit 44875de into donetick:develop Aug 27, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants