AngularJS 将 $http 注入到 angular-translate 的配置中
AngularJS inject $http into config for angular-translate
我正在使用 angular-translate 模块,并试图用 $http 注入我在服务器上的所有翻译。我使用一个提供者,我知道只有我可以通过 $get 注入依赖项,但我不能从我的提供者调用该函数。我需要知道我是否可以做到这一点以及我是如何做到的。
这是我的供应商。
.provider('languageServices', function (){
this.languages = {};
this.getExistLanguages = function() {
return ['en','es'];
};
this.getAllLanguages = function(){
return this.languages;
};
this.$get = function($http){
return {
getSpecificLanguage : function(lan) {
return this.languages = $http.post('fr3/i18n',lan);
}
}
};
});
这是我的配置应用程序
.config(function ($stateProvider, $urlRouterProvider, USER_ROLES, $translateProvider, languageServicesProvider) {
$stateProvider.state('dashboard', {
url: '/dashboard',
views: {
'header': {template: ''},
'content': { templateUrl: 'views/dashboard.html' }
},
data: { authorizedRoles: [USER_ROLES.admin] }
});
$translateProvider.preferredLanguage('es');
// here is where i want inject all my translations with something like:
// var languages = languageServicesProvider.getAllLanguages();
//and languages pass it to translateProvider
});
我知道这段代码有一些错误,但我只想让你知道我想做什么。
谢谢
所以 angular-translate 提供了它自己的 $http 进程来执行此操作。我碰巧今天就实现了这个,所以你很幸运。你可以在他们的文档中看到它。
http://angular-translate.github.io/docs/#/api/pascalprecht.translate.$translateUrlLoader
他们的文档非常糟糕,但是您实现它的方式是在您的 app.config 中,您可以在其中添加您喜欢的语言...
$translateProvider.useUrlLoader(options)
这又是他们的文档不好的地方。您需要的选项就是您的 url,所以...
$translateProvider.userUrlLoader({
url: '/yoururl'
});
这将创建一个 http 调用,尝试从“/yoururl?lang=en_US”或当前激活的任何语言代码获取。
您还需要包含 url 加载程序的脚本,即此处
https://github.com/angular-translate/angular-translate/blob/master/src/service/loader-url.js
这还在评论中提供了更多关于使用它的信息。
如果您还有其他问题,请告诉我。希望这可以帮助。我花了一段时间才弄清楚这件事是怎么回事。同样,非常糟糕的文档。
编辑:
我注意到您也在编写自己的服务来列出可用语言。 Angular-translate 也有这方面的东西...
$translateProvider.registerAvailableLanguageKeys(['en', 'ja']);
我正在使用 angular-translate 模块,并试图用 $http 注入我在服务器上的所有翻译。我使用一个提供者,我知道只有我可以通过 $get 注入依赖项,但我不能从我的提供者调用该函数。我需要知道我是否可以做到这一点以及我是如何做到的。
这是我的供应商。
.provider('languageServices', function (){
this.languages = {};
this.getExistLanguages = function() {
return ['en','es'];
};
this.getAllLanguages = function(){
return this.languages;
};
this.$get = function($http){
return {
getSpecificLanguage : function(lan) {
return this.languages = $http.post('fr3/i18n',lan);
}
}
};
});
这是我的配置应用程序
.config(function ($stateProvider, $urlRouterProvider, USER_ROLES, $translateProvider, languageServicesProvider) {
$stateProvider.state('dashboard', {
url: '/dashboard',
views: {
'header': {template: ''},
'content': { templateUrl: 'views/dashboard.html' }
},
data: { authorizedRoles: [USER_ROLES.admin] }
});
$translateProvider.preferredLanguage('es');
// here is where i want inject all my translations with something like:
// var languages = languageServicesProvider.getAllLanguages();
//and languages pass it to translateProvider
});
我知道这段代码有一些错误,但我只想让你知道我想做什么。
谢谢
所以 angular-translate 提供了它自己的 $http 进程来执行此操作。我碰巧今天就实现了这个,所以你很幸运。你可以在他们的文档中看到它。
http://angular-translate.github.io/docs/#/api/pascalprecht.translate.$translateUrlLoader
他们的文档非常糟糕,但是您实现它的方式是在您的 app.config 中,您可以在其中添加您喜欢的语言...
$translateProvider.useUrlLoader(options)
这又是他们的文档不好的地方。您需要的选项就是您的 url,所以...
$translateProvider.userUrlLoader({
url: '/yoururl'
});
这将创建一个 http 调用,尝试从“/yoururl?lang=en_US”或当前激活的任何语言代码获取。
您还需要包含 url 加载程序的脚本,即此处
https://github.com/angular-translate/angular-translate/blob/master/src/service/loader-url.js
这还在评论中提供了更多关于使用它的信息。
如果您还有其他问题,请告诉我。希望这可以帮助。我花了一段时间才弄清楚这件事是怎么回事。同样,非常糟糕的文档。
编辑:
我注意到您也在编写自己的服务来列出可用语言。 Angular-translate 也有这方面的东西...
$translateProvider.registerAvailableLanguageKeys(['en', 'ja']);