feat(i18n): translate landing.json chapter to Brazilian Portuguese

Fill the `pt` mirror fields on the landing route-map chapter so the
bilingual contract stops being silently English-only. 30 fields:
hero eyebrow, title, lede, thread label and text, footer, and the six
route cards (label, title, copy, cta each).

English strings are byte-identical to origin/main. The page at / still
renders English-only because src/pages/index.astro hard-codes
`lang = 'en'`; wiring the bilingual swap into the landing page is
task 12's scope.

Translation choices follow the conventions already established by
src/content/commonSkills/*.json and src/content/full-guide-pt.json:
imperative voice, second-person `você`, sentence-case prose, all-caps
labels, and English kept for product nouns (skill, worktree, brief,
gate, pipeline, recall, prompt, enforcement). The `Hands-on` card title
is rendered as `Prática` to match `full-guide-pt.json`'s `07 prática`
nav entry; the URL `/hands-on/starter/` stays unchanged.

Verified by .agents/scripts/audit-translations.mjs: the chapter
contribution to the offenders list drops from 30 to 0. The remaining
identical fields (92) live in summary.json, agents.json, models.json,
and skills.json, which will land in subsequent commits.
This commit is contained in:
Marcos Paulo
2026-09-06 18:18:10 -03:00
parent 79920c9e6c
commit 1baa3145e8
+29 -23
View File
@@ -1,83 +1,89 @@
{ {
"id": "landing", "id": "landing",
"eyebrow": { "en": "The short route", "pt": "The short route" }, "eyebrow": {
"title": { "en": "Ship the<br><em>system.</em>", "pt": "Ship the<br><em>system.</em>" }, "en": "The short route",
"pt": "A rota curta"
},
"title": {
"en": "Ship the<br><em>system.</em>",
"pt": "Entregue o<br><em>sistema.</em>"
},
"lede": { "lede": {
"en": "Start with the map. Then open the one chapter that matches the decision in front of you: model, agent, worktree, skill, rule, or proof.", "en": "Start with the map. Then open the one chapter that matches the decision in front of you: model, agent, worktree, skill, rule, or proof.",
"pt": "Start with the map. Then open the one chapter that matches the decision in front of you: model, agent, worktree, skill, rule, or proof." "pt": "Comece pelo mapa. Depois abra o capítulo que combina com a decisão à sua frente: modelo, agente, worktree, skill, regra ou prova."
}, },
"threadLabel": { "threadLabel": {
"en": "THE THREAD", "en": "THE THREAD",
"pt": "THE THREAD" "pt": "O FIO"
}, },
"threadText": { "threadText": {
"en": "Frame uncertainty → isolate execution → preserve judgment → verify the change.", "en": "Frame uncertainty → isolate execution → preserve judgment → verify the change.",
"pt": "Frame uncertainty → isolate execution → preserve judgment → verify the change." "pt": "Enquadre a incerteza → isole a execução → preserve o julgamento → verifique a mudança."
}, },
"footer": { "footer": {
"en": "The route map is now the default entry. The full guide remains available whenever you want the whole narrative.", "en": "The route map is now the default entry. The full guide remains available whenever you want the whole narrative.",
"pt": "The route map is now the default entry. The full guide remains available whenever you want the whole narrative." "pt": "O mapa de rotas é agora a entrada padrão. O guia completo segue disponível sempre que você quiser a narrativa inteira."
}, },
"cards": [ "cards": [
{ {
"label": { "en": "01", "pt": "01" }, "label": { "en": "01", "pt": "01" },
"title": { "en": "Models", "pt": "Models" }, "title": { "en": "Models", "pt": "Modelos" },
"copy": { "copy": {
"en": "Capability and effort are separate knobs.", "en": "Capability and effort are separate knobs.",
"pt": "Capability and effort are separate knobs." "pt": "Capacidade e esforço são controles separados."
}, },
"href": "models/", "href": "models/",
"cta": { "en": "Open chapter →", "pt": "Open chapter →" } "cta": { "en": "Open chapter →", "pt": "Abrir capítulo →" }
}, },
{ {
"label": { "en": "02", "pt": "02" }, "label": { "en": "02", "pt": "02" },
"title": { "en": "Agents & trees", "pt": "Agents & trees" }, "title": { "en": "Agents & trees", "pt": "Agentes e árvores" },
"copy": { "copy": {
"en": "Bound roles, handoffs, and worktrees.", "en": "Bound roles, handoffs, and worktrees.",
"pt": "Bound roles, handoffs, and worktrees." "pt": "Limite papéis, handoffs e worktrees."
}, },
"href": "agents/", "href": "agents/",
"cta": { "en": "Open chapter →", "pt": "Open chapter →" } "cta": { "en": "Open chapter →", "pt": "Abrir capítulo →" }
}, },
{ {
"label": { "en": "03", "pt": "03" }, "label": { "en": "03", "pt": "03" },
"title": { "en": "Skills", "pt": "Skills" }, "title": { "en": "Skills", "pt": "Skills" },
"copy": { "copy": {
"en": "Capture repeatable decisions in small packages.", "en": "Capture repeatable decisions in small packages.",
"pt": "Capture repeatable decisions in small packages." "pt": "Capture decisões repetíveis em pacotes pequenos."
}, },
"href": "skills/", "href": "skills/",
"cta": { "en": "Open chapter →", "pt": "Open chapter →" } "cta": { "en": "Open chapter →", "pt": "Abrir capítulo →" }
}, },
{ {
"label": { "en": "04", "pt": "04" }, "label": { "en": "04", "pt": "04" },
"title": { "en": "Rules", "pt": "Rules" }, "title": { "en": "Rules", "pt": "Regras" },
"copy": { "copy": {
"en": "Connect guidance to enforcement.", "en": "Connect guidance to enforcement.",
"pt": "Connect guidance to enforcement." "pt": "Conecte orientação a enforcement."
}, },
"href": "rules/", "href": "rules/",
"cta": { "en": "Open chapter →", "pt": "Open chapter →" } "cta": { "en": "Open chapter →", "pt": "Abrir capítulo →" }
}, },
{ {
"label": { "en": "05", "pt": "05" }, "label": { "en": "05", "pt": "05" },
"title": { "en": "Hands-on", "pt": "Hands-on" }, "title": { "en": "Hands-on", "pt": "Prática" },
"copy": { "copy": {
"en": "Compare a strong prompt with skill-enabled work.", "en": "Compare a strong prompt with skill-enabled work.",
"pt": "Compare a strong prompt with skill-enabled work." "pt": "Compare um prompt forte com trabalho assistido por skills."
}, },
"href": "hands-on/starter/", "href": "hands-on/starter/",
"cta": { "en": "Open lab →", "pt": "Open lab →" } "cta": { "en": "Open lab →", "pt": "Abrir lab →" }
}, },
{ {
"label": { "en": "06", "pt": "06" }, "label": { "en": "06", "pt": "06" },
"title": { "en": "Review desk", "pt": "Review desk" }, "title": { "en": "Review desk", "pt": "Mesa de revisão" },
"copy": { "copy": {
"en": "Browse original packages, references, scripts, and improvements.", "en": "Browse original packages, references, scripts, and improvements.",
"pt": "Browse original packages, references, scripts, and improvements." "pt": "Explore pacotes originais, referências, scripts e melhorias."
}, },
"href": "skills-review/", "href": "skills-review/",
"cta": { "en": "Open desk →", "pt": "Open desk →" } "cta": { "en": "Open desk →", "pt": "Abrir mesa →" }
} }
] ]
} }