Translating the interface
English ships; every on-screen string is in src/i18n/messages/<locale>/, so a language is a translation job.
- Copy
src/i18n/messages/en/tosrc/i18n/messages/<code>/and translate the files. - Add
src/i18n/reference/<code>.ts. - Register the code in
src/i18n/config.tsandsrc/i18n/request.ts, list the reference file insrc/i18n/reference/locales.ts, and add the language's row to every other registry in the table in rulebook/i18n.md (chat's prompts and vocabulary, search's analyzer and the rest). The typecheck names any registry still missing it. - Rebuild:
docker compose up -d --build.
Set LOCALE to make it the default. Your library content is never translated.
The website and these guides
The website (its landing page and these guides) is translated separately: see promo/i18n/README.md for the
landing page, and Translating the guides
for the guides.