# react-native: 变量组件 URL: https://generaltranslation.com/zh/docs/react-native/guides/variables.mdx --- title: 变量组件 description: 如何使用变量组件在翻译中插入动态内容 --- {/* 自动生成:请勿直接编辑。请在 content/docs-templates/ 中编辑模板。 */} 变量组件可让你在 [``](/docs/react-native/api/components/t) 组件中安全地插入动态内容。它们会在本地完成格式化和本地化处理,无需将数据发送到翻译 API,因此非常适合用于用户名、账号和财务数据等敏感信息。 ## 可用组件 * [``](/docs/react-native/api/components/var): 不经格式化的原始动态内容 * [``](/docs/react-native/api/components/num): 按区域设置格式化的数字 * [``](/docs/react-native/api/components/currency): 带货币符号和格式的金额 * [``](/docs/react-native/api/components/datetime): 遵循区域设置惯例的日期和时间 ## 快速入门 变量组件可在 [``](/docs/react-native/api/components/t) 组件内使用,以处理动态内容: ```jsx import { T, Var, Num, Currency, DateTime } from 'gt-react-native'; function UserProfile({ user }) { return (

Welcome back, {user.name}!

You have {user.itemCount} items.

Balance: {user.balance}

Last login: {user.lastLogin}

); } ``` ## 变量组件的工作原理 变量组件通过以下方式解决动态内容问题: 1. **包装动态值**,便于在 [``](/docs/react-native/api/components/t) 中使用 2. **在本地完成格式化**,使用浏览器内置的 i18n API 3. **保护数据隐私**——内容绝不会发送到翻译 API 4. **根据用户当前的区域设置进行本地化** ```jsx // ❌ 这样会报错 - 中包含动态内容

Hello {username}

// ✅ 这样可以正常工作 - 动态内容已被包裹

Hello {username}

``` ## 组件指南 ### Var - 原始动态内容 对于任何无需特殊格式处理的动态内容,请使用 [``](/docs/react-native/api/components/var): ```jsx // 用户信息

Hello, {user.name}!

Your account ID is {user.accountId}

// 条件渲染 Dashboard: {isAdmin ? : } ``` ### Num - 格式化数字 对于需要遵循区域设置格式规则的数字,请使用 [``](/docs/react-native/api/components/num): ```jsx // 基本数字格式化 You have {itemCount} items in your cart. // 独立用法(等同于 number.toLocaleString()) {totalItems} // 自定义格式化选项 Distance: {distance} km ``` ### Currency - 货币金额 货币金额请使用 [``](/docs/react-native/api/components/currency): ```jsx // 基本货币格式化(默认为"USD") Your total is {total}. // 不同货币 Price: {price} // 自定义格式化 {roundedAmount} ``` ### DateTime - 日期和时间 可使用 [``](/docs/react-native/api/components/datetime) 处理日期和时间: ```jsx // 基本日期格式化 Order placed on {orderDate} // 时间格式化 Last updated: {timestamp} // 自定义日期格式 {eventDate} ``` ## 隐私与安全 ### 数据保留在本地 变量组件使用浏览器的 [Intl APIs](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl) 在本地完成所有格式化。**不会将任何动态内容发送到翻译 API**,因此非常适合用于: * 用户名和个人信息 * 账号和 ID * 财务数据和余额 * 私密的时间戳和日期 ```jsx // 安全 - 敏感数据保留在本地 Account balance: {balance} Last login: {lastLoginTime} ``` ### 重要的例外情况 请注意在变量组件内部嵌套的 [``](/docs/react-native/api/components/t) 组件: ```jsx // ⚠️ 内部的 内容将会被发送以进行翻译 Hello, world! {/* 此内容会被翻译 */} {privateData} {/* 此内容保留在本地 */} ``` ## 独立用法 变量组件也可以在 [``](/docs/react-native/api/components/t) 外单独用于纯格式化: ```jsx // 这些组件与各自对应的 .toLocale*() 方法功能相同 {count} // count.toLocaleString() {price} // 价格格式化 {date} // date.toLocaleDateString() ``` ## 常见问题 ### 忽略本地化设置 对于 [``](/docs/react-native/api/components/currency),请务必传入 `currency` 属性以指定货币类型。这样可以确保显示该值时使用正确的货币符号和格式: ```jsx // ❌ 默认使用 USD - 可能不符合用户预期 The item costs {price} // ✅ 明确指定货币类型 The item costs {price} ``` 其他组件也有可选的 props,可用于自定义格式: ```jsx // 基本格式化 {count} 件商品有库存 // 自定义格式化 {percentage} 完成率 // 日期格式化 最后更新:{lastUpdate} ``` ## 下一步 * [分支组件指南](/docs/react-native/guides/branches) - 为翻译添加条件逻辑 * [字符串翻译指南](/docs/react-native/guides/strings) - 无需 JSX 即可翻译纯文本 * API 参考文档: * [`` 组件](/docs/react-native/api/components/var) * [`` 组件](/docs/react-native/api/components/num) * [`` 组件](/docs/react-native/api/components/currency)