Перевод несуществующих ключей с помощью ng-translate

По умолчанию, если я пытаюсь перевести несуществующий ключ, используя $translate услуга или translate фильтр, сам ключ возвращается.

например $translate.instant('no.such.key') === 'no.such.key'

Есть ли способ изменить это (за вызов, а не глобально), чтобы null возвращается вместо?

В качестве альтернативы ng-translate предоставить более краткий способ показать перевод, только если он существует?

<div ng-if="('no.such.key' | translate) !== 'no.such.key')">
    {{'no.such.key' | translate}}
</div> 

1 ответ

Лучший способ изменить это значение для каждого вызова - создать собственный фильтр и выполнить перевод внутри него.

$ filter позволяет использовать все фильтры в коде, чтобы мы могли проверить результат перевода и вместо этого вернуть null. Это поведение не отменяет фильтр перевода по умолчанию, поэтому вы можете использовать его только там, где это необходимо.

angular
  .module('app')
  .filter('translateNull', ['$filter', function($filter) {
    return function(value) {
      //Store translation to test and return
      const tempValue = $filter("translate")(value);
      //If translate returns the same key sent we return null
      if (tempValue === value) {
        return null;
      } else {
        return tempValue;
      }
    };
  }]);

Источник: https://docs.angularjs.org/tutorial/step_11

Существует специальный обработчик ошибок, в котором вы можете управлять текстом, который отображается, когда ключ не может быть найден.

https://angular-translate.github.io/docs/

Я копирую и вставляю ниже пример с этой страницы.

app.factory('customTranslationHandler', function () {
  return function (translationID, uses) {
    // return the following text as a translation 'result' - this will be
    // displayed instead of the language key.
    return 'NO DEFAULT KEY';
  };
});

Возможно, для вас предпочтительнее вместо этого молча регистрировать отсутствующие ключи. См. https://angular-translate.github.io/docs/.

Другие вопросы по тегам