Ehs*_*Ali 1 resolve angularjs angular-ui-router angular-translate
我用angular-translate的是i18n。我想使用$translatePartialLoader模块化语言密钥服务作为延迟加载。ui-router我也想为此使用解析选项。
现在该怎么做呢?可以为我添加一个代码示例吗?
谢谢
我找到解决方案并解决我的问题。
在配置中:
$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();
Run Code Online (Sandbox Code Playgroud)
在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 Code Online (Sandbox Code Playgroud)
并在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();
});
})
Run Code Online (Sandbox Code Playgroud)
和在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);
}
);
};
});
Run Code Online (Sandbox Code Playgroud)
请注意,您应该在 all 中添加$translatePartialLoaderandtrans作为参数,controllers如下所示:
app.controller('UserListCtrl',function($scope,...,$translatePartialLoader,trans){
Run Code Online (Sandbox Code Playgroud)