# General Translation React SDKs (gt-react, gt-next): Быстрый старт React Native
URL: https://generaltranslation.com/ru/docs/react/react-native-quickstart.mdx
---
title: Быстрый старт React Native
description: Добавьте General Translation в приложение React Native с помощью gt-react-native, как для Expo, так и для bare React Native CLI.
related:
links:
- /docs/react/guides/translating-jsx
- /docs/react/guides/translating-strings
- /docs/react/guides/managing-locales
- /docs/react/guides/formatting-variables
---
`gt-react-native` добавляет автоматическую интернационализацию в приложения React Native. Вы инициализируете General Translation в точке входа приложения, добавляете Babel-плагин для полифилов, необходимых React Native, и оборачиваете приложение в `GTProvider`.
В этом кратком руководстве рассматриваются как Expo, так и bare React Native CLI. Для веб-приложений React используйте [Быстрый старт React](/docs/react/react-quickstart).
`gt-react-native` — экспериментальное решение и может работать не во всех проектах. В пакет входит нативный модуль, поэтому **Expo Go не поддерживается** — вам нужна development build.
## Быстрый старт [#quickstart]
Установите пакет, создайте конфигурационный файл, настройте полифилы, добавьте загрузчик переводов, инициализируйте General Translation с помощью провайдера, пометьте контент для перевода и сгенерируйте переводы.
### 1. Установите `gt-react-native`
Установите `gt-react-native` как зависимость, а [`gt` CLI](/docs/cli/quickstart) — как зависимость для разработки.
```bash
npm install gt-react-native && npm install gt --save-dev
```
```bash
yarn add gt-react-native && yarn add --dev gt
```
```bash
bun add gt-react-native && bun add --dev gt
```
```bash
pnpm add gt-react-native && pnpm add --save-dev gt
```
*Примечание: при использовании bare React Native CLI после установки выполните `cd ios && pod install`, чтобы подключить нативный модуль.*
### 2. Создайте `gt.config.json`
Создайте файл `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.gt.output` — путь, по которому CLI записывает файлы перевода. Вместо `[locale]` подставляется код каждой локали.
### 3. Настройте полифилы
Среда выполнения JavaScript в React Native не включает API `Intl`, которые нужны `gt-react-native`. Добавьте входящий в комплект плагин Babel, указав в `entryPointFilePath` путь к входному файлу приложения.
```js title="babel.config.js"
const { plugin: gtPlugin } = require('gt-react-native/plugin');
const gtConfig = require('./gt.config.json');
module.exports = function (api) {
api.cache(true);
return {
presets: ['babel-preset-expo'],
plugins: [
[
gtPlugin,
{
locales: [gtConfig.defaultLocale, ...gtConfig.locales],
entryPointFilePath: require.resolve('expo-router/entry'),
},
],
],
};
};
```
```js title="babel.config.js"
const path = require('path');
const { plugin: 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, 'index.js'),
},
],
],
};
```
Плагин — это **именованный экспорт**, поэтому используйте деструктуризацию: `const { plugin: gtPlugin } = require('gt-react-native/plugin')`. Он добавляет необходимые полифилы `@formatjs` в начало входного файла. Если в вашей конфигурации это не сработает, импортируйте полифилы вручную — см. [документацию FormatJS по полифилам](https://formatjs.github.io/docs/polyfills).
### 4. Создайте загрузчик переводов
Metro (бандлер React Native) не поддерживает динамические импорты, поэтому свяжите каждую локаль с её файлом перевода с помощью статических вызовов `require`.
```ts title="loadTranslations.ts"
const translations: Record = {
es: require('./src/_gt/es.json'),
fr: require('./src/_gt/fr.json'),
ja: require('./src/_gt/ja.json'),
};
export function loadTranslations(locale: string) {
return translations[locale] ?? {};
}
```
CLI генерирует эти файлы при запуске `npx gt translate`.
### 5. Инициализируйте General Translation и добавьте провайдер
Вызовите [`initializeGT`](/docs/node/reference/functions/initialize-gt) один раз в точке входа приложения, до рендеринга, а затем оберните приложение в `GTProvider`. В отличие от веб-пакетов, `GTProvider` загружает переводы самостоятельно, поэтому передавать проп `translations` не нужно, и обычно `locale` тоже передавать не требуется — локаль определяется автоматически. Необязательный проп `locale` по-прежнему поддерживается, если вам нужно переопределить автоматическое определение.
```tsx title="app/_layout.tsx"
import { Slot } from 'expo-router';
import { GTProvider, initializeGT } from 'gt-react-native';
import gtConfig from '../gt.config.json';
import { loadTranslations } from '../loadTranslations';
// Инициализируйте один раз на уровне модуля
initializeGT({
...gtConfig,
loadTranslations,
projectId: process.env.EXPO_PUBLIC_GT_PROJECT_ID,
devApiKey: process.env.EXPO_PUBLIC_GT_DEV_API_KEY,
});
export default function RootLayout() {
return (
);
}
```
```js title="index.js"
import { AppRegistry } from 'react-native';
import { initializeGT } from 'gt-react-native';
import App from './App';
import { name as appName } from './app.json';
import gtConfig from './gt.config.json';
import { loadTranslations } from './loadTranslations';
// Инициализируйте один раз, до регистрации приложения
initializeGT({ ...gtConfig, loadTranslations });
AppRegistry.registerComponent(appName, () => App);
```
```tsx title="App.tsx"
import { GTProvider } from 'gt-react-native';
import Home from './src/Home';
export default function App() {
return (
);
}
```
*Примечание: параметры `projectId` и `devApiKey` включают перевод по запросу во время разработки. В Expo сделайте их доступными с префиксом `EXPO_PUBLIC_`.*
### 6. Пометьте содержимое для перевода
Оберните JSX в компонент [``](/docs/react/reference/components/t), чтобы переводить его на месте. Для отдельных строк, таких как значения `placeholder` и `accessibilityLabel`, используйте хук [`useGT`](/docs/react/reference/hooks/use-gt). Чтобы создать переключатель языка, используйте хук [`useLocaleSelector`](/docs/react/reference/hooks/use-locale-selector) — в `gt-react-native` нет готового компонента селектора.
```tsx title="src/Home.tsx"
import { Text, View, Pressable, TextInput } from 'react-native';
import { T, useGT, useLocaleSelector } from 'gt-react-native';
export default function Home() {
const gt = useGT();
const { locales, locale, setLocale } = useLocaleSelector();
return (
{locales.map((l) => (
setLocale(l)}>
{l}
))}
Welcome to my app
);
}
```
`useGT()` возвращает функцию перевода, поэтому вызывайте её так: `const gt = useGT();`.
### 7. Сгенерируйте переводы
Запустите CLI, чтобы перевести проект с помощью API General Translation.
```bash
npx gt translate
```
Добавьте команду в скрипт сборки, чтобы в продакшен-сборках всегда были актуальные переводы:
```json title="package.json"
{
"scripts": {
"build": "npx gt translate && "
}
}
```
*Примечание: для `npx gt translate` требуются идентификатор проекта и production API key, заданные в переменных окружения `GT_PROJECT_ID` и `GT_API_KEY`. Выполните `npx gt auth` или откройте [Dashboard](/docs/platform/dashboard/get-started), чтобы получить их.*
## Next steps
- /docs/react/guides/translating-jsx
- /docs/react/guides/translating-strings
- /docs/react/guides/managing-locales
- /docs/react/guides/formatting-variables