迁移
了解如何将项目迁移到 gt-react
概述
本指南将介绍将已经使用i18n库的项目迁移到gt-react所需的步骤。
我们还将提供一些技巧和建议,以使迁移过程尽可能顺利。
前提条件
- 一个当前正在使用其他i18n库的项目。
- 对
gt-react
库的基本了解。
为什么要迁移?
有很多理由可能促使您将项目迁移到gt-react。
以下只是其中几个原因:
- 不再需要JSON文件: 再也不用在JSON文件中管理翻译。 所有内容都与代码内联存放,正好位于它们应该在的地方。
- 自动翻译: 使用我们的CLI工具生成高质量、上下文感知的翻译。 您再也不必等待翻译了。
- 在开发环境中试验: 通过翻译热重载,在开发过程中轻松尝试不同的翻译。
安装设置
安装 gt-react
和 gtx-cli
命令行工具。
npm i gt-react
npm i --save-dev gtx-cli
yarn add gt-react
yarn add --dev gtx-cli
bun add gt-react
bun add --dev gtx-cli
pnpm add gt-react
pnpm add --save-dev gtx-cli
在你的项目根目录下创建一个 gt.config.json
文件,包含一个 defaultLocale
属性和一个 locales
数组。
{
"defaultLocale": "en",
"locales": ["en", "fr", "es"]
}
在你的应用根组件中添加 <GTProvider>
组件,并将 config
对象作为 props 传入。
import { GTProvider } from 'gt-react'
import config from './gt.config.json'
<GTProvider {...config}>
<App />
</GTProvider>
如需更详细的步骤,请参阅 项目快速入门 指南。
此时,你有 3 个选项:
- 完全将你的整个项目迁移到
gt-react
,并移除旧的 i18n 库。 - 完全迁移项目,但继续使用旧 i18n 库中的字典。
- 目前继续使用旧的 i18n 库,仅将部分项目迁移到
gt-react
。
有关每个选项的更多细节,请参阅 迁移策略 部分。
迁移策略
选项 1:完全迁移整个项目
这个选项是最直接的,但也需要一次性进行最多的代码更改。
在设置好项目后,你需要搜索旧 i18n 库的所有实例,并将它们替换为 gt-react
。
如果你的应用使用了 React hooks,比如 useTranslation
,请在代码库中搜索所有 useTranslation
实例并将它们替换为 useGT
。
然后,你需要将所有字符串键替换为它们的实际字符串值。
例如,如果你的旧代码是这样的:
{
"hello": {
"description": "Hello, world!"
}
}
export default function MyComponent() {
const { t } = useTranslation()
return <div>{t('hello.description')}</div>
}
你需要将其替换为:
export default function MyComponent() {
const { t } = useGT()
return <div>{t('Hello, world!')}</div>
}
// 或者
export default function MyComponent() {
return <T>Hello, world!</T>
}
对旧 i18n 库的所有实例都执行此操作。
选项 2:完全迁移项目,但继续使用旧 i18n 库的字典
假设你想将项目迁移到 gt-react
,但想继续使用旧 i18n 库的字典,
并且只对新内容使用 GT 内联功能。
在这种情况下,你可以做类似选项 1 的事情:
找到旧 i18n 库的所有实例,比如 useTranslation
hooks,并将它们替换为 useTranslations
hooks。
useTranslations
hook 的行为与 useTranslation
hooks 非常相似,你可以以相同的方式使用它。
import { useTranslation } from 'react-i18next'
export default function MyComponent() {
const { t } = useTranslation()
return <div>{t('hello.description')}</div>
}
import { useTranslations } from 'gt-react'
export default function MyComponent() {
const t = useTranslations()
return <div>{t('hello.description')}</div>
}
在配置方面,你需要在项目根目录或 src
目录中创建一个 dictionary.[js|ts|json]
文件。
将旧字典文件的内容复制到这个新文件中,然后将其传递给 GTProvider
组件。
import { GTProvider } from 'gt-react'
import dictionary from './dictionary.json'
import config from './gt.config.json'
<GTProvider {...config} dictionary={dictionary}>
<App />
</GTProvider>
更多详情请参阅字典指南。
选项 3:暂时继续使用旧 i18n 库,只将项目的一部分迁移到 gt-react
这个选项是最灵活的,一次性需要的代码更改最少。
在这种情况下,你可以做类似选项 2 的事情,但只将项目的一部分迁移到 gt-react
。
例如,你可以对某些组件继续使用旧 i18n 库,而只对其他组件和新内容使用 gt-react
。
不推荐这个选项,因为你将需要在项目中管理两个不同的 i18n 库,这可能会很复杂并导致错误。
迁移技巧
1. 尽可能使用 useGT
hook 或 <T>
组件
在任何可能的地方,我们建议使用 useGT
hook 或 <T>
组件。
这将使您在未来编辑内容时变得更加容易,并使您的代码库更具可读性。
2. 对现有内容使用 useTranslations
hook
useTranslations
hook 是继续使用现有字典的好方法。
我们提供它是为了让迁移变得更容易,但我们不建议将其用于新内容。
3. 使用 AI
如果您正在使用 AI 来帮助迁移项目,我们提供了 LLMs.txt
和 LLMs-full.txt
文件:
这些文件包含了这些文档的完整内容,因此您的 AI 工具将能够访问帮助您迁移项目所需的所有信息。
这份指南怎么样?