-
Notifications
You must be signed in to change notification settings - Fork 835
Description
This is a tracking ticket for internationalising the application. @nshcr has driven this topic forward as a community effort, but this ticket is here to keep track of what happened, and ideally, what will happen.
For now there is no timeline for releasing this feature to the public.
Anticipated Features
- a language selector in the settings (initially behind a feature toggle)
- a way to see the state of the translation, and which translations are missing
- a way to deal with new translations and missing translations
- a concept for how to validate the look of translations and allow users to suggest improvements (maybe by giving access to the translation key?)
- Automatically detecting the user's system language and switching accordingly
- Translating the application menu bar
- Uploading the user's locale as telemetry data (which I imagine could be valuable to you)
- More complete type-safe support and missing-translation checks
- Localization of
butcommand output (low priority, requires Rust i18n support) - Frontend styling improvements for localized messages (localized strings can't embed custom components like , which means link styling in some texts needs adjustment)
- A concept of whether the web presence can also be translated, and how.
Fully Supported Languages
Out of scope
This issue isn't about the translation of the documentation. People can typically use machine translations for this, and these only get better.
PRs
Research
Frontend (by @nshcr)
(This is a partial copy of this PR text)
Screen.Recording.2026-01-11.at.21.42.34.mov
There are many i18n libraries available in the Svelte ecosystem. My choice to port vue-i18n is largely personal: it's feature-rich, actively maintained, and developed directly by the Vue core team, which gives me confidence in its long-term maintenance and support.
That said, a downside is that it's not an i18n solution designed specifically for Svelte, so its level of framework-specific integration is relatively low. However, it fits well with GitButler's service-injection-based architecture, reduces coupling to a specific frontend framework, and allows localization to be introduced incrementally.
Below are some other Svelte i18n libraries I've looked into. Their functionality is broadly similar and they're listed here for comparison.
- https://github.com/kaisermann/svelte-i18n
- https://github.com/sveltekit-i18n/lib
- https://github.com/HenryLie/svelte-i18n-lingui
- https://github.com/i18n-pro/svelte
- https://github.com/cibernox/svelte-intl-precompile
- https://github.com/rgglez/svelte-i18n-gettext
- https://github.com/sveltevietnam/sveltevietnam.dev/tree/main/packages/i18n
- https://github.com/codingcommons/typesafe-i18n/tree/main/packages/adapter-svelte
AI Prompts
Review the localization translations for Chinese, Japanese, English, and German file by file and field by field. English is the source text. Chinese is a human-reviewed reference translation. Japanese and German are AI-generated translations.
The translations should be professional and accurate. The tone should match the English as closely as possible, if the original tone is unclear, prefer a casual and relaxed style.
Carefully consider the differences between languages and perform this task step by step and patiently. Do not guess when unsure - look up the relevant code context where the string is used.
If you find any missing translations in any language, fill them in following the same standards.