# General Translation React SDKs (gt-react, gt-next, gt-react-native): Статическая генерация сайта для Pages Router
URL: https://generaltranslation.com/ru/docs/react/nextjs/pages-router-static-site-generation.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Как заранее рендерить локализованные страницы Next.js Pages Router с помощью General Translation.

Заранее рендерите локализованные страницы Pages Router с помощью `withGTStaticProps`. Настройка аналогична `withGTServerSideProps`, но Next.js генерирует пропсы во время сборки.

## Настройте маршрутизацию по локалям [#config]

Next.js должен знать все локали на этапе сборки, чтобы сгенерировать отдельную версию каждой страницы для каждой локали. Импортируйте значения из `gt.config.json`; массив `locales` должен содержать `defaultLocale`:

```ts title="next.config.ts"
import type { NextConfig } from 'next';
import { withGTConfig } from 'gt-next/config';
import gtConfig from './gt.config.json';

const nextConfig: NextConfig = {
  i18n: {
    locales: gtConfig.locales,
    defaultLocale: gtConfig.defaultLocale,
  },
};

export default withGTConfig(nextConfig);
```

Оставьте страницы на прежних местах. Интернационализированная маршрутизация Next.js создаёт локализованные URL без сегмента `pages/[locale]`. Полную настройку см. в разделе [Маршрутизация по локалям в Pages Router](/docs/react/nextjs/pages-router-middleware).

## Добавьте статические пропсы [#static-props]

Оберните функцию `getStaticProps` на каждой странице с помощью `withGTStaticProps`:

```tsx title="pages/about.tsx"
import type { GetStaticProps } from 'next';
import { T, Var, withGTStaticProps } from 'gt-next';

type AboutPageProps = {
  generatedAt: string;
};

export const getStaticProps: GetStaticProps<AboutPageProps> =
  withGTStaticProps(async () => ({
    props: {
      generatedAt: new Date().toISOString(),
    },
  }));

export default function AboutPage({ generatedAt }: AboutPageProps) {
  return <T>Generated at: <Var>{generatedAt}</Var></T>;
}
```

`withGTStaticProps` добавляет локаль и снимок перевода в возвращаемые пропсы страницы. Если у страницы нет других пропсов, используйте форму без аргументов:

```tsx title="pages/index.tsx"
import { withGTStaticProps } from 'gt-next';

export const getStaticProps = withGTStaticProps();
```

Next.js вызывает `getStaticProps` один раз для каждой настроенной локали и передаёт `context.locale`. Передайте сгенерированные значения в [`GTProvider`](/docs/react/reference/components/gt-provider) и [подключите обработку изменений локали](/docs/react/nextjs/pages-router-middleware#locale-changes) в `_app.tsx`.

## Обработка динамических результатов [#dynamic-results]

Обёртка сохраняет результаты `redirect` и `notFound`, возвращаемые функцией `getStaticProps`. Она загружает переводы, только если результат содержит `props`.

```tsx title="pages/products/[id].tsx"
import { withGTStaticProps } from 'gt-next';

export const getStaticProps = withGTStaticProps(async ({ params }) => {
  const product = await loadProduct(params?.id);

  if (!product) {
    return { notFound: true };
  }

  return {
    props: { product },
    revalidate: 3600,
  };
});
```

Динамическим маршрутам Pages Router по-прежнему требуется `getStaticPaths`. Возвращайте каждый путь один раз для каждой локали, которую нужно предварительно отрендерить:

```tsx title="pages/products/[id].tsx"
import type { GetStaticPaths } from 'next';

export const getStaticPaths: GetStaticPaths = async ({ locales = [] }) => {
  const products = await loadProducts();

  return {
    paths: products.flatMap((product) =>
      locales.map((locale) => ({
        params: { id: product.id },
        locale,
      }))
    ),
    fallback: 'blocking',
  };
};
```

Если путь не содержит `locale`, Next.js генерирует только версию этого пути для локали по умолчанию.

## Восстановление после сбоев сборки [#build-failures]

### Не удаётся определить локаль

`withGTStaticProps` выбрасывает исключение, если Next.js не передаёт ни `context.locale`, ни `context.defaultLocale`. Добавьте `i18n.locales` и `i18n.defaultLocale` в `next.config.ts` и поддерживайте их в соответствии с `gt.config.json`.

Не используйте [`createNextMiddleware`](/docs/react/nextjs/reference/functions/create-next-middleware) вместо конфигурации `i18n` в Pages Router. Middleware не передаёт в `getStaticProps` локаль, доступную на этапе сборки.

### Локаль по умолчанию отображается без перевода

Для локали по умолчанию намеренно используется пустой снимок переводов, поскольку исходный контент уже есть на странице. Для остальных локалей загружается сгенерированный снимок переводов.

Если целевая локаль также отображает исходный контент, убедитесь, что [`npx gt translate`](/docs/cli/reference/commands/translate) была выполнена до `next build` и что эта локаль указана в конфигурации Next.js и General Translation.

### Хелпер выбрасывает исключение в файле с App Router

`withGTStaticProps` — это API Pages Router. В каталоге `app/` используйте `generateStaticParams` и [настройку статической генерации для App Router](/docs/react/nextjs/app-router-static-site-generation).

### Статический экспорт не поддерживает маршрутизацию по локалям

Конфигурация `i18n` Pages Router в Next.js не поддерживает `output: 'export'`. Разверните сгенерированные страницы через сервер Next.js или адаптер платформы либо перейдите на маршруты App Router, которые генерируют явный параметр `[locale]`.

## Next steps

- /docs/react/nextjs/pages-router-middleware
- /docs/react/guides/storing-translations
- /docs/react/guides/managing-locales
- /docs/react/guides/migrating-i18n-libraries

## Sitemap

See the full [sitemap](https://generaltranslation.com/sitemap.md) for all pages.
