映射组合框选项以进行翻译

时间:2017-05-18 14:30:37

标签: javascript angularjs angular-translate

我的数据模型中有一堆状态名称要映射到不同的键进行翻译,例如

  • 打开 - > state_open
  • 新 - > state_new
  • 等待批准 - > state_wait_for_approval

目前我的组合框以这种方式填充:

<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))

2 个答案:

答案 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>