Language and localization
Switch the interface language and contribute new translations.
The Checkmate UI ships translations for 17 languages. The text is loaded by i18next from JSON files in client/src/locales/.
Supported languages
Arabic (ar), Czech (cs), German (de), English (en), Spanish (es), Finnish (fi), French (fr), Japanese (ja), Portuguese — Brazil (pt-BR), Russian (ru), Thai (th), Turkish (tr), Ukrainian (uk), Vietnamese (vi), Chinese — Simplified (zh-CN), Chinese — Traditional (zh-TW).
Switch languages
A language dropdown (with country flags) sits in the top bar on authenticated pages and on the login/register screens. The selection is persisted in the Redux ui.language state and applied through i18n.changeLanguage, so the choice survives reloads for the current browser.
Contribute a translation
en.json is the source file. Every other locale mirrors the same key structure.
- Copy
client/src/locales/en.jsonto a new file named after the ISO code — e.g.it.jsonfor Italian,pt-PT.jsonfor European Portuguese. - Translate the values only. Keep all keys untouched.
- Start the dev server (
npm run devinclient/), select the language from the selector, and verify strings render correctly in context. - Open a pull request. The maintainers add the new locale to the selector.
Missing keys fall back to English. Keeping en.json as the reference file is important — other locales are only loaded if their keys exist there first.