feat(i18n): French and German localization (phase 5)
CI / Lint e auditorias (push) Successful in 49s
CI / Trivy (dependências e segredos) (push) Successful in 11s
CI / Imagem Docker (linux/arm64) (push) Successful in 3m14s

- 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:
Lucas RayanandAntigravity committed 2026-11-01 22:06:36 -03:00
1 parent 7b673aeb4b
commit 7fce46b9e1
104 files changed
+33369 -686

No files matched your search

+152
View File
@@ -0,0 +1,152 @@
{
"Common": {
"siteName": "ESPDocs",
"author": "Lucas Rayan Guerra",
"organization": "Ciência Embarcada",
"skipToContent": "Zum Inhalt springen",
"allRightsReserved": "Inhalte unter MIT-Lizenz. Erstellt für die Embedded-Systems-Community.",
"backToHome": "Zurück zur Startseite",
"explore": "Erkunden",
"tools": "Werkzeuge",
"project": "Projekt",
"loading": "Wird geladen...",
"search": "Suchen...",
"officialDocumentation": "Offizielle Dokumentation",
"community": "Community",
"mitLicense": "MIT-Lizenz"
},
"Header": {
"brand": "ESPDocs",
"homeAria": "ESPDocs, Startseite",
"navAria": "Hauptnavigation",
"mobileNavAria": "Mobile Navigation",
"openMenu": "Navigationsmenü öffnen",
"closeMenu": "Menü schließen",
"navigationTitle": "Navigation",
"whereToGo": "Wohin möchten Sie gehen",
"selectChip": "Chip auswählen",
"selectMyChip": "Meinen Chip auswählen",
"hardware": "Hardware",
"hardwareDesc": "12 Chips, Pinbelegungen und Spezifikationen",
"series": "ESP32-Serien",
"seriesDesc": "12 Chips, Pinbelegungen und Spezifikationen",
"comparator": "Vergleich",
"comparatorDesc": "Bis zu vier Serien nebeneinander",
"catalog": "Board-Katalog",
"catalogDesc": "DevKits, Pinbelegungen und Bezugsquellen",
"tools": "Werkzeuge",
"selector": "Intelligente Auswahl",
"selectorDesc": "Der passende Chip für Ihr Projekt",
"diagnostics": "Diagnose",
"diagnosticsDesc": "Brownout, Bootloops, WDT und mehr",
"components": "ESP Component Registry",
"componentsDesc": "Treiber und idf_component.yml-Manifeste",
"library": "Bibliothek",
"frameworks": "Frameworks und SDKs",
"frameworksDesc": "ESP-IDF, Arduino, Rust und Matter",
"glossary": "Technisches Glossar",
"glossaryDesc": "Begriffe aus den Datenblättern",
"about": "Über das Projekt",
"aboutDesc": "Autor, Methodik und Open Source"
},
"Footer": {
"ariaLabel": "ESPDocs Fußzeile",
"description": "Unabhängige Dokumentation des ESP32-Ökosystems. Offene Daten, redaktionelle Aufbereitung und Links zu offiziellen Quellen.",
"exploreTitle": "Erkunden",
"toolsTitle": "Werkzeuge",
"projectTitle": "Projekt",
"authorTitle": "Autor",
"reportIssue": "Problem melden",
"repository": "Repository",
"personalSite": "Persönliche Website",
"linkedin": "LinkedIn"
},
"Home": {
"badge": "Offene ESP32-Dokumentation",
"titleLine1": "Der ESP32,",
"titleLine2": " auf den Punkt gebracht.",
"lede": "Spezifikationen, Pinbelegungen, Vergleiche und Diagnose auf einen Blick. Weniger Datenblatt-Recherche, mehr Zeit an der Werkbank.",
"chooseMyChip": "Meinen Chip auswählen",
"exploreSeries": "Die {count} Serien erkunden",
"seriesCount": "{count} Serien",
"frameworkCount": "{count} Frameworks",
"portugueseFlag": "100 % auf Deutsch",
"featuredSeries": "Vorgestellte Serien",
"featuredDesc": "Das Wesentliche jeder Familie, bevor Sie das Datenblatt öffnen.",
"fullIndex": "Vollständiger Index",
"toolsTitle": "Beginnen Sie beim Problem.",
"toolsEyebrow": "Werkzeuge",
"toolsDesc": "Werkzeuge zur Auswahl des richtigen Chips, zur Diagnose von Hardwarefehlern und zur Beschleunigung der Entwicklung."
},
"NotFound": {
"eyebrow": "Fehler 404",
"title": "Diese Seite existiert nicht.",
"lede": "Die URL wurde möglicherweise geändert oder falsch eingegeben. Wählen Sie einen dieser Wege, um fortzufahren.",
"backToHome": "Zurück zur Startseite",
"seriesTitle": "ESP32-Serien",
"seriesDesc": "12 Familien mit Pinbelegungen und Spezifikationen.",
"selectorTitle": "Chip-Auswahl",
"selectorDesc": "Beantworten Sie acht Fragen und finden Sie empfohlene Modelle.",
"comparatorTitle": "Vergleich",
"comparatorDesc": "Bis zu vier Serien nebeneinander.",
"glossaryTitle": "Glossar",
"glossaryDesc": "Hardwarebegriffe verständlich erklärt."
},
"Sobre": {
"label": "Unabhängiges Projekt",
"title": "Über ESPDocs",
"lede": "Eine inoffizielle Plattform, die technische Informationen über den ESP32 strukturiert und direkt mit der offiziellen Espressif-Dokumentation verknüpft. Entwickelt für die Open-Hardware-Community.",
"viewRepository": "Repository ansehen",
"features": {
"portugueseTitle": "Kuratierte Inhalte",
"portugueseDesc": "Strukturierte technische Daten, klar aufbereitet ohne Datenblatt-Ballast.",
"visualCompareTitle": "Visuelle Vergleiche",
"visualCompareDesc": "Tabellen und Diagramme zur Auswahl der passenden Serie, ohne zehn Datenblätter öffnen zu müssen.",
"centralizedAccessTitle": "Zentraler Zugang",
"centralizedAccessDesc": "Direkte Links zu offizieller Dokumentation, Repositories und Beispielen.",
"openSourceTitle": "Open Source",
"openSourceDesc": "Beiträge auf Gitea sind herzlich willkommen."
}
},
"Series": {
"title": "ESP32-Serien",
"description": "12 ESP32-Serien im Überblick: ESP32, S2, S3, S31, C2, C3, C5, C6, C61, P4, H2 und H4. Architektur, Speicher, Funk, Peripherie und Pinbelegung für jede Serie.",
"pinout": "Pinbelegung",
"specifications": "Spezifikationen",
"peripherals": "Peripherie",
"architecture": "Architektur",
"memory": "Speicher",
"radio": "Funk",
"security": "Hardware-Sicherheit"
},
"Catalogo": {
"title": "Board-Katalog",
"description": "Offizielle und Drittanbieter-DevKits mit Pinbelegungen, Schnittstellen und Bezugsquellen.",
"filterBySeries": "Nach Serie filtern",
"searchBoards": "Boards suchen..."
},
"Comparacao": {
"title": "ESP32-Serien-Vergleich",
"description": "Vergleichen Sie bis zu 4 Serien nebeneinander mit vollständigen Angaben zu Rechenleistung, Funk, Speicher und Pinbelegung."
},
"Componentes": {
"title": "ESP Component Registry",
"description": "Treiber, Bibliotheken und einsatzbereite idf_component.yml-Manifeste für ESP-IDF."
},
"Diagnostico": {
"title": "Diagnose und Fehlersuche",
"description": "Brownout, Bootloops, CPU-Panics, FreeRTOS und Hardware-Best-Practices."
},
"Frameworks": {
"title": "Frameworks und SDKs",
"description": "Leitfäden und Übersichten zu den wichtigsten Entwicklungsumgebungen: ESP-IDF, Arduino, MicroPython, Rust und ESP-Matter."
},
"Glossario": {
"title": "Technisches Glossar",
"description": "Praxisnahe Erklärungen zu Hardwarekonzepten, Peripherie, Funk und Architektur aus den Datenblättern."
},
"Seletor": {
"title": "Intelligente ESP32-Auswahl",
"description": "Beantworten Sie gezielte Fragen zu Ihrem Projekt und finden Sie die ideale Serie anhand technischer Kriterien."
}
}