迁移

了解如何将项目迁移到 gt-next

概述

本指南将介绍将已使用 i18n 库的项目迁移到 gt-next 所需的步骤。

我们还会提供一些建议和技巧,帮助您尽可能顺利地完成迁移过程。

前置条件

  • 一个当前正在使用其他 i18n 库的项目。
  • gt-next 库有基本的了解。

为什么要迁移?

你可能有很多理由想要将你的项目迁移到 gt-next。

以下是其中的一些原因:

  • 不再需要 JSON 文件: 再也不用在 JSON 文件中管理翻译了。 所有内容都与代码内联存放,归于其应在之处。
  • 自动翻译: 使用我们的 CLI 工具生成高质量、具备上下文感知的翻译。 你再也不用等待翻译完成。
  • 开发环境中实验: 在开发环境中轻松尝试翻译,支持翻译热重载。

设置

安装 gt-nextgtx-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 数组。

gt.config.json
{
  "defaultLocale": "en",
  "locales": ["en", "fr", "es"]
}

然后,将 <GTProvider> 组件添加到应用的根布局中。

app/layout.tsx
import { GTProvider } from 'gt-next'

export default function RootLayout({ children }) {
  return (
    <html>
      <body>
        <GTProvider>
          {children}
        </GTProvider>
      </body>
    </html>
  )
}

接下来,将 withGTConfig 添加到您的 next.config.js 文件中。

next.config.ts
import withGTConfig from 'gt-next/config'
const nextConfig = {
  // Your next.config.ts options
}
export default withGTConfig(nextConfig, {
  // Your GT configuration
})

更详细的步骤请参见快速开始指南

此时,您有 3 个选择:

  1. 完全将整个项目迁移到 gt-next,并移除旧的 i18n 库。
  2. 完全迁移项目,但继续使用旧 i18n 库的字典。
  3. 暂时继续使用旧的 i18n 库,只将项目的一部分迁移到 gt-next

有关每个选择的更多详细信息,请参见迁移策略部分。

迁移策略

选项 1:完全迁移整个项目

这个选项是最直接的,但也需要一次性进行最多的代码更改。

在设置好项目后,你需要搜索旧 i18n 库的所有实例,并将它们替换为 gt-next

如果你的应用使用了 React hooks,比如 useTranslations,请在代码库中搜索所有 useTranslations 实例,并将它们替换为 useGT

然后,你需要将所有字符串键替换为它们的实际字符串值。

例如,如果你的旧代码是这样的:

dictionary.json
{
  "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-nextuseTranslations 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.txtLLMs-full.txt 文件:

这些文件包含了这些文档的完整内容,因此您的 AI 工具将能够访问帮助您迁移项目所需的所有信息。

这份指南怎么样?