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

ASP.NET Core中DisplayNameFor无法读取Resx文件,本地化失效

ASP.NET Core 本地化:DisplayNameFor与Display特性无法读取Resx文件问题解决

问题描述

在Login.cshtml中注入IStringLocalizer<LoginModel>和IHtmlLocalizer<LoginModel>后,二者均可正常从Resx文件获取翻译,但@Html.DisplayNameFor(m => m.Input.RememberMe)无法读取资源文件,同时LoginModel中RememberMe属性的[Display(Name = "Remember")]特性也无法关联到同一份资源,资源文件结构正确但渲染结果无翻译。

相关代码

Login.cshtml

@page
@using Microsoft.AspNetCore.Mvc.Localization
@using Microsoft.Extensions.StringLocalization
@inject IStringLocalizer<LoginModel> localizer
@inject IHtmlLocalizer<LoginModel> htmlLocalizer
@model LoginModel

<h1>@htmlLocalizer["Title"]</h1> <!-- 翻译正常 -->
<h1>@localizer["Title"]</h1> <!-- 翻译正常 -->
[...]
<div class="checkbox">
   <label asp-for="Input.RememberMe" class="form-label">
        <input class="form-check-input" asp-for="Input.RememberMe" />
        @Html.DisplayNameFor(m => m.Input.RememberMe) <!-- 无法读取Resx -->
    </label>
</div>

Login.cshtml.cs

/// <summary>
///     This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used
///     directly from your code. This API may change or be removed in future releases.
/// </summary>
[Display(Name = "Remember")] // 无法读取Resx
public bool RememberMe { get; set; }

解决方法

1. 修正[Display]特性的资源关联

默认的[Display(Name = "Remember")]只是硬编码字符串,不会自动关联Resx文件。需要指定ResourceType参数,明确指向你的资源类:

// 替换为你的Resx对应的自动生成类名,比如LoginModelResource(若Resx文件名为LoginModel.resx)
[Display(Name = "Remember", ResourceType = typeof(LoginModelResource))]
public bool RememberMe { get; set; }

2. 确保资源文件配置正确

  • 命名规则:Resx文件名需与模型类匹配,比如主文件LoginModel.resx,本地化版本LoginModel.zh-CN.resx
  • 工具配置:右键Resx文件→属性,设置自定义工具为ResXFileCodeGenerator,自定义工具命名空间与模型类所在命名空间一致
  • 访问权限:在Resx编辑器顶部,将访问修饰符设置为Public,确保生成的资源类能被模型访问

3. 快速替代方案:直接使用注入的Localizer

如果不想修改特性,可以绕过DisplayNameFor,直接用已验证有效的本地化实例获取翻译:

<!-- 替换原来的@Html.DisplayNameFor(...) -->
@htmlLocalizer["Remember"]

额外检查

确认Program.cs/Startup.cs中已正确配置本地化服务:

builder.Services.AddLocalization(options => options.ResourcesPath = "Resources");
// 配置支持的文化,示例:
var supportedCultures = new[] { "en", "zh-CN" };
app.UseRequestLocalization(new RequestLocalizationOptions
{
    DefaultRequestCulture = new RequestCulture("en"),
    SupportedCultures = supportedCultures,
    SupportedUICultures = supportedCultures
});

内容的提问来源于stack exchange,提问作者Yoda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 22:40:24