Complete implementation of Spanish (es-419) language support: - Canonical catalogs and data: messages/es.json, data/es/**, lib/data/es/**, public/exemplos/es/** - Canonical slugs: /es/series, /es/catalogo, /es/comparacion, /es/componentes, /es/diagnostico, /es/frameworks, /es/glosario, /es/selector, /es/acerca - Dedicated search index at /api/busca/es with Spanish accent normalization - Strict exclusion of book references in Spanish routes and catalogs - Language selector and root negotiation with es active (ENABLED_LOCALES = ['pt', 'en', 'es']) - Extended verification suite: check-i18n, smoke-imagem and verifica-vazamentos Co-Authored-By: Antigravity <noreply@google.com>
87 lines
2.3 KiB
React
87 lines
2.3 KiB
React
import { paginaMeta, jsonLd } from "@/lib/seo";
|
|
|
|
export async function generateMetadata({ params }) {
|
|
const { locale } = await params;
|
|
const isEn = locale === "en";
|
|
const isEs = locale === "es";
|
|
return {
|
|
...paginaMeta({
|
|
titulo: isEs
|
|
? "Frameworks y SDKs para ESP32: Guía completa y comparativa"
|
|
: isEn
|
|
? "ESP32 Frameworks & SDKs: Complete Guide and Comparison"
|
|
: "Frameworks & SDKs para ESP32: Guia Completo e Comparativo",
|
|
descricao: isEs
|
|
? "Guía completa de desarrollo: ESP-IDF, ESP-RainMaker, ESP-Matter, Rust, ESP-ADF, ESP-SR, ESP-WHO, Arduino y MicroPython con ejemplos de código."
|
|
: isEn
|
|
? "Complete development guide: ESP-IDF, ESP-RainMaker, ESP-Matter, Rust, ESP-ADF, ESP-SR, ESP-WHO, Arduino, and MicroPython with code examples."
|
|
: "Guia completo de desenvolvimento: ESP-IDF, ESP-RainMaker, ESP-Matter, Rust, ESP-ADF, ESP-SR, ESP-WHO, Arduino e MicroPython com exemplos de código.",
|
|
caminho: "/frameworks",
|
|
locale,
|
|
keywords: isEs
|
|
? [
|
|
"ESP-IDF",
|
|
"ESP-RainMaker",
|
|
"ESP-Matter",
|
|
"Rust ESP32",
|
|
"ESP-SR",
|
|
"ESP-ADF",
|
|
"ESP-IoT-Solution",
|
|
"Arduino ESP32",
|
|
"MicroPython ESP32",
|
|
"frameworks ESP32",
|
|
"programar ESP32",
|
|
]
|
|
: isEn
|
|
? [
|
|
"ESP-IDF",
|
|
"ESP-RainMaker",
|
|
"ESP-Matter",
|
|
"Rust ESP32",
|
|
"ESP-SR",
|
|
"ESP-ADF",
|
|
"ESP-IoT-Solution",
|
|
"Arduino ESP32",
|
|
"MicroPython ESP32",
|
|
"frameworks ESP32",
|
|
"program ESP32",
|
|
]
|
|
: [
|
|
"ESP-IDF",
|
|
"ESP-RainMaker",
|
|
"ESP-Matter",
|
|
"Rust ESP32",
|
|
"ESP-SR",
|
|
"ESP-ADF",
|
|
"ESP-IoT-Solution",
|
|
"Arduino ESP32",
|
|
"MicroPython ESP32",
|
|
"frameworks ESP32",
|
|
"programar ESP32",
|
|
],
|
|
}),
|
|
};
|
|
}
|
|
|
|
export default async function FrameworksLayout({ children, params }) {
|
|
const { locale } = await params;
|
|
const isEn = locale === "en";
|
|
const isEs = locale === "es";
|
|
return (
|
|
<>
|
|
<script
|
|
type="application/ld+json"
|
|
dangerouslySetInnerHTML={{
|
|
__html: JSON.stringify(
|
|
jsonLd.trilha([
|
|
{ nome: isEs ? "Inicio" : isEn ? "Home" : "Início", caminho: isEs ? "/es" : isEn ? "/en" : "/" },
|
|
{ nome: "Frameworks", caminho: isEs ? "/es/frameworks" : isEn ? "/en/frameworks" : "/frameworks" },
|
|
])
|
|
),
|
|
}}
|
|
/>
|
|
{children}
|
|
</>
|
|
);
|
|
}
|