Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 在获取替代转换映射之前加载默认静态转换文件_Angularjs_Loader_Angular Translate - Fatal编程技术网

Angularjs 在获取替代转换映射之前加载默认静态转换文件

Angularjs 在获取替代转换映射之前加载默认静态转换文件,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" }

我是角度翻译的新手(虽然我不是角度翻译的神)。 假设我已经有了一套翻译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": "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论坛上提问时,他并没有告诉我这个方向:(是的,我用了不同的词,但重点仍然是一样的)