Browse Source

Make language switch working for blazor server side.

pull/8074/head
Halil İbrahim Kalkan 6 years ago
parent
commit
acfca93c31
  1. 67
      framework/src/Volo.Abp.AspNetCore.Components.Server.BasicTheme/Themes/Basic/LanguageSwitch.razor
  2. 0
      framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LanguageSwitch.razor

67
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())
{
<BarDropdown>
<BarDropdownToggle>
@_currentLanguage.DisplayName
</BarDropdownToggle>
<BarDropdownMenu RightAligned="true">
@foreach (var language in _otherLanguages)
{
<BarDropdownItem Clicked="() => ChangeLanguage(language)">@language.DisplayName</BarDropdownItem>
}
</BarDropdownMenu>
</BarDropdown>
}
@code {
private IReadOnlyList<LanguageInfo> _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
);
}
}

0
framework/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/Themes/Basic/LanguageSwitch.razor → framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LanguageSwitch.razor

Loading…
Cancel
Save