diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/Themes/Basic/LanguageSwitch.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/Themes/Basic/LanguageSwitch.razor index 695238de9b..c94b16d56a 100644 --- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/Themes/Basic/LanguageSwitch.razor +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/Themes/Basic/LanguageSwitch.razor @@ -1,12 +1,10 @@ @using Volo.Abp.Localization @using System.Globalization @using System.Collections.Immutable -@using Microsoft.JSInterop -@using MudBlazor -@using Volo.Abp.AspNetCore.Components.Web +@using Microsoft.AspNetCore.RequestLocalization @inject ILanguageProvider LanguageProvider -@inject IJSRuntime JsRuntime -@inject ICookieService CookieService +@inject NavigationManager NavigationManager +@inject IAbpRequestLocalizationOptionsProvider RequestLocalizationOptionsProvider @if (_otherLanguages != null && _otherLanguages.Any()) { @@ -15,7 +13,7 @@ @foreach (var language in _otherLanguages) { - @language.DisplayName + @language.DisplayName } } @@ -26,60 +24,42 @@ protected override async Task OnInitializedAsync() { - var selectedLanguageName = await JsRuntime.InvokeAsync( - "localStorage.getItem", - "Abp.SelectedLanguage" - ); - - var allLanguages = await LanguageProvider.GetLanguagesAsync(); - _otherLanguages = allLanguages; - - if (!_otherLanguages.Any()) - { - return; - } - - if (!selectedLanguageName.IsNullOrWhiteSpace()) - { - _currentLanguage = _otherLanguages.FirstOrDefault(l => l.UiCultureName == selectedLanguageName); - } - - if (_currentLanguage == null) - { - _currentLanguage = _otherLanguages.FirstOrDefault(l => l.UiCultureName == CultureInfo.CurrentUICulture.Name); - } + var languages = await LanguageProvider.GetLanguagesAsync(); + var currentLanguage = languages.FindByCulture( + CultureInfo.CurrentCulture.Name, + CultureInfo.CurrentUICulture.Name + ); - if (_currentLanguage == null) + if (currentLanguage == null) { - _currentLanguage = _otherLanguages.FirstOrDefault(); + var localizationOptions = await RequestLocalizationOptionsProvider.GetLocalizationOptionsAsync(); + if (localizationOptions.DefaultRequestCulture != null) + { + currentLanguage = new LanguageInfo( + localizationOptions.DefaultRequestCulture.Culture.Name, + localizationOptions.DefaultRequestCulture.UICulture.Name, + localizationOptions.DefaultRequestCulture.UICulture.DisplayName); + } + else + { + currentLanguage = new LanguageInfo( + CultureInfo.CurrentCulture.Name, + CultureInfo.CurrentUICulture.Name, + CultureInfo.CurrentUICulture.DisplayName); + } } - _otherLanguages = _otherLanguages.Where(l => l != _currentLanguage).ToImmutableList(); + _currentLanguage = currentLanguage; + _otherLanguages = languages.Where(l => l != _currentLanguage).ToImmutableList(); } - private async Task ChangeLanguageAsync(LanguageInfo language) + private void ChangeLanguage(LanguageInfo language) { - await JsRuntime.InvokeVoidAsync( - "localStorage.setItem", - "Abp.SelectedLanguage", - language.UiCultureName - ); + var relativeUrl = NavigationManager.Uri.RemovePreFix(NavigationManager.BaseUri).EnsureStartsWith('/').EnsureStartsWith('~'); - await JsRuntime.InvokeVoidAsync( - "localStorage.setItem", - "Abp.IsRtl", - CultureInfo.GetCultureInfo(language.UiCultureName).TextInfo.IsRightToLeft + NavigationManager.NavigateTo( + $"Abp/Languages/Switch?culture={language.CultureName}&uiCulture={language.UiCultureName}&returnUrl={relativeUrl}", + forceLoad: true ); - - await CookieService.SetAsync( - ".AspNetCore.Culture", - $"c={language.CultureName}|uic={language.UiCultureName}", - new CookieOptions - { - Path = "/" - } - ); - - await JsRuntime.InvokeVoidAsync("location.reload"); } } diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/NavMenu.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/NavMenu.razor index 75541cb2b9..6f5c3deb54 100644 --- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/NavMenu.razor +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/NavMenu.razor @@ -1,24 +1,26 @@ @using Microsoft.AspNetCore.Components.Routing - - - @foreach (var menuItem in Menu.Items) - { - @if (menuItem.Items.IsNullOrEmpty()) - { - - @if (!string.IsNullOrEmpty(menuItem.Icon)) - { - - } - @menuItem.DisplayName - - } - else +@if (Menu != null) +{ + + @foreach (var menuItem in Menu.Items) { - + @if (menuItem.Items.IsNullOrEmpty()) + { + + @if (!string.IsNullOrEmpty(menuItem.Icon)) + { + + } + @menuItem.DisplayName + + } + else + { + + } } - } - + +} @code { private string? GetIcon(string? icon) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered/Components/App.razor b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered/Components/App.razor index b9ee6f1c65..1a263fac10 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered/Components/App.razor +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered/Components/App.razor @@ -19,7 +19,7 @@ MyCompanyName.MyProjectName.Blazor.Server - + @@ -28,7 +28,7 @@ - + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp/Components/App.razor b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp/Components/App.razor index 8ff22afa72..292821d2d9 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp/Components/App.razor +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp/Components/App.razor @@ -16,7 +16,7 @@ MyCompanyName.MyProjectName.Blazor.Server - + @@ -25,7 +25,7 @@ - +