Components

<Tx>

<Tx> 组件的 API 参考

概述

<Tx> 组件在运行时翻译 jsx 内容。

<Tx>
    Today, I went to
    {" the store"}
    <p>
        to <b>buy</b> some <i>groceries</i>.
    </p>
</Tx> 

<Tx> 组件支持翻译纯文本以及复杂的 JSX 结构。 此外,它还提供了处理变量、复数和特定上下文翻译的功能。 <Tx> 仅支持服务端渲染。

运行时翻译: <Tx> 的翻译在运行时进行。 这意味着翻译会实时执行。


参考

属性

PropTypeDefault
locale??
string
undefined
context??
string
undefined
children?
any
-

说明

属性说明
children需要被翻译的内容。可以包含纯文本或 JSX 结构。
context用于细化翻译的额外上下文。适用于解决有歧义的短语。
locale可选的翻译语言环境。如果未指定,将默认使用浏览器支持的首选语言环境。

行为

<Tx> 在运行时翻译 jsx。 这意味着翻译是在实时进行的,因此你可以翻译仅在运行时才知道的内容。 其权衡是,在等待按需翻译加载时会有延迟,速度明显较慢。

在加载过程中,除非语言非常相近(如 en-US 与 en-GB),否则 <Tx> 会返回 undefined,不过这种行为可以通过渲染设置进行自定义。 如果发生错误,<Tx> 会返回原始内容。

我们的建议是,尽可能在构建时使用 <T>getGT()useGT() 进行翻译, 仅在必要时才使用按需翻译,如 <Tx>tx()

请务必遵循此处的部署指南


示例

基本用法

<Tx> 组件会在运行时翻译其子元素。

SimpleTranslation.jsx
import { Tx } from 'gt-next';

export default function Greeting() {
    return (
        <Tx id="greeting">
            Hello, world!
        </Tx> 
    );
}

使用变量

你可以使用 <Var> 组件将子元素标记为变量。 这允许你标记不应被翻译的内容。

DynamicGreeting.jsx
import { Tx, Var } from 'gt-next';

export default function DynamicGreeting(user) {
    return (
        <Tx>
            Hello, <Var>{user.name}</Var>
        </Tx>
    );
}

处理复数

<T> 组件也支持通过 <Plural> 组件进行复数处理。

ItemCount.jsx
import { Tx, Plural } from 'gt-next';

export default function ItemCount({ count }) {
    return (
        <Tx>
            <Plural n={count}  
                singular={<>You have an item.</>}  
                plural={<>You have items.</>}  
            />  
        </Tx>
    );
}

局限性

<Tx> 函数只会翻译其后代内容。

Example.jsx
import { Tx } from 'gt-next';

const ValidTranslation = ({ children }) => (<div><b>{children}</b></div>);

const InvalidTranslation = ({ children }) => (<div><b>No translation</b></div>);

export default function Example() {
    return (
        <Tx>
            <div><b>This is valid!</b></div> // will be translated 

            <ValidTranslation> // will be translated 
                Hello, world!
            </ValidTranslation>

            <InvalidTranslation /> // will not be translated
        </Tx>
    );
}

注意: 一个很好的经验法则是,任何字面上位于文件中两个 <Tx> 之间的内容都会被翻译。 你始终可以添加另一个 <Tx> 来翻译未被翻译的内容,不过不推荐嵌套 <Tx> 组件。


注意事项

  • <Tx> 组件旨在在你的应用程序中运行时翻译内容。
  • 使用 <Tx> 组件可以翻译纯文本或 JSX 结构,包括变量和复数形式。

后续步骤

这份指南怎么样?