# General Translation React SDKs (gt-react, gt-next, gt-react-native): Использование Cache Components
URL: https://generaltranslation.com/ru/docs/react/nextjs/cache-components.mdx
---
title: Использование Cache Components
description: Использование Cache Components в Next.js с безопасными для локалей функциями запроса и локально хранимыми переводами.
related:
links:
- /docs/react/nextjs/app-router-middleware
- /docs/react/nextjs/app-router-static-site-generation
- /docs/react/nextjs/registering-request-locales
- /docs/react/nextjs/locale-alias-seo
---
Cache Components позволяют выполнять предварительный рендеринг и кэшировать локализованный серверный контент. Локаль, регион и переводы должны определяться без заголовков запроса, cookie-файлов и удалённого загрузчика переводов по умолчанию.
*Примечание: в этом руководстве используется Next.js 16 или более поздняя версия, в которой Cache Components настраиваются с помощью `cacheComponents: true`.*
## Включите Cache Components [#enable]
Включите Cache Components в `next.config.ts`. Оберните конфигурацию Next.js в [`withGTConfig`](/docs/react/nextjs/config):
```ts title="next.config.ts"
import type { NextConfig } from 'next';
import { withGTConfig } from 'gt-next/config';
const nextConfig: NextConfig = {
cacheComponents: true,
};
export default withGTConfig(nextConfig);
```
Когда включены Cache Components, `gt-next`:
* Требует пользовательскую функцию [`loadTranslations`](/docs/react/reference/functions/load-translations). Стандартный удалённый загрузчик небезопасен при предварительном рендеринге.
* Предупреждает, если отсутствуют пользовательские функции запроса [`getLocale`](/docs/react/nextjs/reference/functions/get-locale) и [`getRegion`](/docs/react/nextjs/reference/functions/get-region).
* Отключает горячую перезагрузку переводов во время разработки, так как она выполняет динамические запросы.
* Передаёт Next.js управление инвалидацией кэша вместо применения обычного срока действия кэша General Translation.
## Определение значений запроса [#request-values]
Разместите сегмент `[locale]` в корне дерева App Router. Корневой макет должен находиться в `app/[locale]/layout.tsx`, без `app/layout.tsx` выше него.
Создайте `getLocale.ts` в корне проекта:
```ts title="getLocale.ts"
import { locale } from 'next/root-params';
export default async function getLocale() {
return await locale();
}
```
Создайте рядом файл `getRegion.ts`. Возвращайте фиксированный регион, если от него зависит ваш output, или `undefined`, чтобы отключить определение региона:
```ts title="getRegion.ts"
export default async function getRegion() {
return undefined;
}
```
`withGTConfig` автоматически обнаруживает оба файла. Если они находятся в другом месте, укажите пути с помощью [`getLocalePath` и `getRegionPath`](/docs/react/nextjs/config#request-function-paths).
Не вызывайте `headers()` или `cookies()` из этих функций запроса. Динамические API запросов нельзя использовать внутри границы `"use cache"`. Вместо этого получайте локаль из `next/root-params` и возвращайте фиксированный регион.
## Храните переводы локально [#local-translations]
Создайте файлы перевода перед сборкой Next.js, а затем загружайте их из бандла:
```ts title="loadTranslations.ts"
export default async function loadTranslations(locale: string) {
try {
const translations = await import(`./public/_gt/${locale}.json`);
return translations.default;
} catch {
return {};
}
}
```
`withGTConfig` обнаруживает `loadTranslations.ts` в корне проекта или в каталоге `src/`. Также можно указать [`loadTranslationsPath`](/docs/react/nextjs/config#load-translations-path).
Настройте вывод CLI в соответствии с загрузчиком и запустите [`npx gt translate`](/docs/cli/reference/commands/translate) перед `next build`. Полный workflow описан в разделе [Локальное хранение переводов](/docs/react/guides/storing-translations).
## Кэширование переведённого контента [#cache-content]
Определите локаль вне кэшируемой функции и передайте её как сериализуемый аргумент. Аргументы функции становятся частью ключа кэша Cache Components, что позволяет хранить записи для разных локалей отдельно.
```tsx title="app/[locale]/page.tsx"
import { T } from 'gt-next';
import { getLocale } from 'gt-next/server';
import { cacheLife, cacheTag } from 'next/cache';
async function CachedContent({ locale }: { locale: string }) {
'use cache';
cacheLife('hours');
cacheTag(`home-${locale}`);
return Welcome to our site;
}
export default async function Page() {
const locale = await getLocale();
return ;
}
```
Применяйте тот же подход к любому региону или другому параметру запроса, который влияет на отображаемый перевод. Никогда не используйте одну запись кэша для двух локалей.
## Next steps
- /docs/react/nextjs/app-router-middleware
- /docs/react/nextjs/app-router-static-site-generation
- /docs/react/nextjs/registering-request-locales
- /docs/react/nextjs/locale-alias-seo