1

也许我遗漏了一些东西,但与 ng-translate 一样好,我不明白他们为什么选择使用子作用域而不是继承父作用域。

给定以下设置示例:-

var app = angular.module('plunker', ['pascalprecht.translate']);

app.config(['$translateProvider',
  function($translateProvider) {
    $translateProvider.preferredLanguage('en');

    $translateProvider.translations('en', {
      'HELLO': 'Hello {{name}}, how are you?'
    });
  }
]);

app.run(['$translate',
  function($translate) {
    $translate.use('en');
  }
]);

app.controller('MainCtrl', function($scope) {
  $scope.name = 'Angular';
});

ng-translate 强制使用以下 html,使用“translate-values”来指定范围插值:-

  <body ng-controller="MainCtrl">
    <p translate translate-values="{name: name}">HELLO</p>
  </body>

但我真正想说的是“翻译”并让父范围正确插入名称,例如:-

  <body ng-controller="MainCtrl">
    <p translate>HELLO</p>
  </body>

但这不起作用。

我知道这看起来很琐碎,但是无论如何告诉 ng-translate 使用父范围并避免使用“翻译值”而不是创建子范围(或者这甚至是问题吗??)

4

2 回答 2

2

好的,找到了答案.. 使用“翻译编译”,它将使用父范围,所以 html 是

<body ng-controller="MainCtrl">
  <p translate translate-compile>HELLO</p>
</body>

唯一需要的其他更改是使用 ng-bind 而不是 {{ }} ..

app.config(['$translateProvider',
  function($translateProvider) {
    $translateProvider.preferredLanguage('en');

    $translateProvider.translations('en', {
      'HELLO': 'Hello <span ng-bind="name"/>, how are you?'
    });
  }
]);

不知道为什么 {{ }} 在这种情况下不起作用。

于 2015-01-18T00:22:05.913 回答
1

{{ value }}通过向translate过滤器传递要使用的上下文,我设法使语法在翻译字符串中起作用。完全有可能将其this用作上下文,这将导致如下所示的 HTML 片段:<p>{{ 'TEXT_ID' | translate:this }}</p>.

于 2015-10-02T15:58:14.013 回答