# Registro de mudanças Tudo o que muda de relevante no ESPDocs está aqui. O formato segue o [Keep a Changelog](https://keepachangelog.com/pt-BR/1.1.0/) e o projeto segue o [Versionamento Semântico](https://semver.org/lang/pt-BR/). ## [Não lançado] ### Adicionado - Internacionalização completa para o idioma inglês (`en`) (Fase 3): - Ativação do inglês em `ENABLED_LOCALES = ["pt", "en"]` com reexibição do seletor de idiomas no cabeçalho. - Tradução técnica integral e paridade estrutural em `messages/en.json` (15 namespaces) e arquivos de dados em `data/en/` (`series.json`, `frameworks.json`, `conexoes/*.json`) e `lib/data/en/` (`glossario.js`, `diagnostico.js`, `componentes.js`, `topicos.js`). - 14 exemplos práticos de código com comentários em inglês em `public/exemplos/en/`. - Roteamento com slugs canônicos em inglês (`/en/catalog`, `/en/compare`, `/en/components`, `/en/diagnostics`, `/en/frameworks`, `/en/glossary`, `/en/selector`, `/en/about`). - Índice de busca dedicado por idioma em `/api/busca/[locale]`, com links direcionando aos slugs do idioma correspondente e caixa de busca localizada. - Exclusão total e estrita de referências ao livro no idioma inglês (menu, rodapé, busca, sitemap e metadados), mantendo `/en/livro` respondendo HTTP 404. - Tabela de catálogo com cabeçalhos traduzidos e mapeamento de valores na interface inglesa. - 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. - Correção de `headline`, propriedades, identificadores e âncoras `@id` (`#article`, `#about`, `#glossary`, `#organization`, `#author`) em todos os blocos de dados estruturados JSON-LD (`TechArticle`, `DefinedTermSet`, `AboutPage`, `WebSite`) nas páginas em inglês. - Correção do `PageHero` em Server Components para suportar a propriedade `isEn` explicitamente, eliminando o texto "Início" no breadcrumb das rotas inglesas. - Adição do script de verificação permanente `scripts/verifica-vazamentos.py` ao `smoke-imagem.sh`, validando todas as 36 rotas públicas em inglês contra vazamentos em texto visível e blocos `ld+json`. ## [1.2.0] - 2026-11-01 ### Adicionado - Infraestrutura de internacionalização com `next-intl` (Fase 1): - Roteamento com prefixo de idioma sob `app/[locale]/`, com 6 locales declarados (`pt`, `en`, `es`, `fr`, `de`, `zh-CN`). - `middleware.js` com negociação de idioma na raiz por cookie `NEXT_LOCALE` e cabeçalho `Accept-Language` (com pesos `q`), redirecionamento 308 de URLs antigas sem prefixo para `/pt/`, e retorno 404 para `/livro` fora do português. - Seletor de idiomas acessível no cabeçalho com atalho para os 6 idiomas, persistência via cookie `NEXT_LOCALE` e mapeamento de rota correspondente. - Regras de tipografia de sistema CJK para `zh-CN` e hifenização/quebra de palavras para `de` e `fr`. - Extração de strings e dados canônicos (Fase 2): - Catálogo de mensagens canônico `messages/pt.json` cobrindo 15 namespaces de páginas e componentes sem alteração de conteúdo. - Conjunto de dados canônicos em `data/pt/` (`series.json`, `frameworks.json`, `conexoes/*.json`) e módulos em `lib/data/pt/` (`glossario.js`, `diagnostico.js`, `componentes.js`, `topicos.js`) com carregadores por locale em `lib/data/index.js`. - Script automatizado de validação `check:i18n` integrado ao `npm run check`, verificando paridade de chaves, ausência de valores vazios e garantia estrita de ausência de referências ao livro fora do português. - Controle de idiomas ativos e proteção contra conteúdo não traduzido: - Configuração centralizada em `i18n/links.js` (`ENABLED_LOCALES`), atualmente restrita a `["pt"]`. - Redirecionamento 307 de qualquer prefixo de idioma inativo para `/pt` preservando o caminho ou mapeamento equivalente. - Negociação de idioma na raiz selecionando unicamente entre os idiomas ativos (com fallback em `pt`). - Seletor de idiomas no cabeçalho oculto enquanto apenas um idioma estiver ativo. - Sitemap, hreflang/alternates e build SSG restritos aos idiomas ativos. ### Alterado - Todas as páginas passam a viver sob `/pt/` (por exemplo `/pt/series`). As URLs antigas, sem prefixo, redirecionam com 308 para o endereço novo, e a raiz `/` redireciona para o idioma negociado. O conteúdo do site em português não mudou. - O teste de subida da imagem na CI virou `scripts/smoke-imagem.sh`: confere as rotas de cada idioma, a negociação de `Accept-Language`, os redirects 308 das URLs antigas, o 404 do livro fora do português e a metadata no `
`, e falha se o servidor registrar erro de render. O `curl` só na raiz deixou passar uma home quebrada. - A metadata (título, `canonical`, Open Graph) sempre sai no `` do HTML inicial, para qualquer cliente, como já era antes do i18n. - A raiz `/` redireciona direto para `/