# General Translation React SDKs (gt-react, gt-next, gt-react-native): 处理复数形式和分支 URL: https://generaltranslation.com/zh/docs/react/guides/handling-plurals-and-branches.mdx --- title: 处理复数形式和分支 description: 如何使用 处理 React 中的复数形式和条件式翻译内容。 related: links: - /docs/react/guides/formatting-variables - /docs/react/guides/translating-jsx - /docs/react/guides/translating-strings - /docs/react/guides/translating-with-dictionaries --- 不同的区域设置有不同的复数形式:英语通常使用 `one` 和 `other`,而有些语言需要更多形式。 对于基于数量的文本,请使用 [``](/docs/react/reference/components/plural);对于其他条件式内容,请使用 [``](/docs/react/reference/components/branch)。 ## 选择复数形式或分支 [#choose] * 当数字决定措辞时 (例如消息数量或搜索结果) ,请使用 [``](/docs/react/reference/components/plural)。 * 当状态、方案、布尔值或其他值决定内容时,请使用 [``](/docs/react/reference/components/branch)。 * 将任一组件放在 [``](/docs/react/reference/components/t) 内,以便翻译所有变体。 * 在每个变体中,使用[变量组件](/docs/react/guides/formatting-variables)包裹动态值,例如 [``](/docs/react/reference/components/num) 或 [``](/docs/react/reference/components/var)。 这两个组件在 React、Next.js、TanStack Start 和 React Native 中的用法相同,只有导入的 package 不同。 ## 使用 `` 处理复数 [#plural] 不要通过检查 `count === 1` 或添加 `s` 来处理复数形式;这只适用于英语语法。将计数作为 [`n`](/docs/react/reference/components/plural#n) 传入,然后提供源语言使用的形式。[``](/docs/react/reference/components/plural) 会根据当前区域设置的 [Unicode CLDR 复数规则](https://cldr.unicode.org/index/cldr-spec/plural-rules) 选择正确的形式。 ```tsx import { T, Plural, Num } from 'gt-react'; You have {count} message.} other={<>You have {count} messages.} /> ; ``` ```tsx import { T, Plural, Num } from 'gt-next'; You have {count} message.} other={<>You have {count} messages.} /> ; ``` ```tsx import { T, Plural, Num } from 'gt-tanstack-start'; You have {count} message.} other={<>You have {count} messages.} /> ; ``` ```tsx import { T, Plural, Num } from 'gt-react-native'; You have {count} message.} other={You have {count} messages.} /> ; ``` 提供源语言使用的 [`复数类别`](/docs/react/reference/components/plural#form)——英语通常为 `one` 和 `other`。翻译人员会提供每种目标语言所需的类别,可能包括 `zero`、`two`、`few` 和 `many`。 如果没有精确匹配的类别,[``](/docs/react/reference/components/plural) 会依次使用 `plural` 分支和 `other` 分支。仅当这两个通用分支都不存在时,[`children`](/docs/react/reference/components/plural#children) 才会渲染: ```tsx One result}> {count} results ; ``` ## 使用 `` 按值分支显示内容 [#branch] 当内容取决于计数以外的值时,请使用 [``](/docs/react/reference/components/branch)。将该值作为 [`branch`](/docs/react/reference/components/branch#branch) 传入,为每个预期值添加一个 [prop](/docs/react/reference/components/branch#value),并将 [`children`](/docs/react/reference/components/branch#children) 用作后备内容。 ```tsx Upgrade to unlock more.

} pro={

Thanks for going Pro!

} >

Welcome.

; ``` 每个分支都会单独翻译,因此译者可以调整完整措辞,而无需迁就内联 JavaScript 条件判断。 ### 替换 `` 内的条件表达式 内联三元运算符会使 [``](/docs/react/reference/components/t) 的子元素变为动态内容,导致无法可靠地提取。请使用 [``](/docs/react/reference/components/branch) 表达相同的条件: ```tsx // ❌ 内联条件表达式 {isActive ? 'Active' : 'Inactive'}; // ✅ 可翻译的分支 Inactive ; ``` *注意:[``](/docs/react/reference/components/branch) 会忽略 `data-*` 属性,因为非保留属性会被视为分支值。请将测试 ID 和其他数据属性添加到包装元素上;[`no-data-attrs-on-branch`](/docs/react/reference/lint-rules#no-data-attrs) lint 规则会标记此类错误。* ## Next steps - /docs/react/guides/formatting-variables - /docs/react/guides/translating-jsx - /docs/react/guides/translating-strings - /docs/react/guides/translating-with-dictionaries