Aspnetboilerplate框架实体数据注解全球化本地化配置不生效求助
ABP 数据注解多语言翻译不生效排查方案
- 检查资源类与资源文件的匹配规则
确认DataAnnotationsLang.cs的命名空间和存放路径完全对应,若你的项目根命名空间为Project.Web.Mvc,则该类的命名空间必须为Project.Web.Mvc.Resources,不得手动修改。同时确认DataAnnotationsLang.pt-PT.resx的文件名前缀和类名完全一致,大小写无偏差。 - 排查ABP自带本地化机制的冲突
ABP 默认开启了自研的请求本地化逻辑,会覆盖ASP.NET Core原生配置,需要做两处调整:- 在
ConfigureServices中禁用ABP原生请求本地化:
services.Configure<AbpRequestLocalizationOptions>(options => { options.Enabled = false; });- 在
Configure方法中,将自定义的请求本地化中间件放在app.UseAbp()之前执行:
var supportedCultures = new[] { new CultureInfo("pt-PT"), new CultureInfo("en") }; app.UseRequestLocalization(new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture("pt-PT"), SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures }); // 注意顺序,请求本地化中间件必须在UseAbp之前 app.UseAbp(); - 在
- 验证错误消息键名是否匹配
不同版本ASP.NET Core的默认验证错误键名存在差异,你可以先改用固定键测试:在模型属性的注解上指定ErrorMessage为固定键,比如:
随后在resx文件中添加对应键的翻译,确认是否能正常读取。[Required(ErrorMessage = "RequiredField")] public string UserName { get; set; } - 检查resx文件的编译属性
右键点击DataAnnotationsLang.pt-PT.resx,打开属性面板,确认:- 「生成操作」设置为「嵌入的资源」
- 「自定义工具」设置为
PublicResXFileCodeGenerator - 「自定义工具命名空间」和
DataAnnotationsLang.cs的命名空间完全一致
- 确认配置顺序未被覆盖
若项目中存在其他修改Mvc配置的代码,将AddDataAnnotationsLocalization的配置逻辑移动到ConfigureServices方法的末尾,避免被其他配置覆盖。
内容的提问来源于stack exchange,提问作者Ana
相关产品推荐
相关产品推荐

