91 lines
2.9 KiB
Plaintext
91 lines
2.9 KiB
Plaintext
@page "/weather"
|
|
@page "/{locale}/weather"
|
|
|
|
@using Microsoft.Extensions.Localization
|
|
@inject IStringLocalizer<Weather> L
|
|
@inject Atomx.Admin.Client.Services.ILocalizationProvider LocalizationProvider
|
|
|
|
<PageTitle>@L["weather.title"]</PageTitle>
|
|
|
|
<h1>@L["weather.title"]</h1>
|
|
|
|
<p>@L["weather.summary"]</p>
|
|
|
|
<div style="margin-top:12px; margin-bottom:12px;">
|
|
<strong>Quick links:</strong>
|
|
<span style="padding-left:10px;"><NavLink href="/account/login">Login</NavLink></span>
|
|
<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>
|
|
}
|
|
else
|
|
{
|
|
<table class="table">
|
|
<thead>
|
|
<tr>
|
|
<th>Date</th>
|
|
<th aria-label="Temperature in Celsius">@L["weather.temperature"]</th>
|
|
<th aria-label="Temperature in Farenheit">Temp. (F)</th>
|
|
<th>Summary</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
@foreach (var forecast in forecasts)
|
|
{
|
|
<tr>
|
|
<td>@forecast.Date.ToShortDateString()</td>
|
|
<td>@forecast.TemperatureC</td>
|
|
<td>@forecast.TemperatureF</td>
|
|
<td>@forecast.Summary</td>
|
|
</tr>
|
|
}
|
|
</tbody>
|
|
</table>
|
|
}
|
|
|
|
@code {
|
|
[Parameter]
|
|
public string Locale { get; set; } = string.Empty;
|
|
private WeatherForecast[]? forecasts;
|
|
|
|
protected override Task OnInitializedAsync()
|
|
{
|
|
// localization handled globally in Routes. No per-page initialization needed.
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
public void Dispose() { }
|
|
|
|
private class WeatherForecast
|
|
{
|
|
public DateOnly Date { get; set; }
|
|
public int TemperatureC { get; set; }
|
|
public string? Summary { get; set; }
|
|
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
|
|
}
|
|
|
|
private string GetShortCulture(string current)
|
|
{
|
|
if (string.IsNullOrEmpty(current)) return current;
|
|
if (current.StartsWith("zh", StringComparison.OrdinalIgnoreCase)) return "zh";
|
|
if (current.StartsWith("en", StringComparison.OrdinalIgnoreCase)) return "en";
|
|
var prefix = current.Split('-', StringSplitOptions.RemoveEmptyEntries).FirstOrDefault();
|
|
return prefix ?? current;
|
|
}
|
|
}
|