我是角度翻译的新手(虽然我不是Angular本身的神)。 假设我有一套已有的英文和意大利文翻译JSON文件。那些包含我应该默认使用的翻译。
I18N /区域设置en_GB.json
{
"market.marketplace.title": "Marketplace",
"market.marketplace.descr": "Here is a description",
"market.available.items": "Available items"
}
I18N /区域设置it_IT.json
{
"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'
});
...
问题是我还必须考虑我必须在一开始就运行的REST调用的结果(比如翻译服务配置时间),这可能会覆盖一些默认翻译。 我尝试使用自定义加载器:
.conf文件
...
//$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;
};
})
但我似乎找不到加载我的"默认"的方法。首先翻译(来自静态文件),然后与我的REST API的结果合并。 此外,我能找到使这个customLoader工作的唯一方法是只指定一个JSON作为翻译地图,即我不能使它将第一个对象用作英语地图,第二个对象用作意大利地图。
E.g。
/* If resulting configMap layout is like this, translations are displayed but only second JSON Object is used */
var configMap = [
{
"market.marketplace.title": "ENGLISHTITLE",
"market.marketplace.descr": "ENGLISHDESCR"
},
{
"market.marketplace.title": "ITALIANTITLE",
"market.marketplace.descr": "ITALIANDESCR"
}
]
/* This way does not work */
var configMap = [
{"en_GB",
{
"market.marketplace.title": "ENGLISHTITLE",
"market.marketplace.descr": "ENGLISHDESCR"
},
},
{"it_IT",
{
"market.marketplace.title": "ITALIANTITLE",
"market.marketplace.descr": "ITALIANDESCR"
}
}
]
我可以决定如何给出结果,因为我仍然需要实现REST调用。
我希望自己足够清楚!有人可以在这帮忙吗?