# gt: General Translation CLI tool: autoderive URL: https://generaltranslation.com/zh/docs/cli/features/autoderive.mdx --- title: autoderive description: 在翻译函数和 JSX 组件中自动派生插值变量值 --- ## 概述 启用 autoderive 后,插值变量值会被解析,就像它们被包裹在 [`derive()`](/docs/next/api/strings/derive) 中一样。这样会为每个可能的值生成单独的翻译条目,从而在不同语言中保持一致性和变位形式。 Autoderive 可在两种上下文中工作: * **字符串** — `t()`、`gt()` 和 `msg()` 调用中的插值变量值 * **JSX** — `` 组件内引用 `const` 变量声明的表达式 Autoderive **默认处于禁用状态**。 ## 配置 为字符串和 JSX 启用 autoderive: ```json title="gt.config.json" { "files": { "gt": { "parsingFlags": { "autoderive": true } } } } ``` 你也可以选择仅对字符串或仅对 JSX 启用 autoderive: ```json title="gt.config.json" { "files": { "gt": { "parsingFlags": { "autoderive": { "jsx": true, "strings": false } } } } } ``` ## 字符串示例 ```jsx const gt = useGT(); const role = isAdmin ? "admin" : "user"; // 启用 autoderive 后,此内容将被解析为派生形式: gt(`Welcome back, ${role}!`); // 生成: // "Welcome back, admin!" → "¡Bienvenido de nuevo, administrador!" // "Welcome back, user!" → "¡Bienvenido de nuevo, usuario!" ``` 如果不使用 autoderive,则必须显式调用 [`derive()`](/docs/next/api/strings/derive) 才能实现相同的行为。 ## JSX 示例 ```jsx const label = condition ? "boy" : "girl"; Hello, {label} // 生成两个翻译条目: // "Hello, boy" → "Hola, chico" // "Hello, girl" → "Hola, chica" ``` JSX autoderive 会解析在 `` 组件中引用的 `const` 变量声明。它支持: * 三元表达式 (`const x = cond ? "a" : "b"`) * 嵌套三元表达式 (`const x = a ? "small" : b ? "medium" : "large"`) * 字符串、数字和布尔字面量 * 字符串拼接和模板字面量 * 链式 `const` 引用 (`const alias = base`) **仅支持 `const`:** 仅支持 `const` 声明。`let` 和 `var` 变量会触发警告,因为它们可以被重新赋值。不支持解构变量 (`const { x } = obj`) 。 **注意:** `t` tagged template 宏不受影响——它通过模板字面量语法处理派生。 ## 相关 * [`derive()` 函数参考](/docs/next/api/strings/derive) * [自动 JSX 注入](/docs/cli/features/auto-jsx-injection) * [发布说明:gt@2.13.0](/devlog/gt_v2_13_0)