本地化 Localization

开箱即用的FluentValidation提供了很多种语言的默认错误消息。 默认情况下,将使用.NET框架当前UI文化中指定的语言(CultureInfo.CurrentUICulture)的错误消息。

因为每一个验证我们都是可以自定义错误消息的。所以我们可以直接在WithMessage哪边做多语化和本地化。

WithMessage

RuleFor(x => x.Surname).NotNull().WithMessage(x => MyLocalizedMessages.SurnameRequired);

注入一个本地化服务

如果我们使用了 本地化的服务类 IStringLocalizer 或者自己的 ILocalizationService 我们就可能用如下的方法来进行翻译

public class PersonValidator : AbstractValidator<Person> 
{
  public PersonValidator(IStringLocalizer<Person> localizer) 
  {
    RuleFor(x => x.Surname).NotNull().WithMessage(x => localizer["Surname is required"]);
  }
}

全局重写默认的错误消息

如果我们要替换所有(或部分)FluentValidation的默认消息,则可以通过实现ILanguageManager接口的自定义类来实现。

例如,NotNull验证器的默认消息为'' must not be Null.。如果要在应用程序中将此消息替换为NotNull验证器的所有用法,则可以编写自定义如下的类:

public class CustomLanguageManager : FluentValidation.Resources.LanguageManager 
{
  public CustomLanguageManager() 
  {
    AddTranslation("zh-cn", "NotNullValidator", "'{PropertyName}' 不能为Null.");
  }
}

然后在程序启动的的时候调用如下的代码

ValidatorOptions.Global.LanguageManager = new CustomLanguageManager();

禁用本地化

我们可以完全禁用FluentValidation对本地化的支持,错误消息将变成默认的英语消息,而与线程的CurrentUICulture无关。 可以在程序启动的时候调用如下的代码来设置:

ValidatorOptions.Global.LanguageManager.Enabled = false;

强制使用某个语言

ValidatorOptions.Global.LanguageManager.Culture = new CultureInfo("zh-cn");

最近更新的
...