Translation Maintenance Workflow
For general documentation commands (build, deploy, screenshots, README generation), see Documentation Tools.
Overview
The documentation uses Docusaurus i18n with English as the default locale. Source documentation lives in docs/; translations are written under i18n/{locale}/. Supported locales: en-GB (default), fr, de, es, pt-BR, hi-Latn, zh-Hans.
AI translation for the app UI, Docusaurus markdown/JSON, and SVG assets is handled by ai-i18n-tools from the repository root, configured in ai-i18n-tools.config.json (not inside documentation/). Set OPENROUTER_API_KEY when running translate commands.
When English documentation changes
- Edit source in
documentation/docs/(English only). - Docusaurus UI strings (theme labels, navbar, etc.): if needed, run
pnpm write-translationsindocumentation/soi18n/en/*.jsonpicks up new keys. - Heading IDs:
pnpm write-heading-ids(fromdocumentation/). - Translate from the repo root (or use the shortcuts below from
documentation/):pnpm i18n:extract— refreshsrc/locales/strings.jsonfromt('…')in the Next.js app.pnpm i18n:translate:docs— translate markdown/JSON intodocumentation/i18n/per config.pnpm i18n:translate:svg— translate SVGs underdocumentation/static/imgas configured.- Or run everything:
pnpm i18n:translate.
- Build:
cd documentation && pnpm build(all locales).
From inside documentation/, the same flows are wired as pnpm translate → root i18n:translate, plus pnpm translate:docs, translate:ui, translate:svg, translate:status, i18n:extract, i18n:sync.
Glossary
- UI terminology for documentation is driven by
glossary.uiGlossaryinai-i18n-tools.config.json, pointing atsrc/locales/strings.json(the catalog produced bypnpm i18n:extract). - Overrides live in
documentation/glossary-user.csv(glossary.userGlossaryin config). See the ai-i18n-tools glossary docs for column format. - Generate a CSV template:
pnpm i18n:glossary-generate(root).
Cache
Translation cache for ai-i18n-tools is under .translation-cache/ at the repo root (cacheDir in ai-i18n-tools.config.json). It is gitignored. Use pnpm i18n:status and the CLI’s --force / cache flags per ai-i18n-tools documentation when you need a full refresh.
Heading IDs and anchors
Use explicit IDs so links stay stable across languages:
## This is a heading \{#this-is-a-heading}
cd documentation
pnpm write-heading-ids
Ignore lists
Use .translate-ignore at the repo root (same idea as .gitignore) for paths the doc translator should skip, if you add one for your workflow.
Docusaurus theme JSON
pnpm write-translations extracts Docusaurus UI strings into documentation/i18n/en/. The ai-i18n-tools translate-docs step (with markdownOutput.style: "docusaurus") fills translated JSON under each locale alongside markdown, per ai-i18n-tools.config.json.
Troubleshooting
OPENROUTER_API_KEYnot set — export it or add to.env.localat the repo root.- Model / quality — adjust
openrouter.translationModelsand related options inai-i18n-tools.config.json. - Glossary — edit
documentation/glossary-user.csvor regenerate UI strings and re-run extract + translate.
Adding a new language
- Add the locale to Docusaurus
i18n.localesandlocaleConfigsindocumentation/docusaurus.config.ts. - Add the same locale to
targetLocalesinai-i18n-tools.config.json(repo root). - Run
pnpm i18n:generate-ui-languagesat the root, thenpnpm i18n:extract/ translate commands as needed.