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

问题描述 投票:0回答:3

我是 Angular JS 的新手。对于语言翻译,我在工作中使用 Angular-Translate 服务。我正在通过 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?

提前致谢。

angularjs angular-services angular-translate angular-transitions
3个回答
1
投票

看看 Angular-translate 创建者的答案,他指出“[...]如果不使用异步加载,就无法在运行时使用 $translate 服务扩展现有翻译。[...] ”

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


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);
  }
});

我就这样成功了。


0
投票

根据 Xu Tai Nguyen 的回复,对我来说,它的工作原理是将自定义提供程序包含在工厂中的 [] 之间:

.factory('TranslationService', ['CustomProvider'], function(CustomProvider) {

希望这对某人有帮助

我正在使用 Angular-Translate 2.13.1 和 Angular 1.4.3

© www.soinside.com 2019 - 2024. All rights reserved.