在获取覆盖转换映射之前加载默认静态转换文件

时间:2015-10-01 18:19:18

标签: angularjs loader angular-translate

我是角度翻译的新手(虽然我不是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调用。

我希望自己足够清楚!有人可以在这帮忙吗?

0 个答案:

没有答案