public async Task <ActionResult> AvailableLanguages(bool enforce = false)
        {
            var languages   = _languageService.GetAllLanguages(true);
            var languageDic = languages.ToDictionarySafe(x => x.LanguageCulture, StringComparer.OrdinalIgnoreCase);

            var downloadState   = _asyncState.Get <LanguageDownloadState>();
            var lastImportInfos = GetLastResourcesImportInfos();
            var checkResult     = await CheckAvailableResources(enforce);

            var model = new AvailableLanguageListModel();

            model.Languages     = new List <AvailableLanguageModel>();
            model.Version       = checkResult.Version;
            model.ResourceCount = checkResult.ResourceCount;

            foreach (var resources in checkResult.Resources)
            {
                if (resources.Language.Culture.HasValue())
                {
                    languageDic.TryGetValue(resources.Language.Culture, out Language language);

                    var alModel = new AvailableLanguageModel();
                    PrepareAvailableLanguageModel(alModel, resources, lastImportInfos, language, downloadState);

                    model.Languages.Add(alModel);
                }
            }

            return(PartialView(model));
        }
        public async Task <ActionResult> AvailableLanguages(bool enforce = false)
        {
            if (!_services.Permissions.Authorize(StandardPermissionProvider.ManageLanguages))
            {
                return(Content(T("Admin.AccessDenied.Description")));
            }

            var languages   = _languageService.GetAllLanguages(true);
            var languageDic = languages.ToDictionarySafe(x => x.LanguageCulture, StringComparer.OrdinalIgnoreCase);

            var downloadState = _asyncState.Get <LanguageDownloadState>();
            var translatedPercentageAtLastImport = _genericAttributeService.GetAttributes("TranslatedPercentageAtLastImport", "Language").ToDictionarySafe(x => x.EntityId);

            var checkResult = await CheckAvailableResources(enforce);

            var model = new AvailableLanguageListModel();

            model.Languages     = new List <AvailableLanguageModel>();
            model.Version       = checkResult.Version;
            model.ResourceCount = checkResult.ResourceCount;

            foreach (var resources in checkResult.Resources)
            {
                if (resources.Language.Culture.HasValue())
                {
                    languageDic.TryGetValue(resources.Language.Culture, out Language language);

                    var alModel = new AvailableLanguageModel();
                    PrepareAvailableLanguageModel(alModel, resources, translatedPercentageAtLastImport, language, downloadState);

                    model.Languages.Add(alModel);
                }
            }

            return(PartialView(model));
        }