mirror of https://github.com/abpframework/abp.git
4 changed files with 123 additions and 1 deletions
@ -0,0 +1,42 @@ |
|||
using System; |
|||
using System.Net.Http; |
|||
using System.Net.Http.Headers; |
|||
using System.Threading; |
|||
using System.Threading.Tasks; |
|||
using Microsoft.JSInterop; |
|||
using Volo.Abp.DependencyInjection; |
|||
|
|||
namespace MyCompanyName.MyProjectName.Blazor |
|||
{ |
|||
public class BlazorClientHttpMessageHandler : DelegatingHandler, ITransientDependency |
|||
{ |
|||
private readonly IJSRuntime _jsRuntime; |
|||
|
|||
public BlazorClientHttpMessageHandler(IJSRuntime jsRuntime) |
|||
{ |
|||
_jsRuntime = jsRuntime; |
|||
} |
|||
|
|||
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) |
|||
{ |
|||
await SetLanguageAsync(request, cancellationToken); |
|||
|
|||
return await base.SendAsync(request, cancellationToken); |
|||
} |
|||
|
|||
private async Task SetLanguageAsync(HttpRequestMessage request, CancellationToken cancellationToken) |
|||
{ |
|||
var selectedLanguage = await _jsRuntime.InvokeAsync<string>( |
|||
"localStorage.getItem", |
|||
cancellationToken, |
|||
"Abp.SelectedLanguage" |
|||
); |
|||
|
|||
if (!selectedLanguage.IsNullOrWhiteSpace()) |
|||
{ |
|||
request.Headers.AcceptLanguage.Clear(); |
|||
request.Headers.AcceptLanguage.Add(new StringWithQualityHeaderValue(selectedLanguage)); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,67 @@ |
|||
@using Volo.Abp.Localization |
|||
@using System.Globalization |
|||
@inject ILanguageProvider LanguageProvider |
|||
@inject IJSRuntime JsRuntime |
|||
@if (_languages != null && _languages.Count > 1) |
|||
{ |
|||
<Dropdown> |
|||
<DropdownToggle Color="Color.None"> |
|||
@_currentLanguage.DisplayName |
|||
</DropdownToggle> |
|||
<DropdownMenu> |
|||
@foreach (var language in _languages) |
|||
{ |
|||
if (language == _currentLanguage) |
|||
{ |
|||
continue; |
|||
} |
|||
|
|||
<DropdownItem Clicked="() => ChangeLanguageAsync(language)">@language.DisplayName</DropdownItem> |
|||
} |
|||
</DropdownMenu> |
|||
</Dropdown> |
|||
} |
|||
@code { |
|||
private IReadOnlyList<LanguageInfo> _languages; |
|||
private LanguageInfo _currentLanguage; |
|||
|
|||
protected override async Task OnInitializedAsync() |
|||
{ |
|||
var selectedLanguageName = await JsRuntime.InvokeAsync<string>( |
|||
"localStorage.getItem", |
|||
"Abp.SelectedLanguage" |
|||
); |
|||
|
|||
_languages = await LanguageProvider.GetLanguagesAsync(); |
|||
|
|||
if (!_languages.Any()) |
|||
{ |
|||
return; |
|||
} |
|||
|
|||
if (!selectedLanguageName.IsNullOrWhiteSpace()) |
|||
{ |
|||
_currentLanguage = _languages.FirstOrDefault(l => l.UiCultureName == selectedLanguageName); |
|||
} |
|||
|
|||
if (_currentLanguage == null) |
|||
{ |
|||
_currentLanguage = _languages.FirstOrDefault(l => l.UiCultureName == CultureInfo.CurrentUICulture.Name); |
|||
} |
|||
|
|||
if (_currentLanguage == null) |
|||
{ |
|||
_currentLanguage = _languages.FirstOrDefault(); |
|||
} |
|||
} |
|||
|
|||
private async Task ChangeLanguageAsync(LanguageInfo language) |
|||
{ |
|||
await JsRuntime.InvokeVoidAsync( |
|||
"localStorage.setItem", |
|||
"Abp.SelectedLanguage", language.UiCultureName |
|||
); |
|||
|
|||
await JsRuntime.InvokeVoidAsync("location.reload"); |
|||
} |
|||
} |
|||
Loading…
Reference in new issue