# react-native: Краткое руководство по React Native
URL: https://generaltranslation.com/ru/docs/react-native/tutorials/quickstart.mdx
---
title: Краткое руководство по React Native
description: Добавьте поддержку нескольких языков в приложение React Native менее чем за 10 минут
---
К концу этого руководства ваше приложение React Native будет отображать контент на нескольких языках, а пользователи смогут переключать язык.
**Предварительные требования:**
* Приложение React Native CLI (не Expo — для проектов Expo см. [краткое руководство по Expo](/docs/react-native/tutorials/quickstart-expo))
* Node.js 18+
`gt-react-native` всё ещё находится в экспериментальной стадии и может работать не во всех проектах.
Если вы столкнётесь с проблемами, пожалуйста, сообщите нам об этом, [создав issue на GitHub](https://github.com/generaltranslation/gt/issues).
**Нужна автоматическая настройка?** Выполните `npx gt@latest`, чтобы настроить всё с помощью [мастера настройки](/docs/cli/init). В этом руководстве рассматривается ручная настройка.
***
## Шаг 1: Установите пакеты
`gt-react-native` — библиотека, которая обеспечивает переводы в вашем приложении. `gt` — CLI-инструмент, который подготавливает переводы к продакшену.
```bash
npm i gt-react-native
npm i -D gt
cd ios && pod install
```
```bash
yarn add gt-react-native
yarn add --dev gt
cd ios && pod install
```
```bash
bun add gt-react-native
bun add --dev gt
cd ios && pod install
```
```bash
pnpm add gt-react-native
pnpm add --save-dev gt
cd ios && pod install
```
***
## Шаг 2: Создайте файл конфигурации перевода
Создайте файл **`gt.config.json`** в корне проекта. В нём библиотеке указывается, какие языки вы поддерживаете:
```json title="gt.config.json"
{
"defaultLocale": "en",
"locales": ["es", "fr", "ja"],
"files": {
"gt": {
"output": "content/[locale].json"
}
}
}
```
* **`defaultLocale`** — язык, на котором написано ваше приложение (исходный язык).
* **`locales`** — языки, на которые вы хотите переводить. Выберите любые из [списка поддерживаемых локалей](/docs/platform/supported-locales).
* **`files.gt.output`** — путь, по которому CLI сохраняет файлы перевода. `[locale]` заменяется кодом языка (например, `content/es.json`).
***
## Шаг 3: Настройте полифилы
Среда выполнения JavaScript в React Native не включает API `Intl`, которые нужны `gt-react-native`. Самое простое решение — использовать входящий в комплект плагин.
Добавьте его в конфигурацию Babel, указав `entryPointFilePath` для входного файла вашего приложения (проверьте поле `"main"` в вашем `package.json`):
```js title="babel.config.js"
const path = require('path');
const gtPlugin = require('gt-react-native/plugin');
const gtConfig = require('./gt.config.json');
module.exports = {
presets: ['module:@react-native/babel-preset'],
plugins: [
[
gtPlugin,
{
locales: [gtConfig.defaultLocale, ...gtConfig.locales],
entryPointFilePath: path.resolve(__dirname, 'App.tsx'),
},
],
],
};
```
Установите полифилы FormatJS и импортируйте их в начале файла точки входа. Вам понадобятся базовые полифилы, а также данные для каждой локали каждого поддерживаемого языка.
Полный список см. в [документации по полифилам FormatJS](https://formatjs.github.io/docs/polyfills). Как минимум вам нужны:
```tsx title="index.js"
import '@formatjs/intl-getcanonicallocales/polyfill';
import '@formatjs/intl-locale/polyfill';
import '@formatjs/intl-pluralrules/polyfill-force';
import '@formatjs/intl-numberformat/polyfill';
import '@formatjs/intl-datetimeformat/polyfill';
import '@formatjs/intl-datetimeformat/add-all-tz';
// Добавьте данные локали для каждого языка:
import '@formatjs/intl-pluralrules/locale-data/en';
import '@formatjs/intl-pluralrules/locale-data/es';
import '@formatjs/intl-numberformat/locale-data/en';
import '@formatjs/intl-numberformat/locale-data/es';
// ... повторите для каждой локали и каждого полифила
```
***
## Шаг 4: Создайте загрузчик переводов
Metro (сборщик React Native) не поддерживает динамические импорты, поэтому нужно явно сопоставить каждой локали её файл перевода:
```ts title="loadTranslations.ts"
const translations: Record = {
es: require("./content/es.json"),
fr: require("./content/fr.json"),
ja: require("./content/ja.json"),
};
export function loadTranslations(locale: string) {
return translations[locale] ?? {};
}
```
Эти файлы создаются через CLI при запуске `npx gt translate`.
***
## Шаг 5: Добавьте GTProvider в приложение
Компонент **`GTProvider`** предоставляет всему приложению доступ к переводам. Оберните приложение на корневом уровне:
```tsx title="App.tsx"
import { GTProvider } from 'gt-react-native';
import gtConfig from './gt.config.json';
import { loadTranslations } from './loadTranslations';
export default function App() {
return (
{/* Содержимое вашего приложения */}
);
}
```
`GTProvider` управляет состоянием локали и предоставляет переводы всем дочерним компонентам. Свойство `devApiKey` включает on-demand перевод в процессе разработки.
***
## Шаг 6: Пометьте контент для перевода
Оберните любой текст, который нужно перевести, в компонент **``**:
```tsx title="screens/Home.tsx"
import { Text, View } from 'react-native';
import { T } from 'gt-react-native';
export default function Home() {
return (
Welcome to my app
This content will be translated automatically.
);
}
```
Всё внутри `` переводится как одно целое.
***
## Шаг 7: Добавьте переключатель языка
Используйте хук **`useLocaleSelector`**, чтобы реализовать выбор языка. В отличие от `gt-react`, `gt-react-native` не экспортирует готовый компонент `` — интерфейс нужно собрать самостоятельно с помощью этого хука:
```tsx title="screens/Home.tsx"
import { Text, View, Pressable } from 'react-native';
import { T, useLocaleSelector } from 'gt-react-native';
export default function Home() {
const { locales, locale, setLocale } = useLocaleSelector();
return (
{locales.map((l) => (
setLocale(l)}>
{l}
))}
Welcome to my app
);
}
```
`useLocaleSelector` возвращает доступные локали, текущую локаль и функцию установки, давая вам полный контроль над интерфейсом.
***
## Шаг 8: Настройте переменные окружения (необязательно)
Чтобы видеть переводы во время разработки, вам понадобятся API-ключи от General Translation. Они позволяют использовать **on-demand перевод** — приложение будет переводить контент в реальном времени по мере разработки.
Создайте файл **`.env`**:
```bash title=".env"
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.
Никогда не включайте продакшен API-ключи в сборку приложения и не коммитьте их в систему контроля версий.
Да. Без API-ключей `gt-react-native` работает как обычная библиотека i18n. on-demand перевода в режиме разработки не будет, но вы всё равно можете:
* Подключать собственные файлы переводов вручную
* Использовать все компоненты (``, ``, `LocaleSelector` и т. д.)
* Запустить `npx gt generate`, чтобы создать template файлов перевода, а затем перевести их самостоятельно
***
## Шаг 9: Проверка в работе
Соберите и запустите приложение:
```bash
npx react-native run-ios
# или
npx react-native run-android
```
Используйте переключатель языка, чтобы сменить язык. Вы должны увидеть переведённый контент.
Во время разработки переводы подгружаются on-demand — при первом переключении на новый язык вы можете ненадолго увидеть индикатор загрузки. В продакшене переводы генерируются заранее и загружаются мгновенно.
***
## Шаг 10: Переводите строки (не только JSX)
Для обычных строк — например, атрибутов `placeholder` или значений `accessibilityLabel` — используйте **Hook `useGT`**:
```tsx title="screens/Contact.tsx"
import { TextInput, View } from 'react-native';
import { useGT } from 'gt-react-native';
export default function Contact() {
const gt = useGT();
return (
);
}
```
***
## Шаг 11: Развертывание в продакшен
В продакшене переводы генерируются заранее на этапе сборки (без API-вызовов в реальном времени). Добавьте команду `translate` в скрипт сборки:
```json title="package.json"
{
"scripts": {
"build": "npx gt translate && "
}
}
```
Задайте переменные окружения **продакшен** в CI/CD:
```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). Никогда не включайте боевые ключи в бандл приложения.
Вот и всё — теперь ваше приложение поддерживает несколько языков. 🎉
***
## Устранение неполадок
```
ERROR [Invariant Violation: TurboModuleRegistry.getEnforcing(...): 'GtReactNative' could not be found.]
```
Это означает, что нативный модуль не был подключён. Выполните `cd ios && pod install`, затем пересоберите приложение.
```
Error: You are using invalid locale codes in your configuration.
```
Обычно это означает, что полифилы настроены неправильно. Убедитесь, что плагин Babel настроен (или что полифилы импортированы вручную), и очистите кэш Metro:
```bash
npx react-native start --reset-cache
```
Это ожидаемо. В среде разработки переводы выполняются on-demand (контент переводится в реальном времени через API). В **продакшене этой задержки нет** — все переводы заранее генерируются командой `npx gt translate`.
Неоднозначный текст может приводить к неточным переводам. Например, "apple" может означать фрукт или компанию. Добавьте проп `context`, чтобы задать контекст:
```jsx
Apple
```
И ``, и `useGT()` поддерживают опцию `context`.
***
## Следующие шаги
* [**Руководство по компоненту ``**](/docs/react-native/guides/t) — Узнайте о переменных, формах множественного числа и продвинутых приёмах перевода
* [**Руководство по переводу строк**](/docs/react-native/guides/strings) — Подробно о `useGT`
* [**Переменные компоненты**](/docs/react-native/guides/variables) — Работа с динамическим контентом с помощью ``, ``, `` и ``
* [**Развертывание в продакшене**](/docs/react-native/tutorials/quickdeploy) — Настройка CI/CD, кэширование и оптимизация производительности