# gt-next: General Translation Next.js SDK: Краткое руководство по Next.js
URL: https://generaltranslation.com/ru/docs/next.mdx
---
title: Краткое руководство по Next.js
description: Добавьте поддержку нескольких языков в приложение Next.js менее чем за 10 минут
---
К концу этого руководства ваше приложение Next.js будет отображать контент на нескольких языках, а пользователи смогут переключать язык с помощью переключателя языка.
**Предварительные требования:**
* Приложение Next.js, использующее **App Router** (Next.js 13+)
* Node.js 18+
**Нужен автоматический сетап?** Выполните `npx gt@latest`, чтобы настроить всё с помощью [мастера сетапа](/docs/cli/init). В этом руководстве рассматривается ручной сетап.
***
## Шаг 1: Установите пакеты
`gt-next` — библиотека, которая обеспечивает переводы в вашем приложении. `gt` — CLI-инструмент, который подготавливает переводы для продакшена.
```bash
npm i gt-next
npm i -D gt
```
```bash
yarn add gt-next
yarn add --dev gt
```
```bash
bun add gt-next
bun add --dev gt
```
```bash
pnpm add gt-next
pnpm add --save-dev gt
```
***
## Шаг 2: Настройте конфигурацию Next.js
`gt-next` использует плагин Next.js **`withGTConfig`** для настройки интернационализации на этапе сборки. Оберните им существующую конфигурацию Next.js:
```ts title="next.config.ts"
import { withGTConfig } from 'gt-next/config';
const nextConfig = {};
export default withGTConfig(nextConfig);
```
Этот плагин считывает ваши настройки перевода и автоматически связывает всё воедино. Никаких дополнительных изменений в конфигурации Next.js не требуется.
***
## Шаг 3: Создайте файл конфигурации перевода
Создайте файл **`gt.config.json`** в корне проекта. В нем библиотеке указывается, какие языки вы поддерживаете:
```json title="gt.config.json"
{
"defaultLocale": "en",
"locales": ["es", "fr", "ja"],
"files": {
"gt": {
"output": "public/_gt/[locale].json"
}
}
}
```
* **`defaultLocale`** — язык, на котором написано ваше приложение (исходный язык).
* **`locales`** — языки, на которые вы хотите переводить приложение. Выберите любые из [списка поддерживаемых локалей](/docs/platform/supported-locales).
* **`files.gt.output`** — путь, по которому CLI сохраняет файлы перевода. `[locale]` заменяется кодом каждого языка (например, `public/_gt/es.json`).
Добавьте `public/_gt/` в **`.gitignore`** — эти файлы генерируются автоматически, а не создаются вручную:
```txt title=".gitignore"
public/_gt/
```
***
## Шаг 4: Добавьте GTProvider в ваш корневой layout
Компонент **`GTProvider`** предоставляет всему приложению доступ к переводам. Он должен оборачивать приложение на уровне корневого layout:
```tsx title="app/layout.tsx"
import { GTProvider } from 'gt-next';
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
{children}
);
}
```
`GTProvider` — это **серверный компонент**: он загружает переводы на сервере и передаёт их в ваши клиентские компоненты.
***
## Шаг 5: Пометьте контент для перевода
Теперь оберните компонентом **``** любой текст, который нужно перевести. `` означает "translate":
```tsx title="app/page.tsx"
import { T } from 'gt-next';
export default function Home() {
return (
Welcome to my app
This content will be translated automatically.
);
}
```
Вы можете обернуть в `` любой фрагмент JSX — от небольшого до очень большого. Всё внутри него — текст, вложенные элементы и даже форматирование — переводится как единое целое.
***
## Шаг 6: Добавьте переключатель языка
Добавьте **``**, чтобы пользователи могли переключать язык:
```tsx title="app/page.tsx"
import { T, LocaleSelector } from 'gt-next';
export default function Home() {
return (
Добро пожаловать в моё приложение
Этот контент будет переведён автоматически.
);
}
```
`LocaleSelector` отображает выпадающий список с языками из вашего `gt.config.json`.
***
## Шаг 7: Настройте переменные окружения (необязательно)
Чтобы видеть переводы во время разработки, вам понадобятся API-ключи General Translation. Они позволяют использовать **перевод по запросу** — приложение будет переводить контент в реальном времени по мере разработки.
Создайте файл **`.env.local`**:
```bash title=".env.local"
GT_API_KEY="your-api-key"
GT_PROJECT_ID="your-project-id"
```
Получите бесплатные ключи на [dash.generaltranslation.com](https://dash.generaltranslation.com/signup) или, выполнив команду:
```bash
npx gt auth
```
Для разработки используйте ключ, начинающийся с `gtx-dev-`. Продакшен-ключи (`gtx-api-`) предназначены только для CI/CD.
Никогда не передавайте `GT_API_KEY` в браузер и не коммитьте его в систему контроля версий.
Да. Без API-ключей `gt-next` работает как обычная библиотека i18n. Перевода по запросу во время разработки не будет, но вы всё равно можете:
* Вручную добавлять собственные файлы перевода
* Использовать все компоненты (``, ``, `LocaleSelector` и т. д.)
* Запустить `npx gt generate`, чтобы создать шаблоны файлов перевода, а затем перевести их самостоятельно
***
## Шаг 8: Посмотрите, как это работает
Запустите сервер разработки:
```bash
npm run dev
```
```bash
yarn dev
```
```bash
bun dev
```
```bash
pnpm dev
```
Откройте [http://localhost:3000](http://localhost:3000) и переключайте языки через выпадающий список. Вы увидите, что контент переведён.
Во время разработки переводы выполняются по запросу — при первом переключении на новый язык вы можете ненадолго увидеть индикатор загрузки. В продакшене переводы генерируются заранее и загружаются мгновенно.
***
## Шаг 9: Переводите строки (не только JSX)
Для простых строк — например, значений атрибута `placeholder`, значений `aria-label` или текста `alt` — используйте хук **`useGT`**. Он работает и в серверных, и в клиентских компонентах:
```tsx title="app/contact/page.tsx"
import { useGT } from 'gt-next';
export default function ContactPage() {
const gt = useGT();
return (
);
}
```
Если в серверных компонентах вы предпочитаете `async/await`, импортируйте `getGT` из `gt-next/server`:
```tsx
import { getGT } from 'gt-next/server';
export default async function Page() {
const gt = await getGT();
return {gt('Hello')}
;
}
```
***
## Шаг 10: Развертывание в продакшене
В продакшене переводы заранее генерируются на этапе сборки (без API-вызовов в реальном времени). Добавьте команду `translate` в скрипт сборки:
```json title="package.json"
{
"scripts": {
"build": "npx gt translate && next build"
}
}
```
Настройте переменные окружения для **продакшена** у вашего хостинг-провайдера (Vercel, Netlify и т. д.):
```bash
GT_PROJECT_ID=your-project-id
GT_API_KEY=gtx-api-your-production-key
```
Рабочие ключи начинаются с `gtx-api-` (не `gtx-dev-`). Получить такой ключ можно на [dash.generaltranslation.com](https://dash.generaltranslation.com). Никогда не добавляйте к нему префикс `NEXT_PUBLIC_`.
Вот и всё — теперь ваше приложение поддерживает несколько языков. 🎉
***
## Устранение неполадок
`gt-next` хранит выбранный пользователем язык в cookie `generaltranslation.locale`. Если вы раньше тестировали другой язык, эта cookie может переопределять ваш выбор. Очистите cookie и попробуйте снова.
* [Chrome](https://support.google.com/chrome/answer/95647)
* [Firefox](https://support.mozilla.org/en-US/kb/delete-cookies-remove-info-websites-stored)
* [Safari](https://support.apple.com/en-mn/guide/safari/sfri11471/16.0/mac/11.0)
Это нормально. В режиме разработки переводы выполняются по запросу (контент переводится в реальном времени через API). **В продакшене этой задержки нет** — все переводы заранее генерируются командой `npx gt translate`.
Неоднозначный текст может приводить к неточным переводам. Например, «apple» может означать фрукт или компанию. Чтобы помочь системе, добавьте проп `context`:
```jsx
Apple
```
``, `useGT()` и `getGT()` поддерживают опцию `context`.
***
## Следующие шаги
**Смотрите в действии:** Изучите [готовые примеры приложений](/docs/next/tutorials/examples), чтобы увидеть подходы `gt-next` в реальных проектах, или сразу перейдите к [каталогу приложений](https://app-catalog.generaltranslation.dev).
* [**Руководство по компоненту ``**](/docs/next/guides/t) — Узнайте о переменных, множественном числе и расширенных шаблонах перевода
* [**Руководство по переводу строк**](/docs/next/guides/strings) — Подробно разберитесь в `useGT` и `getGT`
* [**Переменные компоненты**](/docs/next/guides/variables) — Работайте с динамическими данными с помощью ``, ``, `` и ``
* [**Плюрализация**](/docs/next/api/components/plural) — Обрабатывайте формы множественного числа с помощью компонента ``
* [**Перевод метаданных страницы**](/docs/next/api/strings/get-gt#metadata) — Переводите заголовки, описания и OG-теги с помощью `getGT`
* [**Развертывание в продакшене**](/docs/next/tutorials/quickdeploy) — Настройка CI/CD, кэширование и оптимизация производительности
* [**Общие строки**](/docs/next/guides/shared-strings) — Переводите текст в массивах, объектах конфигурации и общих данных с помощью `msg()`