fix(i18n): localize json-ld metadata and eliminate breadcrumb leaks
CI / Lint e auditorias (push) Successful in 45s
CI / Trivy (dependências e segredos) (push) Successful in 11s
CI / Imagem Docker (linux/arm64) (push) Successful in 2m23s

- Pass currentLocale to jsonLd.serie and jsonLd.framework to ensure English headline, name, and properties
- Localize JSON-LD @id anchors to #article, #about, #glossary, #organization, and #author for English routes
- Pass isEn prop to PageHero across all internal pages to prevent breadcrumbs from defaulting to Portuguese
- Add scripts/verifica-vazamentos.py to smoke-imagem.sh to permanently test all 36 English URLs (visible text and ld+json)

Co-Authored-By: Antigravity <noreply@google.com>
This commit is contained in:
Lucas RayanandAntigravity committed 2026-11-01 17:42:36 -03:00
1 parent 47c55515bb
commit 0d5f8f9c5f
17 files changed
+151 -21

No files matched your search

+1
View File
@@ -167,6 +167,7 @@ export default function PlacasPage() {
const hero = (
<PageHero
isEn={isEn}
trail={[{ label: isEn ? "Board Catalog" : "Catálogo de placas" }]}
icon={ShoppingCart}
label={isEn ? "Real DevKits and modules" : "DevKits e módulos reais"}
+1
View File
@@ -235,6 +235,7 @@ export default function Comparacao() {
<main id="conteudo">
<PageHero
isEn={isEn}
trail={[{ label: isEn ? "Comparator" : "Comparador" }]}
icon={Scale}
label={isEn ? "Up to four series side by side" : "Até quatro séries lado a lado"}
+1
View File
@@ -144,6 +144,7 @@ export default function ComponentRegistryPage() {
<main id="conteudo">
<PageHero
isEn={isEn}
trail={[{ label: isEn ? "Component Registry" : "Component Registry" }]}
icon={Box}
label="ESP-IDF Component Manager"
+1
View File
@@ -212,6 +212,7 @@ export default function DiagnosticoPage() {
<main id="conteudo">
<PageHero
isEn={isEn}
trail={[{ label: isEn ? "Diagnostics" : "Diagnóstico" }]}
icon={AlertTriangle}
label={isEn ? "Firmware Debugging" : "Depuração de firmware"}
+2 -1
View File
@@ -30,7 +30,7 @@ export default async function FrameworkDetail({ params }) {
{/* Ficha técnica do framework e trilha de navegação para o Google */}
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd.framework(key, framework)) }}
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd.framework(key, framework, currentLocale)) }}
/>
<script
type="application/ld+json"
@@ -47,6 +47,7 @@ export default async function FrameworkDetail({ params }) {
<main id="conteudo">
<PageHero
isEn={isEn}
trail={[{ label: isEn ? "Frameworks & SDKs" : "Frameworks e SDKs", href: getLocalizedHref("/frameworks", currentLocale) }, { label: framework.nome }]}
icon={Layers}
label={framework.tipo}
+2 -2
View File
@@ -54,8 +54,8 @@ export default async function FrameworksLayout({ children, params }) {
dangerouslySetInnerHTML={{
__html: JSON.stringify(
jsonLd.trilha([
{ nome: isEn ? "Home" : "Início", caminho: isEn ? "/en" : "/pt" },
{ nome: "Frameworks", caminho: isEn ? "/en/frameworks" : "/pt/frameworks" },
{ nome: isEn ? "Home" : "Início", caminho: isEn ? "/en" : "/" },
{ nome: "Frameworks", caminho: isEn ? "/en/frameworks" : "/frameworks" },
])
),
}}
+1
View File
@@ -89,6 +89,7 @@ export default async function Frameworks({ params }) {
<main id="conteudo">
<PageHero
isEn={isEn}
trail={[{ label: isEn ? "Frameworks & SDKs" : "Frameworks e SDKs" }]}
icon={Layers}
label={isEn ? `${frameworks.length} frameworks and SDKs` : `${frameworks.length} frameworks e SDKs`}
+1
View File
@@ -108,6 +108,7 @@ export default function GlossarioPage() {
<main id="conteudo">
<PageHero
isEn={isEn}
trail={[{ label: isEn ? "Glossary" : "Glossário" }]}
icon={BookOpen}
label={isEn ? `${todosOsTermos.length} terms explained` : `${todosOsTermos.length} termos explicados`}
+1
View File
@@ -1369,6 +1369,7 @@ export default function Seletor() {
<main id="conteudo">
<PageHero
isEn={isEn}
trail={isEn ? [{ label: "Chip selector" }] : [{ label: "Seletor de chip" }]}
icon={Sparkles}
label={isEn ? "Smart selector" : "Seletor inteligente"}
+2 -1
View File
@@ -378,7 +378,7 @@ export default async function SerieDetail({ params }) {
<div className="site-canvas min-h-screen">
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd.serie(key, serie)) }}
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd.serie(key, serie, currentLocale)) }}
/>
<script
type="application/ld+json"
@@ -395,6 +395,7 @@ export default async function SerieDetail({ params }) {
<main id="conteudo">
<PageHero
isEn={isEn}
trail={[{ label: isEn ? "Series" : "Séries", href: getLocalizedHref("/series", currentLocale) }, { label: key }]}
icon={Cpu}
label={serie.arquitetura}
+1
View File
@@ -71,6 +71,7 @@ export default function Series() {
<main id="conteudo">
<PageHero
isEn={isEn}
trail={[{ label: isEn ? "Series" : "Séries" }]}
icon={Compass}
label={isEn ? `${todas.length} Espressif families` : `${todas.length} famílias da Espressif`}
+1
View File
@@ -67,6 +67,7 @@ export default async function Sobre({ params }) {
<main id="conteudo">
<PageHero
isEn={!isPt}
trail={[{ label: isPt ? "Sobre" : "About" }]}
icon={Info}
label={isPt ? "Projeto independente" : "Independent project"}