在工厂中对$ translateProvider的依赖?

时间:2014-06-01 17:52:43

标签: angularjs angular-translate

尝试使用我迄今为止非常基本的angularjs应用程序来处理翻译支持。首先,我创建应用程序,然后配置$translateProvider。然后我为Data创建了一个工厂,我在$rootScope中设置了初始内容,并且还想设置语言。

var app = angular.module('app', ['ngRoute', 'pascalprecht.translate']);

app.config(['$translateProvider', function($translateProvider) {
    $translateProvider.preferredLanguage('sv');
    $translateProvider.useStaticFilesLoader({
          prefix: '/assets/translations/',
          suffix: '.json'
      });
}]);

app.factory('Data', ['$http', '$rootScope', '$translateProvider',
    function ($http, $rootScope, $translateProvider) {
        $http.get('/api/get/state').success(function(data) {
            $translateProvider.preferredLanguage(data.language);
            // ... set other stuff here in $rootScope
        });

   }
]);

问题在于,当我运行此代码时,我得到:

Error: [$injector:unpr] http://errors.angularjs.org/1.2.16/$injector/unpr?p0=%24translateProviderProvider%20%3C-%20%24translateProvider%20%3C-%20Data
    at Error (native)
    at https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.16/angular.min.js:6:450
    at https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.16/angular.min.js:35:431
    at Object.c [as get] (https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.16/angular.min.js:34:13)
    at https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.16/angular.min.js:35:499
    at c (https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.16/angular.min.js:34:13)
    at Object.d [as invoke] (https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.16/angular.min.js:34:230)
    at https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.16/angular.min.js:36:13

不可能有像这样的依赖吗?在那种情况下,如何在获得语言时设置语言?我可能做的事情完全错了,因为我对angularjs很新,所以任何建议如何以完全不同的方式做事也是受欢迎的。

2 个答案:

答案 0 :(得分:3)

使用$translate服务而不是工厂提供商。

app.factory('Data', ['$http', '$rootScope', '$translate',
    function ($http, $rootScope, $translate) {
        $http.get('/api/get/state').success(function(data) {
            $translate.use(data.language);
            // ... set other stuff here in $rootScope
        });

   }
]);

使用$translate.use(data.language);代替$translateProvider.preferredLanguage(data.language);在运行时设置/更改语言。

答案 1 :(得分:2)

你需要写'$ translate',而不是'$ translateProvider'

app.factory('Data', ['$http', '$rootScope', '$translate',
    function ($http, $rootScope, $translate) {
        //...
   }
]);