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

ASP.NET Core应用视图本地化咨询:基于ViewLocalizer的配置实现

ASP.NET Core 视图本地化(使用ViewLocalizer)完整实现指南

看起来你已经在Startup里搭好了基础配置,我帮你把剩下的步骤补全,确保你能顺利用上@Localizer["Teststring"]这种语法:

1. 补全Startup.cs的配置

你之前的ConfigureServices代码没写完,咱们把它补全,还要记得在Configure方法里添加本地化中间件——这一步很容易漏掉!

ConfigureServices方法完整代码

public void ConfigureServices(IServiceCollection services)
{
    // 可选:指定资源文件统一存放目录,不设置的话默认和视图同目录
    services.AddLocalization(options => options.ResourcesPath = "Resources");

    services.AddMvc()
        .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix) // 用后缀方式匹配资源文件
        .AddDataAnnotationsLocalization();

    // 配置支持的多语言文化
    services.Configure<RequestLocalizationOptions>(options =>
    {
        var supportedCultures = new[]
        {
            new CultureInfo("en"),
            new CultureInfo("zh-CN"),
            // 可按需添加更多文化,比如zh-TW、ja-JP等
        };

        // 设置默认文化+支持的文化列表
        options.DefaultRequestCulture = new RequestCulture("en");
        options.SupportedCultures = supportedCultures;
        options.SupportedUICultures = supportedCultures;

        // 配置文化切换的方式(按需选,推荐都加上)
        options.RequestCultureProviders = new List<IRequestCultureProvider>
        {
            new QueryStringRequestCultureProvider(), // 通过URL参数:?culture=zh-CN
            new CookieRequestCultureProvider(), // 通过Cookie记录用户偏好
            new AcceptLanguageHeaderRequestCultureProvider() // 读取浏览器请求头的语言设置
        };
    });
}

Configure方法添加本地化中间件

一定要把UseRequestLocalization放在Mvc相关中间件之前,否则不会生效:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // 先加其他基础中间件:异常处理、静态文件等...

    // 启用请求本地化
    var localizationOptions = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>().Value;
    app.UseRequestLocalization(localizationOptions);

    app.UseRouting();
    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
    });
}

2. 创建本地化资源文件

因为你用了LanguageViewLocationExpanderFormat.Suffix,资源文件的命名和存放位置要严格对应视图结构:

  • 共享视图(比如Views/Shared/_Layout.cshtml):资源文件放在Views/Shared目录下,命名为_Layout.en.resx(英文)、_Layout.zh-CN.resx(简体中文)
  • 控制器专属视图(比如Views/Home/Index.cshtml):资源文件放在Views/Home目录下,命名为Index.en.resx、Index.zh-CN.resx

小贴士:如果设置了ResourcesPath = "Resources",资源文件要放在项目根目录的Resources文件夹下,结构和视图目录一致,比如Resources/Views/Home/Index.en.resx

打开.resx文件后,添加键值对即可:

  • 在Index.en.resx里:Key: Teststring → Value: Hello from localization!
  • 在Index.zh-CN.resx里:Key: Teststring → Value: 来自本地化的问候!

3. 在视图中使用ViewLocalizer

在目标视图里先注入IViewLocalizer,然后直接用@Localizer["键名"]调用即可:

@inject IViewLocalizer Localizer

<h1>@Localizer["Teststring"]</h1>

4. 测试本地化效果

你可以通过以下几种方式快速切换语言:

  • 在URL后加查询参数:http://localhost:5000/Home/Index?culture=zh-CN
  • 设置Cookie:键为.AspNetCore.Culture,值为c=zh-CN|uic=zh-CN
  • 修改浏览器的默认语言,让请求头Accept-Language携带对应文化标识

常见问题排查

  • 如果本地化文本没显示,检查资源文件的生成操作是否设为Embedded resource(右键资源文件→属性→生成操作)
  • 确保资源文件的命名、路径和视图完全匹配(Linux/Mac系统大小写敏感,Windows不敏感)
  • 确认UseRequestLocalization中间件的顺序正确,必须在UseRouting之前

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:57:25