@using EnvelopeGenerator.Server.Client.Services @using EnvelopeGenerator.Application.Resources @using Microsoft.Extensions.Localization @rendermode InteractiveWebAssembly @inject LocalizationService LocalizationService @inject NavigationManager Navigation @inject IStringLocalizer UiLocalizer
@if (_isOpen) {
@foreach (var option in _options) { }
}
@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); string L(string key, string fallback) { var value = UiLocalizer[key]; return value.ResourceNotFound ? fallback : value.Value; } }