使用ng-translate翻译不存在的密钥

时间:2016-08-24 12:00:12

标签: javascript angularjs angular-translate

默认情况下,如果我尝试使用readUserField: ["trivialField"]服务或$translate过滤器翻译不存在的密钥,则会返回密钥本身。

e.g。 translate

有没有办法改变这个(每次调用,而不是全局),以便返回$translate.instant('no.such.key') === 'no.such.key'

或者,null是否提供了比此更简洁的方式来显示只有存在的翻译?

ng-translate

2 个答案:

答案 0 :(得分:0)

有一个自定义错误处理程序,您可以在其中控制无法找到密钥时显示的文本。

https://angular-translate.github.io/docs/#/guide/17_custom-error-handler

我在此页面的示例下面复制并粘贴。

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/#/guide/16_error-handling

答案 1 :(得分:0)

更改每个调用基础的最佳方法是创建一个自定义过滤器并在其中进行转换。

$ 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