@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 @if (_supportedCultures == null) {

@Localizer["Loading"]

} else { @if (_availableCultures.Count() == 0) { } else {
} @Localizer["Cancel"]
@if (_packages != null && _packages.Count > 0) {
@Localizer["Name"] @Localizer["Version"]
@context.Name @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; 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)); _packages = await PackageService.GetPackagesAsync("language"); if (_supportedCultures.Count() == 1) { _message = Localizer["OnlyEnglish"]; } else if (_availableCultures.Count() == 0) { _message = Localizer["AllLanguages"]; } } 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 Language Package"); } } 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 Language Package {Name} {Version}", packageid, version); AddModuleMessage(Localizer["Error.Langauge.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); } } }