Генерация статического сайта

Предварительный рендер интернационализированных страниц на этапе сборки для максимальной производительности

Генерация статического сайта выполняет предварительный рендер во время сборки, создавая статические HTML‑файлы для каждой локали. Это обеспечивает высокую производительность и преимущества для SEO и гарантирует, что весь переводной контент доступен сразу при посещении сайта.

Требования: Для корректной работы с интернационализацией SSG требует маршрутизации на уровне middleware и локальных переводов.

Маршрутизатор App

Требования к настройке

Чтобы включить SSG в GT, необходимо:

  1. App Router с маршрутизацией через middleware — см. руководство по middleware
  2. Локальные переводы — см. руководство по локальным переводам
  3. Клиентские импорты — используйте gt-next/client вместо gt-next

Шаг 1: Конфигурация GTProvider

Поместите GTProvider в ваш макет [locale] вместе с функцией loadTranslations:

// app/[locale]/layout.tsx
import { GTProvider } from 'gt-next/client';
import { loadTranslations } from '@/loadTranslations';

export default async function RootLayout({ children, params }) {
  const { locale } = await params;
  
  return (
    <GTProvider loadTranslations={loadTranslations} locale={locale}>
      {children}
    </GTProvider>
  );
}

Шаг 2: Используйте импорты клиента

Импортируйте все компоненты и хуки GT из gt-next/client:

// ✅ Используйте клиентские импорты для SSG
import { useGT, T } from 'gt-next/client';

// ❌ Это отключает SSG
import { getGT } from 'gt-next/server';
import { T } from 'gt-next';

Шаг 3: Настройте generateStaticParams

Убедитесь, что у вас настроен generateStaticParams для ваших языковых версий.

Пользовательская getLocale

Для SSG создайте собственную функцию getLocale, совместимую со статической генерацией:

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() {
  return (await unstable_rootParams())?.locale;
}

Более ранние версии

К сожалению, в более ранних версиях невозможно получить доступ к параметрам пути URL при использовании SSG. Вам потребуется обновиться до Next.js 15.1 или более новой версии.

Распространённые проблемы

Страницы не генерируются статически

Если ваши страницы не генерируются статически, убедитесь, что все компоненты и хуки GT импортируются из gt-next/client:

// ❌ Они отключают SSG
import { getGT } from 'gt-next/server';
import { getLocale } from 'gt-next/server';
import { getTranslations } from 'gt-next/server';
import { T } from 'gt-next';

// ✅ Они совместимы с SSG
import { useGT, T } from 'gt-next/client';

Любой доступ к заголовкам или cookie отключит статическую генерацию.

Дальнейшие шаги

Насколько полезно это руководство?

Генерация статического сайта