AspNetCore2.0视图本地化失效,控制器本地化正常问题求助
排查视图本地化失效但控制器正常的问题
嘿,我注意到你遇到了视图本地化不生效但控制器本地化正常的问题,先看看你贴出来的配置代码,这里有个明显的语法错误,这很可能是问题的根源!
首先修正AddLocalization的配置错误
你现在的代码里把整个赋值语句当成字符串传给了ResourcesPath,这完全不对:
// 错误的写法 services.AddLocalization(option=>option.ResourcesPath="services.AddLocalization(options => options.ResourcesPath = "StringResources");");
正确的写法应该是直接指定资源文件夹的名称:
// 正确的写法 services.AddLocalization(options => options.ResourcesPath = "StringResources");
确保AddViewLocalization的完整配置
你贴的代码里AddViewLocalization没有写完,需要完整指定本地化格式,同时建议加上数据注解本地化(如果需要验证消息本地化的话):
services.AddMvc() // 指定视图本地化的格式,Suffix表示资源文件会以语言代码为后缀 .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix) // 开启数据注解的本地化(比如模型验证消息) .AddDataAnnotationsLocalization();
不要漏掉请求本地化中间件
很多人会忘记在Configure方法中配置请求本地化中间件,这会导致本地化无法根据请求切换语言,甚至完全不生效:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // 其他中间件配置... // 配置支持的文化 var supportedCultures = new[] { new CultureInfo("en-US"), new CultureInfo("zh-CN"), // 添加你需要支持的其他语言 }; app.UseRequestLocalization(new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture("en-US"), // 默认语言 SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures }); // 其他中间件(比如UseMvc)... }
检查资源文件的命名和位置
视图对应的资源文件需要遵循正确的命名规则和位置:
- 如果你的视图是
Views/Home/Index.cshtml,那么对应的英文资源文件应该是StringResources/Views/Home/Index.en-US.resx(或者StringResources.Views.Home.Index.en-US.resx,两种结构都支持) - 确保资源文件的生成操作设置为
嵌入的资源(右键文件 -> 属性 -> 生成操作)
视图中正确使用本地化
最后,确保在视图中注入并正确使用IViewLocalizer:
@inject IViewLocalizer Localizer <h1>@Localizer["WelcomeTitle"]</h1> <p>@Localizer["WelcomeMessage"]</p>
按照上面的步骤修正后,视图的本地化应该就能正常工作了!
内容的提问来源于stack exchange,提问作者Sajeetharan
相关产品推荐
相关产品推荐

