文档

<t> 组件

将您的内容包装在 <t> 组件中进行翻译。在翻译加载之前,会显示原始内容。

<t>This content will be translated</t>

带有绑定的文本也可以。每当内容发生变化时,例如当 name 更改时,内容都会再次翻译:

<t>Hello {{ name() }}</t>

对于经常更改的值,例如名称和计数,请改用变量,因此文本只能翻译一次。

同时请求的所有翻译都将通过单个请求发送到 API,并缓存翻译。你可以随心所欲地使用任意数量的 <t> 组件。

<mt-translate> 用作备用选择器,而 Translate 与 T 是同一个组件。

输入

输入类型描述
formality'informal' | 'formal'设置翻译的形式。
idstring允许您自行编辑文本的这种用法。它未设置为元素的 id。
langLanguage用 provideMagicTranslate 覆盖语言集。
vRecord<string, unknown>未翻译的值,在内容中以 $name 的形式引用。参见变量。
<t lang="fr" formality="formal">How are you?</t>

变量

在 [v] 中传递更改的值,例如名称或计数,并在内容中将其引用为 $name:

<t [v]="{ name: user.name, count: unread() }">
Hi $name, you have $count new messages
</t>

Magic Translate 一次将值周围的文本翻译为 Hi {0}, you have {1} new messages,然后将这些值放回您的应用程序中。翻译已缓存,适用于每个名称和每个计数,并且值本身永远不会发送到 Magic Translate。当只有值发生变化时,不会提出新的请求。

这些值按其首次出现的顺序进行编号。翻译可以将它们移动到语言需要的任何地方,例如 {1} neue Nachrichten für {0}。

值周围的文本可以包含 HTML,并且可以先用 pipes 对值进行格式化:

<t [v]="{ count: cart.items.length, total: cart.total | currency }">
You have <b>$count items</b> in your cart, totalling <b>$total</b>.
</t>

一些规则:

  • 只有 [v] 的密钥会被替换,因此 $5 之类的文本保持原样。如果两个密钥以相同的方式启动,例如 count 和 counts,则最长的那个获胜。
  • 同一个名称可以出现多次。
  • 值以文本形式插入,而不是以 HTML 形式插入。改为在它们周围的文本中加上标记:Hi <b>$name</b>.
  • 变量只能在文本中替换,不在诸如 href 或 title 之类的属性中替换。
  • 在开发模式下,文本中未出现的密钥会记录警告,这会捕获错别字。
  • 使用服务器端渲染,带有 [v] 的 <t> 在服务器上呈现为空,并在应用程序在浏览器中运行后出现。

变量使用 $name 而不是 {name},因为 Angular 读取模板中的单个 { 作为 ICU 消息的开头,并且模板无法编译。

局限性

  1. 你不能将 Angular 组件放在 <t> 组件中。纯 HTML 元素没问题(参见下面的示例)。翻译后的标记通过 Angular 的 HTML 清理器。
  2. <t> 组件中的内容不能超过 10 KB,也就是大约 5,000 个字符。
<!-- this is OK, since <a> is a plain HTML element -->
<t>
<a href="mailto:info@i42.ch">Please send us an email</a>
</t>
<!-- this does NOT work, since <app-button> is an Angular component -->
<t>
<app-button>Click me</app-button>
</t>

要翻译属性和其他字符串,请使用 t pipe。