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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 12:45:49