You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:06:54