# gt: General Translation CLI tool: Translate
URL: https://generaltranslation.com/zh/docs/cli/translate.mdx
---
title: Translate
description: 如何翻译项目
---
## 用法
```bash
npx gt translate
```
**重要:** 请在 CI 流水线中于生产环境构建应用**之前**运行此操作。
## 概述
`gt translate` 命令会读取你的 `gt.config.json` 文件,以确定需要翻译哪些文件,然后翻译你的项目。
如果你使用的是 [`gt-next`](/docs/next)、[`gt-react`](/docs/react) 或 [`gt-react-native`](/docs/react-native),它还会扫描项目源代码中的内联内容 (例如 `` 组件和 `useGT` Hook) ,并生成所需的翻译文件。
此外,如果提供了字典文件,它也会将其中的内容包含在内。
此命令是使用 General Translation API 及相关服务的主要方式。
**仅限生产环境使用:** 此命令用于生产构建,**不应在开发环境中使用**。
运行此命令前,请确保你当前所在的分支将用于生产环境。
请将生产环境 API 密钥 (`GT_API_KEY`) 和项目 ID (`GT_PROJECT_ID`) 设置为环境变量。
**注意:** 需要提供生产环境 API 密钥。可在 [generaltranslation.com](https://generaltranslation.com/dashboard) 免费获取,或运行[设置向导](/docs/cli/init)来生成一个。
### 使用 translate 翻译项目 [#translate]
```bash
npx gt translate
```
`translate` 命令会读取你的 `gt.config.json` 来确定需要翻译哪些文件,扫描项目源代码中的可翻译内容,并生成所需的翻译文件。
翻译内容会自动保存到你的代码库中。
更多详情,请参阅 [配置文档](/docs/cli/reference/config#files)。
{/* These links point to our own SDK docs intentionally — we want to show how our CLI handles these libraries, not link to the external library sites */}
**自动检测:** 如果你使用的是 [`next-intl`](/docs/next)、[`react-i18next`](/docs/react) 或
[`next-i18next`](/docs/react-native),CLI 工具会通过读取你的 `package.json` 文件自动检测
你使用的 i18n 库,并在翻译 JSON 文件时遵循该 i18n 库的语法。
### 仅验证,不进行翻译 [#validate]
```bash
npx gt translate --dry-run
```
如果你使用的是 [`gt-next`](/docs/next)、[`gt-react`](/docs/react) 或 [`gt-react-native`](/docs/react-native),可以使用此方法在不生成任何翻译的情况下验证项目中的 `` 组件和字典文件。
***
## 标志
| 参数 | 说明 | 类型 | 默认值 |
| ------------------------------- | --------------------------------------------- | ---------- | --------------------------------------------------------------------------------------------------------------------------- |
| `--api-key` | 指定生产环境 API 密钥 | `string` | |
| `--project-id` | 指定项目 ID | `string` | |
| `--version-id` | 指定版本 ID (默认为内容的哈希) | `string` | |
| `--config ` | 指定 GT 配置文件的路径 | `string` | `"gt.config.json"` |
| `--tsconfig, --jsconfig ` | 指定 TS 或 JS 配置文件的路径 | `string` | |
| `--src ` | 用空格分隔的源文件 glob 模式 (相对于根目录) | `[string]` | `['src/**/*.{js,jsx,ts,tsx}', 'app/**/*.{js,jsx,ts,tsx}', 'pages/**/*.{js,jsx,ts,tsx}', 'components/**/*.{js,jsx,ts,tsx}']` |
| `--dictionary ` | 指定字典文件的路径 | `string` | |
| `--inline` | 除字典外,还包含内联 `` 标签 | `boolean` | `true` |
| `--timeout` | 翻译请求的超时时间 (秒) | `number` | `900` |
| `--new, --locales ` | 要翻译到的区域设置 (会追加到 `gt.config.json` 的 locales 中) | `[string]` | |
| `--default-locale ` | 项目的源区域设置 | `string` | `en` |
| `--ignore-errors` | 忽略错误,并强制翻译有效内容 | `标志` | `false` |
| `--dry-run` | 仅验证,不执行翻译 | `标志` | `false` |
| `--force` | 强制重新翻译所有内容 | `标志` | `false` |
| `--force-download` | 强制下载所有译文 | `标志` | `false` |
| `--save-local` | 在将译文加入队列前,检测并保存 local edits | `标志` | `false` |
| `--enable-branching` | 为项目启用分支功能 | `标志` | `false` |
| `--branch ` | 为译文指定自定义分支名称 | `string` | |
| `--disable-branch-detection` | 禁用自动分支检测 | `标志` | `false` |
| `--tag [value]` | 为此次翻译运行添加标签 (如果未提供值,则自动从 git 解析) | `string` | |
| `-m, --message ` | 要附加到翻译标签的消息 | `string` | |
| `--publish` | 翻译后将译文发布到 CDN | `标志` | `false` |
| `--remote-name ` | 为分支检测指定自定义远程名称 | `string` | `"origin"` |
**安全:**不要将你的 API 密钥添加到 `gt.config.json` 文件中!请改为将其设置为环境变量。CLI 会在设置后自动读取 `GT_API_KEY`。
### 关键标志
| 标志 | 说明 |
| -------------------- | -------------------------------------------------------------------- |
| `--dry-run` | 在不与 GT API 通信的情况下解析并验证你的项目。适合用于验证你的代码库。 |
| `--force` | 重新翻译所有内容,并覆盖现有译文。任何本地更改都会丢失。新生成的译文将产生费用。 |
| `--force-download` | 重新下载所有译文,并覆盖本地更改。不会重新翻译。 |
| `--save-local` | 在入队前检测并保存翻译文件中的 local edits。参见 [`save-local`](/docs/cli/save-local)。 |
| `--enable-branching` | 按不同的 git 分支分别跟踪译文。参见 [分支功能](/docs/cli/branching)。 |
| `--tag` | 为一次翻译运行添加一个便于人工识别的标识符,用于版本跟踪。参见 [标签](#tagging)。 |
| `-m, --message` | 为翻译标签附加一条说明消息。参见 [标签](#tagging)。 |
| `--publish` | 将译文公开到 CDN 以供 runtime 加载。参见 [公开到 CDN](#publishing-to-the-cdn)。 |
### 配置文件
首次运行 CLI 时,它会尝试在项目根目录下创建一个 `gt.config.json` 文件。有关配置的更多信息,请参阅[这里](/docs/cli/reference/config)。
## 重要提示
### 内容来源
`translate` 命令会递归搜索项目中的可翻译内容。
默认会搜索以下目录:
* `./src`
* `./app`
* `./pages`
* `./components`
你可以通过 `--src` 标志指定其他目录,
或者修改 [`gt.config.json`](/docs/cli/reference/config) 中的 `src` 属性。
### 覆盖译文
默认情况下,CLI 不会覆盖本地对译文所做的修改,除非源内容发生了变化。
如需重新翻译已翻译的内容,请使用 `--force`。
**注意:** `--force` 会 **覆盖所有现有译文并生成新的译文**。任何本地修改都会丢失。新的翻译将会产生费用。
如需在不重新翻译的情况下重新下载译文,请使用 `--force-download`。
**注意:** `--force-download` 会覆盖本地对译文所做的修改,并拉取最新的译文。它不会重新翻译任何内容。
### 标签 [#tagging]
使用 `--tag` 和 `-m` 标志为翻译运行添加便于阅读的标识符,方便在仪表板中跟踪并区分不同版本。
#### 使用自定义标识符标签
```bash
npx gt translate --tag v2.1.0
```
#### 使用自定义标识符和消息进行标签
```bash
npx gt translate --tag v2.1.0 -m "Added checkout page translations"
```
#### 基于 git 自动打标签
传入不带值的 `--tag` 后,会自动将当前 git commit 的 哈希值 用作标签 id,并将 commit 消息用作标签消息:
```bash
npx gt translate --tag
```
你可以用自定义提交信息覆盖原提交信息:
```bash
npx gt translate --tag -m "Release 2.1 translations"
```
#### 仅消息标签
如果传入 `-m` 但不传入 `--tag`,系统会根据当前 git commit 的哈希值自动生成一个标签 (如果不在 git 仓库中,则会使用随机标识符) :
```bash
npx gt translate -m "Weekly translation update"
```
标签操作是非阻塞的——即使标签创建失败,翻译流程也会正常继续。
### 发布到 CDN [#publishing-to-the-cdn]
默认情况下,`gt translate` 会将翻译文件保存在本地代码库中。使用 `--publish` 标志还可将译文发布到 General Translation CDN,从而无需将文件打包进应用,即可启用 runtime 翻译加载。
```bash
npx gt translate --publish
```
这对于 `gt-next` 项目很有用:这类项目会在 runtime 从 CDN 加载译文,而不是从本地文件加载。
**必须启用 CDN:**使用 `--publish` 之前,请先在 [generaltranslation.com/dashboard](https://generaltranslation.com/dashboard) 的项目设置中启用 CDN。如果未启用 CDN,该命令会成功完成翻译,但在发布时会失败并发出警告。
你可以将 `--publish` 与本地文件输出结合使用——译文会保存在本地,*同时*也会发布到 CDN:
```bash
npx gt translate --publish
```
### 字典文件
`translate` 命令会自动检测项目中的字典文件。
默认情况下,它会在以下位置查找名为 `dictionary.[json|ts|js]` 的文件:
* `./src`
* `./`
你可以使用 `--dictionary` 标志指定其他字典文件,或修改 [`gt.config.json`](/docs/cli/reference/config) 中的 `dictionary` 属性。