我们都知道Blazor中缺少ViewModel本地化
今天,我尝试了许多方法,并且想出了一个很好的方法来应用本地化
答案 0 :(得分:0)
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版本
答案 1 :(得分:0)
DataAnnotations
验证可能不是实现此目标的最佳方法,因为验证逻辑与类相关联,正如您在自己的答案中所看到的,这意味着很多重复。
FluentValidation提供了一个答案,因为它实际上具有内置的本地化支持(它还具有多种语言的内置消息用于默认验证!)。
我创建了一个demo project on GitHub来展示其工作原理。
如您所见,此解决方案要简单得多。