# 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()`