【发布时间】:2016-09-11 20:08:51
【问题描述】:
我将angular-translate 用于 i18n。我想将$translatePartialLoader 服务用于模块化语言键作为延迟加载。我也想为此使用ui-router resolve 选项。
现在该怎么做?可以为我添加代码示例吗?
谢谢
【问题讨论】:
标签: angularjs angular-ui-router angular-translate resolve
我将angular-translate 用于 i18n。我想将$translatePartialLoader 服务用于模块化语言键作为延迟加载。我也想为此使用ui-router resolve 选项。
现在该怎么做?可以为我添加代码示例吗?
谢谢
【问题讨论】:
标签: angularjs angular-ui-router angular-translate resolve
我找到解决方案并解决我的问题。
在配置中:
$translatePartialLoaderProvider.addPart('index');
$translateProvider
.useSanitizeValueStrategy(null)
.fallbackLanguage('en-us')
.registerAvailableLanguageKeys(['en-us','pt-br'], {
'en_*': 'en-us',
'pt_*': 'pt-br'
})
.useLoader('$translatePartialLoader', {
urlTemplate: '{part}/locale_{lang}.json'
})
.useLoaderCache(true)
.useCookieStorage()
.determinePreferredLanguage();
在ui-router 中为索引:
.state('index', {
url: '/index',
templateUrl: 'index.html',
controller:'IndexCtrl',
resolve: {
trans:['RequireTranslations',
function (RequireTranslations) {
RequireTranslations('index');
}],
dep: ['trans','$ocLazyLoad',
function(trans,$ocLazyLoad){
return $ocLazyLoad.load(['plugin']).then(
function(){
return $ocLazyLoad.load(['IndexCtrl.js']);
}
);
}]
}
})
.state('index.users',{
url: "/users",
templateUrl: "users.html",
controller:'UserListCtrl',
resolve: {
trans:['RequireTranslations',
function (RequireTranslations) {
RequireTranslations('modules/user');
}],
dep: ['trans','$ocLazyLoad',
function(trans,$ocLazyLoad){
return $ocLazyLoad.load(['UserListCtrl.js'])
}]
}
})
在run:
app.run(function($rootScope,$translate) {
// translate refresh is necessary to load translate table
$rootScope.$on('$translatePartialLoaderStructureChanged', function () {
$translate.refresh();
});
$rootScope.$on('$translateChangeEnd', function() {
// get current language
$rootScope.currentLanguage = $translate.use();
});
})
在RequireTranslations工厂:
app.factory('RequireTranslations', function($translatePartialLoader, $translate,$rootScope) {
return function() {
angular.forEach(arguments, function(translationKey) {
$translatePartialLoader.addPart(translationKey);
});
return $translate.refresh().then(
function(){
return $translate.use($rootScope.currentLanguage);
}
);
};
});
请注意,您应该在所有controllers 中添加$translatePartialLoader 和trans 作为参数,如下所示:
app.controller('UserListCtrl',function($scope,...,$translatePartialLoader,trans){
【讨论】: