Javascript 更改ui路由器中的$locale 我想要达到的目标

Javascript 更改ui路由器中的$locale 我想要达到的目标,javascript,angularjs,internationalization,angular-ui-router,angular-ui-bootstrap,Javascript,Angularjs,Internationalization,Angular Ui Router,Angular Ui Bootstrap,在我们的angularjs中,我们为日期选择器使用AngularUI引导。我们希望我们的日期选择器在用户的语言环境中本地化,但我们不能动态地这样做,因为没有这样的API。用户的区域设置是从后端检索的,因此我需要在呈现主状态之前更改angular的区域设置。我的解决方案是调用一个服务,在我们的应用程序中注入正确的语言环境文件 代码 injectorService: ;(function(module) { 'use strict'; function injector($q) { var

在我们的angularjs中,我们为日期选择器使用AngularUI引导。我们希望我们的日期选择器在用户的语言环境中本地化,但我们不能动态地这样做,因为没有这样的API。用户的区域设置是从后端检索的,因此我需要在呈现主状态之前更改angular的区域设置。我的解决方案是调用一个服务,在我们的应用程序中注入正确的语言环境文件

代码 injectorService:

;(function(module) {
'use strict';

function injector($q) {
    var body = document.getElementsByTagName('body')[0];
    return {
        addScript: function(url, async, cb) {
        return $q(function(resolve, reject) {
            var script = document.createElement('script');
            var loaded;
            script.type = 'text/javascript';
            script.setAttribute('src', url);
            script.onreadystatechange = script.onload = function() {
              if (!loaded) {
                if(cb && _.isFunction(cb)){
                    cb(null, 'ok');
                } else {
                    return resolve('ok');
                }
              }
              loaded = true;
              resolve('loaded');
            };
            script.onerror = function(error) {
                if(!error.isTrusted){
                    if(cb && _.isFunction(cb)){
                        cb(error, null);
                    } else {
                        reject(error);
                    }
                } 
            };
            body.appendChild(script);
        });
    }
  };
}

module.factory('Injector', injector);

}(angular.module('injector', [])));
在主状态的初始化中,我在resolve部分调用以下代码

            resolve: {
                    env : function(userService, Injector) {
                        return userService.getLocale()
                            .then(function(env) {
                                var userEnv = env;
                                var baseUrl = '/app/';
                                var angularSpecificLocale = '';

                                switch(userEnv.userlocale){
                                    case 'fr':  
                                  angularSpecificLocale = baseUrl + 'fr.js';
                                    break;
                                case 'ro':
                                  angularSpecificLocale = baseUrl + 'ro.js';
                                    break;
                                default:
                                  angularSpecificLocale = 'en';
                                  break;
                                }
                                // Don't add any locale files
                                if(angularSpecificLocale === 'en'){
                                    return userEnv;
                                } else {
                                  return Injector.addScript(angularSpecificLocale)
                                    .then(function() {
                                        return userEnv;
                                    });
                                }
                            });
                    }
                }
问题 问题是datepicker仍然没有本地化。我想我错过了最后一步,因为当我在代码中添加这个片段时

angular.injector(['ngLocale']).get('$locale')
我发现区域设置id是正确的。如果不使用任何外部库,我将非常感谢您的帮助

谢谢:)

我使用模块就是为了这个目的:

deferredBootstrapper.bootstrap({
    element: document.body,
    module: 'frontApp',
    resolve: {
        userLang: ['$http', function ($http) {
            return $http.get('/api/userLanguage');
        }]
    }
});

然后,您可以在应用程序中的任何位置插入并使用
userLang

Thanx进行回复!我更喜欢不必在项目中再添加一个库的解决方案,尤其是现在我认为我真的很接近解决方案:)