【发布时间】:2019-11-25 13:43:03
【问题描述】:
我们都知道 Blazor 中缺少 ViewModel 本地化
今天我尝试了很多方法,我想出了一个很好的方法来应用本地化
【问题讨论】:
我们都知道 Blazor 中缺少 ViewModel 本地化
今天我尝试了很多方法,我想出了一个很好的方法来应用本地化
【问题讨论】:
DataAnnotations 验证可能不是实现此目的的最佳方法,因为验证逻辑与类相关,并且正如您在自己的答案中看到的那样,这意味着很多重复。
FluentValidation 提供了答案,因为它实际上具有内置的本地化支持(它还具有用于默认验证的多种语言的内置消息!)。
我创建了一个demo project on GitHub 来展示它是如何工作的。
如您所见,此解决方案要简单得多。
【讨论】:
public abstract class ProductViewModelBase { public virtual string ProductCode { get; set; } public virtual string ProductType { get; set; } public virtual string ProductName { get; set; } }
public class ProductViewModelAR : ProductViewModelBase { [Required(ErrorMessage = "خطأ")] public override string ProductCode { get; set; } } public class ProductViewModelEN : ProductViewModelBase { [Required(ErrorMessage = "Error")] public override string ProductCode { get; set; } }
ProductViewModelBase ViewModel; protected override void OnInitialized() { if (CultureInfo.CurrentUICulture.Name == "ar-EG") { ViewModel = new ProductViewModelAR(); } else { ViewModel = new ProductViewModelEN(); } }
现在你可以在你的 EditForm 中使用这个 ViewModel
<EditForm Model="ViewModel" OnValidSubmit="ValidSubmit" OnInvalidSubmit="InValidSubmit"> <DataAnnotationsValidator /> <ValidationSummary /> </EditForm>
在运行时,应用将根据所选语言决定加载哪个 ViewModel 版本
【讨论】: