国際化
Next.jsは、複数の言語をサポートするためにルーティングとコンテンツのレンダリングを構成することを可能にします。サイトを異なるロケールに適応させることには、翻訳されたコンテンツ(ローカライゼーション)と国際化されたルートが含まれます。
- ロケール: 言語と書式設定の環境設定のための識別子。通常、ユーザーの優先言語と可能であれば地理的地域が含まれます。
en-US
: アメリカ合衆国で話される英語
nl-NL
: オランダで話されるオランダ語
nl
: オランダ語、特定の地域なし
使用するロケールの選択には、ブラウザでのユーザーの言語設定を使用することをおすすめします。優先言語を変更すると、アプリケーションへの受信Accept-Language
ヘッダーが変更されます。
例えば、以下のライブラリを使用して、受信Request
のHeaders
、サポートを予定しているロケール、およびデフォルトロケールに基づいてどのロケールを選択するかを判断できます。
ルーティングは、サブパス(/fr/products
)またはドメイン(my-site.fr/products
)のいずれかで国際化できます。この情報を使用して、ミドルウェア内でロケールに基づいてユーザーをリダイレクトできます。
最後に、app/
内のすべての特殊ファイルをapp/[lang]
の下にネストします。これにより、Next.jsルーターが異なるロケールを動的に処理し、lang
パラメーターをすべてのレイアウトとページに転送できます。例:
ルートレイアウトも新しいフォルダー内にネストできます(例:app/[lang]/layout.js
)。
ユーザーの優先ロケールに基づいて表示コンテンツを変更する、いわゆるローカライゼーションは、Next.js特有のものではありません。以下に説明するパターンは、任意のウェブアプリケーションでも同様に機能します。
アプリケーション内で英語とオランダ語の両方のコンテンツをサポートすることを想定します。2つの異なる「辞書」を管理する可能性があります。これらは、キーからローカライズされた文字列へのマッピングを提供するオブジェクトです。例:
要求されたロケールの翻訳をロードするgetDictionary
関数を作成できます:
現在選択されている言語に基づいて、レイアウトまたはページ内で辞書をフェッチできます。
app/
ディレクトリ内のすべてのレイアウトとページがデフォルトでサーバーコンポーネントになるため、翻訳ファイルのサイズがクライアントサイドのJavaScriptバンドルサイズに影響することを心配する必要はありません。このコードはサーバー上でのみ実行され、結果のHTMLのみがブラウザに送信されます。
特定のロケールセットの静的ルートを生成するには、任意のページまたはレイアウトでgenerateStaticParams
を使用できます。これはグローバルに、例えばルートレイアウトで行えます: