# react-native: 分支组件 URL: https://generaltranslation.com/zh/docs/react-native/guides/branches.mdx --- title: 分支组件 description: 如何使用分支组件在翻译中处理条件内容 --- {/* 自动生成:请勿直接编辑。请改为编辑 content/docs-templates/ 中的模板。 */} 分支组件可在 [``](/docs/react-native/api/components/t) 组件内实现条件渲染。它们可处理 if/else 语句和复数规则等动态逻辑,同时确保所有内容变体都能得到正确翻译。 ## 可用组件 * [``](/docs/react-native/api/components/branch):根据值或状态有条件地渲染内容 * [``](/docs/react-native/api/components/plural):根据区域设置规则自动处理复数处理 ## 快速入门 分支组件可在 [``](/docs/react-native/api/components/t) 中使用,用于处理条件逻辑: ```jsx import { T, Branch, Plural, Num, Var } from 'gt-react-native'; function NotificationPanel({ user, messageCount }) { return ( {user.name} is currently online

} away={

{user.name} is away

} >

{user.name} status unknown

You have {messageCount} message

} other={

You have {messageCount} messages

} />
); } ``` ## 分支组件的工作方式 分支组件通过以下方式解决翻译中的条件渲染问题: 1. **替换三元运算符**以及 [``](/docs/react-native/api/components/t) 内的条件逻辑 2. **提供回退内容**,以便在条件不符合预期值时使用 3. **让所有可能的内容变体都能被翻译** 4. **自动遵循区域设置规则**进行复数处理 ```jsx // ❌ 这样会出错 - 中包含条件逻辑

{isActive ? 'User is active' : 'User is inactive'}

// ✅ 这样可以正常工作 - 使用分支组件处理条件逻辑 User is active

} false={

User is inactive

} />
``` ## 组件指南 ### Branch - 条件内容 对于基于值或状态的条件渲染,请使用 [``](/docs/react-native/api/components/branch): ```jsx // 用户状态显示 Administrator Dashboard

} user={

User Dashboard

} guest={

Guest Access

} >

Access level unknown

// 布尔条件 Welcome back!

} false={

Please log in

} />
// 订阅等级 Upgrade to unlock premium features

} premium={

Enjoy your premium experience

} enterprise={

Contact support for enterprise solutions

} >

Subscription status unavailable

``` ### 复数 - 智能复数处理 对于会随数量变化的内容,请使用 [``](/docs/react-native/api/components/plural): ```jsx // 基本复数处理 {itemCount} item in cart

} other={

{itemCount} items in cart

} />
// 零值处理 No new notifications

} one={

{notifications} notification

} other={

{notifications} notifications

} />
// 复杂复数处理(遵循 Unicode CLDR 规则) Due today

} one={

Due in {days} day

} few={

Due in {days} days

} many={

Due in {days} days

} other={

Due in {days} days

} />
``` ### 与变量组件配合使用 分支组件与变量组件可以无缝配合使用: ```jsx Order {order.id} is pending. Total: {order.total}

} shipped={

Order {order.id} shipped on {order.shippedDate}

} delivered={

Order {order.id} was delivered successfully

} >

Order status unknown

``` ## 何时使用分支组件 ### 替换三元运算符 将条件逻辑改写为可在 [``](/docs/react-native/api/components/t) 中使用的形式: ```jsx // ❌ 不能在 中使用三元运算符 {isActive ?

Active user

:

Inactive user

}
// ✅ 改用 Branch 代替 Active user

} false={

Inactive user

} />
``` ### 处理多个条件判断 替代 switch 语句或多个 if/else 条件: ```jsx // ❌ 复杂的条件逻辑 {status === 'loading' ?

Loading...

: status === 'error' ?

Error occurred

: status === 'success' ?

Success!

:

Unknown status

}
// ✅ 简洁的分支逻辑 Loading...

} error={

Error occurred

} success={

Success!

} >

Unknown status

``` ### 复数规则 替换手动处理复数的写法: ```jsx // ❌ 手动复数处理 {count === 1 ?

1 item

:

{count} items

}
// ✅ 自动复数处理 {count} item

} other={

{count} items

} />
``` ## 独立使用 分支组件也可以在 [``](/docs/react-native/api/components/t) 之外使用,仅用于不涉及翻译的纯逻辑: ```jsx // 纯条件渲染 } light={} > // 纯复数处理 } other={} /> ``` ## 常见问题 ### 缺少的分支键 始终为未匹配的值提供后备内容: ```jsx // ❌ 未预期值没有回退内容 } user={} // 如果 userRole 是 "moderator" 怎么办? /> // ✅ 始终提供回退内容 } user={} > {/* 其他所有值的回退内容 */} ``` ### 复数形式不完整 为默认区域设置提供所需的复数形式: ```jsx // ❌ 缺少 "other" 形式 1 item

} // 0、2、3 等情况怎么处理? /> // ✅ 包含所有必要的形式 No items

} one={

1 item

} other={

{count} items

} /> ``` ### 复杂嵌套逻辑 虽然这样也可行,但我们建议保持分支逻辑简洁,避免嵌套过深: ```jsx // ❌ 复杂的嵌套分支 {/* 难以阅读和维护 */} // ✅ 扁平化逻辑或使用多个组件 } active-offline={} inactive-online={} > ``` 请参阅 [Unicode CLDR 文档](https://cldr.unicode.org/index/cldr-spec/plural-rules),进一步了解复数规则。 ## 后续步骤 * [字符串翻译指南](/docs/react-native/guides/strings) - 在不使用 JSX 的情况下翻译纯文本 * [动态内容指南](/docs/key-concepts/dynamic-content) - 处理 runtime 翻译 * API 参考: * [`` 组件](/docs/react-native/api/components/branch)