# gt-react: General Translation React SDK: Быстрый старт с React URL: https://generaltranslation.com/ru/docs/react.mdx --- title: Быстрый старт с React description: Добавьте поддержку нескольких языков в ваше React-приложение менее чем за 10 минут --- К концу этого руководства ваше React-приложение будет отображать контент на нескольких языках, а пользователи смогут переключать язык. **Предварительные требования:** * React-приложение (Vite, Create React App или аналогичное) * Node.js 18+ **Нужна автоматическая настройка?** Выполните `npx gt@latest`, чтобы настроить всё с помощью [мастера настройки](/docs/cli/init). В этом руководстве описана ручная настройка. *** ## Шаг 1: Установите пакеты `gt-react` — библиотека, которая отвечает за переводы в вашем приложении. `gt` — CLI-инструмент, который подготавливает переводы для продакшена. ```bash npm i gt-react npm i -D gt ``` ```bash yarn add gt-react yarn add --dev gt ``` ```bash bun add gt-react bun add --dev gt ``` ```bash pnpm add gt-react pnpm add --save-dev gt ``` *** ## Шаг 2: Создайте файл конфигурации перевода Создайте файл **`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`** — указывает CLI, где сохранять файлы перевода. Путь `output` должен совпадать с путём импорта в функции `loadTranslations` (шаг 3). **Используете Vite?** Укажите путь `output` как `"src/_gt/[locale].json"` вместо `"public/_gt/[locale].json"`. Vite импортирует файлы перевода как модули, поэтому они должны находиться в `src/`, а не в `public/`. *** ## Шаг 3: Создайте загрузчик переводов `gt-react` полностью работает на клиенте, поэтому ему нужна функция для загрузки файлов перевода во время выполнения. Создайте файл `loadTranslations`: ```ts title="src/loadTranslations.ts" export default async function loadTranslations(locale: string) { try { const translations = await import(`../public/_gt/${locale}.json`); return translations.default; } catch (error) { console.warn(`No translations found for ${locale}`); return {}; } } ``` Эта функция загружает JSON-файлы переводов из каталога `public/_gt/`. Эти файлы CLI создаёт при запуске `npx gt translate`. Поскольку в Vite файлы перевода находятся в `src/_gt/` (см. шаг 2), обновите путь импорта: ```ts title="src/loadTranslations.ts" export default async function loadTranslations(locale: string) { try { const translations = await import(`./_gt/${locale}.json`); return translations.default; } catch (error) { console.warn(`No translations found for ${locale}`); return {}; } } ``` Конфигурация webpack в CRA блокирует динамический `import()` за пределами `src/`. Вместо этого используйте `fetch()`: ```ts title="src/loadTranslations.ts" export default async function loadTranslations(locale: string) { try { const response = await fetch(`${process.env.PUBLIC_URL}/_gt/${locale}.json`); if (!response.ok) throw new Error('Not found'); return await response.json(); } catch (error) { console.warn(`No translations found for ${locale}`); return {}; } } ``` *** ## Шаг 4: Добавьте GTProvider в приложение Компонент **`GTProvider`** предоставляет всему приложению доступ к переводам. Оберните приложение на корневом уровне: ```tsx title="src/App.tsx" import { GTProvider } from 'gt-react'; import gtConfig from '../gt.config.json'; import loadTranslations from './loadTranslations'; export default function App() { return ( {/* Содержимое вашего приложения */} ); } ``` `GTProvider` принимает конфигурацию и загрузчик переводов через пропсы. Он управляет состоянием локали и предоставляет переводы всем дочерним компонентам. CRA ограничивает импорты файлами внутри `src/`, поэтому `import gtConfig from '../gt.config.json'` завершится ошибкой. Либо скопируйте `gt.config.json` в `src/`, либо укажите конфигурацию прямо в коде: ```tsx title="src/App.tsx" import { GTProvider } from 'gt-react'; import loadTranslations from './loadTranslations'; export default function App() { return ( {/* Содержимое вашего приложения */} ); } ``` *** ## Шаг 5: Отметьте контент для перевода Теперь оберните любой текст, который нужно перевести, в компонент **``**. `` означает "translate": ```tsx title="src/components/Welcome.tsx" import { T } from 'gt-react'; export default function Welcome() { return (

Welcome to my app

This content will be translated automatically.

); } ``` Вы можете обернуть в `` сколько угодно JSX. Всё внутри него — текст, вложенные элементы и даже форматирование — переводится как единое целое. *** ## Шаг 6: Добавьте переключатель языка Добавьте **``**, чтобы пользователи могли переключать язык: ```tsx title="src/components/Welcome.tsx" import { T, LocaleSelector } from 'gt-react'; export default function Welcome() { return (

Добро пожаловать в моё приложение

Этот контент будет переведён автоматически.

); } ``` `LocaleSelector` отображает выпадающий список с языками из вашего `gt.config.json`. *** ## Шаг 7: Настройте переменные окружения (необязательно) Чтобы видеть переводы во время разработки, вам понадобятся API-ключи General Translation. Они позволяют использовать **перевод on-demand** — приложение будет переводить контент в реальном времени прямо в процессе разработки. Создайте файл **`.env.local`** с правильным префиксом для вашего сборщика: ```bash title=".env.local" VITE_GT_API_KEY="your-dev-api-key" VITE_GT_PROJECT_ID="your-project-id" ``` ```bash title=".env.local" REACT_APP_GT_API_KEY="your-dev-api-key" REACT_APP_GT_PROJECT_ID="your-project-id" ``` Получите бесплатные ключи на [dash.generaltranslation.com](https://dash.generaltranslation.com/signup) или выполнив: ```bash npx gt auth ``` Для разработки используйте ключ, начинающийся с `gtx-dev-`. Рабочие ключи (`gtx-api-`) предназначены только для CI/CD. Клиентские сборщики, такие как Vite и CRA, требуют, чтобы переменные окружения имели специальные префиксы (`VITE_` или `REACT_APP_`), чтобы они были доступны в браузере. Обычный `GT_API_KEY` будет недоступен во время выполнения. Да. Без API-ключей `gt-react` работает как стандартная i18n-библиотека. Вы не получите on-demand перевод в процессе разработки, но всё равно сможете: * Подключить свои файлы переводов вручную * Использовать все компоненты (``, ``, `LocaleSelector` и т. д.) * Запустить `npx gt generate`, чтобы создать шаблоны файлов переводов, а затем перевести их самостоятельно *** ## Шаг 8: Проверьте, как это работает Запустите dev-сервер: ```bash npm run dev ``` ```bash yarn dev ``` ```bash bun dev ``` ```bash pnpm dev ``` Откройте приложение и переключайте языки в выпадающем списке. Контент должен отображаться в переводе. В режиме разработки выполняется перевод on-demand — при первом переключении на новый язык может ненадолго отображаться состояние загрузки. В продакшене переводы генерируются заранее и загружаются мгновенно. *** ## Шаг 9: Переводите строки (не только JSX) Для обычных строк — например, значений атрибутов `placeholder`, `aria-label` или `alt` — используйте Hook **`useGT`**: ```tsx title="src/components/ContactForm.tsx" import { useGT } from 'gt-react'; export default function ContactForm() { const gt = useGT(); return (
); } ``` *** ## Шаг 10: Развертывание в продакшене В продакшене переводы генерируются заранее на этапе сборки (без API-вызовов в реальном времени). Добавьте команду `translate` в скрипт сборки: ```json title="package.json" { "scripts": { "build": "npx gt translate && " } } ``` Задайте переменные окружения для **продакшена** у вашего хостинг-провайдера (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). Никогда не публикуйте свой `GT_API_KEY` в открытом доступе. Вот и всё — теперь ваше приложение многоязычное. 🎉 *** ## Устранение неполадок `gt-react` хранит выбранный пользователем язык в 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) Это нормально. В режиме разработки выполняется перевод on-demand (контент переводится в реальном времени через API). В продакшене **этой задержки нет** — все переводы заранее генерируются командой `npx gt translate`. Неоднозначный текст может приводить к неточным переводам. Например, "apple" может означать фрукт или компанию. Чтобы помочь системе, добавьте проп `context`: ```jsx Apple ``` И ``, и `useGT()` поддерживают параметр `context`. *** ## Следующие шаги * [**Руководство по компоненту ``**](/docs/react/guides/t) — Узнайте о переменных, формах множественного числа и более сложных сценариях перевода * [**Руководство по переводу строк**](/docs/react/guides/strings) — Подробный разбор `useGT` * [**Компоненты для переменных**](/docs/react/guides/variables) — Работайте с динамическим контентом с помощью ``, ``, `` и `` * [**Плюрализация**](/docs/react/api/components/plural) — Работайте с формами множественного числа с помощью компонента `` * [**Развертывание в продакшен**](/docs/react/tutorials/quickdeploy) — Настройка CI/CD, кэширование и оптимизация производительности * [**Общие строки**](/docs/react/guides/shared-strings) — Переводите текст в массивах, объектах конфигурации и общих данных с помощью `msg()`