angular-UTF 字符的翻译清理失败
angular-translate sanitisation fails with UTF characters
在 Angular 1.3.x 使用最新版本的 angular-translate。使用 $sanitize
直接使用 filter 或 service 似乎有问题,但使用指令时它有效。
建议?
这是一个例子:
var myApp = angular.module('myApp', [ 'pascalprecht.translate', 'ngSanitize' ]);
myApp.config(function($translateProvider) {
$translateProvider.useSanitizeValueStrategy("sanitize");
$translateProvider.preferredLanguage('en');
$translateProvider.translations('en', {
UTF: 'öéü',
});
});
myApp.controller("myCtrl", function($scope, $translate) {
$translate("UTF").then(function(trans) {
$scope.UTFCTRL = trans;
});
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.16/angular-sanitize.min.js"></script>
<script src="http://rawgit.com/PascalPrecht/bower-angular-translate/master/angular-translate.min.js"></script>
<div ng-app="myApp" ng-controller="myCtrl">
<div>
Wrong: <h1>{{ 'UTF' | translate }}</h1>
</div>
<div>
Ok: <h1 translate="UTF"></h1>
</div>
<div>
Wrong: <h1>{{ UTFCTRL }}</h1>
</div>
</div>
在 jsfiddle 上:http://jsfiddle.net/gnvpo6aa/
目前,您有两个选择:
- 使用策略
sanitizeParameters
只会清理动态参数,而不是实际的翻译(模板)。如果您控制了翻译(但不是动态值),这将起作用。
- 使用策略
escape
(或escapeParameters
)不使用清理但转义。
免责声明:我正在共同维护 angular-翻译。
编辑 (12.01.2016):我创建了 this matrix overview of all variants。
所述
使用 sce 解决了问题
$translateProvider.useSanitizeValueStrategy("sce");
在 Angular 1.3.x 使用最新版本的 angular-translate。使用 $sanitize
直接使用 filter 或 service 似乎有问题,但使用指令时它有效。
建议?
这是一个例子:
var myApp = angular.module('myApp', [ 'pascalprecht.translate', 'ngSanitize' ]);
myApp.config(function($translateProvider) {
$translateProvider.useSanitizeValueStrategy("sanitize");
$translateProvider.preferredLanguage('en');
$translateProvider.translations('en', {
UTF: 'öéü',
});
});
myApp.controller("myCtrl", function($scope, $translate) {
$translate("UTF").then(function(trans) {
$scope.UTFCTRL = trans;
});
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.16/angular-sanitize.min.js"></script>
<script src="http://rawgit.com/PascalPrecht/bower-angular-translate/master/angular-translate.min.js"></script>
<div ng-app="myApp" ng-controller="myCtrl">
<div>
Wrong: <h1>{{ 'UTF' | translate }}</h1>
</div>
<div>
Ok: <h1 translate="UTF"></h1>
</div>
<div>
Wrong: <h1>{{ UTFCTRL }}</h1>
</div>
</div>
在 jsfiddle 上:http://jsfiddle.net/gnvpo6aa/
目前,您有两个选择:
- 使用策略
sanitizeParameters
只会清理动态参数,而不是实际的翻译(模板)。如果您控制了翻译(但不是动态值),这将起作用。 - 使用策略
escape
(或escapeParameters
)不使用清理但转义。
免责声明:我正在共同维护 angular-翻译。
编辑 (12.01.2016):我创建了 this matrix overview of all variants。
使用 sce 解决了问题
$translateProvider.useSanitizeValueStrategy("sce");