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