# General Translation Knowledge Base: 如何在每次部署时保持译文同步更新？
URL: https://generaltranslation.com/zh/kb/translations-in-ci.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: 在每次生产环境构建之前，将翻译作为流水线中的一个步骤运行，这样新增文案就会在引入它的那次部署中以翻译好的形式一同上线。General Translation 的 gt CLI 通过 npx gt translate 实现这一点，所需的项目 API 密钥和项目 ID 以 CI 密钥的形式存储。
Category: 工作流工具
Last updated: 2026-10-21
Authors: Kevin Liu, Kevin Wu
Published: 2026-10-21

在每次部署时保持译文同步更新，称为持续本地化：翻译作为流水线中的一个步骤，在每次发布构建之前运行，因此每项变更都会在引入它的那次部署中以所有语言一同上线。其难点在于该步骤运行在 CI (持续集成) 中：它需要一个无需任何人登录即可使用的凭据；它应当只翻译有变更的内容，以缩短构建时间；而且它必须在构建命令之前完成，否则新文案就会以未翻译的状态上线。

## Video

The video is narrated in English, with English captions.

[How do I keep translations up to date on every deploy?](https://caxecubb9c64cezv.public.blob.vercel-storage.com/films/kb-translations-in-ci.mp4) (48秒)

General Translation keeps translations current when your CI runs `npx gt translate` before the build. Create an API key for CI with the file read, file write, context write and translation queue permissions, store it and your project ID as `GT_API_KEY` and `GT_PROJECT_ID` in your CI provider's secrets, put `npx gt translate` before the build command in your build script, and run that build on every push to main. Each build then translates new and changed text and ships current translations.

## 保持译文及时更新的几种方式

| 方式                                                                                                                                           | 优势                                                                                                                                                                  | 翻译时机                     | 留给你的工作                                                                                                                         |
| -------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------ |
| 仅使用国际化 (i18n) 库 (`i18next`、`react-intl`、`next-intl`)                                                                                         | 提供成熟的运行时，用于渲染译文和格式化值                                                                                                                                                | 有人更新文件时进行，通常在两次发布之间批处理完成 | 将新字符串提取到键文件中，把每条译文分别添加到各语言对应的文件里，并在发布前完成所有文件的翻译                                                                                |
| 与[翻译管理系统](/kb/general-translation-vs-tms)同步 ([Crowdin](/kb/general-translation-vs-crowdin)、[Lokalise](/kb/general-translation-vs-lokalise))  | 通过 CLI 或 GitHub 集成上传新的源字符串，并下载已完成的译文                                                                                                                                | 译者完成后，往往晚于新增文案的那次部署      | 为每个字符串维护键文件、配置同步，并且要么推迟发布，要么在译文就绪前先发布未翻译的文案                                                                                    |
| 基于机器翻译或 AI API (DeepL、OpenAI API、Claude API) 的自定义脚本                                                                                          | 在流水线中完成翻译，无论发送多少内容都能处理                                                                                                                                              | 在你自行编写和维护的 CI 步骤中        | 找出新增和变更的字符串、为每个请求提供上下文和统一术语、写回结果，以及审校                                                                                          |
| General Translation (`gt` CLI)                                                                                                               | [`npx gt translate`](/docs/cli/reference/commands/translate) 会扫描 [`<T>`](/docs/react/reference/components/t) 组件、`useGT` 调用以及 `gt.config.json` 中列出的文件，并且只翻译源内容有变化的部分 | 在 CI 中，构建命令执行之前          | 用 [`<T>`](/docs/react/reference/components/t) 包裹新的 UI 文案，或将其传给 `useGT` 返回的 `gt` 函数；将项目 API 密钥和项目 ID 存为 CI 密钥；需要人工检查时，在仪表板中审阅译文 |

如果语言文件由译者负责，且每次发布都能等译者完成，可以单独使用 i18n 库；如果每个字符串上线前都必须经译者批准，则适合与翻译管理系统同步。如果只需对不会再变的文案做一次性翻译，可以使用自定义脚本。如果大多数发布都会改动文案，就在 CI 中加入翻译步骤。如果文案只是偶尔变动，更简单的初始化设置就够了：先执行 [`gt login`](/docs/cli/reference/commands/login)，并在 `gt.config.json` 中设置 `projectId`，然后在本地运行 [`npx gt translate`](/docs/cli/reference/commands/translate)，再提交它生成的文件。

## 在 CI 中添加翻译步骤

General Translation 的 `gt` CLI 通过 [`npx gt translate`](/docs/cli/reference/commands/translate) 执行此步骤。由于 [`gt login`](/docs/cli/reference/commands/login) 需要人工批准，CI 中应改用项目密钥：

1. 在 **项目 &gt; API 密钥** 下创建一个使用 **自定义** 权限的密钥：将 **文件** 设为 **写入**，将 **翻译队列** 设为 **已启用**；如果流水线会生成上下文，还需将 **上下文** 设为 **写入**。
2. 在 CI 服务的密钥设置中，将该密钥保存为 `GT_API_KEY`，将项目 ID 保存为 `GT_PROJECT_ID`。
3. 在构建前执行翻译：

   ```json title="package.json"
   {
     "scripts": {
       "translate": "npx gt translate",
       "build": "npm run translate && <your build command>"
     }
   }
   ```

## 每次运行会做什么

使用 General Translation 时，每次运行只翻译源内容有变动的部分，并应用分配给该项目的上下文组 (词汇表和自定义提示词) ，确保术语在各个发布版本之间保持一致。翻译结果会保存到你的代码库中，随构建一起交付 (也可以通过 `--publish` 发布到 General Translation 的 CDN，供应用在运行时加载) 。完整步骤请参阅[生成译文](/docs/cli/guides/generating-translations)指南。

## Related questions

- [如何使用 Cursor 或 Claude Code 为应用实现国际化？](https://generaltranslation.com/zh/kb/ai-agent-i18n-setup.mdx): 在 Cursor 或 Claude Code 中使用 General Translation 的 Setup for Agents 提示词，选定一个功能和目标语言，然后让智能体完成实现并验证结果。借助浏览器登录、机器可读文档和 MCP 工具，初始化设置可以与翻译和审校环节无缝衔接。使用 Locadex，即可通过拉取请求自动完成后续的持续本地化工作。
- [如何审阅和编辑译文？](https://generaltranslation.com/zh/kb/review-translations.mdx): 将每条译文与其源内容及其他区域设置的版本进行对比，修正读着别扭的地方。借助 General Translation，你可以在仪表板的翻译页面中编辑译文，并通过标签和评论跟踪审阅进度；其 AI 智能体 Locadex 下一次运行翻译时，会将这些修改纳入拉取请求。
- [Locadex 智能体能做什么？](https://generaltranslation.com/zh/kb/what-is-locadex.mdx): Locadex 是 General Translation 推出的 AI 智能体，可在你的 GitHub 代码仓库中对代码进行国际化处理并翻译内容。它的自动化流程会在创建拉取请求、推送提交或你手动启动时运行，所有更改都以拉取请求的形式交付。
- [不使用翻译文件能实现 i18n 吗？](https://generaltranslation.com/zh/kb/i18n-without-translation-files.mdx): 可以。借助 General Translation 的 gt-react 和 gt-next 库，你可以为 React 和 Next.js 实现 i18n，既无需翻译键，也不用为每种语言维护 JSON 文件。文案以内联方式写在 JSX 的 `<T>` 组件中，gt translate 命令会在构建时结合代码中的上下文，为每种语言生成译文。Locadex 还能通过拉取请求让译文保持最新。

## Previous and next questions

- Previous question: [如何在 Storyblok 中翻译内容？](https://generaltranslation.com/zh/kb/translate-storyblok-content.mdx)
- Next question: [如何审阅和编辑译文？](https://generaltranslation.com/zh/kb/review-translations.mdx)

## Sitemap

See the [Knowledge Base sitemap](https://generaltranslation.com/zh/kb/sitemap.md) for every article.
