使用 $translate 服务翻译 $ngBootbox 消息的通用方法
Generic way to translate $ngBootbox messages with $translate service
我正在使用 $ngBootbox 模块来显示警报和确认对话框。
另外,我正在使用 angular-translate 模块来翻译我的字符串资源。
我想要一种通用的方法来实现对话框中显示的这些翻译,以避免重复和肮脏的代码,如下所示:
$scope.displayMsg = function(){
$translate('message').then(function(translated_msg){
$ngBootbox.alert(translated_msg);
});
}
我想使用 $provide.decorator
分享这个解决方案
app.config(function($provide){
$provide.decorator('$ngBootbox', function($delegate, $translate, $q){
return angular.extend($delegate, {
alert: customMessageHandler($delegate.alert),
confirm: customMessageHandler($delegate.confirm),
prompt: customMessageHandler($delegate.prompt)
});
//Receives the delegated method from $ngBootbox
function customMessageHandler(method){
return function(message){
var deferred = $q.defer();
$translate(message).then(function(translated_message){
deferred.resolve(method(translated_message));
}, function(){
deferred.resolve(method(message));
});
return deferred.promise;
};
}
});
});
$translate 字符串资源使用示例:
$scope.displayMsg = function(){
$ngBootbox.alert('my_string_resource');
}
我也可以使用自定义文本:
$scope.displayMsg = function(){
$ngBootbox.alert('My custom not_translated message!');
}
我正在使用 $ngBootbox 模块来显示警报和确认对话框。 另外,我正在使用 angular-translate 模块来翻译我的字符串资源。
我想要一种通用的方法来实现对话框中显示的这些翻译,以避免重复和肮脏的代码,如下所示:
$scope.displayMsg = function(){
$translate('message').then(function(translated_msg){
$ngBootbox.alert(translated_msg);
});
}
我想使用 $provide.decorator
分享这个解决方案app.config(function($provide){
$provide.decorator('$ngBootbox', function($delegate, $translate, $q){
return angular.extend($delegate, {
alert: customMessageHandler($delegate.alert),
confirm: customMessageHandler($delegate.confirm),
prompt: customMessageHandler($delegate.prompt)
});
//Receives the delegated method from $ngBootbox
function customMessageHandler(method){
return function(message){
var deferred = $q.defer();
$translate(message).then(function(translated_message){
deferred.resolve(method(translated_message));
}, function(){
deferred.resolve(method(message));
});
return deferred.promise;
};
}
});
});
$translate 字符串资源使用示例:
$scope.displayMsg = function(){
$ngBootbox.alert('my_string_resource');
}
我也可以使用自定义文本:
$scope.displayMsg = function(){
$ngBootbox.alert('My custom not_translated message!');
}