# General Translation React SDKs (gt-react, gt-next): derive URL: https://generaltranslation.com/zh/docs/react/reference/functions/derive.mdx --- title: derive description: 使用 General Translation gt-react 在字符串翻译中标记有限的内容变体,以便提取。derive 的 API 参考。 --- `derive` 函数允许在字符串翻译中使用静态函数调用或变量表达式。它相当于 [``](/docs/react/reference/components/derive) 组件的字符串版本,适用于编写可复用代码、将碎片化句子国际化,以及保留词语一致性。 *可用于 `gt-react`、`gt-next`、`gt-tanstack-start` 和 `gt-react-native`。示例从 `gt-react` 导入;请改为从你所用框架对应的包中导入。* ## 概览 [#overview] 包装结果会发生变化的函数调用或表达式。CLI 会解析所有可能的 outcome,并为每一种 outcome 创建一个翻译条目。 ```tsx const getDisplayName = (condition) => (condition ? 'User' : 'Admin'); gt(`${derive(getDisplayName(condition))} says hello.`); // 创建两个条目: // "User says hello." -> "Usuario dice hola." // "Admin says hello." -> "Administrador dice hola." ``` *注意:`derive` 会为每种可能的结果分别创建一个翻译条目,这可能会显著增加翻译数量。请谨慎使用;当倍增系数过大时,优先使用 ICU select 语句。* ## 工作原理 [#how-it-works] * **构建时分析。** CLI 会分析被包装的表达式,确定所有可能的静态返回值,并为每个值分别创建一个翻译条目。这样可以在不同语言中保留词语一致性、变位和词序。 * **运行时不变。** `derive` 在运行时会原样返回其参数;派生只影响提取。添加或修改 `derive` 调用后,请运行 `gt validate`,以确认 CLI 能解析每个表达式。 * **静态要求。** 只有在构建时已知的内容才能进行派生。请使用 [`declareVar`](/docs/react/reference/functions/declare-var) 包装任何动态内容。 * **性能。** 与 [``](/docs/react/reference/components/derive) 一样,一个字符串中多次调用 `derive` 会使条目总数成倍增加。 ## 参数 [#parameters] | 参数 | 描述 | Type | 可选 | 默认值 | | --------------------- | -------------- | -------------------------------------------------- | -- | --- | | [`content`](#content) | 返回可翻译内容的静态表达式。 | `string \| boolean \| number \| null \| undefined` | 否 | — | ### `content` [#content] **类型** `string | boolean | number | null | undefined` · **必填** 其所有可能结果都可在构建时分析的静态函数调用或表达式。 ## 返回值 [#returns] **类型** `T` 原样返回 `content`,同时保留其类型 `T`。 ## 示例 [#examples] ```tsx title="FragmentedSentence.tsx" import { derive, gt } from 'gt-react'; function getSubject(gender) { return gender === 'male' ? 'boy' : 'girl'; } function Component({ gender }) { const translation = gt(`The ${derive(getSubject(gender))} is playing.`); return

{translation}

; } // "The boy is playing" -> "El niño está jugando"(男孩在玩耍) // "The girl is playing" -> "La niña está jugando"(女孩在玩耍) ``` ```tsx title="WithVariables.tsx" import { derive, declareVar, gt } from 'gt-react'; function getGreeting(name) { return name ? `Hello, ${declareVar(name)}` : 'Hello, stranger'; } function Component({ name }) { const translation = gt(`${derive(getGreeting(name))}! How are you?`); return

{translation}

; } ``` ```tsx title="ComplexFunction.tsx" import { derive, gt } from 'gt-react'; function getStatusMessage(status, priority) { if (status === 'complete') { return priority === 'high' ? 'Urgent task completed' : 'Task completed'; } else if (status === 'pending') { return priority === 'high' ? 'Urgent task pending' : 'Task pending'; } return 'Task status unknown'; } function Component({ status, priority }) { const message = gt(`${derive(getStatusMessage(status, priority))}.`); return

{message}

; } ``` ```tsx title="InlineExpression.tsx" import { derive, gt } from 'gt-react'; function Component({ gender }) { const message = gt(`The ${derive(gender === 'male' ? 'boy' : 'girl')} is playing.`); return

{message}

; } ``` ## 备注 [#notes] * 请谨慎使用 `derive`——它可能会使翻译条目数量呈指数级增长。 * 所有可能的结果都必须在构建时可静态分析。 * 在派生函数中,请将动态值包裹在 [`declareVar`](/docs/react/reference/functions/declare-var) 中。 * JSX 形式请参见 [``](/docs/react/reference/components/derive) 组件。