fix locale
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user