Taxonomy
Skills

dtpr-translate

Fill in non-English locale rows on a DTPR element, category, datachain-type name, or pasted English fragment — against the active schema manifest's locale allow-list, never a hardcoded list.

The locale-tier skill. Scope is non-English locale fill-in for one piece of DTPR content at a time — an element's title and description, a category's name and description, a datachain-type's name, or an arbitrary English fragment. Output is a YAML fragment in the canonical array-of-{locale, value} shape, an inline Comprehension check, and the schema:new handoff line.

Translation is machine-drafted. Output is a starting point for human review by a fluent speaker, not a finished translation. Locales where model quality is known to be weaker (Khmer, Tagalog, and any newly-added small-corpus locale) carry an explicit "draft only — fluent-speaker review required" flag.

When to fire

  • The user wants to fill in non-English locales on an element or category whose title/description is English-only or partially translated.
  • The user just drafted a new element with dtpr-element-design and wants locale rows filled before schema:new.
  • The user asks "what locales does DTPR support right now?" and wants a live answer rooted in the active manifest, not a recited list.
  • The user pastes an English fragment (sign caption, disclosure paragraph, signage mock-up) and wants it rendered in the supported locales as a draft.
  • The user wants to refresh translations after the schema's manifest.locales allow-list has changed.

Trigger phrases

"translate this element", "fill in the missing locales", "localize this category description", "draft the Spanish for this element", "what locales does DTPR support right now", "translate to all supported locales".

Workflow

Phase 0 — Identify the target. Classifies the input as an element id, category id, datachain-type, pasted English fragment, or list of adjacent elements.

Phase 1 — Resolve the active locale list. Calls list_schema_versions and get_schema with include: "manifest" and reads manifest.locales. The skill never hardcodes the locale list — a future schema version that adds (e.g.) vi or drops a low-traffic locale flows through with zero skill edits. Surfaces the resolved list to the user before drafting.

Phase 2 — Load the source content. Fetches the existing element/category via get_element or list_categories, or accepts pasted English directly. Identifies which locale rows already exist and which need filling.

Phase 3 — Draft translations. Emits one row per locale in the active allow-list — either filling in the missing rows or replacing all non-English rows on an explicit refresh. Khmer, Tagalog, and any other low-corpus locale carry the fluent-speaker review flag in the output.

Phase 4 — Inline the Comprehension check against the comprehension rubric, with explicit attention to locale-coverage and plain-language items.

Phase 5 — Emit the schema:new handoff. When translations land on an existing element, the handoff is the same pnpm --filter ./api schema:new <type> <YYYY-MM-DD>-beta line; the user edits the resulting beta directory to apply the new locale rows.

Output

A YAML fragment in the canonical { locale, value } array shape (only the requested locales filled), with the fluent-speaker review flag on weaker-corpus locales, an inline Comprehension check block, and the schema:new handoff line.

Non-goals

Does not draft English content — that belongs to dtpr-element-design, dtpr-category-audit, or dtpr-datachain-structure. Does not change which locales the schema supports — adding or removing a locale is a meta-structure change owned by dtpr-datachain-structure. Does not assemble datachains — that is dtpr-describe-system. Does not grade existing translations against the rubric without producing changes — use dtpr-comprehension-audit for grading-only.

Source

plugin/dtpr/skills/dtpr-translate/SKILL.md in the repository.