我是棱角分明的新手。对于语言翻译,我在我的工作中使用角度翻译服务。我得到了我需要通过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分配翻译?
提前致谢。
答案 0 :(得分:1)
看一下这个answer from the creator of angular-translate,他指出" [...]没有办法在运行时使用$ translate服务扩展现有翻译而不使用异步加载。[ ...]"
有关异步加载翻译的更多信息,请查看documentation。您甚至可以通过调用API来指定自己的自定义加载程序来获取翻译。
答案 1 :(得分:0)
出于多种目的,我们可能需要在服务中添加更多翻译,因此我找到了一种方法。 我们可以创建另一个返回$ 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);
}
});
我成功了。