From 47c55515bbbe099f50650f1374cd0cf1a4c9fae2 Mon Sep 17 00:00:00 2001 From: Lucas Rayan Date: Sun, 1 Nov 2026 17:17:33 -0300 Subject: [PATCH] fix(i18n): eliminate portuguese text leaks across english routes - Localize skip-to-content accessibility link and breadcrumb navigation - Convert section layouts to dynamic generateMetadata with English titles, descriptions, and structured data - Eliminate mixed language expressions and translate remaining SoC connection pin warnings and descriptions - Translate component registry items, categories, tags, and IDF Component Manager guide - Add strict identical string verification to scripts/check-i18n.mjs with technical allowlist Co-Authored-By: Antigravity --- CHANGELOG.md | 9 + app/[locale]/catalogo/layout.jsx | 39 ++- app/[locale]/comparacao/layout.jsx | 57 +++- app/[locale]/componentes/layout.jsx | 93 +++-- app/[locale]/diagnostico/layout.jsx | 90 +++-- app/[locale]/diagnostico/page.jsx | 2 + app/[locale]/glossario/layout.jsx | 71 ++-- app/[locale]/layout.jsx | 4 +- app/[locale]/not-found.jsx | 65 ++-- app/[locale]/seletor/layout.jsx | 61 +++- app/[locale]/series/[key]/page.jsx | 2 +- app/[locale]/series/layout.jsx | 51 ++- app/[locale]/sobre/page.jsx | 2 +- components/ConnectionsDiagram.jsx | 2 +- components/LanguageSelector.jsx | 6 +- components/PageHero.jsx | 15 +- components/SeriesTabMenu.jsx | 4 +- data/en/conexoes/ESP32-C2.json | 68 ++-- data/en/conexoes/ESP32-C3.json | 190 +++++------ data/en/conexoes/ESP32-C5.json | 298 ++++++++-------- data/en/conexoes/ESP32-C6.json | 236 ++++++------- data/en/conexoes/ESP32-C61.json | 108 +++--- data/en/conexoes/ESP32-H2.json | 166 ++++----- data/en/conexoes/ESP32-P4.json | 376 ++++++++++---------- data/en/conexoes/ESP32-S2.json | 266 +++++++-------- data/en/conexoes/ESP32-S3.json | 262 +++++++------- data/en/conexoes/ESP32-S31.json | 150 ++++---- data/en/conexoes/ESP32.json | 266 +++++++-------- data/en/frameworks.json | 22 +- data/en/series.json | 278 +++++++-------- lib/data/en/componentes.js | 508 ++++++++++++++-------------- lib/data/en/diagnostico.js | 20 +- lib/data/en/topicos.js | 94 ++--- lib/seo.js | 104 +++--- scripts/check-i18n.mjs | 242 +++++++++++-- 35 files changed, 2353 insertions(+), 1874 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8baf16c..65f9903 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,15 @@ Tudo o que muda de relevante no ESPDocs está aqui. O formato segue o - Negociação de idioma na raiz com fallback padrão para `en` para navegadores com idiomas inativos ou genéricos, e redirecionamento 307 de prefixos inativos (`es`, `fr`, `de`, `zh-CN`) para `/en` preservando o mapeamento de slugs. - Metadados de SEO, Open Graph e Twitter Cards localizados, com `hreflang` cruzado entre `pt-BR`, `en` e `x-default`. +### Corrigido + +- Eliminação de vazamentos de texto em português nas rotas em inglês (`en`): + - Tradução completa de descrições e avisos de pinagem em todos os 11 arquivos de conexões SoC (`data/en/conexoes/*.json`). + - Tradução integral de todas as descrições de componentes e exportação do guia rápido do IDF Component Manager (`GUIA_COMPONENT_MANAGER`) em `lib/data/en/componentes.js`. + - Internacionalização do link de acessibilidade "Pular para o conteúdo" (`skipToContent`) no layout raiz e trilhas de navegação (breadcrumbs). + - Conversão de layouts de páginas (`series`, `comparacao`, `catalogo`, `componentes`, `seletor`, `diagnostico`, `glossario`) para `generateMetadata` dinâmico por locale com títulos, descrições e dados estruturados JSON-LD estritamente em inglês. + - Implementação de checagem automatizada estrita em `scripts/check-i18n.mjs` que bloqueia strings idênticas entre `pt` e `en` fora da allowlist de termos técnicos. + ## [1.2.0] - 2026-11-01 ### Adicionado diff --git a/app/[locale]/catalogo/layout.jsx b/app/[locale]/catalogo/layout.jsx index 1e623fd..3349bb2 100644 --- a/app/[locale]/catalogo/layout.jsx +++ b/app/[locale]/catalogo/layout.jsx @@ -1,13 +1,25 @@ import { paginaMeta, jsonLd } from "@/lib/seo"; -export const metadata = paginaMeta({ - titulo: "Catálogo de placas ESP32", - descricao: "Placas de desenvolvimento com ESP32 disponíveis no Brasil, com filtro por série, conector e conversor USB-serial.", - caminho: "/catalogo", - keywords: ["placas ESP32", "DevKit ESP32", "comprar ESP32", "ESP32 DevKitC"], -}); +export async function generateMetadata({ params }) { + const { locale } = await params; + const isEn = locale === "en"; + return paginaMeta({ + titulo: isEn ? "ESP32 Board Catalog" : "Catálogo de placas ESP32", + descricao: isEn + ? "ESP32 development boards and DevKits available in Brazil, with filters by series, connector, and USB-serial converter." + : "Placas de desenvolvimento com ESP32 disponíveis no Brasil, com filtro por série, conector e conversor USB-serial.", + caminho: "/catalogo", + locale, + keywords: isEn + ? ["ESP32 boards", "ESP32 DevKit", "buy ESP32", "ESP32 DevKitC"] + : ["placas ESP32", "DevKit ESP32", "comprar ESP32", "ESP32 DevKitC"], + }); +} + +export default async function Layout({ children, params }) { + const { locale } = await params; + const isEn = locale === "en"; -export default function Layout({ children }) { return ( <>