fix locale

This commit is contained in:
2025-12-09 04:09:33 +08:00
parent 429fb39140
commit 24512412e5
7 changed files with 230 additions and 89 deletions

View File

@@ -20,19 +20,16 @@
<span style="padding-left:10px;"><NavLink href="/account/login">Login</NavLink></span>
<span style="padding-left:10px;"><NavLink href="/weather">Weather</NavLink></span>
</div>
<div style="margin-top:16px;">
<strong>zh Quick links:</strong>
<span style="padding-left:10px;"><NavLink href="/zh/account/login">Login</NavLink></span>
<span style="padding-left:10px;"><NavLink href="/zh/weather">Weather</NavLink></span>
</div>
<div style="margin-top:16px;">
<strong>en Quick links:</strong>
<span style="padding-left:10px;"><NavLink href="/en/account/login">Login</NavLink></span>
<span style="padding-left:10px;"><NavLink href="/en/weather">Weather</NavLink></span>
</div>
@code {
[Parameter]
@@ -40,35 +37,20 @@
private int currentCount = 0;
protected override async Task OnInitializedAsync()
protected override Task OnInitializedAsync()
{
if (LocalizationProvider != null)
{
LocalizationProvider.LanguageChanged += OnLanguageChanged;
}
// If running in browser, ensure current culture loaded (WASM loads asynchronously)
if (OperatingSystem.IsBrowser() && LocalizationProvider != null)
{
try
{
await LocalizationProvider.LoadCultureAsync(LocalizationProvider.CurrentCulture);
}
catch { }
}
// localization handled globally in Routes. No per-page initialization needed.
return Task.CompletedTask;
}
private void OnLanguageChanged(object? sender, string culture)
{
_ = InvokeAsync(StateHasChanged);
// no-op; global router remount will update page translations
}
public void Dispose()
{
if (LocalizationProvider != null)
{
LocalizationProvider.LanguageChanged -= OnLanguageChanged;
}
// no per-page unsubscribe required
}
private void IncrementCount()

View File

@@ -111,11 +111,6 @@ else
{
handler = "Server";
}
if (LocalizationProvider != null)
{
LocalizationProvider.LanguageChanged += OnLanguageChanged;
}
}
protected override async Task OnAfterRenderAsync(bool firstRender)
@@ -133,25 +128,6 @@ else
dataLoaded = true;
StateHasChanged();
}
// Ensure culture loaded on client so translations are available
if (firstRender && OperatingSystem.IsBrowser() && LocalizationProvider != null)
{
try
{
await LocalizationProvider.LoadCultureAsync(LocalizationProvider.CurrentCulture);
}
catch { }
}
}
private async void OnLanguageChanged(object? sender, string culture)
{
// ensure UI updates on Blazor sync context
await InvokeAsync(() => {
dataLoaded = true; // ensure UI is rendered
StateHasChanged();
});
}
private async Task LoginAsync()

View File

@@ -17,6 +17,18 @@
<span style="padding-left:10px;"><NavLink href="/counter">Counter</NavLink></span>
</div>
<div style="margin-top:12px; margin-bottom:12px;">
<strong>zh Quick links:</strong>
<span style="padding-left:10px;"><NavLink href="/zh/account/login">Login</NavLink></span>
<span style="padding-left:10px;"><NavLink href="/zh/counter">Counter</NavLink></span>
</div>
<div style="margin-top:12px; margin-bottom:12px;">
<strong>en Quick links:</strong>
<span style="padding-left:10px;"><NavLink href="/en/account/login">Login</NavLink></span>
<span style="padding-left:10px;"><NavLink href="/en/counter">Counter</NavLink></span>
</div>
@if (forecasts == null)
{
<p><em>Loading...</em></p>
@@ -51,34 +63,13 @@ else
public string Locale { get; set; } = string.Empty;
private WeatherForecast[]? forecasts;
protected override async Task OnInitializedAsync()
protected override Task OnInitializedAsync()
{
if (LocalizationProvider != null)
{
LocalizationProvider.LanguageChanged += OnLanguageChanged;
}
if (OperatingSystem.IsBrowser() && LocalizationProvider != null)
{
try { await LocalizationProvider.LoadCultureAsync(LocalizationProvider.CurrentCulture); } catch { }
}
// Simulate asynchronous loading to demonstrate a loading indicator
await Task.Delay(500);
var startDate = DateOnly.FromDateTime(DateTime.Now);
var summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" };
forecasts = Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = startDate.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = summaries[Random.Shared.Next(summaries.Length)]
}).ToArray();
// localization handled globally in Routes. No per-page initialization needed.
return Task.CompletedTask;
}
private void OnLanguageChanged(object? s, string c) => _ = InvokeAsync(StateHasChanged);
public void Dispose() { if (LocalizationProvider != null) LocalizationProvider.LanguageChanged -= OnLanguageChanged; }
public void Dispose() { }
private class WeatherForecast
{