0

我是角度 js 的新手。对于语言翻译,我在工作中使用 angular-translate 服务。我正在通过 API 调用响应获取我需要在 $translateProvider 中分配的全部翻译。我知道我可以将翻译分配给 $translateprovider ($translateprovider.translations ('en',translations) 仅来自配置模块,但我认为来自配置模块的 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?

提前致谢。

4

2 回答 2

1

看看angular-translate 的创建者的这个答案,他说“[...]没有办法在运行时使用 $translate 服务而不使用异步加载来扩展现有的翻译。[...]”

有关异步加载翻译的更多信息,请查看文档。你甚至可以通过调用你的 API 来指定你自己的自定义加载器来获取翻译。

于 2015-05-20T08:02:57.993 回答
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);
  }
});

我就这样成功了。

于 2018-05-15T10:15:01.383 回答