【问题标题】:How to add translations to $translateProvider from outside the config?如何从配置外部向 $translateProvider 添加翻译?
【发布时间】:2018-05-15 18:15:01
【问题描述】:

我是 Angular 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?

提前致谢。

【问题讨论】:

  • 为什么不给app.config( yourNewTranslateProviderConfig)打电话呢?
  • 感谢您的回复。抱歉,我没明白“yourNewTranslateProviderConfig”是什么意思?
  • 您的意思是从 API 获取提供的语言吗? $translateProvider.preferredLanguage('en_US');
  • 或者你想从api获取翻译数组?
  • 我想从 api 获取翻译数组。

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    出于多种目的,我们可能需要在服务中添加更多翻译,所以我找到了一种方法来做到这一点。 我们可以创建另一个返回 $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);
      }
    });
    

    我就这样成功了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-30
      • 2012-04-01
      • 2011-03-25
      • 1970-01-01
      相关资源
      最近更新 更多