Санитарная обработка angular-translate не работает с символами UTF

На Angular 1.3.x с последней версией angular-translate. При использовании $sanitize возникают проблемы при непосредственном использовании фильтра или службы, но это работает при использовании директивы.

Предложения?

Вот пример:

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/


person fusio    schedule 23.06.2015    source источник
comment
По крайней мере, это WONTFIX для фильтра перевода: github.com/angular-translate /angular-translate/issues/440 :´( У меня проблемы как с фильтром, так и с сервисом.   -  person Sammi    schedule 07.07.2015


Ответы (2)


На данный момент у вас есть два варианта:

  1. Используйте стратегию sanitizeParameters, которая будет очищать только динамические параметры, но не фактический перевод (шаблон). Если у вас есть перевод под контролем (но не динамические значения), это будет работать.
  2. Используйте стратегию escape (или escapeParameters), которая не использует очистку, а экранирует.

Отказ от ответственности: я поддерживаю angular-translate.

Редактировать (12.01.2016): я создал эту матрицу обзора всех вариантов.

person knalli    schedule 07.07.2015
comment
Нашел это через проблему 1011, спасибо за обходной путь и плагин! - person StephenMtl; 06.01.2016
comment
Имея sanitize в качестве стратегии, символы UTF-8, похоже, работают при использовании с атрибутом translate="KEY". - person ruuter; 22.01.2016
comment
это потому, что при использовании директивы перевода дезинфекция не работает... даже теги html действуют как обычно - person darkylmnx; 13.02.2016
comment
@knalli: хорошая матрица, но кажется, что стратегия null имеет тот же эффект, что и стратегия sce. - person Lucas Cimon; 19.02.2016
comment
Я думаю, вы смешиваете дезинфекцию и побег. Использование очищенных строк не приводит к экранированным строкам. - person knalli; 19.02.2016
comment
@knalli @LucasCimon Относительно комментария Лукаса о стратегиях null и sce, ведущих себя одинаково в матрице. Я вижу, что начиная с версии 1.2, AngularJS поставляется с включенным SCE по умолчанию. docs.angularjs.org/api/ng/service/$sce Вероятно, поэтому null и sce работают одинаково. Да? - person Michael R; 16.03.2017

Как сказано в ошибке gitHub

Использование sce решило проблему

$translateProvider.useSanitizeValueStrategy("sce");
person saad    schedule 21.03.2019