feat(desktop): i18n infrastructure + Russian locale
- Dominant language
- Rust
- Stars
- 32.7k
- Forks
- 4.3k
- Avg merge
- 1d 13h
- Merged PRs (30d)
- 253
Description
## Problem
The Buzz desktop UI is entirely hardcoded in English. There's no internationalization infrastructure, making the app inaccessible to non-English speakers and impossible to localize without forking.
As Buzz is positioned as a self-hosted platform for teams, this becomes a real barrier for adoption in non-English-speaking organizations.
## Proposed Solution
Add i18n support to the desktop app using **react-i18next** with JSON locale files, and ship Russian as the first non-English locale.
### Architecture
- **Library:** `react-i18next` + `i18next` — industry standard, tree-shakeable, zero runtime overhead for the default locale
- **Locale files:** `desktop/src/shared/i18n/locales/{en,ru}.json` — flat namespace structure (e.g. `"sidebar.channels"`, `"messages.send_message"`)
- **Language switcher:** available both during onboarding (top-right corner) and in Settings → Profile, persisted to `localStorage`
- **Fallback:** always English — missing keys in any locale degrade gracefully
### Scope
- ~560 translation keys covering all major surfaces: onboarding, sidebar, messages, settings, agents, channels, search, notifications, community management
- 2 locales: `en.json` (source of truth) and `ru.json` (complete Russian translation)
- No behavioral changes for English users — the default locale is `en`, so anyone who hasn't switched language sees identical output to today
### What is NOT in scope (intentional)
- Pluralization beyond English/Russian (the framework supports it; other locales can be added incrementally as separate PRs)
- RTL layout support
- Server-side / relay string localization
- Mobile app (separate codebase)
## Screenshots
Language switching at runtime — same build, toggled between English and Russian.
**Welcome / splash screen**
| Russian | English |
|---|---|
| ![welcome-ru][welcome-ru] | ![welcome-en][welcome-en] |
**Enter private key (onboarding)**
| Russian | English |
|---|---|
| ![key-ru][key-ru] | ![key-en][key-en] |
**Reconnect to community (onboarding)**
| Russian | English |
|---|---|
| ![reconnect-ru][reconnect-ru] | ![reconnect-en][reconnect-en] |
**Settings**
| Russian | English |
|---|---|
| ![settings-ru][settings-ru] | ![settings-en][settings-en] |
**Main app — sidebar + Agents**
| Russian | English |
|---|---|
| ![agents-ru][agents-ru] | ![agents-en][agents-en] |
[welcome-ru]: https://github.com/user-attachments/assets/e88521c4-1c1e-463b-9f36-dafff3d8cd93
[welcome-en]: https://github.com/user-attachments/assets/14128867-f8d0-4665-8240-fec5951f01a4
[key-ru]: https://github.com/user-attachments/assets/c8740741-256c-4141-ab54-325fb9ffb087
[key-en]: https://github.com/user-attachments/assets/059c4a47-b04e-4ae6-b8b1-83d5113660a8
[reconnect-ru]: https://github.com/user-attachments/assets/83aa54cb-46a1-4649-a425-649c1e08a238
[reconnect-en]: https://github.com/user-attachments/assets/612a589a-b559-4b54-8b81-cbdf296ab897
[settings-ru]: https://github.com/user-attachments/assets/791ee388-2fe2-41af-9c20-17d819150028
[settings-en]: https://github.com/user-attachments/assets/a929b1dc-f6aa-4818-9e0d-913f2b6574af
[agents-ru]: https://github.com/user-attachments/assets/cbaf7219-1d8a-4554-9ea4-54b894e8867b
[agents-en]: https://github.com/user-attachments/assets/f6bb02ed-5163-4566-8ee7-1015a28adc6f
## Prior Art / Duplicates
Searched open issues and PRs — none found covering i18n for the desktop app.
## Questions for Maintainers
1. Is `react-i18next` acceptable, or do you prefer a different library?
2. Preferred location for locale files — `shared/i18n/` or elsewhere?
3. Should the language switcher live in onboarding only, Settings only, or both?
4. Should `en.json` be the canonical source, or would you prefer an extraction step (e.g. `i18next-parser`)?
A working branch is ready — happy to open a PR immediately after direction is confirmed.
Contributor guide
Research direction
Start by reviewing desktop/src/shared/i18n/locales/{en,ru}.json and the desktop onboarding and Settings → Profile entry points described in the issue. Confirm the maintainers' choices for the library, locale location, and switcher placement; done means English remains the fallback, Russian can be selected and persisted, and the stated desktop surfaces have complete translations.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- react
- Domain
- desktop, internationalization, localization
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100