# General Translation Key Concepts: 动态内容 URL: https://generaltranslation.com/zh/docs/key-concepts/dynamic-content.mdx --- title: 动态内容 description: 简要介绍如何在 GT 中使用动态内容。 --- ## 概述 **动态内容** 通常是指任何会根据用户、上下文、环境等发生变化的内容。 与之相对的是 **静态内容**,后者无论用户、上下文、环境等如何变化,始终保持不变。 TL;DR * 静态内容永远不会变化 (原始字符串、文本等) 。 * 动态内容会发生变化 (姓名、电子邮件、时间、语言等) 。 **什么是静态内容?** 静态内容通常是指存在于交付给用户的 bundle 中的任何原始文本。 一个很实用的经验法则是:凡是开发者能直接从源代码里读到的文本或字符串,都属于静态文本。 例如,来看这个文件: ```jsx title="Landing.jsx" copy export default function Landing() { return ( <> Welcome to my app! ); } ``` 文本 “Welcome to my app!” 就是静态内容,因为它永远不会变化。 但是,如果我们想让页面在用户登录时作出不同响应呢: ```jsx title="Landing.jsx" copy export default function Landing(user) { if (user) { return (

Welcome to my app, {user.name}!

); } return (

Welcome to my app!

); } ``` 虽然这两句话是根据条件渲染的,但它们仍然都属于静态文本。 记住我们的经验法则:通过阅读 `landing.jsx` 的源代码,我们可以看到这些内容。 不过,`{user.name}` 属于动态内容,因为它会变化。 仅通过阅读 `landing.jsx` 文件,我们无法知道最终会在用户屏幕上渲染出什么。
## “要不要 Tx” 有时,我们希望翻译动态内容;但有时,我们又希望它保持原样。 一个很好的例子是用户的电子邮箱地址或姓名。 另一个例子可能是银行账户余额或用户的社会安全号码 (SSN) 。 这类内容 (1) 在你的应用以不同语言呈现时通常不需要翻译,并且 (2) 会因用户不同而有所变化。 ### 示例 ```jsx title="Greeting.jsx" copy import { T, Var } from 'gt-next' export default function Greeting(name) { return ( Hello, {name}! ); } ``` 就翻译而言,这有两个好处: 1. 你不需要为每一个可能的名字都创建翻译。 * 使用 `` 时,我们只需生成一条翻译,大致如下: * `¡Hola, ${name}!` * 如果不使用 ``,就必须为每个不同的名字执行按需翻译: * "¡Hola, Alice!"、"¡Hola, Bob!"、"¡Hola, Charlie!"、"¡Hola, David!",…… 2. 你也不用担心名字本身会被翻译成对应的译名: (例如 "¡Hola, Alicia!"、"¡Hola, Roberto!",……) 。 **注意:** ``、``、`` 和 `` 组件可用于 `gt-next`、`gt-react` 和 `gt-react-native`。 如你所见,`` 组件应用于包裹任何无论区域设置如何都应保持不变的内容。 这样一来,我们就不必为动态内容的每一种可能取值都创建翻译。 通过将私密信息包裹在 `` 组件中,你可以确保这些信息不会被发送到 General Translation API。 **例外情况** 上述说法有两种例外情况:(1) 在 `` 组件内部使用嵌套的 `` 组件时 (也就是说,嵌套 `` 组件的子内容仍会被翻译) 或 (2) 当数据通过 `` 组件子元素中的其他方式被有意传递给我们的 API 时 (例如 `fetch` 调用) 。 不过,这既不是 `` 组件的预期用法,也不是 General Translation API 的预期用法,这样做可能会拖慢加载时间并影响性能。