You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* feat(spec): translatable page component copy — pages.<name>.components.<id> (#6080)
A page's cards, KPI blocks, pickers and forms had no translation key at all,
while the near-identically-shaped dashboards.<name>.widgets.<id> has carried
title/description all along. Page components have stable ids exactly like a
widget does, so the bundle had nowhere to put their copy and .strict()
(correctly) refused whatever key a translator invented.
Declared and resolved together: translatePage overlays the entry onto the
component's properties, so the face is not a declaration waiting for a reader,
and the CLI extractor writes the same keys into the skeleton bundle so a
translator can discover them. One exported key list (PAGE_COMPONENT_COPY_KEYS)
drives schema, resolver and extractor, pinned by a test — two hand-maintained
copies would drift into offering a slot nothing reads.
The key face is measured against ComponentPropsMap rather than mirrored from
the issue's sketch: `help` is NOT declared (no component has it — it would
parse clean and translate nothing, ADR-0078) and `subtitle` is NOT declared
(page:header is its only declarer and is addressed by page name, so a second
route would give one string two spellings).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G3U9PJm1hEJitS9LtZz8TC
* fix(example-showcase): translate newly-declared page component copy for zh-CN
pages.<name>.components made page component copy declared surface, so
check-i18n-coverage's frozen ratchet saw app-showcase grow 451 → 462
untranslated strings. Translate the 11 new keys at birth (contact-form
fields + submit, page-variables project picker); the pages' own
label/title/subtitle predate the ratchet and stay in the frozen baseline.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011M7UwH25Unfi73UHim7ajY
---------
Co-authored-by: Claude <noreply@anthropic.com>
0 commit comments