Angular 在带角度5的循环内使用角度i18n*ngFor
我希望在模板中的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
<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>
然后在messagemessages.[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>