Skip to content

Interface languages

The interface is in Russian and English: the language follows the browser, can be switched in the header and on the sign-in page, and is remembered. Dictionaries are packages/web/src/i18n/{ru,en}.ts; TypeScript and tests make sure they have the same keys and placeholders. The server writes error messages in the language of the request: the interface sends its language in X-TSMC-Lang, the CLI and scripts in Accept-Language (the CLI takes it from TSMC_LANG, LANG or the system language). The server dictionary is packages/server/src/messages.ts; a test checks that every message has a translation. A new language is one more dictionary file and a line in LANGS.

A dark header holds the project switcher, the project’s sections (Overview, Cases, Runs, Reports, Hygiene, Settings), case search (Ctrl+K) and the colour theme: the system’s by default, or light or dark whatever the system says (remembered in the browser; handy for demos and testing). Overview shows a project at a glance: key numbers, the pass rate trend, open runs, hygiene findings, open bugs and failures by suite.

The interface is written in Svelte 5 with Tailwind CSS 4 styles; theme colors are CSS variables in packages/web/src/app.css. Why — in ADR-0002.

Accessibility is checked in e2e: axe-core (WCAG 2.1 AA) goes through every page in the light and dark themes.