在自定义过滤器中使用$ translate

时间:2017-02-13 13:49:15

标签: javascript angularjs angularjs-filter angular-translate

我正在制作一个翻译给定密钥的过滤器。如果函数存在,过滤器将使用Drupal.t()转换值,否则它将使用Pascal Precht的Angular Translate。

对于角度转换,我使用静态文件加载器

$translateProvider.useStaticFilesLoader({
    prefix: 'assets/i18n/',
    suffix: '.json'
});

我的配置:

.config(['$logProvider', '$translateProvider', '$compileProvider', function($logProvider, $translateProvider, $compileProvider) {
    var debug = true;
    // turn debug logging on or off in console
    $logProvider.debugEnabled(debug);

    // turn on debug data
    $compileProvider.debugInfoEnabled(debug);

    // configure the translator tables
    $translateProvider.useStaticFilesLoader({
        prefix: 'assets/i18n/',
        suffix: '.json'
    });

    // configure what language to use based on the html lang attribute
    $translateProvider.use(document.documentElement.lang);

    // configure fallback language
    $translateProvider.fallbackLanguage('en');

    // sanitizes HTML in the translation text
    $translateProvider.useSanitizeValueStrategy('sanitize');
}])

run方法决定是否使用Drupal.t()

.run(['$rootScope', '$log', function($rootScope, $log) {
    // set language
    $rootScope.lang = document.documentElement.lang;
    // set default lang
    if (!$rootScope.lang) {
        $rootScope.lang = 'en';
    }
    // set environment
    $log.debug("Lang is "+$rootScope.lang);

    // check if translation should be done by drupal
    $rootScope.translator = 'angular';
    if (typeof Drupal !== 'undefined') {
        // drupal exists so check if the t function is available
        if (typeof Drupal.t === "function") {
            // safe to use the function
            $log.debug("Drupal t present");
            $rootScope.translator = 'drupal';
        }
    }
}]);

到目前为止一切顺利。现在要翻译我的密钥,我需要使用自定义过滤器。在过滤器中我想看看如果我应该使用Drupal.t()或角度翻译。

我的过滤器:

.filter('translator', ['$filter', '$rootScope', '$translate', function($filter, $rootScope, $translate) {
    return function(input) {
        input = input || '';
        var out = '';

        // if possible use the drupal translator
        if ($rootScope.translator === 'drupal') {
            out = Drupal.t(input);
        } else {
            // fallback to default angular translator
            //var $translate = $filter('translate');
            out = $filter('translate')(input);
        }

        return out;
    }
}]);

我的问题是$filter('translate')(input);总是返回密钥本身。我无法从中获得翻译。

0 个答案:

没有答案