Reputation: 3773
Trying to get my so far very basic angularjs app to work with translations support. First I create the app, then configure the $translateProvider
. Then I create a factory for Data in which I set initial stuff in $rootScope
and also want to set the language.
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
});
}
]);
The problem is that when I run this code I get:
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
Is it not possible to have a dependency like this? In that case, how can I set the language when I get it? I might be doing things completely wrong since I'm very new to angularjs, so any suggestions how to do things in completely different ways are also welcome.
Upvotes: 1
Views: 5054
Reputation: 8346
Use $translate
service instead of provider for factory.
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
});
}
]);
And use $translate.use(data.language);
, instead of $translateProvider.preferredLanguage(data.language);
to set/change language at runtime.
Upvotes: 3
Reputation: 21
You need to write '$translate', not '$translateProvider'
app.factory('Data', ['$http', '$rootScope', '$translate',
function ($http, $rootScope, $translate) {
//...
}
]);
Upvotes: 2