diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.BasicTheme/Themes/Basic/LanguageSwitch.razor b/framework/src/Volo.Abp.AspNetCore.Components.Server.BasicTheme/Themes/Basic/LanguageSwitch.razor
new file mode 100644
index 0000000000..91acf3b4a1
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.BasicTheme/Themes/Basic/LanguageSwitch.razor
@@ -0,0 +1,67 @@
+@using Volo.Abp.Localization
+@using System.Globalization
+@using System.Collections.Immutable
+@using Microsoft.AspNetCore.RequestLocalization
+@inject ILanguageProvider LanguageProvider
+@inject IJSRuntime JsRuntime
+@inject NavigationManager NavigationManager
+@inject IAbpRequestLocalizationOptionsProvider RequestLocalizationOptionsProvider
+@if (_otherLanguages != null && _otherLanguages.Any())
+{
+
+
+ @_currentLanguage.DisplayName
+
+
+ @foreach (var language in _otherLanguages)
+ {
+ @language.DisplayName
+ }
+
+
+}
+@code {
+ private IReadOnlyList _otherLanguages;
+ private LanguageInfo _currentLanguage;
+
+ protected override async Task OnInitializedAsync()
+ {
+ var languages = await LanguageProvider.GetLanguagesAsync();
+ var currentLanguage = languages.FindByCulture(
+ CultureInfo.CurrentCulture.Name,
+ CultureInfo.CurrentUICulture.Name
+ );
+
+ if (currentLanguage == null)
+ {
+ 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);
+ }
+ }
+
+ _currentLanguage = currentLanguage;
+ _otherLanguages = languages.Where(l => l != _currentLanguage).ToImmutableList();
+ }
+
+ private void ChangeLanguage(LanguageInfo language)
+ {
+ var relativeUrl = NavigationManager.Uri.RemovePreFix(NavigationManager.BaseUri).EnsureStartsWith('/');
+
+ NavigationManager.NavigateTo(
+ $"/Abp/Languages/Switch?culture={language.CultureName}&uiCulture={language.UiCultureName}&returnUrl={relativeUrl}",
+ forceLoad: true
+ );
+ }
+}
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/Themes/Basic/LanguageSwitch.razor b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LanguageSwitch.razor
similarity index 100%
rename from framework/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/Themes/Basic/LanguageSwitch.razor
rename to framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LanguageSwitch.razor