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