如何将ViewModel本地化添加到Blazor?

时间:2019-11-25 13:43:03

标签: c# blazor

我们都知道Blazor中缺少ViewModel本地化

今天,我尝试了许多方法,并且想出了一个很好的方法来应用本地化

2 个答案:

答案 0 :(得分:0)

  • 您可以为所有属性(例如“ ProductViewModelBase”)创建抽象的基本ViewModel。
  • 然后将所有ViewModelBase属性设置为虚拟
 public abstract class ProductViewModelBase
 {
               public virtual string ProductCode { get; set; }
               public virtual string ProductType { get; set; }
               public virtual string ProductName { get; set; }
 }
  • 然后使用ViewModel语言覆盖所有属性,并添加特定的语言消息和验证规则。
  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; }
    }
  • 在Blazor组件中,检查要加载哪个ViewModel
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来展示其工作原理。

如您所见,此解决方案要简单得多。

English Arabic