chore fix

This commit is contained in:
2025-12-06 13:30:17 +08:00
parent 2972886576
commit 8aca372fc1
43 changed files with 984 additions and 595 deletions

View File

@@ -1,29 +0,0 @@
@inject IJSRuntime JSRuntime
@inject ILocalizationService LocalizationService
@inject NavigationManager Navigation
@* <select @bind="_selectedCulture" @onchange="OnCultureChanged">
<option value="en-US">English</option>
<option value="zh-CN">中文</option>
<option value="ja-JP">日本語</option>
</select> *@
@code {
private string _selectedCulture = "en-US";
protected override async Task OnInitializedAsync()
{
_selectedCulture = await JSRuntime.InvokeAsync<string>("blazorCulture.get") ?? "en-US";
}
private async Task OnCultureChanged(ChangeEventArgs e)
{
var culture = e.Value?.ToString();
if (!string.IsNullOrEmpty(culture))
{
await JSRuntime.InvokeVoidAsync("blazorCulture.set", culture);
await LocalizationService.LoadResourcesAsync(culture);
Navigation.NavigateTo(Navigation.Uri, forceLoad: true);
}
}
}

View File

@@ -0,0 +1,61 @@
@inject LanguageProvider LanguageProvider
@inject IStringLocalizer<LanguageSelector> Localizer
<div class="dropdown">
<button class="btn btn-outline-secondary dropdown-toggle"
type="button"
data-bs-toggle="dropdown"
aria-expanded="false">
@GetLanguageDisplayName(LanguageProvider.CurrentLanguage)
</button>
<ul class="dropdown-menu">
@foreach (var language in LanguageProvider.SupportedLanguages)
{
<li>
<button class="dropdown-item @(language == LanguageProvider.CurrentLanguage ? "active" : "")"
@onclick="() => ChangeLanguage(language)"
type="button">
@GetLanguageDisplayName(language)
@if (language == LanguageProvider.CurrentLanguage)
{
<span class="badge bg-primary">✓</span>
}
</button>
</li>
}
</ul>
</div>
@code {
protected override void OnInitialized()
{
// 订阅变更以便在语言切换时即时更新该组件
LanguageProvider.OnLanguageChanged += OnLanguageChanged;
}
private void OnLanguageChanged()
{
// 在 UI 线程上下文中触发 StateHasChanged
_ = InvokeAsync(StateHasChanged);
}
public void Dispose()
{
LanguageProvider.OnLanguageChanged -= OnLanguageChanged;
}
private string GetLanguageDisplayName(string languageCode)
{
return languageCode switch
{
"zh-Hans" => "简体中文",
"en-US" => "English (US)",
_ => languageCode
};
}
private async Task ChangeLanguage(string languageCode)
{
await LanguageProvider.ChangeLanguageAsync(languageCode);
}
}

View File

@@ -1,26 +0,0 @@
@inject ILocalizationService LocalizationService
@Text
@code {
private string? _text;
[Parameter]
public string Key { get; set; } = string.Empty;
[Parameter]
public string? Culture { get; set; }
private string Text => _text ?? Key;
protected override async Task OnParametersSetAsync()
{
await LoadText();
}
private async Task LoadText()
{
_text = await LocalizationService.GetStringAsync(Key, Culture) ?? Key;
StateHasChanged();
}
}