实现多语言切换
This commit is contained in:
123
Atomx.Admin/Atomx.Admin.Client/Pages/DebugLocalization.razor
Normal file
123
Atomx.Admin/Atomx.Admin.Client/Pages/DebugLocalization.razor
Normal file
@@ -0,0 +1,123 @@
|
||||
@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>("CookieReader.Read", "atomx.culture");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
jsResult = "JS error: " + ex.Message;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user