Skip to content

Next.js 国际化 (i18n)

路由方式

app/
  [lang]/
    page.tsx     → /en  /zh /ja
    layout.tsx
tsx
// 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