feat(i18n): French and German localization (phase 5)
- Add full message catalogs and content for French (fr) and German (de) - Implement ASCII canonical slugs for French and German routes - Add language-specific search endpoints (/api/busca/fr, /api/busca/de) - Configure strict 404 responses for /fr/livro and /de/livro - Localize SEO, OpenGraph (fr_FR, de_DE), Twitter and JSON-LD schemas - Add localized code example comments across 14 examples for fr and de - Enable 'fr' and 'de' in ENABLED_LOCALES with root negotiation and redirect - Extend test suite in check-i18n, smoke-imagem and verifica-vazamentos Co-Authored-By: Antigravity <noreply@google.com>
This commit is contained in:
1 parent
7b673aeb4b
commit
7fce46b9e1
104 files changed
+33369
-686
No files matched your search
@@ -2,21 +2,33 @@ import { paginaMeta, jsonLd } from "@/lib/seo";
|
||||
import { categoriasGlossario as categoriasGlossarioPt } from "@/lib/glossarioData";
|
||||
import { categoriasGlossario as categoriasGlossarioEn } from "@/lib/data/en/glossario.js";
|
||||
import { categoriasGlossario as categoriasGlossarioEs } from "@/lib/data/es/glossario.js";
|
||||
import { categoriasGlossario as categoriasGlossarioFr } from "@/lib/data/fr/glossario.js";
|
||||
import { categoriasGlossario as categoriasGlossarioDe } from "@/lib/data/de/glossario.js";
|
||||
|
||||
export async function generateMetadata({ params }) {
|
||||
const { locale } = await params;
|
||||
const isEn = locale === "en";
|
||||
const isEs = locale === "es";
|
||||
const isFr = locale === "fr";
|
||||
const isDe = locale === "de";
|
||||
return paginaMeta({
|
||||
titulo: isEs
|
||||
? "Glosario técnico de ESP32: Términos y conceptos"
|
||||
: isEn
|
||||
? "ESP32 Technical Glossary: Terms and Concepts"
|
||||
: isFr
|
||||
? "Glossaire technique de l'ESP32 : termes et concepts"
|
||||
: isDe
|
||||
? "Technisches ESP32-Glossar: Begriffe und Konzepte"
|
||||
: "Glossário Técnico do ESP32: Termos e Conceitos",
|
||||
descricao: isEs
|
||||
? "Más de 50 conceptos esenciales de ESP32 explicados: GPIO, Strapping Pins, ULP, PSRAM, FreeRTOS, eFuse, Deep Sleep, OTA, Secure Boot, ECDSA, Matter y Thread."
|
||||
: isEn
|
||||
? "Over 50 essential ESP32 concepts explained: GPIO, Strapping Pins, ULP, PSRAM, FreeRTOS, eFuse, Deep Sleep, OTA, Secure Boot, ECDSA, Matter, and Thread."
|
||||
: isFr
|
||||
? "Plus de 50 concepts essentiels de l'ESP32 expliqués : GPIO, Strapping Pins, ULP, PSRAM, FreeRTOS, eFuse, Deep Sleep, OTA, Secure Boot, ECDSA, Matter et Thread."
|
||||
: isDe
|
||||
? "Über 50 wichtige ESP32-Konzepte verständlich erklärt: GPIO, Strapping-Pins, ULP, PSRAM, FreeRTOS, eFuse, Deep Sleep, OTA, Secure Boot, ECDSA, Matter und Thread."
|
||||
: "Mais de 50 termos e conceitos essenciais do ecossistema ESP32 explicados em português: GPIO, Strapping Pins, ULP, PSRAM, FreeRTOS, eFuse, Deep Sleep, OTA, Secure Boot, ECDSA, Matter e Thread.",
|
||||
caminho: "/glossario",
|
||||
locale,
|
||||
@@ -40,6 +52,26 @@ export async function generateMetadata({ params }) {
|
||||
"microcontroller technical terms",
|
||||
"ESP32 hardware concepts",
|
||||
]
|
||||
: isFr
|
||||
? [
|
||||
"glossaire ESP32",
|
||||
"qu'est-ce que le GPIO",
|
||||
"que sont les strapping pins",
|
||||
"qu'est-ce que l'ESP32 ULP",
|
||||
"qu'est-ce que l'ESP32 PSRAM",
|
||||
"termes techniques microcontrôleur",
|
||||
"concepts matériels ESP32",
|
||||
]
|
||||
: isDe
|
||||
? [
|
||||
"ESP32 Glossar",
|
||||
"was ist GPIO",
|
||||
"was sind Strapping-Pins",
|
||||
"was ist ESP32 ULP",
|
||||
"was ist ESP32 PSRAM",
|
||||
"technische Mikrocontroller-Begriffe",
|
||||
"ESP32 Hardware-Konzepte",
|
||||
]
|
||||
: [
|
||||
"glossário ESP32",
|
||||
"o que é GPIO",
|
||||
@@ -56,7 +88,10 @@ export default async function GlossarioLayout({ children, params }) {
|
||||
const { locale } = await params;
|
||||
const isEn = locale === "en";
|
||||
const isEs = locale === "es";
|
||||
const categorias = isEs ? categoriasGlossarioEs : isEn ? categoriasGlossarioEn : categoriasGlossarioPt;
|
||||
const isFr = locale === "fr";
|
||||
const isDe = locale === "de";
|
||||
const categorias = isEs ? categoriasGlossarioEs : isEn ? categoriasGlossarioEn : isFr ? categoriasGlossarioFr : isDe ? categoriasGlossarioDe : categoriasGlossarioPt;
|
||||
const canonPath = isEs ? "/es/glosario" : isEn ? "/en/glossary" : isFr ? "/fr/glossaire" : isDe ? "/de/glossar" : "/glossario";
|
||||
|
||||
return (
|
||||
<>
|
||||
@@ -71,8 +106,8 @@ export default async function GlossarioLayout({ children, params }) {
|
||||
dangerouslySetInnerHTML={{
|
||||
__html: JSON.stringify(
|
||||
jsonLd.trilha([
|
||||
{ nome: isEs ? "Inicio" : isEn ? "Home" : "Início", caminho: isEs ? "/es" : isEn ? "/en" : "/" },
|
||||
{ nome: isEs ? "Glosario técnico" : isEn ? "Technical Glossary" : "Glossário Técnico", caminho: isEs ? "/es/glosario" : isEn ? "/en/glossary" : "/glossario" },
|
||||
{ nome: isEs ? "Inicio" : isEn ? "Home" : isFr ? "Accueil" : isDe ? "Startseite" : "Início", caminho: isEs ? "/es" : isEn ? "/en" : isFr ? "/fr" : isDe ? "/de" : "/" },
|
||||
{ nome: isEs ? "Glosario técnico" : isEn ? "Technical Glossary" : isFr ? "Glossaire technique" : isDe ? "Technisches Glossar" : "Glossário Técnico", caminho: canonPath },
|
||||
])
|
||||
),
|
||||
}}
|
||||
@@ -82,13 +117,17 @@ export default async function GlossarioLayout({ children, params }) {
|
||||
dangerouslySetInnerHTML={{
|
||||
__html: JSON.stringify(
|
||||
jsonLd.aplicacaoWeb({
|
||||
nome: isEs ? "Glosario técnico de ESP32" : isEn ? "ESP32 Technical Glossary" : "Glossário Técnico do ESP32",
|
||||
nome: isEs ? "Glosario técnico de ESP32" : isEn ? "ESP32 Technical Glossary" : isFr ? "Glossaire technique de l'ESP32" : isDe ? "Technisches ESP32-Glossar" : "Glossário Técnico do ESP32",
|
||||
descricao: isEs
|
||||
? "Enciclopedia de términos técnicos y conceptos de hardware y software del ecosistema ESP32."
|
||||
: isEn
|
||||
? "Encyclopedia of hardware and software technical terms for the ESP32 ecosystem."
|
||||
: isFr
|
||||
? "Encyclopédie des termes techniques et des concepts matériels et logiciels de l'écosystème ESP32."
|
||||
: isDe
|
||||
? "Enzyklopädie technischer Begriffe und Hardware-/Softwarekonzepte für das ESP32-Ökosystem."
|
||||
: "Enciclopédia de termos técnicos e conceitos de hardware e software do ecossistema ESP32.",
|
||||
caminho: isEs ? "/es/glosario" : isEn ? "/en/glossary" : "/glossario",
|
||||
caminho: canonPath,
|
||||
locale,
|
||||
})
|
||||
),
|
||||
|
||||
Reference in new issue
Block a user