Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        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");
            }
        }
Exemplo n.º 3
0
        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));
        }
Exemplo n.º 4
0
        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));
        }