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 @@
-
+