如何使用angularjs翻译?

时间:2018-01-27 15:59:51

标签: javascript angularjs json angular-translate

我有两个问题。

1)如何使用angularjs翻译ng-repeat?

我有Json文件,所有文本都正常工作,但没有ng-repeat。 我在json的片段:

  "rules":{
     "points":[
        {"text":"1"},
        {"text":"2"},
        {"text":"3"}
     ]
  }

我试着写这样的东西而且它不起作用:

<ul ng-repeat="rule in 'rules.points' ">
    <li >{{rule.text | translate}}</li>
</ul>

2)如何使用angularjs翻译src和href?

有人可以给我一些帮助吗?

2 个答案:

答案 0 :(得分:0)

可能的问题#1:错误的翻译密钥

检查translations.json文件中的翻译密钥是否与rule.text

中的完全相同

可能的问题#2:翻译未及时加载

&#34;翻译&#34;在{{key | translate}}是过滤器,过滤器是同步的。这意味着,时间过滤器完成执行时,您的translations.json(或您使用的任何一个源)文件中的翻译密钥可能无法加载。试试这个(异步方式):

<li translate="{{rule.text}}"></li>

<li><span translate="{{rule.text}}"></span></li>

答案 1 :(得分:-1)

首先,如果您真正意味着翻译,这是毫无意义的。

你想要使用的是Angular 2或4中的管道。所以你应该有这样的东西:

import {Pipe, PipeTransform} from '@angular/core';
   @Pipe ({
   name : 'translate'
})
export class MyPipe implements PipeTransform {
   transform(val : string) : string {
       // number check...
       return (parseInt(val) + 10) + '';
   }
}

我认为这应该有效,如果您的组件已知该类。通常管道都在自己的模块中,因此请确保管道在那里正确导出。

你的第二个问题:

我认为最好将管道的逻辑部分移动到另一个类中的静态方法,如'PipeFunctions.ts'。

这样的东西
export class PipeFunctions {
    static translate(val : string) : string {
       return (parseInt(val) + 10) + '';
   }
}

现在,管道以及组件可以使用转换。只需在xyz.component.ts中实现代理方法,如

translate(val : string) : string {
    return PipeFunctions.translate(val);
}

然后在相应的HTML中:

<a href="translate('1')">whatever</a>

如果它不起作用(抱歉,无法在此处查看),请尝试

<a [href]="translate('1')">whatever</a>

甚至

<a [attr.href]="translate('1')">whatever</a>