我的数据模型中有一堆状态名称要映射到不同的键进行翻译,例如
目前我的组合框以这种方式填充:
<select class="form-control select" id="client"
ng-model="statusType"
ng-change="setStatusType(statusType)"
ng-options="statusType.name for statusType in statusTypes track by statusType.id">
<option value="">-</option>
</select>
我已经读过,我可以通过这样做来实现翻译:
ng-options="statusType.name | translate for statusType in statusTypes track by statusType.id">
但是,这将假设我的翻译键等于州名。我更愿意将我的州名映射到上面提到的翻译键。
如何在Angular中实现此机制?我可能需要某种自定义指令(?)。我是Angular的新手,所以欢迎所有提示。
我想的是:
mapStateToTranslationKey(statusType.name) -> return "status_" + toLowerCase(replaceSpacesWithUnderscores(statusType.name))
答案 0 :(得分:0)
从这个链接https://angular-translate.github.io/docs/#/guide,我的假设是Angular不翻译任何内容,你需要编写告诉Angular的代码,嘿,当你看到这个单词时,将它翻译成这个。字&#34;
您可能期望不存在的功能。我认为在translate函数中你需要用Javascript编写,使用Angular函数&#34; .translations()&#34;你需要明确地翻译名称和密钥。并且,返回您期望的单个值。
答案 1 :(得分:0)
我自己设法解决了这个问题。基本上,我必须将此功能添加到我的控制器:
$scope.mapStateToTranslationKey = function(stateName) {
return "state_" + stateName.toLowerCase().split(' ').join('_');
};
此函数将状态名称转换为小写,用下划线替换所有空格,最后添加字符串state_
。最终,它会返回一个键,我可以使用 angular-translate 进行翻译。
在视图中,我现在必须首先调用我的函数,然后在管道符号后面使用translate
关键字。这样就可以使用翻译键而不是实际的州名。
<select class="form-control select" id="client"
ng-model="statusType"
ng-change="setStatusType(statusType)"
ng-options="mapStateToTranslationKey(statusType.name) | translate for statusType in statusTypes track by statusType.id">
<option value="">-</option>
</select>