# General Translation React SDKs (gt-react, gt-next): Быстрый старт SPA для React URL: https://generaltranslation.com/ru/docs/react/react-spa-quickstart.mdx --- title: Быстрый старт SPA для React description: Добавьте поддержку нескольких языков в одностраничное React-приложение с помощью General Translation менее чем за 10 минут. related: links: - /docs/react/guides/developing-spa-translations - /docs/react/guides/translating-jsx - /docs/react/guides/managing-locales - /docs/react/guides/storing-translations --- # Быстрый старт SPA для React К концу этого руководства ваше одностраничное React-приложение будет отображать контент на нескольких языках, а пользователи смогут переключать язык с помощью переключателя языка. В одностраничном приложении `gt-react` работает целиком в браузере — вы инициализируете его один раз при запуске с помощью `initializeGTSPA()`, и компонент provider не требуется. **Требования:** * React-приложение с клиентским рендерингом (Vite, webpack или аналогичный инструмент) * Node.js 18+ **Совет:** Запустите `npx gt@latest`, чтобы настроить всё с помощью [мастера настройки](/docs/cli/reference/commands/init). В этом руководстве описана ручная настройка. **Примечание:** Если ваше приложение рендерится на сервере, используйте вместо этого руководство [Быстрый старт React](/docs/react/react-quickstart). ## Быстрый старт [#quickstart] ### 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": "src/_gt/[locale].json" } } } ``` * **`defaultLocale`** — язык, на котором написано ваше приложение (исходный язык). * **`locales`** — языки, на которые вы хотите переводить приложение. Выберите любой из [списка поддерживаемых локалей](/docs/platform/dashboard/reference/supported-locales). * **`files`** — указывает CLI, где сохранять файлы перевода. Путь `output` должен совпадать с путём импорта в вашей функции `loadTranslations` (шаг 3). **Расположение файлов:** Бандлеры, такие как Vite, импортируют файлы перевода как модули, поэтому они должны находиться внутри `src/`. ### 3. Создайте загрузчик переводов В SPA для `gt-react` нужна функция, которая будет загружать файлы перевода в браузере во время выполнения. Создайте файл `loadTranslations`: ```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 {}; } } ``` Эта функция загружает JSON-файлы перевода из каталога `src/_gt/`. CLI создаёт эти файлы при запуске `npx gt translate`. ### 4. Инициализируйте библиотеку Вызовите **`initializeGTSPA`** один раз при запуске, до рендеринга приложения. Она принимает вашу конфигурацию и загрузчик переводов, определяет локаль пользователя и загружает соответствующие переводы. Самый надёжный вариант — небольшой входной модуль, который сначала инициализирует GT, а затем загружает остальную часть приложения. Это позволяет переводить содержимое на уровне модуля. ```ts title="src/index.ts" import { initializeGTSPA } from 'gt-react'; import gtConfig from '../gt.config.json'; import loadTranslations from './loadTranslations'; await initializeGTSPA({ defaultLocale: gtConfig.defaultLocale, locales: gtConfig.locales, loadTranslations, }); await import('./main'); // рендерим приложение только после того, как GT будет готов ``` ```tsx title="src/main.tsx" import { StrictMode } from 'react'; import { createRoot } from 'react-dom/client'; import App from './App'; createRoot(document.getElementById('root')!).render( ); ``` Затем обновите тег модульного скрипта в вашем `index.html`, чтобы он указывал на новую точку входа: измените его `src` с `/src/main.tsx` на `/src/index.ts`. ```html title="index.html" ``` `initializeGTSPA` запускается один раз при старте — конфигурация остаётся неизменной на всё время работы приложения. После этого переводы можно получать в любом модуле. **Оборачивать приложение в provider не нужно.** **Совет:** Следуйте руководству [Разработка с переводами SPA](/docs/react/guides/developing-spa-translations), чтобы добавить компилятор и учётные данные для разработки. ### 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, сколько нужно. Всё внутри — текст, вложенные элементы, даже форматирование — переводится как единое целое. Для строк вне компонентов React используйте **`t()`**. Это работает на уровне модуля, потому что `initializeGTSPA()` загружает переводы раньше остальной части приложения: ```ts title="src/navigation.ts" import { t } from 'gt-react'; export const navigation = [ { label: t('Home'), href: '/' }, { label: t('About'), href: '/about' }, ]; ``` ### 6. Добавьте переключатель языка Добавьте **``**, чтобы пользователи могли переключать язык: ```tsx title="src/components/Welcome.tsx" import { T, LocaleSelector } from 'gt-react'; export default function Welcome() { return (

Welcome to my app

This content will be translated automatically.

); } ``` `LocaleSelector` отображает раскрывающийся список с языками из вашего `gt.config.json`. Когда пользователь выбирает язык, `gt-react` сохраняет этот выбор в cookie-файл `generaltranslation.locale` и перезагружает страницу — затем `initializeGTSPA` снова выполняется и загружает переводы для новой локали до отрисовки приложения. ### 7. Пройдите аутентификацию и переведите Перед переводом пройдите аутентификацию в General Translation: ```bash npx gt auth ``` Следуйте подсказкам, чтобы создать аккаунт или войти в систему. Когда появится запрос на выбор типа ключа, выберите ключ для production. Команда сгенерирует API-ключ и project ID, а затем добавит их в `.env.local` в корне вашего проекта: ```bash title=".env.local" GT_PROJECT_ID="your-project-id" GT_API_KEY="gtx-api-your-production-key" ``` **Держите ключ в секрете:** не коммитьте `.env.local` и не раскрывайте `GT_API_KEY` в браузерном коде. Затем выполните команду `translate`, чтобы сгенерировать файлы перевода для всех настроенных локалей: ```bash npx gt translate ``` CLI сканирует ваше приложение, переводит его содержимое и записывает результат по пути вывода, указанному в `gt.config.json`. Запускайте его снова всякий раз, когда меняется исходное содержимое. Вот и всё — теперь ваше приложение стало многоязычным. 🎉 ## Устранение неполадок [#troubleshooting] `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) Неоднозначный текст может приводить к неточным переводам. Например, "apple" может означать фрукт или компанию. Добавьте проп `$context`, чтобы уточнить контекст: ```jsx Apple ``` И ``, и `useGT()` поддерживают опцию `$context`. ## Next steps - /docs/react/guides/developing-spa-translations - /docs/react/guides/translating-jsx - /docs/react/guides/managing-locales - /docs/react/guides/storing-translations