Angular 6 - 翻译动态文本

时间:2018-06-06 20:34:53

标签: angular internationalization translation angular6

对于我的应用中的所有静态文本,我使用i18n,但现在我遇到了这样的情况。在我的service.ts文件中,我有一些像

这样的硬编码JSON
sources = [
{ title: 'Phone', description: 'phone description', icon: 'phone', type: 'phone' },
{ title: 'Chat', description: ' Chat description', icon: 'chat', type: 'chat' },
{ title: 'Email', description: 'Email description', icon: 'mail_outline', type: 'email' }
];

然后在我的HTML中我*ngFor虽然这样,问题是我无法在HTML中执行i18n。目前的解决方案是在我的TS文件中获取用户语言或浏览器语言,如果我没有用户语言,然后从服务中获取不同的JSON,具体取决于此。

任何人都可以想到另一种解决方案或解决方法吗?

谢谢

1 个答案:

答案 0 :(得分:0)

您可能想研究using the select option的角度平移。那对我来说差不多。

哦,您可能想要跳过他们建议的仅使用源语言中的伪表达式的部分,我发现这不必要地弄乱了事情。而且,如果您要分发xlf文件进行翻译,则无论如何都将需要源文本,而“ ng xi18n”仍然会为您复制所有多余的文本。因此,我的模板如下所示:

...<button class="tab" *ngFor="let tab of tabService.tabs">
    <label i18n="|tab categories@@toolbarTabName">
        { tab.key, select, realTimeEvents {Real-Time} reporting {Reporting} status {Status} dashboards {Dashboards} configuration {Configuration} }
    </label>
</button>...

其中tabs.key是参数,其值对应于翻译文件和模板的“选择”部分之后{}之前的值。

还有我的messages.nl.xlf文件:

<source>{VAR_SELECT, select, realTimeEvents {Real-Time Event Messages} reporting {Reporting} status {Status} dashboards {Dashboards} configuration {Configuration}}</source>
<target>{VAR_SELECT, select, realTimeEvents {Real-Time Gebeurtenisse} reporting {Rapportering} status {Status} dashboards {Dashboards} configuration {Configuratie}}</target>

(忽略翻译的质量,这仍然是很多POC,但它可以工作;-))