@namespace Oqtane.Modules.Admin.Languages @inherits ModuleBase @using System.Globalization @using Microsoft.AspNetCore.Localization @inject NavigationManager NavigationManager @inject ILocalizationService LocalizationService @inject ILanguageService LanguageService @inject IPackageService PackageService @inject IStringLocalizer Localizer @inject IStringLocalizer SharedLocalizer @if (_supportedCultures == null) {

@Localizer["Loading"]

} else { @if (_availableCultures.Count() == 0) { } else {
} @Localizer["Cancel"]
@if (_packages != null && _packages.Count > 0) {
 

@context.Name

  by:  @context.Owner
@(context.Description.Length > 400 ? (context.Description.Substring(0, 400) + "...") : context.Description)
@(String.Format("{0:n0}", context.Downloads)) @SharedLocalizer["Search.Downloads"]  |   @SharedLocalizer["Search.Released"]: @context.ReleaseDate.ToString("MMM dd, yyyy")  |  @SharedLocalizer["Search.Version"]: @context.Version
@Localizer["Cancel"] } else { }
@Localizer["Cancel"]
} @code { private string _code = string.Empty; private string _isDefault = "False"; private string _message; private IEnumerable _supportedCultures; private IEnumerable _availableCultures; private List _packages; private string _search = ""; public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin; protected override async Task OnParametersSetAsync() { var languages = await LanguageService.GetLanguagesAsync(PageState.Site.SiteId); var languagesCodes = languages.Select(l => l.Code).ToList(); _supportedCultures = await LocalizationService.GetCulturesAsync(); _availableCultures = _supportedCultures .Where(c => !c.Name.Equals(Constants.DefaultCulture) && !languagesCodes.Contains(c.Name)); await LoadTranslations(); if (_supportedCultures.Count() == 1) { _message = Localizer["OnlyEnglish"]; } else if (_availableCultures.Count() == 0) { _message = Localizer["AllLanguages"]; } } private async Task LoadTranslations() { _packages = await PackageService.GetPackagesAsync("translation", _search); } private async Task Search() { try { await LoadTranslations(); } catch (Exception ex) { await logger.LogError(ex, "Error On Search"); } } private async Task Reset() { try { _search = ""; await LoadTranslations(); } catch (Exception ex) { await logger.LogError(ex, "Error On Reset"); } } private async Task SaveLanguage() { var language = new Language { SiteId = PageState.Page.SiteId, Name = CultureInfo.GetCultureInfo(_code).DisplayName, Code = _code, IsDefault = (_isDefault == null ? false : Boolean.Parse(_isDefault)) }; try { language = await LanguageService.AddLanguageAsync(language); if (language.IsDefault) { await SetCultureAsync(language.Code); } await logger.LogInformation("Language Added {Language}", language); NavigationManager.NavigateTo(NavigateUrl()); } catch (Exception ex) { await logger.LogError(ex, "Error Adding Language {Language} {Error}", language, ex.Message); AddModuleMessage(Localizer["Error.Language.Add"], MessageType.Error); } } private async Task InstallLanguages() { try { await PackageService.InstallPackagesAsync(); AddModuleMessage(string.Format(Localizer["Success.Language.Install"], NavigateUrl("admin/system")), MessageType.Success); } catch (Exception ex) { await logger.LogError(ex, "Error Installing Translations"); } } private async Task DownloadLanguage(string packageid, string version) { try { await PackageService.DownloadPackageAsync(packageid, version, "Packages"); await logger.LogInformation("Language Paclage {Name} {Version} Downloaded Successfully", packageid, version); AddModuleMessage(Localizer["Success.Language.Download"], MessageType.Success); StateHasChanged(); } catch (Exception ex) { await logger.LogError(ex, "Error Downloading Translation {Name} {Version}", packageid, version); AddModuleMessage(Localizer["Error.Language.Download"], MessageType.Error); } } private async Task SetCultureAsync(string culture) { if (culture != CultureInfo.CurrentUICulture.Name) { var interop = new Interop(JSRuntime); var localizationCookieValue = CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)); await interop.SetCookie(CookieRequestCultureProvider.DefaultCookieName, localizationCookieValue, 360); NavigationManager.NavigateTo(NavigationManager.Uri, forceLoad: true); } } }