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

.NET Core 6 Web API共享项目单语言文件本地化配置失效求解

.NET Core 6 跨项目共享本地化资源配置修正方案

问题核心

当前配置无法读取SharedLocalizationResources项目中的本地化资源,仅返回默认字符串,主要原因是资源文件命名匹配错误、资源路径配置不当,以及缺少本地化中间件启用步骤。

具体修正步骤

1. 统一资源文件命名与空类匹配

SharedResource空类是本地化资源的关联标识,资源文件需与该类名称完全一致:

  • 将Resources.resx重命名为SharedResource.resx
  • 对应本地化文件改为SharedResource.ar.resx、SharedResource.bn.resx等
  • 右键所有资源文件→属性→设置生成操作为嵌入的资源,确保资源被嵌入到SharedLocalizationResources程序集中

2. 修正本地化资源路径配置

AddLocalization的ResourcesPath应指向资源文件在共享项目中的实际文件夹(此处为Properties),而非项目名称:

// 原配置错误:options.ResourcesPath = "SharedLocalizationResources"
builder.Services.AddLocalization(options => options.ResourcesPath = "Properties");

3. 启用RequestLocalization中间件

仅配置RequestLocalizationOptions无法生效,必须在管道中启用中间件,添加到UseRouting之后、UseAuthorization之前:

var localizationOptions = app.Services.GetRequiredService<IOptions<RequestLocalizationOptions>>().Value;
app.UseRequestLocalization(localizationOptions);

4. 修正控制器依赖注入代码

原构造函数存在赋值错误,需使用私有字段存储注入的本地化实例:

private readonly IStringLocalizer<SharedResource> _sharedLocalizer;

public MyController(IStringLocalizer<SharedResource> sharedLocalizer)
{
    _sharedLocalizer = sharedLocalizer; // 修正为赋值给私有字段
}

public ActionResult<string> Version()
{
    var res = new ActionResult<string>(_sharedLocalizer["Test"]);
    return res;
}

5. 简化DataAnnotations本地化配置(可选)

由于已经使用SharedResource作为统一资源类,可简化DataAnnotationLocalizerProvider的配置:

builder.Services.AddMvc()
    .AddViewLocalization()
    .AddDataAnnotationsLocalization(options =>
    {
        options.DataAnnotationLocalizerProvider = (type, factory) 
            => factory.Create<SharedResource>();
    });

验证要点

  • 确保SharedLocalizationResources项目已被RestfulAPI项目引用
  • 测试时携带正确的Accept-Language请求头(如Accept-Language: ar)
  • 检查本地化资源文件中是否存在Test键对应的翻译值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 15:52:44