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:
1 parent
e92aea0c84
commit
83c0ba3e74
38 files changed
+1699
-324
No files matched your search
+101
@@ -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",
|
||||
},
|
||||
},
|
||||
});
|
||||
Reference in new issue
Block a user