You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Yes, please — that would be very welcome, and hand-written translations are exactly what this needs. Thanks for offering.
Here is everything you need to add a language.
Where the strings live
src/renderer/i18n.ts holds one flat table per locale. en is the reference with 177 keys. Add a new block next to the existing ones and register it in the messages map at the bottom of the file:
Translate only the values and keep every key exactly as it appears in en.
You do not need all 177 keys to start.translate() falls back to the English string key by key, so a partial translation ships safely and can grow over time. For reference, the existing zh-TW block has 27 keys and ru has 37. Feel free to send whatever subset you are confident about.
The four other places a locale has to be registered
src/shared/types.ts — add the code to the Locale union (around line 463).
src/main/configRepository.ts — add the code to the locales set (around line 29), otherwise a saved config with the new language is rejected.
src/renderer/AppV2.vue — detectedLocale() (around line 78) for system-language auto-detection, and the language <select> in the header (around line 1447). Please use the native name in the picker, matching English / 简体中文 / Русский.
README.md and README.zh_CN.md — the interface-languages line (line 51 in both), plus a CHANGELOG.md entry under ## Unreleased.
One thing to decide
For Portuguese, let me know whether you are translating Brazilian or European Portuguese. The project uses plain codes when there is no regional split (en, ru) and region-qualified codes when there is (zh-CN, zh-TW), so it would be pt-BR or pt-PT if you want to be specific, or just pt if one variant is meant to serve both.
Verifying it locally
npm ci
npm run dev # switch language with the picker in the top-right corner
npm test
npm run typecheck
Separate pull requests for Spanish and Portuguese are easier to review, but one combined PR is fine too. CONTRIBUTING.md covers the rest of the workflow. Ask here if anything in the string table is ambiguous — some keys are terse and the surrounding UI context matters.
Activity
SimonAKing commentedon Sep 14, 2026
Yes, please — that would be very welcome, and hand-written translations are exactly what this needs. Thanks for offering.
Here is everything you need to add a language.
Where the strings live
src/renderer/i18n.tsholds one flat table per locale.enis the reference with 177 keys. Add a new block next to the existing ones and register it in themessagesmap at the bottom of the file:Translate only the values and keep every key exactly as it appears in
en.You do not need all 177 keys to start.
translate()falls back to the English string key by key, so a partial translation ships safely and can grow over time. For reference, the existingzh-TWblock has 27 keys andruhas 37. Feel free to send whatever subset you are confident about.The four other places a locale has to be registered
src/shared/types.ts— add the code to theLocaleunion (around line 463).src/main/configRepository.ts— add the code to thelocalesset (around line 29), otherwise a saved config with the new language is rejected.src/renderer/AppV2.vue—detectedLocale()(around line 78) for system-language auto-detection, and the language<select>in the header (around line 1447). Please use the native name in the picker, matchingEnglish/简体中文/Русский.README.mdandREADME.zh_CN.md— the interface-languages line (line 51 in both), plus aCHANGELOG.mdentry under## Unreleased.One thing to decide
For Portuguese, let me know whether you are translating Brazilian or European Portuguese. The project uses plain codes when there is no regional split (
en,ru) and region-qualified codes when there is (zh-CN,zh-TW), so it would bept-BRorpt-PTif you want to be specific, or justptif one variant is meant to serve both.Verifying it locally
Separate pull requests for Spanish and Portuguese are easier to review, but one combined PR is fine too. CONTRIBUTING.md covers the rest of the workflow. Ask here if anything in the string table is ambiguous — some keys are terse and the surrounding UI context matters.