@using Microsoft.Extensions.Localization
@using AliasVault.Client.Services
@using Microsoft.JSInterop
@using System.Globalization
@implements IDisposable
@inject LanguageService LanguageService
@inject IJSRuntime JSRuntime
@if (_isDropdownOpen)
{
@foreach (var language in LanguageService.GetSupportedLanguages())
{
}
}
@code {
private bool _isDropdownOpen = false;
private string _currentLanguage = "en";
public void Dispose()
{
LanguageService.LanguageChanged -= OnLanguageChanged;
}
protected override async Task OnInitializedAsync()
{
// Get the current culture that Blazor is actually using
var currentCulture = System.Globalization.CultureInfo.CurrentUICulture.TwoLetterISOLanguageName;
var supportedLanguages = LanguageService.GetSupportedLanguages();
if (supportedLanguages.ContainsKey(currentCulture))
{
_currentLanguage = currentCulture;
}
else
{
// Fallback to getting language from service
_currentLanguage = await LanguageService.GetCurrentLanguageAsync();
}
LanguageService.LanguageChanged += OnLanguageChanged;
StateHasChanged();
}
private static string GetLanguageDisplayName(string languageCode)
{
var supportedLanguages = LanguageService.GetSupportedLanguages();
return supportedLanguages.GetValueOrDefault(languageCode, "English");
}
private void OnLanguageChanged(string languageCode)
{
_currentLanguage = languageCode;
InvokeAsync(StateHasChanged);
}
private void ToggleDropdown()
{
_isDropdownOpen = !_isDropdownOpen;
}
private async Task SelectLanguage(string languageCode)
{
_isDropdownOpen = false;
await LanguageService.SetLanguageAsync(languageCode);
}
}