codecamp

Angular 使用自定义ID管理标记文本

管理带有自定义 ID 的已标记文本

Angular 提取器会生成一个文件,其中包含以下每个实例的翻译单元条目。

  • 组件模板中的每个 ​i18n ​属性
  • 组件代码中每个 ​$localize​ 标记的消息字符串

Angular 会为每个翻译单元分配一个唯一的 ID。

下面的范例会显示一些带有唯一 ID 的翻译单元。

<trans-unit id="ba0cc104d3d69bf669f97b8d96a4c5d8d9559aa3" datatype="html">

当你更改可翻译文本时,提取器会为该翻译单元生成一个新 ID。在大多数情况下,源文本中的更改还需要更改翻译结果。因此,使用新 ID 可使文本更改与翻译保持同步。

但是,某些翻译系统需要 ID 的特定形式或语法。要满足此要求,请使用自定义 ID 来标记文本。大多数开发人员不需要使用自定义 ID。如果你想使用独特的语法来传达额外的元数据,请使用自定义 ID。其他元数据可能包括出现文本的库、组件或应用程序中的区块。

要在 ​i18n ​属性或以 ​$localize​ 标记的消息字符串中指定自定义 ID,请使用 ​@@​ 前缀。以下示例在标题元素中定义了自定义 ID ​introductionHeader​。

<h1 i18n="@@introductionHeader">Hello i18n!</h1>

以下示例为变量定义了自定义 ID ​introductionHeader​。

variableText1 = $localize `:@@introductionHeader:Hello i18n!`;

当你指定自定义 ID 时,提取器会生成一个带有自定义 ID 的翻译单元。

<trans-unit id="introductionHeader" datatype="html">

如果更改文本,提取器不会更改 ID。这导致你不得不用额外的步骤来更新其翻译。使用自定义 ID 的缺点是,如果你更改文本,你的翻译可能与新更改的源文本不同步。

使用带有描述的自定义 ID

将自定义 ID 与描述(description)和含义(meaning)结合使用,以进一步帮助翻译人员。

以下示例包含“描述”,其后是自定义 ID。

<h1 i18n="An introduction header for this sample@@introductionHeader">Hello i18n!</h1>

以下示例定义了一个变量的自定义 ID ​introductionHeader ​及其描述。

variableText2 = $localize `:An introduction header for this sample@@introductionHeader:Hello i18n!`;

下面的例子又增加了“含义”。

<h1 i18n="site header|An introduction header for this sample@@introductionHeader">Hello i18n!</h1>

以下示例为变量定义了自定义 ID ​introductionHeader​。

variableText3 = $localize `:site header|An introduction header for this sample@@introductionHeader:Hello i18n!`;

定义唯一的自定义 ID

请务必定义唯一的自定义 ID。如果你对两个不同的文本元素使用相同的 ID,提取工具只会提取第一个,而 Angular 会使用其翻译来代替两个原始文本元素。

比如,在以下代码片段中,为两个不同的文本元素定义了相同的自定义 ID ​myId​。

<h3 i18n="@@myId">Hello</h3>
<!-- ... -->
<p i18n="@@myId">Good bye</p>

下面以法语显示翻译。

<trans-unit id="myId" datatype="html">
  <source>Hello</source>
  <target state="new">Bonjour</target>
</trans-unit>

这两个元素现在使用相同的翻译 ( Bonjour ),因为它们都是使用相同的自定义 ID 定义的。

<h3>Bonjour</h3>
<!-- ... -->
<p>Bonjour</p>


Angular 导入语言环境数据的全局变量
Angular 动画-介绍
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Angular 开发指南

Angular 特性预览

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }