Translations
The about site uses i18next JSON at about/public/translations/{lang}/default.json. Docusaurus source translations live separately in docs/i18n/.
About-site keys
Use .agents/skills/translate/SKILL.md. Discover current locales from disk and preserve placeholders, markup, technical terms, and brand names. For larger requests, children can generate independent maps, but one parent applies every locale write serially; the updater has no writer lock.
Use a unique task-owned map path. Preview with node scripts/update-translations.js --key <key> --map <map.json> --include-en --dry, then apply with the same arguments and --write. Verify coverage/values after writing and remove only the temporary maps owned by this task.
Use --delete for requested removals. Inspect --audit --dry findings before an authorized --audit --write; dynamic translation keys require manual source review. Copy English into every locale only for a technical term, brand, or placeholder.
Docusaurus pages
scripts/translate-docs.py is a bulk writer for all pages/locales and has no per-file filter; do not use it for a narrow translation edit. scripts/check-docs-translations.py is the read-only verifier and supports --locales and --paths.
Keep code fences, links, inline code, contract addresses, headings, tables, and admonitions aligned with the English source. Resolve verifier errors; brand-name frontmatter-untranslated warnings can be expected. Follow docs/AGENTS.md and build through the root when changing docs theme or i18n behavior so static output and Pagefind stay aligned.
Optional semantic review
For selected i18next keys, use scripts/jev/translation-README.md. For documentation pages, run node scripts/jev/docs-translations.mjs --locales it,de --paths browser-p2p.md first. This requires an explicit locale/page selection, runs the structural verifier, and reports semantic review as unverified until live inference is enabled. Add --live only with the task's provider authorization and budget; the shared private machine configuration supplies credentials and a pinned model. Environment variables and --model can override that setup. The command never edits translations.
The page adapter preserves whole-page context and limits each page to 24 KB and each run to 30 pairs. For larger pages, prepare explicitly aligned source/translation paragraph pairs for translations.mjs --pairs; do not automatically pair paragraphs by index. Semantic results are advisory: inspect reported issues and uncertainty, and retain deterministic code/link/address checks.