mirror of https://github.com/abpframework/abp.git
2 changed files with 67 additions and 0 deletions
@ -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 |
|||
); |
|||
} |
|||
} |
|||
Loading…
Reference in new issue