Repository navigation
Description
Problem
Buzz currently ships with UI strings hardcoded in English across all three frontend clients (desktop/ — Tauri + React, web/, and mobile/ — Flutter). There is no i18n/localization infrastructure in any of them:
- No
i18next,react-intl,formatjs,lingui, ornext-intlinpackage.json(root ordesktop/) - No Flutter
intlpackage wired up inmobile/ - No
locales/ori18n/directories in any client - Text appears to be embedded directly in JSX/TSX components (desktop/web) and widget code (mobile)
This makes the app inaccessible to non-English-speaking users/teams, even though Buzz is meant to be a shared workspace for humans and agents across teams. A community member requested help changing the interface to Spanish, which surfaced that there's currently no path to do this at all — not even a partial one.
Proposal
Before writing any translation strings, agree on an approach for adding i18n infrastructure, scoped to one client first:
- Pick a starting client — desktop (Tauri + React) is the primary UI most users interact with day-to-day, so it seems like the natural first target. Web and mobile would follow the same pattern once the approach is validated.
- Pick a library — for the React/Tauri desktop client,
react-i18next(orformatjs/react-intl) are the common choices. Happy to write up a short comparison if useful. - Extract strings incrementally — sweep
desktop/src/features/anddesktop/src/shared/to move hardcoded strings into a translation-key system, defaulting toenwith no behavior change. - Add a language selector in settings, defaulting to system locale with an override.
- Add a first non-English locale (e.g.
es) as the initial proof that the pipeline works end-to-end.
This is a fairly invasive change (touches most UI files) so I wanted to check in before starting any implementation, per CONTRIBUTING.md's guidance to open an issue first for substantial work.
Questions for maintainers
- Is i18n already on the roadmap / being tracked elsewhere?
- Any preference on library or scope (e.g. desktop-only first vs. all three clients in parallel)?
- Would maintainers want string extraction done as one large PR or incrementally per-feature?
Happy to pick this up (starting with a proposal/RFC-style PR for the desktop client) once there's agreement on direction.
Activity
paulovitin commentedon Jul 26, 2026
Hi @CamiloNietoOficial!
Thanks for bringing this up! I'd love to help bring Portuguese support to the platform as well. Beyond translating the strings, I'm available to help with the necessary code implementation and testing across the clients once the maintainers align on the i18n architecture.
Looking forward to seeing this move forward!
stimiorasta commentedon Jul 28, 2026
Buzz looks really great. I agree that i18n is needed so that employees in my organization (France) can use it.
Do you plan to add i18n support? I’d be happy to help with the translation.
Thank you so much for your work!
Aladincz commentedon Jul 31, 2026
Hi,
I would like to help with Czech localization but I am not real coder so I can translate when I get data then test how it fit in interface if someone will do implementation part.
I would like to bring to my community so it can start playing with it.
HyperfocuSam commentedon Jul 31, 2026
We hit the same wall this week (Hong Kong team, Traditional Chinese needed) and have a working desktop implementation on a fork, offered here as a starting point or reference:
Branch: https://github.com/HyperfocuSam/buzz/tree/feat/desktop-i18n-language-setting (single commit, based on current main)
What it contains:
react-i18nextwired intodesktop/withenas default + fallback, pluszh-Hant/zh-Hanslocale scaffoldslocales/STRINGS-MANIFEST.md— every key with its English source and one-line UI context, as a handoff for human translatorstsc --noEmitclean, desktop test suite 3872 passed / 0 failed (includes a fallback test), biome cleanTwo design choices worth debating here:
returnEmptyString: false). We deliberately ship the zh files with all 153 keys and empty values — machine-translated UI strings read poorly to native speakers, so translation quality stays a human decision per locale rather than a build artifact. A Spanishes.jsonwould slot in the same way.Happy to adapt the branch to whatever direction maintainers pick (different framework, different file layout, mobile/web strategy) and split it into reviewable PRs — treat the branch as evidence the incremental path works rather than a fait accompli.
senekamarika42 commentedon Aug 1, 2026
Hi, Korean user here. I’m planning to use Buzz daily as my agent workspace, and the lack of Korean localization would be a real adoption barrier for me.
I’d be happy to contribute the initial Korean (
ko) translation and help review future localization updates for terminology consistency.Before writing any code, I read through this issue, @HyperfocuSam’s
feat/desktop-i18n-language-settingbranch, and PR #3285. I’d prefer to coordinate with the existing work rather than create another separate implementation.Could the maintainers clarify a few points?
en+kovertical slice be a useful first PR? My thought is to add the localization runtime, translate one small settings component, and include tests and screenshots. Keeping it to roughly ten files would make the architecture easier to review while still testing fallback behavior, Korean text rendering, and font fallback end to end.I’m happy to follow whichever direction the maintainers prefer. If the existing react-i18next branch becomes the base, I’d be glad to test it in Korean and contribute the initial
kocatalog.kk-ben commentedon Aug 1, 2026
Thanks for scoping this out, @CamiloNietoOficial — and thanks to
@HyperfocuSam for the concrete
react-i18nextbranch, that's a strongsignal the approach works end-to-end (tsc clean, full test suite green,
biome clean).
To help unblock a maintainer decision, I did an independent measurement of
the current hardcoded-string scope across three high-traffic desktop
surfaces (
settings/,sidebar/,messages/underdesktop/src/features/):93 / 45 / 47 unique JSX text nodes + label/placeholder/title/aria-label
strings respectively (185 total across 89 files, ~17% of desktop's 520
.tsxfiles —.tsxonly; roughly 1,180 files including.ts). That'sin the same order of magnitude as the 153 keys
@HyperfocuSam extracted from the equivalent four surfaces, which gives some
independent confirmation the incremental, surface-by-surface extraction
plan is the right shape (a single big-bang PR across all ~520 files would
not be reviewable).
A few things that would help move this forward:
from our reading, @HyperfocuSam's
react-i18nextbranch looks like thestrongest candidate base. (PR feat(desktop): Raft theme + zh/en i18n #3285 also touches i18n but bundles it
with an unrelated theme change, which per CONTRIBUTING.md's "drive-by
changes" guidance would need to be split before it could be reviewed as
an i18n PR anyway.)
surface goes first — settings (largest string count, self-contained) vs.
sidebar (highest visual exposure)?
ja(Japanese) localeonce the runtime/extraction pattern is settled, alongside the
esoriginally proposed — happy to help validate CJK text rendering and
font fallback as part of that, similar to what @yoruhenry offered for
Korean.
Happy to help with the surface-by-surface extraction work once there's a
maintainer nod on which base branch/PR to build from — want to avoid
adding a fourth parallel implementation to the pile.
VScommonBot commentedon Aug 2, 2026
+1 for this. We are piloting Buzz as a human+agent workspace for a Korean team (VentureSquare, Seoul), and the lack of localization is the first thing non-technical teammates notice — agent conversations work fine in Korean, but all app chrome (menus, empty states, onboarding, membership prompts) is English-only.
Once the i18n infrastructure lands, we would love to see Korean (ko) among the early locales, and we would be happy to contribute or review the Korean translation strings for the desktop client.
One note from our onboarding experience: the strings that matter most for non-English users are the first-run surfaces (relay/community switch dialog, "Not a member yet" invitation screen, and key backup prompts), since those are exactly the screens people hit before they can ask an agent for help.
kk-ben commentedon Aug 2, 2026
Following up on point 3 in our comment above — the
jalocale we mentioned is now ready. Built on top of @HyperfocuSam'sfeat/desktop-i18n-language-settingbranch, we've added a completeja.json(153 keys, matching the extracted key set 1:1) plus the correspondingAPP_LANGUAGESregistration ini18n.ts, following the exact same pattern used for the existingzh-Hant/zh-Hansentries. Key parity and i18next placeholder preservation ({{...}}) againsten.jsonhave been verified programmatically — no missing/extra keys, no placeholder mismatches. The branch is up at https://github.com/kk-ben/buzz/tree/feat/desktop-i18n-ja-locale (commit 394168d), DCO-signed, touching only those two files to keep it minimal and easy to review. We're holding off on opening a PR againstblock/buzzuntil a maintainer confirms the base branch/approach per the open questions above, but it's ready to go the moment that's settled.ianzencom commentedon Aug 5, 2026
Interested in contributing Spanish (es) once the i18n string-key system lands. Happy to own the es locale catalog and follow whatever library/base the maintainers choose.
HyperfocuSam commentedon Aug 6, 2026
Heads-up for anyone who has built against my branch — the key set moved, so a re-sync is needed.
I've rebased onto current
main(it was 145 commits behind) and opened the implementation as a PR: #5087. Branch:feat/desktop-i18n-language-setting-rebased. The originalfeat/desktop-i18n-language-settingis untouched, so nothing you already wrote is lost.What changed in the key set, 153 → 140:
composer.toolbar.attachImage→composer.toolbar.attachFile, value now "Attach file" (upstream renamed it in fix(desktop): rename generic attachment action from 'Attach image' to 'Attach file' (#2381) #4304)settings.nav.sections.channelTemplatesvalue "Templates" → "Channel templates"agents.restartRequiredremoved — upstream deleted that badgesidebar.sections.*andcomposer.placeholder.*:AppSidebar.tsxandMessageComposer.tsxare at the repo's 1000-line file-size ratchet, so extraction can't add lines to them yet. Those strings fall back to English until those files are split.@kk-ben — your
ja.jsonneeds those three renames and the 12 removals to keep 1:1 parity. Sorry for the churn.Also worth reading: @setar has filed #5038 with a wider extraction (~560 keys, incl. onboarding) plus a Russian locale. I've suggested there that we land one runtime and stack the surface extractions and locale catalogues on top as separate small PRs, rather than have maintainers pick between two designs.
ailtoneleveia commentedon Sep 12, 2026
We are evaluating Buzz for adoption by Brazilian desktop and mobile users. Conversations already work well in Portuguese, but the English-only app chrome is a clear adoption barrier for non-technical teams.
I would be happy to own and maintain the Brazilian Portuguese (
pt-BR) catalogue, provide native-language terminology review, and test onboarding, channels, threads, mentions, files, settings, and accessibility labels end to end.I have reviewed the overlapping work in #5087, #5152, and #4250. I do not want to add a fourth competing i18n implementation. Could the maintainers clarify which infrastructure PR should become the base, and whether new desktop/web localization work is expected to move to
block/buzz-app?I opened a coordinated
pt-BRproposal for the new app in block/buzz-app#32. Once the preferred architecture is confirmed, I am ready to submit a small, signed-off, test-covered translation PR rather than a large cross-client bundle.Gwani-28 commentedon Sep 29, 2026
+1 from a Korean team. For what it's worth, we are running a Korean UI on a local build today and can offer a reviewed Korean (
ko) catalogue once the i18n infrastructure lands:"I agree to the Buzz {terms}{" and "}{privacy}",Show {n} more conversations, English plural suffixes passed as{1}), which Korean word order can't follow piece by piece. ICU-style messages with named placeholders and plural support would avoid most of that.Happy to contribute the
kocatalogue and review whatever message format you choose.