静的サイト生成
i18nアプリで静的サイト生成をサポートする方法
概要
このガイドでは、i18nアプリを静的サイト生成に対応させる方法を説明します。
静的サイト生成とは?
静的サイト生成(SSG)は、Next.jsの機能の一つで、ビルド時に静的ページを生成することができます。 これはパフォーマンスやSEOの向上に役立ちます。
app ルーター向けの SSG
前提条件
i18n アプリで静的サイト生成を有効にするには、いくつかの前提条件があります。
app ディレクトリか pages ディレクトリを使うかによって、要件は少し異なります。
- アプリが Next.js の app ルーターを使用していること。
- アプリが i18n ルーティングに対応していること(i18n routing を参照)
- アプリがローカル翻訳を使用していること(local translations を参照)
手順
ステップ 1:
まず、アプリのルートレイアウトに <GTProvider> コンポーネントがあることを確認してください。
import { GTProvider } from 'gt-next';アプリが i18n ルーティングを使用しているため、プロバイダは [locale]/layout.tsx ファイルに配置してください。
ステップ 2:
次に、翻訳の読み込みに loadTranslations 関数を使用していることを確認してください。
併せて、<GTProvider> にロケールをパラメータとして渡します。ロケールは params オブジェクトから取得できます。
import { loadTranslations } from '@/i18n/loadTranslations';
import { GTProvider } from 'gt-next/client';
export default async function RootLayout({
children,
params,
}: {
children: React.ReactNode;
params: Promise<{ locale: string }>;
}) {
const { locale } = await params;
return (
<GTProvider loadTranslations={loadTranslations} locale={locale}>
{children}
</GTProvider>
)
}ステップ 3:
すべてのフックとコンポーネントを gt-next/client からインポートしていることを確認してください。
import { useGT } from 'gt-next/client';
import { T } from 'gt-next/client';これは重要です。gt-next/client からインポートされたフックやコンポーネントはヘッダーを読み取らず、静的生成ページのビルド時にはヘッダーが存在しないためです。
Next.js アプリが getStaticParams function を正しく設定して使用していることを確認してください!
以上です!これでアプリは多言語の静的サイト生成をサポートできるはずです!
カスタム getLocale を用いた SSG
SSG はロケール解決に影響することがあります。
このため、URL パスからロケールにアクセスする独自の getLocale() 関数を定義する必要があります。
使用している Next.js のバージョンによって、実装は異なる場合があります。
Next.js 15.5+
プロジェクトのルートに getLocale.ts という新しいファイルを作成します。
import { locale } from "next/root-params";
export default async function getLocale() {
return await locale();
}Next.js 15.1-15.4
プロジェクトのルートに getLocale.ts という新しいファイルを作成します。
import { unstable_rootParams } from "next/server";
export default async function getLocale() {
const result = (await unstable_rootParams())?.locale;
return result;
}以前のバージョン
残念ながら、以前のバージョンでは SSG で URL のパスパラメータにアクセスする方法はありません。 Next.js 15.1 以降にアップグレードする必要があります。
pages ルーターのための SSG
🚧 このセクションは現在作成中です。🚧
このガイドはいかがですか?