# General Translation Knowledge Base: General Translation 与 Tolgee：该如何选择？
URL: https://generaltranslation.com/zh/kb/general-translation-vs-tolgee.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Tolgee 是一个可自托管的平台，集基于键的消息、上下文内编辑和 AI 翻译于一体。General Translation 则将可读的文案直接保留在组件中，并根据标记的 JSX 生成译文，无需维护消息键，即可用所有语言发布新文案。
Category: 工作流工具
Last updated: 2026-10-16
Authors: Kevin Wu, Jackie Chen
Published: 2026-10-16

Tolgee 是一个开源本地化平台：你为每个字符串分配一个键，通过其 CLI 或 SDK 将键同步到 Tolgee 项目，在平台上结合机器翻译、AI 和团队协作完成翻译，再以文件形式或通过 Tolgee 的 CDN 将译文加载回应用。你可以使用 Docker 镜像自行部署，也可以直接使用 Tolgee Cloud。它最大的亮点是上下文内编辑：在运行中的应用里按住 ALT 并点击任意文本，即可直接翻译。不过，围绕这一编辑器的基于键的工作流，仍需工程师自行处理。General Translation 则从代码入手：内容保留在组件中，翻译随构建一同运行。

## Tolgee 的优势

* **开源，可自托管。** 平台核心采用 [Apache 2.0](https://tolgee.io/licencing) 许可证，而 `ee` 目录中的功能 (如 SSO、细粒度权限、词汇表、任务、分支和 Webhook) 则采用 Tolgee EE License，需要许可证密钥才能使用。[免费自托管版本](https://tolgee.io/pricing/self-hosted)提供核心功能、不限数量的键、最多 10 个席位，并支持使用你自己的提供商密钥进行机器翻译。
* **上下文内编辑。** 在开发环境中，按住 ALT (Mac 上为 Option) 并点击运行中应用里的字符串，即可直接编辑其译文。适用于 Chrome 和 Firefox 的 [Tolgee Tools 扩展](https://docs.tolgee.io/js-sdk/in-context)还能在同一对话框中截取屏幕截图，并可在生产环境中开启上下文内编辑。
* **SDK 覆盖多种技术栈。** [JavaScript SDK](https://docs.tolgee.io/js-sdk) 支持 React、Vue、Angular、Svelte 和原生 JavaScript，另提供可与 i18next 配合使用的集成。[iOS](https://docs.tolgee.io/ios-sdk) 和 Android SDK 可直接从 Tolgee 的 CDN 更新字符串，无需发布新版本应用。
* **能读懂代码的 CLI。** `@tolgee/cli` 可从 React、Vue、Svelte 和 Angular 代码中[提取键及其默认值](https://docs.tolgee.io/tolgee-cli/extraction/parsers)，并通过 `push`、`pull`、`sync` 和 `compare` 命令让 Tolgee 项目与你的代码仓库保持同步。它支持导入和导出多种格式，包括 XLIFF、ARB 和 Java properties。
* **结合上下文的 AI。** [机器翻译](https://docs.tolgee.io/platform/translation_process/machine_translation)由 DeepL、Google、Amazon 或 Azure 提供；AI Translator 在 Tolgee Cloud 上使用 Claude 或 OpenAI 模型，也可接入你自己的 OpenAI、Azure OpenAI、Anthropic、Gemini 或兼容 OpenAI 的提供商。它会参考屏幕截图、键和项目描述、翻译记忆，以及 [SDK 记录的键关系](https://docs.tolgee.io/platform/translation_process/ai_translator)。
* **灵活的交付方式。** [Content Delivery](https://docs.tolgee.io/platform/projects_and_organizations/content_delivery) 可将译文发布到 Tolgee 的 CDN，或你自己的 S3 或 Azure 存储，让 Web 应用无需重新构建即可获取更新。

## Tolgee 仍需工程师自行处理的工作

在 Tolgee 中，UI 里的每个字符串都是一个带有默认值的键：

```tsx title="src/Inbox.tsx"
import { T, useTranslate } from '@tolgee/react';

export function Inbox({ count }: { count: number }) {
  const { t } = useTranslate();
  return (
    <section>
      <h1>
        <T keyName="inbox_title" defaultValue="Inbox" />
      </h1>
      <p>
        {t('inbox_unread', '{count, plural, one {# unread message} other {# unread messages}}', { count })}
      </p>
    </section>
  );
}
```

对该文件运行 `npx @tolgee/cli extract print` (CLI 2.21.0) ，会找到这两个键及其英文默认值：

```text title="Output"
2 keys found in src/Inbox.tsx:
	line 8: inbox_title
		default: Inbox
	line 11: inbox_unread
		default: {count, plural, one {# unread message} other {# unread messages}}
```

提取能找出键，但要把新文案落实到每种语言，仍然得反复走一遍流程：

1. 为每个字符串命名一个键，并将英文写作其默认值。
2. 使用 `tolgee push` 或 [`tolgee sync`](https://docs.tolgee.io/tolgee-cli/extraction/syncing-strings) 在 Tolgee 项目中创建这些键。
3. 借助机器翻译、AI Translator 或你的译员完成翻译，并审校结果。
4. 运行 [`tolgee pull`](https://docs.tolgee.io/tolgee-cli/push-pull-strings) 并提交文件，或者配置 Content Delivery 并将 SDK 指向它，然后把每种新语言添加到应用中。

键在翻译完成之前，读者看到的是后备语言或英文默认值。此外，AI Translator 依据的是人工附加的截图和描述，以及哪些键会同时出现在屏幕上，而不是渲染该字符串的组件。

Tolgee Cloud 主要按托管词数计费，基础语言和每种译文分别计数；各套餐包含相应的机器翻译使用额度，当前套餐均不限席位。自托管许可证则按键数和席位数计费。 (参见 [Tolgee 定价](https://tolgee.io/pricing)，核实于 2026 年 10 月。)

## Tolgee 与 General Translation 速览

| 功能        | Tolgee                                                               | General Translation                                                                                                         |
| --------- | -------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
| 字符串存放位置   | 代码中带默认值的键，并同步到 Tolgee 项目                                             | 代码中的 [`<T>`](/docs/react/reference/components/t) 内，或你现有的资源文件中                                                               |
| 代码接入方式    | 使用 `@tolgee/cli` 的 `push`、`pull` 和 `sync` 命令，或在开发环境中使用 SDK           | 在构建流程中运行 [`npx gt translate`](/docs/cli/reference/commands/translate)，或通过 [Locadex](/docs/platform/locadex/quickstart) 拉取请求 |
| 由谁翻译      | 机器翻译、AI Translator 或你的译者                                             | AI 结合代码、词汇表和自定义提示词提供的上下文进行翻译，再由你的团队在仪表板中审核                                                                                  |
| 每个字符串的上下文 | 键描述和项目描述、截图、翻译记忆以及键之间的关联                                             | 已标记 JSX 块内的结构、上下文备注，以及共享的词汇表和自定义提示词                                                                                         |
| 应用内编辑     | 在运行中的应用里按住 ALT 点击即可编辑；借助浏览器扩展，生产环境中也可使用                              | 在仪表板的翻译编辑器中审核和编辑                                                                                                            |
| 托管方式      | 使用 Docker 自托管，或使用 Tolgee Cloud                                       | 托管平台；库和 CLI 均开源                                                                                                             |
| 定价        | 提供免费套餐；Cloud 套餐按托管词数计费；自托管许可证按键数和席位计费                                | [按用量计费的翻译](https://generaltranslation.com/pricing)                                                                          |
| 原生移动应用    | 提供 iOS 和 [Android SDK](https://docs.tolgee.io/android-sdk)，支持 OTA 更新 | 由 CLI 翻译 iOS 和 Android 字符串文件，随应用版本一同发布                                                                                      |

## 为什么团队选择 General Translation 而不是 Tolgee

General Translation 从代码出发，因此无需为键命名，也无需同步键。它的 [`<T>`](/docs/react/reference/components/t) 直接包裹内容本身。下面是用 `gt-react` 实现的同一个收件箱 (需先[设置好提供者](/docs/react/react-quickstart)) ：

```tsx title="src/Inbox.tsx"
import { T, Plural, Num } from 'gt-react';

export function Inbox({ count }: { count: number }) {
  return (
    <T>
      <section>
        <h1>Inbox</h1>
        <p>
          <Plural
            n={count}
            singular={<><Num>{count}</Num> unread message</>}
            plural={<><Num>{count}</Num> unread messages</>}
          />
        </p>
      </section>
    </T>
  );
}
```

标题和消息在源代码中始终放在一起。[`npx gt translate`](/docs/cli/reference/commands/translate) 会生成翻译后的代码块，其中包含每种目标语言所需的复数形式。

* **更快。** [`npx gt translate`](/docs/cli/reference/commands/translate) 会在构建过程中运行；也可以在代码变更时由 Locadex 自动创建拉取请求。这样，新增文案会在引入它的那次发布中直接以译文形式上线。添加一种语言只需在 `gt.config.json` 中加一行，下一次构建就会将整个项目翻译成该语言。
* **运行成本更低。** 工程师直接编辑可读的 JSX，无需为每个句子命名键，也无需维护单独的源字典。文案变更与使用这些文案的组件在同一次代码审查中完成。
* **质量更高。** 收件箱示例会将标题、消息结构和复数分支一并发送，比孤立的句子能为翻译提供更多语义信息。你还可以通过[上下文组](/docs/platform/dashboard/guides/defining-context-for-translations)，借助词汇表和自定义提示词补充产品术语和语气要求。
* **风险更低。** 在[仪表板翻译编辑器](/docs/platform/dashboard/guides/reviewing-translations)中审核生成的文本，并将译文保留在你自己的构建中。采用 MIT 许可证的 JavaScript 库无需 General Translation 账户，也无需调用运行时服务，即可渲染这些文件。

Ramp 借助 General Translation，将其仪表板、落地页和 iOS 应用本地化为 11 种以上的区域设置。 (参见[生产环境部署案例](https://generaltranslation.com/enterprise)。)

## 何时更适合选择 Tolgee

如果你需要自托管整个平台，希望译者或产品经理能在运行中的应用里直接点击文本进行编辑，前端使用的是 Angular 或 Svelte，需要交换 [XLIFF、ARB 或 CSV 文件](https://docs.tolgee.io/platform/supported_formats)，或者原生 iOS 和 Android 应用需要通过 OTA (空中下载) 方式更新字符串，那么 Tolgee 是更好的选择。如果你的产品文本大多写在 React、Next.js 或 Vue 代码中，并且希望每次发布都能直接覆盖所有语言，无需额外的键同步步骤，那么请选择 General Translation。

## 从 Tolgee 迁移到 General Translation

建议按功能逐个迁移。将每个 `<T keyName="…" defaultValue="…" />` 替换为 General Translation 的 [`<T>`](/docs/react/reference/components/t)，直接包裹英文内容；将每个 `t('key', 'default')` 替换为 [`useGT`](/docs/react/reference/hooks/use-gt)。如果你的团队希望保留键，可以将英文值放入字典，再通过 [`useTranslations`](/docs/react/reference/hooks/use-translations) 读取。在所有功能迁移完成之前，请继续加载 Tolgee 的译文。 (参见[迁移国际化库](/docs/react/guides/migrating-i18n-libraries)。) 别忘了把词汇表也一并迁移过来：上下文分组支持导入 CSV、TSV、JSON 和文本文件。 (参见[为翻译定义上下文](/docs/platform/dashboard/guides/defining-context-for-translations)。)

## General Translation 可以替代 Tolgee 吗？

可以，前提是你产品中的大部分文本都写在 React、Next.js 或 Vue 代码里。General Translation 会在构建时翻译这些内容，无需创建或同步任何键。如果你需要自托管平台，或希望译者直接在运行中的应用里编辑文本，那么 Tolgee 仍是更合适的选择。

## 关键要点

* Tolgee 是一个开源、可自托管的本地化平台，支持上下文内编辑，提供适配多种技术栈的 SDK，其 AI 功能还能借助截图和描述信息进行翻译。
* 它的 SDK 和 CLI 将基于键的源消息与翻译、审校和投递流程串联起来。
* General Translation 的内联编写省去了维护消息键的麻烦：源文本以可读形式直接保留在 JSX 中，译文在构建时生成，并可在仪表板中审校。

## Related questions

- [为什么选择 General Translation 而不是 TMS（Smartling、Lokalise、Phrase、Crowdin 或 Transifex）？](https://generaltranslation.com/zh/kb/general-translation-vs-tms.mdx): Smartling、Lokalise、Phrase、Crowdin 或 Transifex 等翻译管理系统（TMS）负责协调译员，但工程师仍需提取字符串、发送出去、等待译文，再把译文接回产品中。General Translation 结合上下文直接翻译代码中的内容，每次发布都同步交付所有语言，并基于开源库运行，不存在供应商锁定。
- [General Translation 与 Weblate：该选哪一个？](https://generaltranslation.com/zh/kb/general-translation-vs-weblate.mdx): Weblate 是一个可自托管、基于 Git 的本地化平台，专为社区或团队协作翻译代码仓库文件而设计。General Translation 则将译文生成融入开发与发布流程，依托已标记的 JSX 和共享的产品上下文完成翻译。你可以继续沿用现有的 gettext 文件，也可以改用内联编写，连源文案目录的维护工作也一并省去。
- [General Translation 与 Locize 对比：该选哪个？](https://generaltranslation.com/zh/kb/general-translation-vs-locize.mdx): Locize 是由 i18next 创建者打造的翻译管理系统，通过 CDN 分发译文，从运行中的应用收集新键，并提供 AI 翻译和上下文内编辑器。但国际化库及其键仍需你自己维护。General Translation 既可以充当你的国际化库并负责翻译，也可以翻译你现有的 i18next 文件。
- [对开发者来说，最好的本地化软件是什么？](https://generaltranslation.com/zh/kb/best-localization-software.mdx): 选择一套能覆盖整条流水线的系统——从代码中的国际化库，到翻译和投递——而不是把独立的库、翻译管理系统和翻译供应商拼凑在一起。
- [不用翻译文件也能做 i18n 吗？](https://generaltranslation.com/zh/kb/i18n-without-translation-files.mdx): 可以。使用 gt-react 或 gt-next 时，内容以内联方式直接写在组件中的 `<T>` 组件内，译文在构建时作为输出生成，因此无需编写键，也无需为每个区域设置编写 JSON 文件并保持同步。

## Previous and next questions

- Previous question: [General Translation 与 Symfony Translation：该选哪一个？](https://generaltranslation.com/zh/kb/general-translation-vs-symfony-translation.mdx)
- Next question: [General Translation 与 vue-i18n 对比：该选哪一个？](https://generaltranslation.com/zh/kb/general-translation-vs-vue-i18n.mdx)

## Sitemap

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