diff --git a/Atomx.Admin/Atomx.Admin.Client/Components/CultureSelector.razor b/Atomx.Admin/Atomx.Admin.Client/Components/CultureSelector.razor deleted file mode 100644 index da084a0..0000000 --- a/Atomx.Admin/Atomx.Admin.Client/Components/CultureSelector.razor +++ /dev/null @@ -1,29 +0,0 @@ -@inject IJSRuntime JSRuntime -@inject ILocalizationService LocalizationService -@inject NavigationManager Navigation - -@* *@ - -@code { - private string _selectedCulture = "en-US"; - - protected override async Task OnInitializedAsync() - { - _selectedCulture = await JSRuntime.InvokeAsync("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); - } - } -} \ No newline at end of file diff --git a/Atomx.Admin/Atomx.Admin.Client/Components/LanguageSelector.razor b/Atomx.Admin/Atomx.Admin.Client/Components/LanguageSelector.razor new file mode 100644 index 0000000..686d8df --- /dev/null +++ b/Atomx.Admin/Atomx.Admin.Client/Components/LanguageSelector.razor @@ -0,0 +1,61 @@ +@inject LanguageProvider LanguageProvider +@inject IStringLocalizer Localizer + + + +@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); + } +} \ No newline at end of file diff --git a/Atomx.Admin/Atomx.Admin.Client/Components/LocalizedText.razor b/Atomx.Admin/Atomx.Admin.Client/Components/LocalizedText.razor deleted file mode 100644 index 7aaea5a..0000000 --- a/Atomx.Admin/Atomx.Admin.Client/Components/LocalizedText.razor +++ /dev/null @@ -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(); - } -} \ No newline at end of file diff --git a/Atomx.Admin/Atomx.Admin.Client/Models/LocaleResourceItem.cs b/Atomx.Admin/Atomx.Admin.Client/Models/LocaleResourceItem.cs new file mode 100644 index 0000000..19e010b --- /dev/null +++ b/Atomx.Admin/Atomx.Admin.Client/Models/LocaleResourceItem.cs @@ -0,0 +1,17 @@ +using Atomx.Common.Entities; + +namespace Atomx.Admin.Client.Models +{ + public class LocaleResourceItem:LocaleResource + { + /// + /// 语言标题 + /// + public string Title { get; set; } = string.Empty; + + /// + /// 语言名称 + /// + public string Culture { get; set; } = string.Empty; + } +} diff --git a/Atomx.Admin/Atomx.Admin.Client/Models/LocaleResourceModel.cs b/Atomx.Admin/Atomx.Admin.Client/Models/LocaleResourceModel.cs index 2ea1ce8..31619d7 100644 --- a/Atomx.Admin/Atomx.Admin.Client/Models/LocaleResourceModel.cs +++ b/Atomx.Admin/Atomx.Admin.Client/Models/LocaleResourceModel.cs @@ -12,6 +12,11 @@ /// public int LanguageId { get; set; } + /// + /// 语言标题 + /// + public string Title { get; set; } = string.Empty; + /// /// 语言名称 /// diff --git a/Atomx.Admin/Atomx.Admin.Client/Pages/Login.razor b/Atomx.Admin/Atomx.Admin.Client/Pages/Login.razor index 4879066..922d01a 100644 --- a/Atomx.Admin/Atomx.Admin.Client/Pages/Login.razor +++ b/Atomx.Admin/Atomx.Admin.Client/Pages/Login.razor @@ -3,6 +3,7 @@ @layout EmptyLayout @inject ILogger Logger @inject IJSRuntime JS +@inject IStringLocalizer Localizer 登录 @@ -12,6 +13,10 @@ } else { + +

+ @LanguageProvider.CurrentLanguage 网站名称 @Localizer["site.name"] +

diff --git a/Atomx.Admin/Atomx.Admin.Client/Pages/Systems/LocaleResourceDetail.razor b/Atomx.Admin/Atomx.Admin.Client/Pages/Systems/LocaleResourceDetail.razor new file mode 100644 index 0000000..a0c2f40 --- /dev/null +++ b/Atomx.Admin/Atomx.Admin.Client/Pages/Systems/LocaleResourceDetail.razor @@ -0,0 +1,207 @@ +@page "/system/locale/resource/detail/{Name}" +@inject ILogger Logger +@attribute [Authorize] + + +本地化语言资源 +多语言本地资源管理 + + + + + + @(@Name)多语言资源列表,可用语言@(@languages.Count)种 +
+ +
+
+
+ + + + + + + + + + + + + + + + + + 编辑 + + + + + 删除 + + + + + + + + + + + + + + +
+
+
+ + +
+ + + @if (context.Id == 0) + { + + } + else + { + + } + + + + + + +