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

ASP.NET Core 5 MVC强制显示西班牙语页面问题求助

解决ASP.NET Core 5 MVC强制加载西班牙语资源的问题

以下是几个排查和解决的关键点,按优先级尝试:

1. 确保资源文件的访问修饰符为Public

默认情况下,.resx文件的访问修饰符是Internal,这会导致MVC无法正确访问西班牙语资源文件:

  • 右键点击x.es.resx文件 → 选择属性
  • 将自定义工具命名空间设置为你的项目命名空间(比如YourProjectName.Resources)
  • 将访问修饰符改为Public
  • 对x.en.resx做同样设置(后续要用,提前配置好)

2. 修正自定义请求文化提供者的优先级和实现

自定义提供者需要被添加到最前面,确保它优先于内置的Cookie/QueryString提供者执行,同时要保证返回的文化格式有效:

public class SpanishRequestCultureProvider : IRequestCultureProvider
{
    public Task<ProviderCultureResult> DetermineProviderCultureResult(HttpContext httpContext)
    {
        // 强制返回西班牙语文化,可指定具体区域如"es-ES"
        var result = new ProviderCultureResult("es", "es");
        return Task.FromResult(result);
    }
}

// 在ConfigureServices中配置
services.Configure<RequestLocalizationOptions>(options =>
{
    var supportedCultures = new[]
    {
        new CultureInfo("es"),
        new CultureInfo("en")
    };

    options.DefaultRequestCulture = new RequestCulture("es");
    options.SupportedCultures = supportedCultures;
    options.SupportedUICultures = supportedCultures;

    // 将自定义提供者插入到提供者列表最前端
    options.RequestCultureProviders.Insert(0, new SpanishRequestCultureProvider());
});

3. 确保在Configure中启用请求本地化

不要忘记在Startup.cs的Configure方法中添加中间件,且位置要正确:

app.UseRouting();

// 启用请求本地化,需放在路由之后、端点之前
app.UseRequestLocalization();

app.UseAuthorization();

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

4. 清理Visual Studio缓存

VS可能会缓存旧的资源文件导致配置不生效:

  • 关闭Visual Studio
  • 删除项目目录下的bin和obj文件夹
  • 重新打开项目并重新生成

5. 检查视图中的资源引用方式

确保视图中通过强类型资源类引用,避免错误的键名或硬编码:

// 正确引用示例(假设资源类名为XResources)
@XResources.YourResourceKey

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 18:54:21