【问题标题】:How to add ViewModel localization to Blazor?如何将 ViewModel 本地化添加到 Blazor?
【发布时间】:2019-11-25 13:43:03
【问题描述】:

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

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

【问题讨论】:

    标签: c# blazor


    【解决方案1】:

    DataAnnotations 验证可能不是实现此目的的最佳方法,因为验证逻辑与类相关,并且正如您在自己的答案中看到的那样,这意味着很多重复。

    FluentValidation 提供了答案,因为它实际上具有内置的本地化支持(它还具有用于默认验证的多种语言的内置消息!)。

    我创建了一个demo project on GitHub 来展示它是如何工作的。

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

    【讨论】:

      【解决方案2】:
      • 您可以为所有属性创建一个抽象基础 ViewModel,例如“ProductViewModelBase”
      • 然后将所有 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 版本

      【讨论】:

      • 您还可能会发现 Chris Sainty's article 很有用,因为客户端 Blazor 无法读取文化信息
      • 我建议这种方法适用于两个或三个语言环境,但不能很好地扩展 - 您可能会发现 Fluent Validation 代表一种更好的方法,因为它将模型与验证逻辑
      猜你喜欢
      • 2015-02-20
      • 1970-01-01
      • 2012-08-19
      • 2020-03-21
      • 2021-11-16
      • 2022-10-24
      • 2021-06-13
      • 1970-01-01
      • 2018-07-27
      相关资源
      最近更新 更多