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)); }
private void PrepareAvailableLanguageModel( AvailableLanguageModel model, AvailableResourcesModel resources, Dictionary <int, LastResourcesImportInfo> lastImportInfos, Language language = null, LanguageDownloadState state = null) { // Source Id (aka SetId), not entity Id! model.Id = resources.Id; model.PreviousSetId = resources.PreviousSetId; model.IsInstalled = language != null; model.Name = GetCultureDisplayName(resources.Language.Culture) ?? resources.Language.Name; model.LanguageCulture = resources.Language.Culture; model.UniqueSeoCode = resources.Language.TwoLetterIsoCode; model.Rtl = resources.Language.Rtl; model.Version = resources.Version; model.Type = resources.Type; model.Published = resources.Published; model.DisplayOrder = resources.DisplayOrder; model.TranslatedCount = resources.TranslatedCount; model.TranslatedPercentage = resources.TranslatedPercentage; model.IsDownloadRunning = state != null && state.Id == resources.Id; model.UpdatedOn = _dateTimeHelper.ConvertToUserTime(resources.UpdatedOn, DateTimeKind.Utc); model.UpdatedOnString = resources.UpdatedOn.RelativeFormat(true, "f"); model.FlagImageFileName = GetFlagFileName(resources.Language.Culture); if (language != null && lastImportInfos.TryGetValue(language.Id, out LastResourcesImportInfo info)) { // Only show percent at last import if it's less than the current percentage. var percentAtLastImport = Math.Round(info.TranslatedPercentage, 2); if (percentAtLastImport < model.TranslatedPercentage) { model.TranslatedPercentageAtLastImport = percentAtLastImport; } model.LastResourcesImportOn = info.ImportedOn; model.LastResourcesImportOnString = model.LastResourcesImportOn.Value.RelativeFormat(false, "f"); } }
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)); }
public async Task <ActionResult> Edit(int id) { var language = _languageService.GetLanguageById(id); if (language == null) { return(RedirectToAction("List")); } // Set page timeout to 5 minutes this.Server.ScriptTimeout = 300; var model = language.ToModel(); PrepareLanguageModel(model, language, false); // Provide combobox with downloadable resources for this language. var lastImportInfos = GetLastResourcesImportInfos(); var checkResult = await CheckAvailableResources(); string cultureParentName = null; try { var ci = CultureInfo.GetCultureInfo(language.LanguageCulture); if (!ci.IsNeutralCulture && ci.Parent != null) { cultureParentName = ci.Parent.Name; } } catch { } foreach (var resources in checkResult.Resources.Where(x => x.Published)) { var srcCulture = resources.Language.Culture; if (srcCulture.HasValue()) { var downloadDisplayOrder = srcCulture.IsCaseInsensitiveEqual(language.LanguageCulture) ? 1 : 0; if (downloadDisplayOrder == 0 && cultureParentName.IsCaseInsensitiveEqual(srcCulture)) { downloadDisplayOrder = 2; } if (downloadDisplayOrder == 0 && resources.Language.TwoLetterIsoCode.IsCaseInsensitiveEqual(language.UniqueSeoCode)) { downloadDisplayOrder = 3; } if (downloadDisplayOrder != 0) { var alModel = new AvailableLanguageModel(); PrepareAvailableLanguageModel(alModel, resources, lastImportInfos, language); alModel.DisplayOrder = downloadDisplayOrder; model.AvailableDownloadLanguages.Add(alModel); } } } return(View(model)); }