# General Translation React SDKs (gt-react, gt-next): React 快速入门 URL: https://generaltranslation.com/zh/docs/react/react-quickstart.mdx --- title: React 快速入门 description: 只需不到 10 分钟,即可使用 General Translation 为服务器端渲染的 React 应用添加多语言支持。 related: links: - /docs/react/guides/translating-jsx - /docs/react/guides/translating-strings - /docs/react/guides/managing-locales - /docs/react/guides/formatting-variables --- # React 快速入门 完成本指南后,你的服务器端渲染 React 应用就能以多种语言显示内容,并提供一个可供用户切换语言的语言切换器。 **前提条件:** * 一个服务器端渲染的 React 应用 (React Router 或自定义 SSR setup) * Node.js 18+ **注意:** 如果你的应用完全通过 Vite 在浏览器中渲染,请改看 [React SPA 快速入门](/docs/react/react-spa-quickstart)。该指南会完全跳过 provider。 ## 快速入门 [#quickstart] ### 1. 安装依赖包 `gt-react` 是为应用提供翻译功能的库。`gt` 是用于为 Production 准备翻译的 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) 中的导入路径一致。 ### 3. 创建翻译加载器 创建一个 `loadTranslations` 函数,用来加载某个区域设置对应的翻译文件。在服务器端,它会在渲染时运行;运行 `npx gt translate` 时,CLI 会生成这些文件: ```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) { return {}; } } ``` ### 4. 初始化库 在一个会同时在服务端和客户端加载的文件中,于模块作用域调用 **`initializeGT`**——最合适的位置通常是你的 root 路由或布局。它只会注册一次你的配置和翻译加载器;该配置在应用的整个生命周期内都不可更改: ```tsx title="src/routes/root.tsx" import { initializeGT } from 'gt-react'; import gtConfig from '../../gt.config.json'; import loadTranslations from '../loadTranslations'; initializeGT({ defaultLocale: gtConfig.defaultLocale, locales: gtConfig.locales, loadTranslations, }); ``` ### 5. 在服务器端加载翻译 在 root 路由的加载器 (或等效的服务器端 handler) 中,解析请求的区域设置,并使用 **`getTranslationsSnapshot`** 获取翻译快照,然后将两者传给 **``**: ```tsx title="src/routes/root.tsx" import { GTProvider, getTranslationsSnapshot, parseLocale, } from 'gt-react'; // 在路由加载器中(具体 API 取决于你所使用的框架) export async function loader({ request }) { const locale = parseLocale(request); // [!code highlight] return { locale, translations: await getTranslationsSnapshot(locale), // [!code highlight] }; } export default function Root({ children }) { const { locale, translations } = useLoaderData(); return ( {children} ); } ``` ### 6. 标记需要翻译的内容 用 **``** 组件包裹任何你想要翻译的文本。`` 代表 "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.

); } ``` 对于普通文本字符串 (例如 `placeholder` 属性或 `aria-label` 的值) ,请使用 **`useGT`** 钩子: ```tsx title="src/components/ContactForm.tsx" import { useGT } from 'gt-react'; export default function ContactForm() { const gt = useGT(); return ; } ``` ### 7. 添加语言切换器 添加一个 **``**,让用户可以切换语言: ```tsx title="src/components/Header.tsx" import { LocaleSelector } from 'gt-react'; export default function Header() { return ; } ``` 当用户选择一种语言时,`gt-react` 会将该选择保存在 `generaltranslation.locale` cookie 中,并重新加载页面,以便服务器以新的区域设置重新渲染所有内容。 ### 8. 设置环境变量 (可选) 按需开发翻译在浏览器端运行。通过框架的公共环境变量,将 Project ID 和开发 API 密钥暴露给客户端代码。切勿暴露生产 API 密钥。 使用 Vite 时,`gt-react` 会自动读取这些变量: ```bash title=".env.local" VITE_GT_PROJECT_ID="your-project-id" VITE_GT_DEV_API_KEY="your-dev-api-key" ``` 对于其他框架,请遵循其客户端环境变量约定,并将公开的值传给 `initializeGT`。 可在 [dash.generaltranslation.com](https://dash.generaltranslation.com/signup) 免费获取密钥,或运行以下命令: ```bash npx gt auth ``` **警告:** 在开发环境中,请使用以 `gtx-dev-` 开头的键。生产环境密钥 (`gtx-api-`) 仅限用于 CI/CD。 ### 9. 部署到生产环境 在生产环境中,翻译会在构建时预先生成 (不会发起实时 API 调用) 。将 translate 命令添加到构建脚本中: ```json title="package.json" { "scripts": { "build": "npx gt translate && " } } ``` 在你的托管服务商中设置 **生产环境** 变量: ```bash GT_PROJECT_ID=your-project-id GT_API_KEY=gtx-api-your-production-key ``` **警告:** Production keys 以 `gtx-api-` 开头 (不是 `gtx-dev-`) 。请前往 [dash.generaltranslation.com](https://dash.generaltranslation.com) 获取。切勿公开暴露你的 `GT_API_KEY`。 就是这样——你的应用现在已经支持多语言了。🎉 ## 故障排查 [#troubleshooting] `gt-react` 会将用户的语言偏好存储在名为 `generaltranslation.locale` 的 cookie 中。如果你之前测试过其他语言,这个 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) 这是正常现象。在开发环境中,翻译是按需进行的 (你的内容会通过 API 实时翻译) 。**生产环境中不会有这种延迟**——所有翻译都会由 `npx gt translate` 预先生成。 含义不明确的文本可能会导致翻译不准确。例如,“apple” 既可能指水果,也可能指公司。添加 `$context` prop 可帮助模型判断含义: ```jsx Apple ``` `` 和 `useGT()` 都支持 `$context` 选项。 ## Next steps - /docs/react/guides/translating-jsx - /docs/react/guides/translating-strings - /docs/react/guides/managing-locales - /docs/react/guides/formatting-variables