Angular 在带角度5的循环内使用角度i18n*ngFor

Angular 在带角度5的循环内使用角度i18n*ngFor,angular,internationalization,Angular,Internationalization,我希望在模板中的ngFor循环中使用动态翻译,如下所示: <mat-card *ngFor="let user of usersList"> <mat-card-title> <span>{{user.name}}</span> </mat-card-title> <mat-card-content> <!--This is the enum i would li

我希望在模板中的ngFor循环中使用动态翻译,如下所示:

<mat-card *ngFor="let user of usersList">
    <mat-card-title>
        <span>{{user.name}}</span>
    </mat-card-title>
    <mat-card-content>
        <!--This is the enum i would like to translate dynamic -->
        <span i18n="Role@@role">{{user.role}}</span>
    </mat-card-content>
</mat-card>

{{user.name}
{{user.role}
当前angular 5 i18e(国际化)的车载工具是否有办法动态转换此枚举值

正如我所读到的,在Angular 6.1或更高版本中,将有一种方法来转换.ts中的值。但是,如果我现在想用这个怎么办?有解决办法吗


使用替代文本消息不是一个好方法,因为如果枚举中有100个值会怎么样。我不会在html代码中重复我的枚举。

我设法让它工作起来。下面是我使用xlif2格式和select ICU表达式的示例

下面是我如何翻译select

component.html

    <ul>
      <li *ngFor="let user of users">
        <span i18n="@@role">dummy {user.role, select, admin {admin}}</span>
      </li>
      </ul>
然后在message
messages.[language].xlf
文件中设置翻译

    <unit id="role">
      <segment>
        <source>ROLE <ph id="0" equiv="ICU" disp="{user.role, select, admin {...} user {...} other {...}}"/></source>
        <target>ROLE <ph id="0" equiv="ICU" disp="{user.role, select, admin {...} user {...} other {...}}"/></target>
      </segment>
    </unit>
    <unit id="7222321253551421654">
      <segment>
        <source>{VAR_SELECT, select, admin {administrator} user {user} other {other} }</source>
        <target>{VAR_SELECT, select, admin {administrateur} user {utilisateur} other {autre} }</target>
      </segment>
    </unit>

角色
角色
{VAR_SELECT,SELECT,admin{administrator}user{user}other{other}
{VAR_SELECT,SELECT,admin{administrateur}用户{usilisateur}其他{autre}}

包含要转换的实际值的单元7222321253551421654的ID是由工具生成的ID。您只需修改该单元即可添加所需的任意多个角色/翻译

我也使用.xlf进行了测试

这对我现在起作用了:

<mat-card *ngFor="let user of usersList">
    <mat-card-title>
        <span>{{user.name}}</span>
    </mat-card-title>
    <mat-card-content>
       <span i18n="@@roleKey">{user.roles, select, role {role}}</span>
    </mat-card-content>
</mat-card>

{{user.name}
{user.roles,选择,角色{role}
my messeges.de.xlf中的翻译部分现在是

<trans-unit id="roleKey" datatype="html">
        <source>{VAR_SELECT, select, role {role}}</source>
        <target>{VAR_SELECT, select, SUPER_ADMIN {Super Admin} LIZENZ_MANAGER {Lizenz Manager} RECHTLICHE_EXPERT {Rechtliche-Expert} INFRASTRUKTRELLE_EXPERT {Infrastruktrelle-Expert} SPORTLICHE_EXPERT {Sportliche Expert} ADMINISTRATIVES_EXPERT {Administratives-Expert} FINANZIELLE_EXPERT {Finanzielle-Expert} LIZENZ_BEWERBER {Lizenz-Bewerber} }</target>
        <context-group purpose="location">
            <context context-type="sourcefile">app/locallogin/locallogin.component.ts</context>
            <context context-type="linenumber">18</context>
        </context-group>
</trans-unit>

{VAR_SELECT,SELECT,role{role}
{VAR_SELECT,SELECT,SUPER_ADMIN{SUPER ADMIN}LIZENZ_经理{LIZENZ经理}RECHTLICHE_专家{RECHTLICHE专家}基础设施专家{基础设施专家}体育专家{SPORTLICHE专家}行政专家{财务专家}LIZENZ_BEWERBER}
app/locallogin/locallogin.component.ts
18

能否使用select ICU表达式@大卫:如果你的枚举中有数百个不同的值需要转换,那会怎么样?我认为这不可能是一个解决方案,它与替代短信。代码会很长而且不可读……但是如果我正确理解了文档,那会在翻译文件中,而不是在代码中。@David:所以,我想我不理解你的评论。你能举个例子吗?请看下面的例子谢谢你的回答。但对我来说,这并不是一个好的解决方案。例如,如果我有8个不同的角色,我需要将枚举中的所有值作为select选项“复制”到我的html代码中。在我的例子中,我会有如下内容:{user.roles,select,SUPER_ADMIN{SUPER_ADMIN}LIZENZ_MANAGER}RECHTLICHE_EXPERT{RECHTLICHE_EXPERT}infrastruckrelle_EXPERT{infrastruckrelle_EXPERT}SPORTLICHE_EXPERT{SPORTLICHE_EXPERT}行政人员{ADMINISTRATIVES_EXPERT}最终专家{LIZENZ_BEWERBER{LIZENZ_BEWERBER}}不,就像在我的示例中一样,您不需要在HTML代码中包含所有值。在我的示例中,html中只有一个值(
admin
),但翻译文件中有3个值(
admin
user
其他
),我明白了!它起作用了!我只需要像{user.roles,select,role{role}这样的东西。我花了一段时间才让它工作起来。。。但无论如何我可能也需要它=)如果我想做类似的事情,但要从JSON数组生成一组chkboxe,该怎么办?不是从枚举按钮=[{“displayName”:“Approved”,“isActive”:true,“id”:“order Approved”},{“displayName”:“shipped”,“isActive”:true,“id”:“order shipped”}]我要转换displayName属性吗?
<trans-unit id="roleKey" datatype="html">
        <source>{VAR_SELECT, select, role {role}}</source>
        <target>{VAR_SELECT, select, SUPER_ADMIN {Super Admin} LIZENZ_MANAGER {Lizenz Manager} RECHTLICHE_EXPERT {Rechtliche-Expert} INFRASTRUKTRELLE_EXPERT {Infrastruktrelle-Expert} SPORTLICHE_EXPERT {Sportliche Expert} ADMINISTRATIVES_EXPERT {Administratives-Expert} FINANZIELLE_EXPERT {Finanzielle-Expert} LIZENZ_BEWERBER {Lizenz-Bewerber} }</target>
        <context-group purpose="location">
            <context context-type="sourcefile">app/locallogin/locallogin.component.ts</context>
            <context context-type="linenumber">18</context>
        </context-group>
</trans-unit>