@using EnvelopeGenerator.Server.Client.Services
@rendermode InteractiveWebAssembly
@inject LocalizationService LocalizationService
@inject NavigationManager Navigation
@if (_isOpen)
{
}
@code {
private readonly IReadOnlyList _options =
[
new("de-DE", "fi-de", "DE"),
new("en-US", "fi-us", "EN"),
new("fr-FR", "fi-fr", "FR")
];
private LanguageOption _selected = new("de-DE", "fi-de", "DE");
private bool _isOpen;
protected override async Task OnInitializedAsync()
{
var currentLanguage = await LocalizationService.GetLanguageAsync();
_selected = _options.FirstOrDefault(x => x.Code.Equals(currentLanguage, StringComparison.OrdinalIgnoreCase))
?? _options[0];
}
private void ToggleMenu()
{
_isOpen = !_isOpen;
}
private void CloseMenu()
{
_isOpen = false;
}
private async Task SelectLanguageAsync(LanguageOption option)
{
if (_selected.Code.Equals(option.Code, StringComparison.OrdinalIgnoreCase))
{
_isOpen = false;
return;
}
_selected = option;
_isOpen = false;
await LocalizationService.SetLanguageAsync(option.Code);
Navigation.NavigateTo(Navigation.Uri, forceLoad: true);
}
private sealed record LanguageOption(string Code, string FlagClass, string ShortName);
}