@using System.Globalization @using Microsoft.AspNetCore.Localization @using Microsoft.AspNetCore.Http @using Oqtane.Models @namespace Oqtane.Themes.Controls @inherits ThemeControlBase @inject ILanguageService LanguageService @inject NavigationManager NavigationManager @if (_supportedCultures?.Count() > 1) {
} @code{ private IEnumerable _supportedCultures; private string MenuAlignment = string.Empty; [Parameter] public string DropdownAlignment { get; set; } = string.Empty; // Empty or Left or Right [Parameter] public string ButtonClass { get; set; } = "btn-outline-secondary"; [CascadingParameter] HttpContext HttpContext { get; set; } protected override void OnParametersSet() { MenuAlignment = DropdownAlignment.ToLower() == "right" ? "dropdown-menu-end" : string.Empty; var languages = PageState.Languages; _supportedCultures = languages.Select(l => new Culture { Name = l.Code, DisplayName = l.Name }); if (PageState.QueryString.ContainsKey("culture")) { var culture = PageState.QueryString["culture"]; if (_supportedCultures.Any(item => item.Name == culture)) { var localizationCookieValue = CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)); HttpContext.Response.Cookies.Append(CookieRequestCultureProvider.DefaultCookieName, localizationCookieValue, new CookieOptions { Path = "/", Expires = DateTimeOffset.UtcNow.AddYears(365) }); } NavigationManager.NavigateTo(NavigationManager.Uri.Replace($"?culture={culture}", ""), forceLoad: true); } } private async Task SetCultureAsync(string culture) { if (culture != CultureInfo.CurrentUICulture.Name) { var localizationCookieValue = CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)); var interop = new Interop(JSRuntime); await interop.SetCookie(CookieRequestCultureProvider.DefaultCookieName, localizationCookieValue, 360); NavigationManager.NavigateTo(NavigationManager.Uri, forceLoad: true); } } }