1

试图让我迄今为止非常基本的 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 很陌生,因此我可能做错了事,因此也欢迎任何关于如何以完全不同的方式做事的建议。

4

2 回答 2

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);在运行时设置/更改语言。

于 2014-06-01T18:13:02.293 回答
2

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

app.factory('Data', ['$http', '$rootScope', '$translate',
    function ($http, $rootScope, $translate) {
        //...
   }
]);
于 2014-06-01T18:08:40.850 回答