# gt-next: General Translation Next.js SDK: Переход на gt-next
URL: https://generaltranslation.com/ru/docs/next/guides/migration.mdx
---
title: Переход на gt-next
description: Узнайте, как перенести проект на gt-next
---
## Обзор
В этом руководстве описаны шаги, необходимые для переноса проекта, уже использующего библиотеку i18n, на gt-next.
Мы также дадим несколько советов и рекомендаций, которые помогут сделать перенос максимально простой и плавной.
## Предварительные требования
* Проект, в котором сейчас используется другая библиотека i18n.
* Базовое понимание библиотеки `gt-next`.
## Зачем переходить?
Есть много причин перенести проект на gt-next.
Вот лишь некоторые из них:
* **Больше никаких JSON-файлов:** Вам больше не придётся хранить переводы в JSON-файлах.
Весь контент находится прямо в коде, где ему и место.
* **Автоматические переводы:** Создавайте качественные переводы с учётом контекста с помощью нашего CLI-инструмента.
Вам больше не придётся ждать перевода.
* **Экспериментируйте в dev:** Легко тестируйте переводы во время разработки благодаря горячей перезагрузке.
## Сетап
Установите `gt-next` и CLI-инструмент `gt`.
```bash
npm i gt-next 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
```
Создайте файл `gt.config.json` в корне проекта, указав в нём свойство `defaultLocale` и массив `locales`.
```json title="gt.config.json" copy
{
"defaultLocale": "en",
"locales": ["en", "fr", "es"]
}
```
Затем добавьте компонент `` в корневой layout приложения.
```tsx title="app/layout.tsx" copy
import { GTProvider } from 'gt-next'
export default function RootLayout({ children }) {
return (
{children}
)
}
```
Далее добавьте `withGTConfig` в файл `next.config.js`.
```js title="next.config.ts" copy
import { withGTConfig } from 'gt-next/config'
const nextConfig = {
// Your next.config.ts options
}
export default withGTConfig(nextConfig, {
// Your GT configuration
})
```
Более подробные инструкции см. в [руководстве по быстрому старту](/docs/next).
На этом этапе у вас есть 3 варианта:
1. Полностью перенести весь проект на `gt-next` и удалить старую библиотеку i18n.
2. Полностью перенести проект, но продолжить использовать словари из старой библиотеки i18n.
3. Пока оставить старую библиотеку i18n и перенести на `gt-next` только часть проекта.
Подробнее о каждом варианте см. в разделе [стратегии миграции](#strategies).
## Стратегии миграции [#strategies]
### Вариант 1: Полностью перенесите весь проект
Это самый простой вариант, но он также потребует сразу внести больше всего изменений в код.
После настройки проекта вам нужно будет найти все вхождения старой библиотеки i18n и заменить их на `gt-next`.
Если ваше приложение использует React-хуки, такие как `useTranslations`, найдите все вхождения `useTranslations` в кодовой базе и замените их на `useGT`.
Затем вам нужно будет заменить все строковые ключи на их фактические строковые значения.
Например, если ваш старый код выглядит так:
```json title="dictionary.json"
{
"hello": {
"description": "Hello, world!"
}
}
```
```tsx
export default function MyComponent() {
const { t } = useTranslation()
return
{t('hello.description')}
}
```
Вам потребуется заменить это на:
```tsx
export default function MyComponent() {
const gt = useGT()
return {gt('Hello, world!')}
}
// ИЛИ
export default function MyComponent() {
return Hello, world!
}
```
Сделайте это для всех мест, где используется ваша старая библиотека i18n.
### Вариант 2: Полностью перенесите проект, но продолжайте использовать словари из старой библиотеки i18n
Предположим, вы хотите перенести проект на `gt-next`, но при этом продолжить использовать словари из старой библиотеки i18n
и задействовать встроенные возможности GT только для нового контента.
В этом случае можно сделать примерно то же, что и в варианте 1:
Найдите все места, где используется ваша старая библиотека i18n, например хуки `useTranslations`, и замените их на хуки `useTranslations` из `gt-next`.
Хук `useTranslations` работает очень похоже на хуки `useTranslations` в других библиотеках i18n, поэтому использовать его можно так же.
```tsx
import { useTranslation } from 'react-i18next'
export default function MyComponent() {
const { t } = useTranslation()
return {t('hello.description')}
}
```
```tsx
import { useTranslations } from 'gt-next'
export default function MyComponent() {
const t = useTranslations()
return {t('hello.description')}
}
```
С точки зрения конфигурации вам нужно создать файл `dictionary.[js|ts|json]` в корне проекта или в каталоге `src`.
Скопируйте содержимое старого файла словаря в этот новый файл.
Функция инициализации `withGTConfig` в `next.config.js` автоматически обнаружит файл словаря в корне проекта или в каталоге `src`.
Подробнее см. в руководстве [словари](/docs/next/guides/dictionaries).
### Вариант 3: Пока продолжайте использовать старую библиотеку i18n и переносите в `gt-next` только часть проекта
Это самый гибкий вариант, и он потребует минимальных единовременных изменений в коде.
В этом случае можно действовать примерно так же, как в варианте 2, но перенести в `gt-next` только часть проекта.
Например, для одних компонентов можно по-прежнему использовать старую библиотеку i18n, а для других и для нового контента — только `gt-next`.
Этот вариант не рекомендуется, так как вам придется поддерживать в проекте две разные библиотеки i18n, а это может быть сложно и приводить к ошибкам.
## Советы по миграции
### 1. По возможности используйте хук `useGT` или компонент ``
По возможности рекомендуем использовать хук `useGT` или компонент ``.
Это значительно упростит редактирование контента в будущем и сделает кодовую базу гораздо более читаемой.
### 2. Используйте хук `useTranslations` для существующего контента
Хук `useTranslations` позволяет и дальше использовать существующие словари.
Мы предлагаем его, чтобы упростить миграцию, но не рекомендуем использовать его для нового контента.
### 3. Использование ИИ
Если вы используете ИИ, чтобы упростить миграцию проекта, вам доступны `LLMs.txt` и `LLMs-full.txt` по следующим адресам:
* [LLMs.txt](/llms.txt)
* [LLMs-full.txt](/llms-full.txt)