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

如何在ASP.NET Core视图中添加本地化字符串?

刚好做过类似的实现,结合你给出的代码片段,我把ASP.NET Core视图本地化的完整流程和细节整理出来,帮你落地:

ASP.NET Core 视图本地化完整实现指南

1. 资源文件的正确配置

你提到的Resources/Views.Account.Login.en-US.resx资源文件命名是符合规则的,不过还有几个关键细节要注意:

  • 资源文件命名规则必须和视图路径对应:Views.{ControllerName}.{ViewName}.{CultureCode}.resx,所以你的Views.Account.Login.en-US.resx完美匹配Views/Account/Login.cshtml视图的英文(美国)本地化资源。
  • 右键资源文件→属性,把生成操作设置为Embedded resource,不然程序编译后找不到这些资源。
  • 可以按需添加其他语言的资源文件,比如中文简体的Views.Account.Login.zh-CN.resx,只要Key一致,程序会自动根据当前文化切换文本。

2. 视图中的本地化代码优化

你给出的视图代码已经有了核心部分,我帮你补全并做了注释说明:

@using Microsoft.AspNetCore.Mvc.Localization
@inject IViewLocalizer Localizer

<div>
    <!-- 输出当前文化信息,方便调试是否切换成功 -->
    当前文化:@System.Threading.Thread.CurrentThread.CurrentCulture.Name
    当前UI文化:@System.Threading.Thread.CurrentThread.CurrentUICulture.Name
    <!-- 通过Key获取本地化文本,替换成你资源文件里的实际Key即可 -->
    欢迎语:@Localizer["WelcomeMessage"]
</div>
  • @inject IViewLocalizer Localizer:这是注入视图本地化服务的关键,有了它才能从资源文件中取文本。
  • Localizer["Key"]:直接通过资源文件里的Key调用就行,比如你在en-US资源里给WelcomeMessage设值Welcome to Login Page,中文资源里设为欢迎登录,程序会自动匹配当前文化输出对应文本。

3. Startup.cs 中的服务配置补全

你给出的ConfigureServices片段有个小拼写错误(Resou...应该是Resources),我把完整的配置代码贴出来,包含必要的请求本地化设置:

public void ConfigureServices(IServiceCollection services)
{
    // 注册本地化服务,指定资源文件存放在"Resources"文件夹
    services.AddLocalization(options => options.ResourcesPath = "Resources");

    services.AddControllersWithViews()
        // 启用视图本地化,用后缀规则匹配资源文件
        .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
        // 可选:如果需要模型验证消息本地化,加上这一行
        .AddDataAnnotationsLocalization();

    // 配置支持的文化列表,按需添加
    var supportedCultures = new[]
    {
        new CultureInfo("en-US"),
        new CultureInfo("zh-CN"),
        new CultureInfo("ja-JP")
    };

    // 设置请求本地化选项
    services.Configure<RequestLocalizationOptions>(options =>
    {
        options.DefaultRequestCulture = new RequestCulture("en-US"); // 默认文化
        options.SupportedCultures = supportedCultures;
        options.SupportedUICultures = supportedCultures;
        // 配置文化来源优先级:URL参数 > Cookie > 请求头
        options.RequestCultureProviders = new List<IRequestCultureProvider>
        {
            new QueryStringRequestCultureProvider(), // 比如URL加?culture=zh-CN切换
            new CookieRequestCultureProvider(),
            new AcceptLanguageHeaderRequestCultureProvider()
        };
    });
}

// 一定要在Configure方法中启用请求本地化中间件,而且要放在路由之前!
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // ...先加静态文件、错误处理这些中间件

    // 启用请求本地化,这一步不能忘,否则文化切换不生效
    app.UseRequestLocalization();

    app.UseRouting();

    // ...后续的认证、授权、端点路由等中间件
}
  • services.AddLocalization(...):指定资源文件的根目录,和你存放Resources文件夹的路径对应。
  • AddViewLocalization(...):明确告诉程序用后缀式的资源文件命名规则来匹配视图。
  • UseRequestLocalization():这个中间件必须放在UseRouting之前,不然无法正确解析请求中的文化参数。

常见踩坑点排查

如果遇到本地化文本不显示、还是显示Key本身的情况,按下面步骤排查:

  1. 检查资源文件的生成操作是不是Embedded resource,这个是最容易忽略的点。
  2. 核对资源文件的命名是否和视图路径完全一致,比如Views.Account.Login必须对应Views/Account/Login.cshtml,大小写也要注意。
  3. 查看页面上输出的CurrentCulture和CurrentUICulture是不是你配置的支持文化之一,比如如果当前是zh-CN,但你没加对应的资源文件,就会显示Key。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:36:02