如何从配置外部向$ translateProvider添加翻译?

时间:2015-04-22 10:18:04

标签: angularjs angular-services angular-translate angular-transitions

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

提前致谢。

2 个答案:

答案 0 :(得分:1)

看一下这个answer from the creator of angular-translate,他指出" [...]没有办法在运行时使用$ translate服务扩展现有翻译而不使用异步加载。[ ...]"

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

答案 1 :(得分: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);
  }
});

我成功了。