Next.js App Router と next-intl を使用した多言語対応アプリケーションで、リロードなしの言語切り替えを実装する方法をまとめます。
環境 Next.js 16 (App Router) next-intl TypeScript 設定概要 localePrefix: ‘as-needed’ とは next-intl の localePrefix: 'as-needed' 設定を使用すると、デフォルト言語ではURLにプレフィックスが付かず、その他の言語のみプレフィックスが付きます。
例(デフォルト言語が日本語の場合):
日本語: /, /gallery, /viewer 英語: /en, /en/gallery, /en/viewer 実装手順 1. Middleware設定(重要) next-intl は middleware を使用してロケールのルーティングを処理します。静的ファイルが middleware によってリダイレクトされないよう、matcher の設定が重要です。
i i e e } m m x x p p p p m m o o o a i r r r r t d t t t t S c d k h l c { d c i e e r e o p r w e r f n : a a o a s m r t u u t i [ e e t l d ' . M i t c d / t i n o l ( s d g c n e ( d r f w ? l } e i a ! e a g r a w f t e p a r e = i r o M f | e m i { o _ d r n f d e r l s x o / e t t m s w a | r a t . ' c r i * n / e c \ e i ( \ x 1 r f . t 8 o i . - n u l * i / t e ) n r i s . t o n * l u g a ) / t ) n ' m i d ] i n d g A d ' P l I e w r a o r u e t ' e s 注意 : .*\\..* は「ドットを含むパス」を除外します。これにより /og-image.png などの静的ファイルがmiddlewareをスキップし、正常にアクセスできるようになります。
...