ASP.NET后端本地化资源文件未读取,仅返回键值问题求助
以下是针对你遇到的本地化消息返回键而非对应文本问题的排查和解决步骤:
1. 修正资源文件命名拼写错误
你提到资源文件存在SharedResources.ru.resx(复数后缀)和SharedResource.en.resx(单数后缀),但你的共享资源类是SharedResource(单数)。ASP.NET Core本地化系统会严格匹配资源文件名与泛型参数类的名称,必须保证完全一致。
将SharedResources.ru.resx重命名为SharedResource.ru.resx,确保所有资源文件的前缀与SharedResource类名完全相同。
2. 检查SharedResource类的配置
确保SharedResource类是空类,且命名空间与Web项目的根命名空间一致:
namespace YourWebProjectNamespace; // 替换为你的Web项目实际命名空间 public class SharedResource { }
这个类仅作为本地化器的“锚点”使用,不需要任何成员,命名空间必须正确匹配,否则资源文件无法被关联。
3. 验证资源文件的生成操作设置
右键资源文件(SharedResource.en.resx、SharedResource.ru.resx)→ 属性:
- 将生成操作设置为「嵌入式资源」
- 确保自定义工具留空(ASP.NET Core无需生成ResX对应的代码类)
4. 启用请求本地化中间件
你已在ConfigureServices中配置了RequestLocalizationOptions,但还需要在Configure方法中添加中间件,让系统识别请求的文化信息:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // 需放在UseRouting之前 var localizationOptions = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>(); app.UseRequestLocalization(localizationOptions.Value); app.UseRouting(); // ...其他中间件配置 }
该中间件会根据请求的Accept-Language头、URL查询参数等设置当前线程的文化,确保本地化器调用正确的资源文件。
5. 确认资源文件中存在对应键
打开SharedResource.en.resx和SharedResource.ru.resx,确保存在你调用的"message"键,且对应的本地化文本已正确填写。
6. 测试文化切换
可通过以下方式验证本地化是否生效:
- 在请求头中添加
Accept-Language: en或Accept-Language: ru - 或在URL中添加查询参数:
?culture=en或?culture=ru
完成以上步骤后,localizer["message"]应返回对应语言的本地化文本,而非键名。
内容的提问来源于stack exchange,提问作者Miclell

