.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
相关产品推荐
相关产品推荐

