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>
102 lines
1.9 KiB
JavaScript
102 lines
1.9 KiB
JavaScript
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",
|
|
},
|
|
},
|
|
});
|