@using Microsoft.Extensions.Localization
@using AliasVault.Client.Services
@using Microsoft.JSInterop
@using System.Globalization
@implements IDisposable
@inject LanguageService LanguageService
@inject IJSRuntime JSRuntime
@code {
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 void OnLanguageChanged(string languageCode)
{
_currentLanguage = languageCode;
InvokeAsync(StateHasChanged);
}
private async Task OnLanguageChangedFromSelect(ChangeEventArgs e)
{
var languageCode = e.Value?.ToString();
if (!string.IsNullOrEmpty(languageCode))
{
await LanguageService.SetLanguageAsync(languageCode);
}
}
}