block / block/buzz

feat(desktop): i18n infrastructure + Russian locale

Open
#5,038 3 comments 0 reactions 0 assignees View on GitHub
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.