From ac50b3fccd1dfc6eb18f690fdc18e7bdc2b1ff84 Mon Sep 17 00:00:00 2001 From: Seany <17074267@qq.com> Date: Fri, 5 Dec 2025 02:13:05 +0800 Subject: [PATCH] fix language --- .../Models/LanguageModel.cs | 2 +- .../Pages/Systems/AdminList.razor | 11 +- .../Pages/Systems/LanguageList.razor | 73 +++++++------ .../Pages/Systems/LocaleResourceList.razor | 9 +- .../Validators/LanguageModelValidator.cs | 2 + .../Controllers/LanguageController.cs | 62 ++++++++--- Atomx.Common/Constants/LanguageCulture.cs | 101 ++++++++++++++++++ 7 files changed, 206 insertions(+), 54 deletions(-) create mode 100644 Atomx.Common/Constants/LanguageCulture.cs diff --git a/Atomx.Admin/Atomx.Admin.Client/Models/LanguageModel.cs b/Atomx.Admin/Atomx.Admin.Client/Models/LanguageModel.cs index 036bf28..5cee95c 100644 --- a/Atomx.Admin/Atomx.Admin.Client/Models/LanguageModel.cs +++ b/Atomx.Admin/Atomx.Admin.Client/Models/LanguageModel.cs @@ -23,7 +23,7 @@ namespace Atomx.Admin.Client.Models public string Title { get; set; } = string.Empty; /// - /// 语言名称 + /// 语言文化 /// public string Culture { get; set; } = string.Empty; diff --git a/Atomx.Admin/Atomx.Admin.Client/Pages/Systems/AdminList.razor b/Atomx.Admin/Atomx.Admin.Client/Pages/Systems/AdminList.razor index 730469f..f1b129c 100644 --- a/Atomx.Admin/Atomx.Admin.Client/Pages/Systems/AdminList.razor +++ b/Atomx.Admin/Atomx.Admin.Client/Pages/Systems/AdminList.razor @@ -1,5 +1,4 @@ @page "/admin/list" -@using Atomx.Common.Constants @inject ILogger Logger @* @attribute [Authorize] *@ @@ -41,10 +40,10 @@ - + - + @if (context.Status == 1) { @@ -56,8 +55,8 @@ } - - + + @@ -326,7 +325,7 @@ { CloseDrawer(); - LoadList(); + _= LoadList(); await ModalService.InfoAsync(new ConfirmOptions() { Title = "提示", Content = "数据提交成功!" }); } else diff --git a/Atomx.Admin/Atomx.Admin.Client/Pages/Systems/LanguageList.razor b/Atomx.Admin/Atomx.Admin.Client/Pages/Systems/LanguageList.razor index 5c2f85d..e6a246f 100644 --- a/Atomx.Admin/Atomx.Admin.Client/Pages/Systems/LanguageList.razor +++ b/Atomx.Admin/Atomx.Admin.Client/Pages/Systems/LanguageList.razor @@ -16,12 +16,12 @@ - + - + - + @if (context.Enabled) { @@ -33,7 +33,7 @@ } - + @@ -69,22 +69,31 @@ - +
+ + + - - + + + + @foreach (var item in LanguageCultures) + { + + } + + - - + + - - @* + - *@ + @@ -105,6 +114,8 @@ LanguageModel model { get; set; } = new(); Form editform = null!; + Dictionary LanguageCultures = LanguageCulture.Descriptions.ToDictionary(); + PagingList PagingList = new(); bool loading { get; set; } = true; @@ -117,13 +128,13 @@ protected override void OnParametersSet() { - LoadList(); + _ = LoadList(); base.OnParametersSet(); } - private async void LoadList() + private async Task LoadList() { loading = true; @@ -169,7 +180,7 @@ void OnCreateClick() { - model = new(); + model = new() { Culture = LanguageCulture.zhHans }; drawerVisible = true; } @@ -185,7 +196,7 @@ var apiResult = await HttpService.Post>(url, new()); if (apiResult.Success) { - LoadList(); + _ = LoadList(); await ModalService.InfoAsync(new ConfirmOptions() { Title = "操作提示", Content = "删除数据成功" }); } else @@ -199,25 +210,23 @@ if (editform.Validate()) { - var result = new ApiResult(); - if (model.Id > 0) + var url = $"api/language/save"; + var result = await HttpService.Post>(url, model); + if (result.Success) { - var url = $"api/language/edit"; - result = await HttpService.Post>(url, model); - } - else - { - var url = $"api/language/add"; - result = await HttpService.Post>(url, model); + if (result.Data) + { + + CloseDrawer(); + _ = LoadList(); + await ModalService.InfoAsync(new ConfirmOptions() { Title = "提示", Content = "数据提交成功!" }); + } + else + { + await ModalService.ErrorAsync(new ConfirmOptions() { Title = "服务异常", Content = result.Message }); + } } - if (result.Code == (int)ResultCode.Success) - { - - CloseDrawer(); - LoadList(); - await ModalService.InfoAsync(new ConfirmOptions() { Title = "提示", Content = "数据提交成功!" }); - } else { await ModalService.ErrorAsync(new ConfirmOptions() { Title = "服务异常", Content = result.Message }); diff --git a/Atomx.Admin/Atomx.Admin.Client/Pages/Systems/LocaleResourceList.razor b/Atomx.Admin/Atomx.Admin.Client/Pages/Systems/LocaleResourceList.razor index 7fe920d..36b3087 100644 --- a/Atomx.Admin/Atomx.Admin.Client/Pages/Systems/LocaleResourceList.razor +++ b/Atomx.Admin/Atomx.Admin.Client/Pages/Systems/LocaleResourceList.razor @@ -1,6 +1,11 @@ -@page "/system/locale/resource/list/{culture}" +@page "/system/locale/resource/list/{Id:int}" @inject ILogger Logger +本地化语言资源 + + @code { - + [Parameter] + public long Id { get; set; } + bool loading = false; } diff --git a/Atomx.Admin/Atomx.Admin.Client/Validators/LanguageModelValidator.cs b/Atomx.Admin/Atomx.Admin.Client/Validators/LanguageModelValidator.cs index a63c0ce..8e20969 100644 --- a/Atomx.Admin/Atomx.Admin.Client/Validators/LanguageModelValidator.cs +++ b/Atomx.Admin/Atomx.Admin.Client/Validators/LanguageModelValidator.cs @@ -7,7 +7,9 @@ namespace Atomx.Admin.Client.Validators { public LanguageModelValidator() { + RuleFor(p => p.Title).NotEmpty().WithMessage("请填写语言标题"); RuleFor(p => p.Name).NotEmpty().WithMessage("请填写语言名称"); + RuleFor(p => p.Culture).NotEmpty().WithMessage("请选择语言文化"); } } } diff --git a/Atomx.Admin/Atomx.Admin/Controllers/LanguageController.cs b/Atomx.Admin/Atomx.Admin/Controllers/LanguageController.cs index 035a62a..bc11683 100644 --- a/Atomx.Admin/Atomx.Admin/Controllers/LanguageController.cs +++ b/Atomx.Admin/Atomx.Admin/Controllers/LanguageController.cs @@ -10,6 +10,7 @@ using Atomx.Utils.Models; using MapsterMapper; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; namespace Atomx.Admin.Controllers { @@ -76,13 +77,13 @@ namespace Atomx.Admin.Controllers /// /// [HttpPost("search")] - public IActionResult LanguageList(LanguageSearch search, int page,int size = 20) + public IActionResult LanguageList(LanguageSearch search, int page, int size = 20) { if (page < 1) { page = 1; } - var result = new Result>(); + var result = new ApiResult>(); var list = new PagingList() { Index = page, Size = size }; var query = from p in _dbContext.Languages select p; @@ -90,7 +91,7 @@ namespace Atomx.Admin.Controllers list.Count = query.Count(); list.Items = query.OrderByDescending(p => p.CreateTime).Skip((page - 1) * size).Take(size).ToList(); - result.Data = list; + result = result.IsSuccess(list); return new JsonResult(result); } @@ -103,15 +104,16 @@ namespace Atomx.Admin.Controllers [HttpGet("detail")] public IActionResult GetManufacturer(long id) { - var result = new Result(); + var result = new ApiResult(); var data = _dbContext.Languages.SingleOrDefault(p => p.Id == id); if (data == null) { + result = result.IsFail("数据不存在,请更换!"); return new JsonResult(result); } - result.Data = data; + result = result.IsSuccess(data); return new JsonResult(result); } @@ -125,22 +127,32 @@ namespace Atomx.Admin.Controllers [HttpPost("save")] public async Task LanguageEdit(LanguageModel model) { - var result = new Result(); + var result = new ApiResult(); var validator = new LanguageModelValidator(); var validation = validator.Validate(model); if (!validation.IsValid) { - result.Message = ModelState.Values.First().Errors[0].ErrorMessage; - result.Success = false; + result = result.IsFail(ModelState.Values.First().Errors[0].ErrorMessage); + return new JsonResult(result); + } + var data = _dbContext.Languages.SingleOrDefault(p => p.Name == model.Name && p.Id != model.Id); + if (data != null) + { + result = result.IsFail("语言名称已存在,请更换!"); + return new JsonResult(result); + } + data = _dbContext.Languages.SingleOrDefault(p => p.Culture == model.Culture && p.Id != model.Id); + if (data != null) + { + result = result.IsFail("语言文化已存在,请更换!"); return new JsonResult(result); } if (model.IsEdit) { - var data = _dbContext.Languages.SingleOrDefault(p => p.Id == model.Id); + data = _dbContext.Languages.SingleOrDefault(p => p.Id == model.Id); if (data == null) { - result.Message = "数据不存在,请更换!"; - result.Success = false; + result = result.IsFail("数据不存在,请更换!"); return new JsonResult(result); } @@ -151,16 +163,40 @@ namespace Atomx.Admin.Controllers } else { - var data = _mapper.Map(model); + data = _mapper.Map(model); data.CreateTime = DateTime.UtcNow; _dbContext.Languages.Add(data); _dbContext.SaveChanges(); await _cacheService.GetLanguageById(model.Id, data); } - result.Data = true; + result = result.IsSuccess(true); return new JsonResult(result); } + + + /// + /// 删除指定ID的数据 + /// + /// + /// + [HttpPost("delete/{id:long}")] + public IActionResult Delete(long id) + { + var result = new ApiResult(); + try + { + Console.WriteLine($"{id} deleted"); + var count = _dbContext.Languages.Where(p => p.Id == id).ExecuteDelete(); + result = result.IsSuccess(count.ToString()); + } + catch (Exception ex) + { + result = result.IsFail(ex.Message); + _logger.LogError(ex.Message); + } + return new JsonResult(result); + } } } diff --git a/Atomx.Common/Constants/LanguageCulture.cs b/Atomx.Common/Constants/LanguageCulture.cs new file mode 100644 index 0000000..400db89 --- /dev/null +++ b/Atomx.Common/Constants/LanguageCulture.cs @@ -0,0 +1,101 @@ +namespace Atomx.Common.Constants +{ + public class LanguageCulture + { + /// + /// 阿拉伯语言 + /// + public const string arEG = "ar_EG"; + /// + /// 德语 + /// + public const string deDE = "de_DE"; + /// + /// 英语 + /// + public const string enGB = "en_GB"; + /// + /// 朝鲜语/韩语 + /// + public const string koKR = "ko_KR"; + /// + /// 孟加拉语 + /// + public const string bnBD = "bn_BD"; + /// + /// 日语 + /// + public const string jaJP = "ja_JP"; + /// + /// 马来语/马来西亚 + /// + public const string msMY = "ms_MY"; + /// + /// 西班牙语 + /// + public const string esES = "es_ES"; + /// + /// 葡萄牙语 + /// + public const string ptPT = "pt_PT"; + /// + /// 乌尔都语 (巴基斯坦) + /// + public const string urPK = "ur_PK"; + /// + /// 法语 + /// + public const string frFR = "fr_FR"; + /// + /// 印地语 + /// + public const string hiIN = "hi_IN"; + /// + /// 印尼语/印度尼西亚语 + /// + public const string idID = "id_ID"; + /// + /// 越南语 + /// + public const string viVN = "vi_VN"; + /// + /// 俄语 + /// + public const string ruRU = "ru_RU"; + /// + /// 简体中文 + /// + public const string zhHans = "zh_Hans"; + /// + /// 繁体中文 + /// + public const string ZhHant = "Zh-Hant"; + + + private static readonly Dictionary LanguageCultureDescriptions = new() + { + { arEG, "阿拉伯语" }, + { deDE, "德语" }, + { enGB, "英语" }, + { koKR, "朝鲜语/韩语" }, + { bnBD, "孟加拉语" }, + { jaJP, "日语" }, + { msMY, "马来语/马来西亚" }, + { esES, "西班牙语" }, + { ptPT, "葡萄牙语" }, + { urPK, "乌尔都语 (巴基斯坦)" }, + { frFR, "法语" }, + { hiIN, "印地语" }, + { idID, "印尼语/印度尼西亚语" }, + { viVN, "越南语" }, + { ruRU, "俄语" }, + { zhHans, "简体中文" }, + { ZhHant, "繁体中文" } + }; + + /// + /// 语言代码对应的中文描述(只读) + /// + public static IReadOnlyDictionary Descriptions => LanguageCultureDescriptions; + } +}