feat(i18n): Spanish localization (phase 4)
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>
This commit is contained in:
1 parent
0940814522
commit
660b28c09d
72 files changed
+17848
-947
No files matched your search
@@ -3,15 +3,20 @@ 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: isEn ? "Compare ESP32 Series: Side-by-Side Table" : "Comparar séries ESP32",
|
||||
titulo: isEn ? "Compare ESP32 Series: Side-by-Side Table" : isEs ? "Comparar series ESP32: tabla comparativa" : "Comparar séries ESP32",
|
||||
descricao: isEn
|
||||
? "Compare up to four ESP32 series side by side: processor, Wi-Fi, Bluetooth, memory, GPIO, peripherals, and hardware security, with official datasheet data."
|
||||
: isEs
|
||||
? "Compare hasta cuatro series de ESP32 frente a frente: procesador, Wi-Fi, Bluetooth, memoria, GPIO, periféricos y seguridad en hardware, con datos de hojas de datos oficiales."
|
||||
: "Compare até quatro séries de ESP32 lado a lado: processador, Wi-Fi, Bluetooth, memória, GPIO, periféricos e segurança em hardware, com os dados dos datasheets oficiais.",
|
||||
caminho: "/comparacao",
|
||||
locale,
|
||||
keywords: isEn
|
||||
? ["compare ESP32", "ESP32 vs ESP32-S3", "ESP32 comparison table", "which ESP32 is best"]
|
||||
: isEs
|
||||
? ["comparar ESP32", "ESP32 vs ESP32-S3", "tabla comparativa ESP32", "cuál ESP32 es mejor"]
|
||||
: ["comparar ESP32", "ESP32 vs ESP32-S3", "tabela comparativa ESP32", "qual ESP32 é melhor"],
|
||||
});
|
||||
}
|
||||
@@ -46,10 +51,27 @@ const faqsEn = [
|
||||
},
|
||||
];
|
||||
|
||||
const faqsEs = [
|
||||
{
|
||||
pergunta: "¿Cómo comparar microcontroladores ESP32 frente a frente?",
|
||||
resposta: "El comparador de ESPDocs le permite seleccionar hasta cuatro series simultáneamente para cotejar arquitectura, frecuencia de reloj, memoria SRAM/PSRAM, estándares de radio (Wi-Fi 4/6, Bluetooth 5/6, 802.15.4), interfaces de periféricos y bloques de seguridad en hardware.",
|
||||
},
|
||||
{
|
||||
pergunta: "¿Cuál es la diferencia entre el ESP32 clásico y el ESP32-S3?",
|
||||
resposta: "El ESP32 clásico utiliza núcleos Xtensa LX6 y Bluetooth clásico/LE. El ESP32-S3 incorpora núcleos Xtensa LX7 con instrucciones vectoriales para inteligencia artificial (TinyML), USB nativo OTG, más GPIOs (45 frente a 36) y Bluetooth 5.0 LE.",
|
||||
},
|
||||
{
|
||||
pergunta: "¿Cuál es la diferencia entre ESP32-C3 y ESP32-C6?",
|
||||
resposta: "El ESP32-C3 es un microcontrolador RISC-V con Wi-Fi 4 y Bluetooth 5 LE. El ESP32-C6 evoluciona a Wi-Fi 6 (802.11ax), Bluetooth 5.4 LE, radio IEEE 802.15.4 para Zigbee 3.0 y Thread 1.3, además de un coprocesador de consumo ultrabajo.",
|
||||
},
|
||||
];
|
||||
|
||||
export default async function Layout({ children, params }) {
|
||||
const { locale } = await params;
|
||||
const isEn = locale === "en";
|
||||
const faqs = isEn ? faqsEn : faqsPt;
|
||||
const isEs = locale === "es";
|
||||
const faqs = isEn ? faqsEn : isEs ? faqsEs : faqsPt;
|
||||
const canonPath = isEn ? "/en/compare" : isEs ? "/es/comparacion" : "/comparacao";
|
||||
|
||||
return (
|
||||
<>
|
||||
@@ -58,11 +80,13 @@ export default async function Layout({ children, params }) {
|
||||
dangerouslySetInnerHTML={{
|
||||
__html: JSON.stringify(
|
||||
jsonLd.aplicacaoWeb({
|
||||
nome: isEn ? "ESP32 Series Comparator" : "Comparador de Séries ESP32",
|
||||
nome: isEn ? "ESP32 Series Comparator" : isEs ? "Comparador de series ESP32" : "Comparador de Séries ESP32",
|
||||
descricao: isEn
|
||||
? "Technical comparison table to analyze specifications, pinouts, and features of multiple ESP32 series."
|
||||
: isEs
|
||||
? "Tabla comparativa técnica para analizar especificaciones, patillaje y características de múltiples series de ESP32."
|
||||
: "Tabela comparativa técnica para analisar especificações, pinagens e recursos de múltiplas séries de ESP32.",
|
||||
caminho: isEn ? "/en/compare" : "/comparacao",
|
||||
caminho: canonPath,
|
||||
locale,
|
||||
})
|
||||
),
|
||||
@@ -73,8 +97,8 @@ export default async function Layout({ children, params }) {
|
||||
dangerouslySetInnerHTML={{
|
||||
__html: JSON.stringify(
|
||||
jsonLd.trilha([
|
||||
{ nome: isEn ? "Home" : "Início", caminho: isEn ? "/en" : "/" },
|
||||
{ nome: isEn ? "Compare Series" : "Comparar Séries", caminho: isEn ? "/en/compare" : "/comparacao" },
|
||||
{ nome: isEn ? "Home" : isEs ? "Inicio" : "Início", caminho: isEn ? "/en" : isEs ? "/es" : "/" },
|
||||
{ nome: isEn ? "Compare Series" : isEs ? "Comparar series" : "Comparar Séries", caminho: canonPath },
|
||||
])
|
||||
),
|
||||
}}
|
||||
|
||||
Reference in new issue
Block a user