|
|
@ -1,12 +1,10 @@ |
|
|
@using Volo.Abp.Localization |
|
|
@using Volo.Abp.Localization |
|
|
@using System.Globalization |
|
|
@using System.Globalization |
|
|
@using System.Collections.Immutable |
|
|
@using System.Collections.Immutable |
|
|
@using Microsoft.JSInterop |
|
|
@using Microsoft.AspNetCore.RequestLocalization |
|
|
@using MudBlazor |
|
|
|
|
|
@using Volo.Abp.AspNetCore.Components.Web |
|
|
|
|
|
@inject ILanguageProvider LanguageProvider |
|
|
@inject ILanguageProvider LanguageProvider |
|
|
@inject IJSRuntime JsRuntime |
|
|
@inject NavigationManager NavigationManager |
|
|
@inject ICookieService CookieService |
|
|
@inject IAbpRequestLocalizationOptionsProvider RequestLocalizationOptionsProvider |
|
|
|
|
|
|
|
|
@if (_otherLanguages != null && _otherLanguages.Any()) |
|
|
@if (_otherLanguages != null && _otherLanguages.Any()) |
|
|
{ |
|
|
{ |
|
|
@ -15,7 +13,7 @@ |
|
|
<MudDivider /> |
|
|
<MudDivider /> |
|
|
@foreach (var language in _otherLanguages) |
|
|
@foreach (var language in _otherLanguages) |
|
|
{ |
|
|
{ |
|
|
<MudMenuItem OnClick="@(() => ChangeLanguageAsync(language))">@language.DisplayName</MudMenuItem> |
|
|
<MudMenuItem OnClick="@(() => ChangeLanguage(language))">@language.DisplayName</MudMenuItem> |
|
|
} |
|
|
} |
|
|
</MudMenu> |
|
|
</MudMenu> |
|
|
} |
|
|
} |
|
|
@ -26,60 +24,42 @@ |
|
|
|
|
|
|
|
|
protected override async Task OnInitializedAsync() |
|
|
protected override async Task OnInitializedAsync() |
|
|
{ |
|
|
{ |
|
|
var selectedLanguageName = await JsRuntime.InvokeAsync<string>( |
|
|
var languages = await LanguageProvider.GetLanguagesAsync(); |
|
|
"localStorage.getItem", |
|
|
var currentLanguage = languages.FindByCulture( |
|
|
"Abp.SelectedLanguage" |
|
|
CultureInfo.CurrentCulture.Name, |
|
|
); |
|
|
CultureInfo.CurrentUICulture.Name |
|
|
|
|
|
); |
|
|
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); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
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( |
|
|
var relativeUrl = NavigationManager.Uri.RemovePreFix(NavigationManager.BaseUri).EnsureStartsWith('/').EnsureStartsWith('~'); |
|
|
"localStorage.setItem", |
|
|
|
|
|
"Abp.SelectedLanguage", |
|
|
|
|
|
language.UiCultureName |
|
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
|
|
await JsRuntime.InvokeVoidAsync( |
|
|
NavigationManager.NavigateTo( |
|
|
"localStorage.setItem", |
|
|
$"Abp/Languages/Switch?culture={language.CultureName}&uiCulture={language.UiCultureName}&returnUrl={relativeUrl}", |
|
|
"Abp.IsRtl", |
|
|
forceLoad: true |
|
|
CultureInfo.GetCultureInfo(language.UiCultureName).TextInfo.IsRightToLeft |
|
|
|
|
|
); |
|
|
); |
|
|
|
|
|
|
|
|
await CookieService.SetAsync( |
|
|
|
|
|
".AspNetCore.Culture", |
|
|
|
|
|
$"c={language.CultureName}|uic={language.UiCultureName}", |
|
|
|
|
|
new CookieOptions |
|
|
|
|
|
{ |
|
|
|
|
|
Path = "/" |
|
|
|
|
|
} |
|
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
|
|
await JsRuntime.InvokeVoidAsync("location.reload"); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|