ASP.NET Core 7.0共享资源与数据注解本地化冲突问题
ASP.NET Core MVC 本地化问题解决方案
问题根源在于你配置的DataAnnotationLocalizerProvider强制所有数据注解本地化都使用SharedResources,完全忽略了模型自身的类型参数,导致系统不会加载对应模型的专属资源文件。
要同时支持模型专属资源和共享资源,需要修改本地化器提供逻辑,优先使用模型自身的资源,找不到时 fallback 到共享资源:
.AddDataAnnotationsLocalization(o => { o.DataAnnotationLocalizerProvider = (type, factory) => { // 优先创建对应模型类型的本地化器 var modelLocalizer = factory.Create(type); // 检查模型是否有对应的资源文件(通过尝试获取空字符串判断,空字符串不存在则说明无资源) bool hasModelResources = modelLocalizer.ResourceManager.GetString("") != null; return hasModelResources ? modelLocalizer : factory.Create(typeof(SharedResources)); }; })
额外注意事项
- 确保模型专属资源文件命名规范:比如
IndexInputModel.en.resx要和模型类IndexInputModel同名,且所在目录的命名空间与模型类一致,或配置了正确的资源命名空间。 - 资源文件的自定义工具需设置为
ResXFileCodeGenerator,自定义工具命名空间要匹配项目的资源命名规则(比如放在Resources文件夹下时,命名空间通常为YourProjectName.Resources)。
内容的提问来源于stack exchange,提问作者Lucho Gizdov
相关产品推荐
相关产品推荐

