Angularjs 在获取替代转换映射之前加载默认静态转换文件
我是角度翻译的新手(虽然我不是角度翻译的神)。 假设我已经有了一套翻译JSON文件,用英语和意大利语。这些包含默认情况下我应该使用的翻译 i18n/locale-en_GB.jsonAngularjs 在获取替代转换映射之前加载默认静态转换文件,angularjs,loader,angular-translate,Angularjs,Loader,Angular Translate,我是角度翻译的新手(虽然我不是角度翻译的神)。 假设我已经有了一套翻译JSON文件,用英语和意大利语。这些包含默认情况下我应该使用的翻译 i18n/locale-en_GB.json { "market.marketplace.title": "Marketplace", "market.marketplace.descr": "Here is a description", "market.available.items": "Available items" }
{
"market.marketplace.title": "Marketplace",
"market.marketplace.descr": "Here is a description",
"market.available.items": "Available items"
}
{
"market.marketplace.title": "Marketplace",
"market.marketplace.descr": "Ecco una descrizione",
"market.available.items": "Oggetti disponibili"
}
i18n/locale-it\u it.json
{
"market.marketplace.title": "Marketplace",
"market.marketplace.descr": "Here is a description",
"market.available.items": "Available items"
}
{
"market.marketplace.title": "Marketplace",
"market.marketplace.descr": "Ecco una descrizione",
"market.available.items": "Oggetti disponibili"
}
如果仅此而已,我当然会简单地使用静态文件加载程序:
.conf
...
$translateProvider.useStaticFilesLoader({
prefix: 'i18n/locale-', // Template paths to translation files
suffix: '.json'
});
...
...
//$translateProvider.useStaticFilesLoader....
$translateProvider.useLoader('customLoader', {});
...
问题是,我还必须考虑在一开始(比如翻译服务配置时)必须运行的REST调用的结果,这可能会覆盖一些默认翻译。
我尝试使用自定义加载程序:
.conf
...
$translateProvider.useStaticFilesLoader({
prefix: 'i18n/locale-', // Template paths to translation files
suffix: '.json'
});
...
...
//$translateProvider.useStaticFilesLoader....
$translateProvider.useLoader('customLoader', {});
...
.factory
.factory('customLoader', function ($q, $http, MyRESTService, translationService) {
return function (options) {
var deferred = $q.defer();
MyRESTService.getLanguageMaps(
function success(response) {
var langMap = response;
/* langMap would be something like:
var langMap = [
{
"en_GB": {
"market.marketplace.title": "NEWENGLISHTITLE",
"market.marketplace.descr": "NEWENGLISHDESCR"
}
},
{
"it_IT": {
"market.marketplace.title": "NEWITALIANTITLE",
"market.marketplace.descr": "NEWITALIANDESCR"
}
}
];
*/
deferred.resolve(langMap);
},
function failure(err) {
deferred.reject(err);
}
);
return deferred.promise;
};
})
但我似乎找不到一种方法来先加载我的“默认”翻译(来自静态文件),然后再与RESTAPI的结果合并。
此外,我能找到的使这个customLoader工作的唯一方法是只指定一个JSON作为翻译映射,也就是说,我不能让它使用第一个对象作为英语映射,第二个对象作为意大利语映射
例如
我可以决定如何给出结果,因为我仍然需要实现REST调用
我希望我说得够清楚了!有人能帮你吗?和knallis的解释对你有帮助吗?我没看到那篇帖子。。plunker knallis的建议实际上可以用来做我想做的事情(前提是我仍然需要从.json文件加载我的初始表,但这可以通过$http对象轻松完成)。奇怪的事实:当我决定在angular translate论坛上提问时,他并没有告诉我这个方向:(是的,我用了不同的词,但重点仍然是一样的)