2015-01-17 166 views
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-翻译力量以下HTML,利用 “转换值” 的指定范围内插: -

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

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

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

但那不起作用。

我知道它似乎很小,但是无论如何要告诉ng-translate使用父范围并避免使用“translate-values”而不是创建子范围(或甚至是问题??)

回答

2

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

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

与所需的唯一其他的变化是使用NG绑定,而不是{{}} ..

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

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

不确定为什么在这种情况下{{}}无法正常工作。

1

我设法让{{ value }}语法在翻译字符串中工作,方法是将translate过滤器作为上下文使用。完全可以使用this作为上下文,这将导致如下所示的HTML片段:<p>{{ 'TEXT_ID' | translate:this }}</p>