Перевод несуществующих ключей с помощью 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://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/.