Skip to content
Back to skills

Translate Manual

ASecurity

Translate or update the localized Control Center manual (docs/src/content/docs/<locale>/manual) and the agent copy behind each language's llms.txt (docs/src/data/agent-copy) after the English source changes. Use when the docs build or `pnpm i18n check` reports untranslated, stale, missing, orphaned, slug, link or agent copy problems; when an English manual page or en-US agent copy is added, edited, moved or deleted; or when asked to translate the docs.

  • 5 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added October 7, 2026
ai-agentsgitapi

Works with

  • api
  • mcp

Security analysis

A100/100

Scanned October 7, 2026

npx -y skills add SamuelAlev/control-center --skill translate-manual --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Translate Manual?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Translate Manual
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/samuelalev-translate-manual/badge)](https://www.skillsdirectory.com/skills/samuelalev-translate-manual)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: translate-manual
description: Translate or update the localized Control Center manual (docs/src/content/docs/<locale>/manual) and the agent copy behind each language's llms.txt (docs/src/data/agent-copy) after the English source changes. Use when the docs build or `pnpm i18n check` reports untranslated, stale, missing, orphaned, slug, link or agent copy problems; when an English manual page or en-US agent copy is added, edited, moved or deleted; or when asked to translate the docs.
user-invocable: true
---

# Translate the manual

The English manual (`docs/src/content/docs/manual/**`) is the source. Each other site locale (`docs/src/data/locales.ts`) mirrors it file for file at `docs/src/content/docs/<locale>/manual/**`, with the same file names, and serves each page under a translated URL. `docs/scripts/manual-i18n.ts` fails `pnpm build` (and CI) until every locale page exists, has a valid translated `slug`, was translated from the current English revision and links only within its own locale. `astro dev` only warns.

Run every command below from `docs/`.

## A locale page

```mdx
---
title: Créer et configurer un agent
description: Ajoutez un agent à un espace de travail…
slug: fr-FR/manuel/guides/creer-agent
sourceHash: 3b18e512dba79e4c8300dd08aeb37f8e728bac34
---
```

- `slug` is the page's public URL: `<locale>/` and then the translated path. It has as many segments as the English id (`manual/guides/create-agent`) and extends its section page's slug, which is the `index.mdx` in the same folder.
- Segments are lowercase words joined by single hyphens. Latin-script locales (cs, de, en-GB, es, fr, hu, id, it, ms, nb, nl, pl, pt, ro, sv, tr, vi) use ASCII only, with each language's usual URL transliteration (`ä`→`ae` in German, tone marks dropped in Vietnamese, `ı`→`i` in Turkish). Other locales use their own script, NFC-normalized; separate words with hyphens where the language uses spaces. Product names and acronyms stay Latin (`mcp-サーバー`).
- Base each slug on the locale's sidebar label for that page (`docs.sidebar.*` in `docs/src/content/i18n/<locale>.json`), as concise as the English segment.
- A slug is a public URL. Don't rename a published one in passing: the Worker only redirects the pre-translation `/<locale>/manual/…` paths, not old translated ones.
- `sourceHash` is the git blob id of the English page this text was translated from. Write it only with `pnpm i18n stamp`, never by hand, and only after the page really is translated.

## Workflow

1. **See what's wrong.** `pnpm i18n status` gives counts per locale. `pnpm i18n check [--locale fr-FR]` lists every problem with `file:line`.
2. **Fix the structure first.**
   - *New English page:* run `pnpm i18n scaffold`. It copies the page into every locale with English text, `/manual/…` links pointed at existing translated pages, and no `slug`. Give each copy a `slug`, then translate it.
   - *Moved or renamed English page:* `git mv` every locale copy to the same new path. Keep each locale's slug unless the page changed section, and update any links that point at it.
   - *Deleted English page:* delete every locale copy (they show up as orphans), then fix the links the check reports.
   - *New site locale:* once it is in `src/data/locales.ts`, `pnpm i18n scaffold` creates the whole tree. Then give every page a slug and translate it.
3. **Translate.**
   - *Untranslated page* (no `sourceHash`): translate the whole English page.
   - *Stale page:* `pnpm i18n diff <locale file>` shows what changed in English since the page was translated. Make the same changes to the translation and keep the rest.
   - Then run `pnpm i18n stamp <locale files…>`.
4. **Verify.** `pnpm i18n check` must print "The translated manual is complete and current." Then run `pnpm test` and `pnpm build`.

## Agent copy

`docs/src/data/agent-copy/<locale>.json` holds the prose of each language's `llms.txt` and `llms-full.txt`, which AI agents read. `en-US.json` is the source. When a key is added or its English text changes, update that key in every other locale file, in the same key order. Keep every `{placeholder}` and every backtick span byte for byte; the check compares them. `{language}` is filled with the language's native name and region (e.g. `Deutsch (Deutschland)`), so write the sentence so the name needs no inflection.

## Translation rules

- Translate `title`, `description`, prose, headings, table text, alt text and user-visible component props or children. Keep frontmatter keys, `import` lines, component names, non-text props, code blocks, inline code, commands, flags, environment variables, file paths and non-manual URLs exactly as in English.
- UI labels the manual quotes from the app (**Settings → Workspace → Agents**) must match the app's own translation in `lib/l10n/app_<lang>.arb`. Find the key by its English value in `app_en.arb`. The sparse variants (`en_GB`, `es_MX`, `fr_CA`, `pt_PT`, `zh_HK`) fall back to their base language file.
- Keep product terminology consistent with the locale's `docs.sidebar.*` labels and its landing copy (`docs/src/data/landing-*.ts`).
- Product labels that the app and its API show in English stay in English, e.g. the AI-review verdicts **Ship**, **Hold** and **Block** (`approve_on_ship`). Brand and protocol names stay in Latin script.
- Point every link to another manual page at the same locale's translated URL (the target page's `slug`, with a leading `/` and a trailing `/`). Anchors (`#…`) are generated from the target page's translated heading text, so update them when you translate headings.
- Interactive components keep the same usage as in English: same components, same props, same order. Strings a component renders itself belong in `docs/src/content/i18n/<locale>.json` and are read with `Astro.locals.t()`, not hard-coded per page.
- en-GB is a real translation into British English (spelling and usage), not a copy.
- Write the way a native technical writer for that locale would. No translator's notes, and leave nothing in English except the items listed above.

## Working at scale

Many pages across 33 locales is a lot of work: split it by locale. Run at most 3 subagents at a time, on the opus model, and tell them not to spawn their own. Give each one its locales, this skill's path and the files to translate. Each runs `pnpm i18n check --locale <id>` and stamps only what it translated before reporting back. Run `pnpm build` once at the end.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.