已知ID的Angular i18n动态翻译

时间:2019-05-28 13:25:49

标签: angular angular-i18n

首先,我确实了解我正在使用AOT编译,这是静态的。虽然,我想知道如果ID是已知的(并在source.{language}.xlf文件中定义),是否可以加载正确的翻译?

总的来说,我需要对幕后情况有更多的了解,更具体地说,Angular如何识别要替换的占位符?

我正在尝试完成以下任务:

  • 后端返回错误代码(例如'error_code');
  • error_code已添加到xlf文件;
  • 创建动态错误组件以显示已翻译的错误消息;
  • 这时我被困住了。我确实具有已翻译元素的ID,但我想我错过了拼图的最后一部分。

以下尝试没有任何运气:

<p class="message message--warning" i18n="{{error}}"> /* {{error}} = error_code */ {{error}} </p>

我在select选项中玩了一点,但这似乎效果不佳。

如果有人能够指出我正确的方向,那就太好了。

编辑

目前我有这个:

html文件:

<span i18n="@@error-message">
      {error, select,
        invalid.phone { invalid.phone }
        invalid.name { invalid.name }
        ...
      }
</span>

xlf文件

<trans-unit id="error-message" datatype="html">
    <source><x id="ICU" equiv-text="{error, select, invalid.phone {...} invalid.name {...}}"/></source>
    <target><x id="ICU" equiv-text="{error, select, invalid.phone {...} invalid.name {...}}"/></target>
</trans-unit>

<trans-unit id="7cefd72dcdd90f3149190b11f35dd151b0abd193" datatype="html">
    <source>{VAR_SELECT, select, invalid.phone {invalid.phone } invalid.name {invalid.name }}</source>
    <target>{VAR_SELECT, select, invalid.phone {Invalid phone} invalid.name {Invalid name}}</target>
</trans-unit>

基本上我还有2个问题:

  • 是否可以使HTML部分更通用,例如:
<span i18n="@@error-message">
      {error, select, error { error }}
</span>
  • 是否可以将翻译提取到单独的trans-unit元素中,例如:
<trans-unit id="7cefd72dcdd90f3149190b11f35dd151b0abd193" datatype="html">
    <source>{VAR_SELECT, select, invalid.phone {invalid.phone } invalid.name {invalid.name }}</source>
    <target>{VAR_SELECT, select, invalid.phone {message.invalid.phone} invalid.name {message.invalid.name}}</target>
</trans-unit>

<trans-unit id="message.invalid.name" datatype="html">
    <source>invalid.name</source>
    <target>Invalid name</target>
</trans-unit>

这将使其更易于维护。

0 个答案:

没有答案