Next.js 国际化 (i18n)
路由方式
app/
[lang]/
page.tsx → /en /zh /ja
layout.tsxtsx
// middleware.ts
import { match } from '@formatjs/intl-localematcher'
const locales = ['en', 'zh', 'ja']
const defaultLocale = 'zh'
export function middleware(request) {
const pathname = request.nextUrl.pathname
const pathnameHasLocale = locales.some(locale =>
pathname.startsWith(`/${locale}/`) || pathname === `/${locale}`
)
if (!pathnameHasLocale) {
return NextResponse.redirect(new URL(`/${defaultLocale}${pathname}`, request.url))
}
}next-intl 库
bash
npm install next-intl