# General Translation React SDKs (gt-react, gt-next): 设置 React Native URL: https://generaltranslation.com/zh/docs/react/react-native/setup.mdx --- title: 设置 React Native description: 在 React Native 应用中初始化 General Translation,添加 provider,并加载翻译,适用于 Expo 和原生 React Native CLI。 --- `gt-react-native` 需要在应用的入口文件中完成设置:先在模块顶层调用一次 [`initializeGT`](/docs/node/reference/functions/initialize-gt),再用 [``](/docs/react/reference/components/gt-provider) 包裹应用。与 Web 端的包不同,provider 会自行加载翻译,因此你无需向它传入 `translations` prop,而且默认会从设备解析 `locale`。 本页介绍 React Native 设置中与平台相关的部分。若要查看包含安装和 CLI 在内的完整分步流程,请参阅 [React Native Quickstart](/docs/react/react-native-quickstart)。关于此设置所依赖的 polyfill plugin,请参阅 [Plugin](/docs/react/react-native/plugin)。 *警告:`gt-react-native` 包含原生模块,因此不支持 Expo Go——请运行开发构建 (`npx expo run:ios` / `run:android`) 。如果你使用的是原生 React Native CLI,安装后请运行 `cd ios && pod install`。* ## 初始化 General Translation [#initialize] 在应用开始渲染前,请在入口文件的模块级别调用一次 `initializeGT`。展开你的 `gt.config.json`,并传入 [`loadTranslations`](/docs/react/reference/functions/load-translations) 函数。添加 `projectId` 和 `devApiKey`,即可在开发期间启用按需翻译。 ```tsx import { 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, }); ``` `initializeGT` 接受与其他框架相同的 `locale` 和 delivery 选项——请参阅[配置参考](/docs/react/reference/config#initialization)。`gt.config.json` 不会自动读取,因此请导入它,并在调用时将其展开。 *注意:在 Expo 中,公共环境变量必须使用 `EXPO_PUBLIC_` 前缀。绝不要在你的应用包中暴露生产环境 API Key。* ## 添加 provider [#provider] 使用 `` 包裹你的应用。在 React Native 中,该 provider 会在内部加载当前活动区域设置的翻译并管理区域设置状态,因此不需要 `translations` prop,且默认会从设备解析 `locale` (你仍然可以传入可选的 `locale` 覆盖值——见下文) 。翻译加载期间,它会渲染加载中的后备内容;你可以传入 `fallback` prop 进行自定义。 ```tsx title="App.tsx" import { GTProvider } from 'gt-react-native'; import Home from './src/Home'; export default function App() { return ( ); } ``` 该 provider 还接受可选的 `locale`、`region` 和 `enableI18n` 属性,用于覆盖它默认会从设备中解析出的值。 ## 加载翻译 [#load-translations] Metro (即 React Native 的 bundler) 不支持动态导入,因此请使用静态 `require` 调用,将每个区域设置映射到对应的翻译文件。运行 `npx gt translate` 时,CLI 会生成这些文件。 ```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] ?? {}; } ``` ## 入口文件 [#entry-points] 应在何处调用 `initializeGT`,取决于你的项目类型。 在根布局的模块级进行初始化,然后渲染 provider。 ```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 ( ); } ``` 在 `index.js` 中初始化,需在应用注册前完成,并在 `App.tsx` 中添加 provider。 ```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 ( ); } ``` 这两种入口文件也都需要在 `babel.config.js` 中配置 [polyfill plugin](/docs/react/react-native/plugin),否则 `gt-react-native` 所依赖的 `Intl` API 将不可用。