使用$ translate服务翻译$ ngBootbox消息的通用方法

时间:2015-10-27 14:58:43

标签: angular-translate

我正在使用enter image description here模块显示警报并确认对话框。 另外,我正在使用$ngBootbox模块来翻译我的字符串资源。

我想要一种通用的方法来实现对话框中显示的这些翻译,以避免重复和脏代码如下:

$scope.displayMsg = function(){
    $translate('message').then(function(translated_msg){
        $ngBootbox.alert(translated_msg);
    });
}

1 个答案:

答案 0 :(得分:0)

我想使用$ 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!');
}