From acfca93c31f2c9d5da635665f4b9bd5b6a434469 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 9 Mar 2021 21:21:51 +0300 Subject: [PATCH] Make language switch working for blazor server side. --- .../Themes/Basic/LanguageSwitch.razor | 67 +++++++++++++++++++ .../Themes/Basic/LanguageSwitch.razor | 0 2 files changed, 67 insertions(+) create mode 100644 framework/src/Volo.Abp.AspNetCore.Components.Server.BasicTheme/Themes/Basic/LanguageSwitch.razor rename framework/src/{Volo.Abp.AspNetCore.Components.Web.BasicTheme => Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme}/Themes/Basic/LanguageSwitch.razor (100%) 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