如何通过Angular.js中的翻译内容订购ng-repeat?

时间:2014-12-06 07:03:18

标签: javascript angularjs internationalization angular-translate

是否存在通过翻译字符串订购重复元素的简单方法? 到目前为止,我使用以下模板:

        <h3 ng-repeat="scheme in data.schemes  | orderBy:'scheme.collectionName':true"> 
            <span class="{{scheme.iconCssClassName || 'glyphicon glyphicon-asterisk'}}"></span> 
            <a href="#/storage/{{scheme.collectionName}}" translate="storage__{{scheme.collectionName}}"></a>
        </h3>

我想按$translate("storage__" + scheme.collectionName)

订购

1 个答案:

答案 0 :(得分:4)

我已经创建了一个自定义过滤器,以防您使用angular-translate;)

我已经更新了说明,因此您可以看到如何在ng-repeat中将它用于您的对象。您也可以使用简单的数组。

/**
 * orderByTranslated Filter
 * Sort ng-options or ng-repeat by translated values
 * @example
 *   ng-repeat="scheme in data.schemes | orderByTranslated:'storage__':'collectionName'"
 * @param  {Array|Object} array or hash
 * @param  {String} i18nKeyPrefix
 * @param  {String} objKey (needed if hash)
 * @return {Array}
 */
app.filter('orderByTranslated', ['$translate', '$filter', function($translate, $filter) {
  return function (array, i18nKeyPrefix, objKey) {
    var result = [];
    var translated = [];
    angular.forEach(array, function(value) {
      var i18nKeySuffix = objKey ? value[objKey] : value;
      translated.push({
        key: value,
        label: $translate.instant(i18nKeyPrefix + i18nKeySuffix)
      });
    });
    angular.forEach($filter('orderBy')(translated, 'label'), function(sortedObject) {
      result.push(sortedObject.key);
    });
    return result;
  };
}]);