Используя AngularJS и Angular Translate, как проверить, была ли переведена строка?

Как проверить, есть ли в строке переведенное значение? Я использую AngularJS и AngularTranslate.

Я хочу отображать значение только в том случае, если оно было переведено. Angular Translate покажет непереведенную строку, если перевод недоступен.

Я начал делать это:

<div ng-if="question.text | translate != question.text">{{ question.text | translate }}</div>

Но это не работает, так как сравнение происходит до того, как фильтр перевода выполнил свою работу. (По крайней мере, я думаю, что это то, что происходит).

В итоге я сделал следующее:

  .filter('isTranslated', function(){
return function(translatedVal, originalVal){
  return (translatedVal === originalVal) ? false : true;
}

})

<div ng-if="question.text | translate | isTranslated:question.text">{{ question.text | translate }}</div>

Это отлично работает, но мне интересно, есть ли лучший способ сделать это?


person Neil    schedule 01.12.2013    source источник


Ответы (3)


Angular-translate также предоставляет сервис, так что вы можете создайте свой собственный фильтр вокруг него:

.filter('myTranslate', function($translate){
   return function(key){
      var translation = $translate(key);
      if(translation==key) {
         return "";
      } else {
         return translation;
   }  
}

Это сделает ваш HTML намного чище:

<div>{{ question.text | myTranslate }}</div>
person Pieter Herroelen    schedule 06.12.2013
comment
Ваша ссылка не работает. - person delkant; 18.04.2016
comment
@delkant исправил ссылку - person Pieter Herroelen; 19.04.2016
comment
Что, если ваш перевод и ваш ключ на самом деле совпадают? - person SebSob; 15.01.2018
comment
@SebSob пожалуйста, взгляните на мой новый ответ - person Pieter Herroelen; 16.01.2018

С некоторых пор вы можете использовать пользовательский обработчик ошибокhttps://angular-translate.github.io/docs/#/guide/17_custom-error-handler для возврата пустой строки, если перевод не найден.

person Pieter Herroelen    schedule 16.01.2018

*ngIf="!(question.text | перевести)"

person BaronBaleron    schedule 09.01.2019