124 lines
3.8 KiB
Plaintext
124 lines
3.8 KiB
Plaintext
@page "/debug/localization"
|
|
@inject Atomx.Admin.Client.Services.ILocalizationProvider LocalizationProvider
|
|
@inject IHttpClientFactory HttpClientFactory
|
|
@inject IJSRuntime JS
|
|
@inject ILogger<DebugLocalization> Logger
|
|
@inject HttpClient Http
|
|
@inject NavigationManager Nav
|
|
|
|
<h3>Localization Debug</h3>
|
|
|
|
<p>CurrentCulture: <b>@LocalizationProvider.CurrentCulture</b></p>
|
|
|
|
<button @onclick="SetProviderZh">Set culture zh</button>
|
|
<button @onclick="SetProviderEn">Set culture en</button>
|
|
<button @onclick="FetchFiles">Fetch files via HttpClient</button>
|
|
<button @onclick="ReadCookie">Read cookie</button>
|
|
|
|
<h4>Provider Results</h4>
|
|
<ul>
|
|
@foreach (var kv in providerResults)
|
|
{
|
|
<li>@kv</li>
|
|
}
|
|
</ul>
|
|
|
|
<h4>HTTP Fetch Results</h4>
|
|
<ul>
|
|
@foreach (var kv in httpResults)
|
|
{
|
|
<li>@kv</li>
|
|
}
|
|
</ul>
|
|
|
|
<h4>JS Read</h4>
|
|
<p>@jsResult</p>
|
|
|
|
@code {
|
|
private List<string> providerResults = new();
|
|
private List<string> httpResults = new();
|
|
private string jsResult = string.Empty;
|
|
|
|
private async Task SetProviderZh()
|
|
{
|
|
providerResults.Clear();
|
|
try
|
|
{
|
|
// Use short code; provider will map to full culture and set active culture
|
|
await LocalizationProvider.SetCultureAsync("zh");
|
|
providerResults.Add($"Set culture to {LocalizationProvider.CurrentCulture}");
|
|
providerResults.Add($"site.name={LocalizationProvider.GetString("site.name")}");
|
|
providerResults.Add($"login.title={LocalizationProvider.GetString("login.title")}");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
providerResults.Add("Set provider zh failed: " + ex.Message);
|
|
Logger.LogError(ex, "Set provider zh failed");
|
|
}
|
|
}
|
|
|
|
private async Task SetProviderEn()
|
|
{
|
|
providerResults.Clear();
|
|
try
|
|
{
|
|
await LocalizationProvider.SetCultureAsync("en");
|
|
providerResults.Add($"Set culture to {LocalizationProvider.CurrentCulture}");
|
|
providerResults.Add($"site.name={LocalizationProvider.GetString("site.name")}");
|
|
providerResults.Add($"login.title={LocalizationProvider.GetString("login.title")}");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
providerResults.Add("Set provider en failed: " + ex.Message);
|
|
Logger.LogError(ex, "Set provider en failed");
|
|
}
|
|
}
|
|
|
|
private async Task FetchFiles()
|
|
{
|
|
httpResults.Clear();
|
|
try
|
|
{
|
|
// Prefer injected HttpClient that has BaseAddress set in Program.cs for WASM
|
|
var client = Http ?? HttpClientFactory.CreateClient();
|
|
|
|
var urlZ = new Uri(new Uri(Nav.BaseUri), $"localization/zh-Hans.json");
|
|
httpResults.Add($"GET {urlZ}");
|
|
var resZ = await client.GetAsync(urlZ);
|
|
httpResults.Add($"=> {resZ.StatusCode}");
|
|
if (resZ.IsSuccessStatusCode)
|
|
{
|
|
var txt = await resZ.Content.ReadAsStringAsync();
|
|
httpResults.Add("zh content len=" + txt.Length);
|
|
}
|
|
|
|
var urlE = new Uri(new Uri(Nav.BaseUri), $"localization/en-US.json");
|
|
httpResults.Add($"GET {urlE}");
|
|
var resE = await client.GetAsync(urlE);
|
|
httpResults.Add($"=> {resE.StatusCode}");
|
|
if (resE.IsSuccessStatusCode)
|
|
{
|
|
var txt = await resE.Content.ReadAsStringAsync();
|
|
httpResults.Add("en content len=" + txt.Length);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
httpResults.Add("Fetch error: " + ex.Message);
|
|
Logger.LogError(ex, "FetchFiles error");
|
|
}
|
|
}
|
|
|
|
private async Task ReadCookie()
|
|
{
|
|
try
|
|
{
|
|
jsResult = await JS.InvokeAsync<string>("cookies.Read", "atomx.culture");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
jsResult = "JS error: " + ex.Message;
|
|
}
|
|
}
|
|
}
|