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