<T> 包装行为

CLI 工具如何包装 `<T>` 组件的具体行为

概述

本页面描述了 CLI 工具如何包装 <T> 组件的确切行为。

根据经验法则,CLI 将在任何静态、有意义的内容周围包装 <T> 组件。 它还会在 <T> 组件内包含的任何动态子内容周围包装 <Var> 组件。

例如,以下内容将被包装在 <T> 组件中:

<div>Hello, world!</div> -> <T id="SOME_ID"><div>Hello, world!</div></T>

但以下内容不会:

<div><img src="logo.png" /></div> -> <div><img src="logo.png" /></div>

CLI 工具将始终确保最终输出是有效的 JSX 并正确使用 <T> 组件。

在某些情况下,例如使用逻辑运算符时,一些人工干预可能有助于确保在更多上下文中获得更好的翻译。

请在 Github 上向我们报告任何错误或意外行为。

JSX 表达式

CLI 将自动将表达式 {...} 包装在 <Var> 组件中。 这是因为表达式通常是动态的。

<div>Hello, {name}</div> -> <T id="SOME_ID"><div>Hello, <Var>{name}</Var></div></T>

包含在 <Var> 组件中的内容不会被翻译。

如果您想翻译动态内容,您应该使用 <Tx> 组件。

JSX 表达式中的静态内容

表达式包装规则的例外是当表达式包含静态内容时。

例如,以下内容不会被包装在 <Var> 组件中:

<p>{"Hello," + " World!"}</p> -> <T id="SOME_ID"><p>{"Hello," + " World!"}</p></T>

JSX 表达式中的模板字面量

CLI 将把包含准静态部分(${})的模板字面量包装在 <Var> 组件中,因为它们可能是动态的。

<p>{`${temp}`}</p> -> <T id="SOME_ID"><p><Var>{`${temp}`}</Var></p></T>

逻辑运算符

包含逻辑运算符(如 &&||?)的 JSX 表达式将被包装在 <Var> 组件中, 如果在顶层需要 <T> 组件的话。(即如果在表达式之外还有其他有意义的内容)

<div>Hello, {name && {name}} World!</div>
<T id="SOME_ID">
  <div>Hello, <Var>{name && {name}}</Var> World!</div>
</T>

在表达式中,CLI 会将元素视为完全独立于表达式其余部分的内容。

这意味着它们将被包装在自己的 <T> 组件中(以确保所有内容都是可翻译的)

<div>{name ? <>Hello, </> : <>Goodbye, </>}</div>
<T id="SOME_ID">
  <div>
    <Var>
      {name ? <T id="HELLO"><>Hello, </></T> : <T id="GOODBYE"><>Goodbye, </></T>}
    </Var> World!
  </div>
</T>

在这种情况下,您应该使用 <Branch><Plural> 组件。

CLI 工具目前不会在 <T> 组件中自动使用这些组件,因此您需要手动更改代码。

前面的示例应该重写为:

<T id="SOME_ID">
  <div>
    <Branch branch={name == null}
      true={<>Hello, </>}
      false={<>Goodbye, </>}
    />
    World!
  </div>
</T>

这份指南怎么样?