尝试使用我迄今为止非常基本的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很新,所以任何建议如何以完全不同的方式做事也是受欢迎的。
答案 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) {
//...
}
]);