# General Translation Knowledge Base: 如何翻译 Node.js 应用？
URL: https://generaltranslation.com/zh/kb/translate-node-app.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: 检测每个请求的语言（通常依据其 Accept-Language 请求头），并以该语言返回所有字符串。General Translation 的 gt-node 通过 withGT 为每个请求绑定区域设置，并通过 getGT 翻译字符串，所用译文由 npx gt translate --publish 在部署前生成。
Category: 国际化
Last updated: 2026-10-21
Authors: Kevin Liu, Kevin Wu
Published: 2026-10-21

翻译 Node.js 应用，就是检测每个请求的语言 (通常依据其 `Accept-Language` 请求头) ，并以该语言返回所有字符串。难点在于一台服务器要同时处理大量用户，因此语言不能设为全局配置：每个请求都带有自己的语言，而参与构建响应的每个函数都需要知道它。包含变量的字符串还要遵循各语言的语法规则：例如，一个数量在英语中对应 2 种复数形式之一，在阿拉伯语中则对应 6 种之一。

## Video

The video is narrated in English, with English captions.

[How do I translate a Node.js app?](https://caxecubb9c64cezv.public.blob.vercel-storage.com/films/kb-translate-node-app.mp4) (48秒)

General Translation lets you translate strings into each request's locale with `gt-node`. Call `initializeGT` once, wrap each request in `withGT`, await `getGT` in a handler, list `server.js` in `gt.config.json`, sign in, and run `npx gt translate`.

## 翻译 Node.js 应用的几种方式

| 方案                                                                 | 擅长之处                                                                                                         | 每个请求的区域设置                                               | 留给你的工作                                                                                                                                                         |
| ------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 仅使用国际化 (i18n) 库 ([`i18next`](/kb/general-translation-vs-i18next))  | 成熟的运行时，可渲染译文并格式化值                                                                                            | 由中间件插件检测                                                | 将字符串提取到 JSON 键文件中 (每种语言一个文件) 、逐条编写译文，并在文案变更时更新所有文件                                                                                                             |
| [`nestjs-i18n`](/kb/general-translation-vs-nestjs-i18n) (NestJS)   | 基于各语言的 JSON 或 YAML 消息目录渲染消息，支持 HTTP、GraphQL、gRPC 和 WebSockets                                                | 解析器按你指定的顺序读取查询字符串、请求头、cookie 或 `Accept-Language`        | 编写每种语言的目录并持续保持更新                                                                                                                                               |
| 在请求时调用机器翻译 API (DeepL、Google Cloud Translation)                    | 可翻译任意文本，包括仅在运行时才存在的内容                                                                                        | 每次调用时传入目标语言                                             | 若不缓存结果，每个请求都会带来延迟和费用；术语一致性、复数形式和审校也需自行处理                                                                                                                       |
| General Translation (`gt-node` 和 `gt` CLI)                         | 字符串以内联方式保留在处理函数的 `gt()` 调用中，[`npx gt translate --publish`](/docs/cli/reference/commands/translate) 会在部署前完成翻译 | 由 [`withGT`](/docs/node/reference/functions/with-gt) 绑定 | 通过 [`npx gt init`](/docs/cli/reference/commands/init) 获取项目 ID 和 `gt.config.json`，使用 [`gt login`](/docs/cli/reference/commands/login) 或 API 密钥，并在构建或部署步骤中运行 CLI |

如果你的团队已在维护翻译好的消息目录，单独使用 `i18next` 或 `nestjs-i18n` 即可。只有对仅在运行时才存在的内容 (例如用户帖子) ，才需要在请求时调用机器翻译 API。如果字符串写在处理函数中，且每次发布都会变化，请使用 `gt-node`。如果你的 API 只返回数据和错误码，所有消息都由 Web 或移动客户端渲染，那么更简单的方案就够了：直接在客户端翻译。

## 使用 gt-node 翻译 Node.js 应用

1. 在启动时调用一次 [`initializeGT`](/docs/node/reference/functions/initialize-gt)，并传入你的 locales。

2. 使用 [`withGT`](/docs/node/reference/functions/with-gt) 包裹每个请求。它通过 `AsyncLocalStorage` 绑定区域设置，确保并发请求互不干扰、各自保留自己的区域设置；[`getRequestLocale`](/docs/node/reference/functions/get-request-locale) 则从 `Accept-Language` 中读取区域设置。

3. 在处理函数中调用 [`getGT`](/docs/node/reference/functions/get-gt)，获取 `gt()` 函数。该函数支持 ICU 消息 (包括复数形式) ，并提供 `$context` 选项，用于区分有歧义的词语：

   ```js title="server.js"
   import express from 'express';
   import { initializeGT, withGT, getRequestLocale, getGT } from 'gt-node';

   initializeGT({ defaultLocale: 'en', locales: ['en', 'es', 'fr'] });
   const app = express();
   app.use((req, res, next) => withGT(getRequestLocale(req), () => next()));

   app.get('/api/greeting', async (req, res) => {
     const gt = await getGT();
     res.json({ message: gt('Hello, {name}!', { name: 'Alice' }) });
   });
   app.listen(3000, () => console.log('Listening on http://localhost:3000'));
   ```

4. 部署之前，请在项目“设置”中启用 CDN，并运行 [`npx gt translate --publish`](/docs/cli/reference/commands/translate)。

在生产环境中，`gt-node` 会根据 `GT_PROJECT_ID` 中的项目 ID，从 General Translation CDN 获取这些译文；若某条译文缺失，则回退到源字符串。

## 与客户端应用共享术语

如果你的 Web 或移动客户端也使用 General Translation，请在仪表板的 **项目 &gt; 上下文** 中，将客户端的上下文分组 (词汇表和自定义提示词) 分配给服务器端项目，以确保 API 响应中的新译文使用一致的术语。完整步骤请参阅 [Node.js 快速入门](/docs/node/quickstart)。

## Related questions

- [如何翻译 React 应用？](https://generaltranslation.com/zh/kb/translate-react-app.mdx): 翻译 React 应用，需要先对组件进行国际化，使其以用户的语言渲染，再将每个字符串翻译成你支持的各种语言。General Translation 的 gt-react 在 `<T>` 组件中原地翻译 JSX，npx gt translate 则会为每种语言生成一个文件。
- [如何翻译 Vue 应用？](https://generaltranslation.com/zh/kb/translate-vue-app.mdx): 翻译 Vue 应用，就是让每个模板字符串都按当前语言进行查找，并将其翻译成每种目标语言。General Translation 的 gt-vue 插件会翻译包裹在 `<T>` 组件中的内容，npx gt translate 则会为每种目标语言生成一个目录。
- [如何为 Next.js App Router 应用添加 i18n？](https://generaltranslation.com/zh/kb/add-i18n-to-nextjs.mdx): 首先在受支持的 App Router 项目中运行 gt init 来配置 General Translation，然后标记源内容、生成译文并验证语言切换。gt-next 将文案与翻译上下文一同保留在 JSX 中；CLI、仪表板编辑器和 Locadex 负责生成、审阅和持续更新。本指南还演示了如何显式配置本地文件。
- [如何在每次部署时保持译文同步更新？](https://generaltranslation.com/zh/kb/translations-in-ci.mdx): 在每次生产环境构建之前，将翻译作为流水线中的一个步骤运行，这样新增文案就会在引入它的那次部署中以翻译好的形式一同上线。General Translation 的 gt CLI 通过 npx gt translate 实现这一点，所需的项目 API 密钥和项目 ID 以 CI 密钥的形式存储。

## Previous and next questions

- Previous question: [如何翻译 Mintlify 文档站点？](https://generaltranslation.com/zh/kb/translate-mintlify-docs.mdx)
- Next question: [如何翻译 React Native 应用？](https://generaltranslation.com/zh/kb/translate-react-native-app.mdx)

## Sitemap

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