Javascript 更改ui路由器中的$locale 我想要达到的目标
在我们的angularjs中,我们为日期选择器使用AngularUI引导。我们希望我们的日期选择器在用户的语言环境中本地化,但我们不能动态地这样做,因为没有这样的API。用户的区域设置是从后端检索的,因此我需要在呈现主状态之前更改angular的区域设置。我的解决方案是调用一个服务,在我们的应用程序中注入正确的语言环境文件 代码 injectorService: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
;(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进行回复!我更喜欢不必在项目中再添加一个库的解决方案,尤其是现在我认为我真的很接近解决方案:)