Angular 在已知id的情况下,角度i18n动态平移

Angular 在已知id的情况下,角度i18n动态平移,angular,angular-i18n,Angular,Angular I18n,首先,我知道我使用的是AOT编译,这是静态的。尽管如此,我想知道如果ID已知(并且在源代码{language}.xlf文件中定义),是否可以加载正确的翻译 一般来说,我需要更多地了解引擎盖下的情况,更具体地说,Angular如何识别要替换的占位符 我正在努力实现以下目标: 后端返回一个错误代码(例如“error_code”) 错误代码被添加到xlf文件中 创建动态错误组件以显示翻译后的错误消息 在这一点上,我被卡住了。我确实有翻译元素的ID,但我想我错过了拼图的最后一块 以下内容已在没有任何

首先,我知道我使用的是AOT编译,这是静态的。尽管如此,我想知道如果ID已知(并且在
源代码{language}.xlf
文件中定义),是否可以加载正确的翻译

一般来说,我需要更多地了解引擎盖下的情况,更具体地说,Angular如何识别要替换的占位符

我正在努力实现以下目标:

  • 后端返回一个错误代码(例如“error_code”)
  • 错误代码被添加到xlf文件中
  • 创建动态错误组件以显示翻译后的错误消息
  • 在这一点上,我被卡住了。我确实有翻译元素的ID,但我想我错过了拼图的最后一块
以下内容已在没有任何运气的情况下进行了尝试:

/*{{{error}}}=error\u code*/ {{error}}

我使用了
select
选项,但似乎效果不太好

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

编辑 目前我有:

html文件:

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

这将使它更易于维护

为什么要将错误代码添加到xlf文件?您不能创建一个ICU表达式,其中包含该呼叫的所有可能错误消息吗?谢谢您的回答。目前,我已经用select(大多数编程语言中的switch语句)实现了这些消息,但我认为这是不可维护的。我设想在select中引用其他trans-unit元素。是我错过了什么,还是这就是我要走的路?我已经用目前为止找到的解决方案更新了这个问题。@David忘记给你贴标签了。对不起,我对翻译了解不够,无法回答这个问题。Angular将很快允许翻译代码文件中的字符串。也许你可以通过这种方式更好地组织它为什么要将错误代码添加到xlf文件中?您不能创建一个ICU表达式,其中包含该呼叫的所有可能错误消息吗?谢谢您的回答。目前,我已经用select(大多数编程语言中的switch语句)实现了这些消息,但我认为这是不可维护的。我设想在select中引用其他trans-unit元素。是我错过了什么,还是这就是我要走的路?我已经用目前为止找到的解决方案更新了这个问题。@David忘记给你贴标签了。对不起,我对翻译了解不够,无法回答这个问题。Angular将很快允许翻译代码文件中的字符串。也许你可以这样安排得更好
<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>

<span i18n="@@error-message">
      {error, select, error { error }}
</span>
<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>