Skip to content

feat(i18n): Localization pipeline (UI + backend payloads + CI gates)#750

Open
YannBirba wants to merge 8 commits intoCyberTimon:mainfrom
YannBirba:feat/i18n
Open

feat(i18n): Localization pipeline (UI + backend payloads + CI gates)#750
YannBirba wants to merge 8 commits intoCyberTimon:mainfrom
YannBirba:feat/i18n

Conversation

@YannBirba
Copy link
Copy Markdown
Contributor

@YannBirba YannBirba commented Feb 27, 2026

Summary

This PR introduces a strict i18n foundation across frontend UI and backend event messaging.
This is a proposal answer for #623.

What’s included

  • i18n bootstrap with i18next + react-i18next + i18next-icu
  • Locale namespaces wired in app startup
  • Locales added/expanded for en, fr, es, zh
  • UI migration of major surfaces (App, MainLibrary, key panels/modals)
  • Backend progress/error events migrated to { key, params } payloads
  • Locale setting persisted in app settings (TS + Rust)

Validation scripts

New scripts in package.json:

  • i18n:check:translations
  • i18n:check:backend
  • i18n:check:hardcoded
  • i18n:ci

CI improvement

Build workflow now runs:

npm run i18n:ci

before packaging/build steps, so i18n regressions are caught early.

Current check status on this branch

  • i18n:check:translations ✅ pass (FR/ES/ZH: 100%)
  • i18n:check:backend ✅ pass
  • i18n:check:hardcoded ❌ fail (422 findings)

Notes

Infrastructure and backend contract are in place.
Remaining work is full UI hardcoded-text migration across all flagged components.

…y migration

- add app namespace locale files for en/fr/es/zh\n- wire zh into i18n resources and language options\n- migrate additional App and panel UI strings to translation keys\n- update translation validation script for zh and keep checks green\n- fix frontend boot regressions introduced during i18n refactor
@YannBirba YannBirba changed the title Feat/i18n feat(i18n): establish strict end-to-end localization pipeline (UI + backend payloads + CI gates) Feb 28, 2026
@YannBirba YannBirba changed the title feat(i18n): establish strict end-to-end localization pipeline (UI + backend payloads + CI gates) feat(i18n): Localization pipeline (UI + backend payloads + CI gates) Feb 28, 2026
@YannBirba YannBirba marked this pull request as ready for review February 28, 2026 14:18
@YannBirba
Copy link
Copy Markdown
Contributor Author

YannBirba commented Feb 28, 2026

Hi @CyberTimon,

I worked on this yesterday and wanted to know what you think about what I’ve done.

Once you’re okay with it, I’ll use a set of AI agents to automatically translate the rest of the interface into all three languages.

After that:

Let me know what you think 🙂

@CyberTimon
Copy link
Copy Markdown
Owner

Thanks a ton for this, @YannBirba! This is a huge piece of work and looks really solid.

My only concern is development speed. One of the reasons I’ve put off i18n is the fear of it becoming a bottleneck (if I have to update X different JSON files and satisfy CI gates every time I change a button label, it’ll really slow me down).

How do you see the daily workflow going forward?

Thanks a lot!
Timon

@YannBirba
Copy link
Copy Markdown
Contributor Author

Thanks a ton for this, @YannBirba! This is a huge piece of work and looks really solid.

My only concern is development speed. One of the reasons I’ve put off i18n is the fear of it becoming a bottleneck (if I have to update X different JSON files and satisfy CI gates every time I change a button label, it’ll really slow me down).

How do you see the daily workflow going forward?

Thanks a lot!
Timon

Yeah, that’s a valid concern — you’re probably right, not gonna lie.

I mean, we could shut down the CI and just keep the scripts in package.json, so they’re easy to run only when needed. With this setup, you can still iterate using hardcoded strings and keep your development speed, or just set up the English JSON file. We’ll always be able to translate it later — I don’t really see that as a problem, especially since the app is still very young.

If you want to rephrase a translated string, you’ll indeed be forced to update the JSON files, as you said — and I get it, that can be annoying.

I’ll do some research and see if I can find a better approach.

@pestasoft
Copy link
Copy Markdown

Hi, great work! I would like to help with localization into Czech, how do I proceed?
Thanks, have a nice day!

@YannBirba
Copy link
Copy Markdown
Contributor Author

Hi, great work! I would like to help with localization into Czech, how do I proceed?
Thanks, have a nice day!

Hi, still need to work a bit on that, once merged I guess you can make a PR to add a new language !
Thank you !

@davaded
Copy link
Copy Markdown
Contributor

davaded commented Mar 12, 2026

This looks great. I’d be happy to help with the Chinese i18n side on top of this work.

I can take care of reviewing and improving the zh translations. Happy to contribute either directly on this branch or through follow-up PRs.

@Vectabyte
Copy link
Copy Markdown
Contributor

I'd be up to support german localization if this gets merged.

@YannBirba two thoughts that occur:
If a new string gets added (e.g. a new button somewhere), does the app break, if not every json has a corresponding field with a translation? Does it get replaced by the default e.g. english? What is the impact there?

And regarding changing of strings: i don't see a big issue with this. If we have a notice somewhere in a help menu along the lines of "If you notice an issue -> github link. If you notice a translation error and want to help with localization -> github link to maybe an example of how to adjust it". That way we can fall back on crowd sourced localization, if no maintainer has already caught and updated it or used an ai to do so.

@pestasoft
Copy link
Copy Markdown

Hi, I translated JSON strings into Czech, I don't know how to add them here, so I'm attaching them and asking for them to be included in the localization.
cz.zip

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.

5 participants