言語検出ミドルウェア
ユーザーの設定に基づく自動言語検出とURLルーティング
ミドルウェアはユーザーの言語の好みに基づいて自動的に検出を行い、該当するローカライズ版のサイトへリダイレクトします。コンテンツが読み込まれる前に、ブラウザの設定、位置情報、ユーザープリファレンスを参照して最適な言語を提供します。
ファイルの場所: middleware.ts はプロジェクトのルートに、app/ ディレクトリと同じ階層に配置してください。app/ の中には置かないでください。
セットアップ
ステップ 1: 動的ルートを作成
app/ フォルダ内に [locale] ディレクトリを作成し、すべてのページをその中へ移動します:
ステップ 2: ミドルウェアを追加する
プロジェクトのルートに middleware.ts を作成します:
import { createNextMiddleware } from 'gt-next/middleware';
export default createNextMiddleware();
export const config = {
// APIルート、静的ファイル、Next.js内部ファイルを除くすべてのパスにマッチ
matcher: ['/((?!api|static|.*\\..*|_next).*)']
};これにより、/en/about や /es/about のような locale プレフィックス付きの自動言語検出と URL ルーティングが有効になります。
言語検出
ミドルウェアは、次の優先順位でユーザーの言語設定を検出します:
- URL の locale -
/es/about→ スペイン語 - ユーザーの Cookie - 以前に選択した言語
- ブラウザーのヘッダー -
Accept-Languageヘッダー - 既定の locale - 設定されたデフォルト(フォールバック)言語
ミドルウェアは、追加の設定なしでブラウザーの言語検出と Cookie の保持を自動的に処理します。
ローカライズ済みのパス
言語ごとに URL パスをカスタマイズします:
export default createNextMiddleware({
pathConfig: {
// 英語: /en/products, 中国語: /zh/产品
"/products": {
"zh": "/产品"
},
// 動的ルート: /en/product/123, /zh/产品/123
"/product/[id]": {
"zh": "/产品/[id]"
}
}
});URL 構造
既定では、既定のlocaleにはロケールコードのプレフィックスは付きません。
/about → /about (デフォルトロケール: 英語)
/about → /es/about (スペイン語)
/about → /fr/about (フランス語)デフォルトのlocaleにプレフィックスを追加する
デフォルトを含むすべてのlocaleにプレフィックスを付けるには:
export default createNextMiddleware({
prefixDefaultLocale: true
});結果:
/about → /en/about (英語、プレフィックス付き)
/about → /es/about (スペイン語、プレフィックス付き)
/about → /fr/about (フランス語、プレフィックス付き)よくある問題点
動的ルートが見つかりません
すべてのページは [locale]/ 配下に配置する必要があります:
❌ 間違い:
app/
├── page.tsx
└── about/page.tsx
✅ 正しい:
app/
└── [locale]/
├── page.tsx
└── about/page.tsxMatcher の設定
API ルートおよび静的ファイルを除外:
export const config = {
matcher: ['/((?!api|static|.*\\..*|_next).*)']
};ミドルウェアの設定は十分に検証しましょう。誤った matcher により、無限リダイレクトが発生したり、静的アセットが読み込めなくなる場合があります。
次のステップ
このガイドはどうでしたか?