我是 Angular JS 的新手。对于语言翻译,我在工作中使用 Angular-Translate 服务。我正在通过 API 调用响应获取需要在 $translateProvider 中分配的完整翻译。我知道我可以将翻译分配给 $translateprovider ($translateprovider.translations ('en',翻译)仅来自配置模块,但我认为从配置模块调用 API 不是一个好的做法。
下面给出的是我的配置模块。
.config(['$translateProvider', function($translateProvider) {
//fetching session key
var response;
jQuery.ajax({
type: "GET",
url: 'https://abcdefg/session?appKey=123456',
async: false,
success: function(data) {
response = data;
getMetaData(response.sessionKey);
}
});
////fetching data.
function getMetaData(sessionKey) {
jQuery.ajax({
type: "GET",
url: 'https://abcdefg/metadata?sessionKey=' + sessionKey +
'&gid=1.2.3.4',
async: false,
success: function(data) {
dataSet = data; //save response in rootscope variable
}
});
}
$translateProvider.translations('en_US', JSON.parse(dataSet.en_us));
$translateProvider.translations('es_ES', JSON.parse(dataSet.es_es));
$translateProvider.preferredLanguage('en_US');
}
如何解决这个问题?如何从配置模块外部将翻译分配给 $translateProvider?
提前致谢。
出于多种目的,我们可能需要在服务中添加更多翻译,所以我找到了一种方法来做到这一点。 我们可以创建另一个返回 $translateProvider 的 CustomProvider,然后我们可以将 CustomProvider 注入到服务或控制器中。
// NOTE: Create another Provider returns $translateProvider
.provider('CustomProvider', function($translateProvider) {
this.$get = function() {
return $translateProvider;
};
});
// NOTE: Inject CustomProvider to Service to use
.factory('TranslationService', function(CustomProvider) {
console.log(CustomProvider);
return {
addMoreTranslations: addMoreTranslations
};
function addMoreTranslations(key, translations) {
// Do somethings
CustomProvider.translations(key, translations);
}
});
我就这样成功了。
根据 Xu Tai Nguyen 的回复,对我来说,它的工作原理是将自定义提供程序包含在工厂中的 [] 之间:
.factory('TranslationService', ['CustomProvider'], function(CustomProvider) {
希望这对某人有帮助
我正在使用 Angular-Translate 2.13.1 和 Angular 1.4.3