如何在ASP.Net Boilerplate中本地化数据注解的错误消息?
本地化ASP.NET Zero MVC Core中数据注解错误消息的实操步骤
我来给你梳理下在ABP 3.6.2 + ASP.NET Zero MVC Core 3.8.0项目里,本地化Required、Range、MaxLength这类数据注解错误消息的具体方法,亲测可行:
1. 配置ASP.NET Core数据注解本地化支持
首先要在你的Web模块类(比如*WebMvcModule)里,把数据注解和ABP的本地化资源绑定起来。
在ConfigureServices方法中添加以下代码:
// 开启本地化支持,指定资源路径(如果需要) services.AddLocalization(options => options.ResourcesPath = "Resources"); // 配置请求本地化的支持语言 services.Configure<RequestLocalizationOptions>(options => { var supportedCultures = new List<CultureInfo> { new CultureInfo("en"), new CultureInfo("zh-Hans") }; options.DefaultRequestCulture = new RequestCulture("en"); options.SupportedCultures = supportedCultures; options.SupportedUICultures = supportedCultures; }); // 关键:将数据注解的本地化器指向你的项目ABP本地化资源 services.AddMvc() .AddDataAnnotationsLocalization(options => { options.DataAnnotationLocalizerProvider = (type, factory) => { // 替换成你项目的本地化资源类,比如YourProjectNameResource return factory.Create(typeof(YourProjectNameResource)); }; });
2. 在本地化XML文件中添加注解消息键值对
找到你项目的本地化XML文件(比如en.xml、zh-Hans.xml,通常在Localization/SourceFiles目录下),添加对应的数据注解错误消息:
英文示例(en.xml)
<text name="RequiredAttribute.ErrorMessage">The {0} field is required.</text> <text name="RangeAttribute.ErrorMessage">The {0} field must be between {1} and {2}.</text> <text name="MaxLengthAttribute.ErrorMessage">The {0} field must not exceed {1} characters.</text> <text name="MinLengthAttribute.ErrorMessage">The {0} field must be at least {1} characters.</text>
简体中文示例(zh-Hans.xml)
<text name="RequiredAttribute.ErrorMessage">{0}为必填字段。</text> <text name="RangeAttribute.ErrorMessage">{0}的值必须在{1}到{2}之间。</text> <text name="MaxLengthAttribute.ErrorMessage">{0}长度不能超过{1}个字符。</text> <text name="MinLengthAttribute.ErrorMessage">{0}长度至少为{1}个字符。</text>
注意:这些键名是ASP.NET Core数据注解默认的错误消息键,必须严格对应才能自动匹配。如果需要自定义某个字段的错误消息,也可以自己定义键,比如
CustomEmailRequired,然后在注解里指定ErrorMessage = "CustomEmailRequired",再在XML里添加对应文本。
3. 在ViewModel/Dto中使用数据注解
不需要手动指定ErrorMessage,框架会自动从本地化资源中读取对应消息:
public class UserCreateViewModel { [Required] public string UserName { get; set; } [Range(18, 100)] public int Age { get; set; } [MaxLength(50)] public string Address { get; set; } // 自定义错误消息示例 [Required(ErrorMessage = "CustomEmailRequired")] public string Email { get; set; } }
4. 视图中正常显示验证消息
ASP.NET Zero的MVC模板已经集成了验证组件,直接用asp-validation-for就能自动显示本地化后的错误消息:
<div class="form-group"> <label asp-for="UserName" class="control-label"></label> <input asp-for="UserName" class="form-control" /> <span asp-validation-for="UserName" class="text-danger"></span> </div>
额外注意事项
- 确保本地化XML文件的生成操作设置为「嵌入的资源」,否则ABP无法读取到这些资源。
- 语言切换功能会自动同步数据注解的本地化消息,因为ABP已经处理了文化信息的切换逻辑。
- Application层的Dto数据注解本地化方式和ViewModel完全一致,无需额外配置。
内容的提问来源于stack exchange,提问作者XelaNimed
相关产品推荐
相关产品推荐

