feat(i18n): routing and localization infrastructure (phase 1)

Implement Phase 1 of i18n spec:
- Configure next-intl with 6 locales (pt, en, es, fr, de, zh-CN) and pathnames
- Move routes to app/[locale] structure with localized layouts and metadata
- Add middleware for root language negotiation (307), legacy redirects (308), and 404 for non-pt book
- Implement language selector dropdown in header with cookie persistence
- Add system typography rules for zh-CN and word-break/hyphenation for de/fr

Co-Authored-By: Antigravity <noreply@google.com>
This commit is contained in:
Lucas RayanandAntigravity committed 2026-11-01 09:31:22 -03:00
1 parent e92aea0c84
commit 83c0ba3e74
38 files changed
+1699 -324

No files matched your search

+101
View File
@@ -0,0 +1,101 @@
import { defineRouting } from "next-intl/routing";
export const routing = defineRouting({
locales: ["pt", "en", "es", "fr", "de", "zh-CN"],
defaultLocale: "en",
localePrefix: "always",
pathnames: {
"/": "/",
"/series": {
pt: "/series",
en: "/series",
es: "/series",
fr: "/series",
de: "/serien",
"zh-CN": "/series",
},
"/series/[key]": {
pt: "/series/[key]",
en: "/series/[key]",
es: "/series/[key]",
fr: "/series/[key]",
de: "/serien/[key]",
"zh-CN": "/series/[key]",
},
"/catalogo": {
pt: "/catalogo",
en: "/catalog",
es: "/catalogo",
fr: "/catalogue",
de: "/katalog",
"zh-CN": "/catalog",
},
"/comparacao": {
pt: "/comparacao",
en: "/compare",
es: "/comparacion",
fr: "/comparaison",
de: "/vergleich",
"zh-CN": "/compare",
},
"/componentes": {
pt: "/componentes",
en: "/components",
es: "/componentes",
fr: "/composants",
de: "/komponenten",
"zh-CN": "/components",
},
"/diagnostico": {
pt: "/diagnostico",
en: "/diagnostics",
es: "/diagnostico",
fr: "/diagnostic",
de: "/diagnose",
"zh-CN": "/diagnostics",
},
"/frameworks": {
pt: "/frameworks",
en: "/frameworks",
es: "/frameworks",
fr: "/frameworks",
de: "/frameworks",
"zh-CN": "/frameworks",
},
"/frameworks/[key]": {
pt: "/frameworks/[key]",
en: "/frameworks/[key]",
es: "/frameworks/[key]",
fr: "/frameworks/[key]",
de: "/frameworks/[key]",
"zh-CN": "/frameworks/[key]",
},
"/glossario": {
pt: "/glossario",
en: "/glossary",
es: "/glosario",
fr: "/glossaire",
de: "/glossar",
"zh-CN": "/glossary",
},
"/seletor": {
pt: "/seletor",
en: "/selector",
es: "/selector",
fr: "/selecteur",
de: "/auswahl",
"zh-CN": "/selector",
},
"/sobre": {
pt: "/sobre",
en: "/about",
es: "/acerca",
fr: "/a-propos",
de: "/ueber-uns",
"zh-CN": "/about",
},
"/livro": {
pt: "/livro",
},
},
});