From 1baa3145e802b3a971380855168e4b77499fbb35 Mon Sep 17 00:00:00 2001 From: Marcos Paulo Date: Sun, 6 Sep 2026 18:18:10 -0300 Subject: [PATCH] feat(i18n): translate landing.json chapter to Brazilian Portuguese MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- src/content/chapters/landing.json | 52 +++++++++++++++++-------------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/src/content/chapters/landing.json b/src/content/chapters/landing.json index a51dd37..24874a2 100644 --- a/src/content/chapters/landing.json +++ b/src/content/chapters/landing.json @@ -1,83 +1,89 @@ { "id": "landing", - "eyebrow": { "en": "The short route", "pt": "The short route" }, - "title": { "en": "Ship the
system.", "pt": "Ship the
system." }, + "eyebrow": { + "en": "The short route", + "pt": "A rota curta" + }, + "title": { + "en": "Ship the
system.", + "pt": "Entregue o
sistema." + }, "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.", - "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": { "en": "THE THREAD", - "pt": "THE THREAD" + "pt": "O FIO" }, "threadText": { "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": { "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": [ { "label": { "en": "01", "pt": "01" }, - "title": { "en": "Models", "pt": "Models" }, + "title": { "en": "Models", "pt": "Modelos" }, "copy": { "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/", - "cta": { "en": "Open chapter →", "pt": "Open chapter →" } + "cta": { "en": "Open chapter →", "pt": "Abrir capítulo →" } }, { "label": { "en": "02", "pt": "02" }, - "title": { "en": "Agents & trees", "pt": "Agents & trees" }, + "title": { "en": "Agents & trees", "pt": "Agentes e árvores" }, "copy": { "en": "Bound roles, handoffs, and worktrees.", - "pt": "Bound roles, handoffs, and worktrees." + "pt": "Limite papéis, handoffs e worktrees." }, "href": "agents/", - "cta": { "en": "Open chapter →", "pt": "Open chapter →" } + "cta": { "en": "Open chapter →", "pt": "Abrir capítulo →" } }, { "label": { "en": "03", "pt": "03" }, "title": { "en": "Skills", "pt": "Skills" }, "copy": { "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/", - "cta": { "en": "Open chapter →", "pt": "Open chapter →" } + "cta": { "en": "Open chapter →", "pt": "Abrir capítulo →" } }, { "label": { "en": "04", "pt": "04" }, - "title": { "en": "Rules", "pt": "Rules" }, + "title": { "en": "Rules", "pt": "Regras" }, "copy": { "en": "Connect guidance to enforcement.", - "pt": "Connect guidance to enforcement." + "pt": "Conecte orientação a enforcement." }, "href": "rules/", - "cta": { "en": "Open chapter →", "pt": "Open chapter →" } + "cta": { "en": "Open chapter →", "pt": "Abrir capítulo →" } }, { "label": { "en": "05", "pt": "05" }, - "title": { "en": "Hands-on", "pt": "Hands-on" }, + "title": { "en": "Hands-on", "pt": "Prática" }, "copy": { "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/", - "cta": { "en": "Open lab →", "pt": "Open lab →" } + "cta": { "en": "Open lab →", "pt": "Abrir lab →" } }, { "label": { "en": "06", "pt": "06" }, - "title": { "en": "Review desk", "pt": "Review desk" }, + "title": { "en": "Review desk", "pt": "Mesa de revisão" }, "copy": { "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/", - "cta": { "en": "Open desk →", "pt": "Open desk →" } + "cta": { "en": "Open desk →", "pt": "Abrir mesa →" } } ] }