我正在制作一个翻译给定密钥的过滤器。如果函数存在,过滤器将使用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);
总是返回密钥本身。我无法从中获得翻译。