如何在.NET Core 2的Razor页面中获取当前区域性?
在.NET Core 2 Razor页面中获取当前区域性并配合Productise方法使用
针对你的场景,我给你整理几种在Razor页面中获取当前区域性的方案,以及如何把它集成到你的Productise扩展方法里:
1. 直接从HttpContext获取当前区域性
在Razor页面里,你可以直接通过Context对象访问当前请求的区域性信息,这是最直接的方式:
// 获取当前区域性(用于数字、日期等格式处理) var currentCulture = Context.RequestCulture.Culture; // 获取当前UI区域性(用于资源文件读取匹配) var currentUICulture = Context.RequestCulture.UICulture;
2. 使用IViewLocalizer注入获取
如果你的项目已经基于.NET Core本地化框架开发,还可以通过注入IViewLocalizer来获取当前区域性,同时它也能帮你更便捷地读取资源文件:
@* 在Razor页面顶部注入IViewLocalizer *@ @inject IViewLocalizer Localizer @{ // 从Localizer实例中获取当前UI区域性 var currentUICulture = Localizer.Culture; }
3. 把区域性集成到Productise扩展方法
接下来要把当前区域性传递给你的Productise方法,建议你重载这个方法,新增一个CultureInfo参数,这样就能在方法内部根据区域性做对应的格式化或逻辑处理:
public static string Productise(this string resourceString, string placeholderValue, CultureInfo culture) { // 示例:根据区域性格式化占位符内容(比如日期、数字的本地化格式) // 你可以根据实际业务需求替换成自己的处理逻辑 var formattedPlaceholder = string.Format(culture, placeholderValue); return resourceString.Replace("{0}", formattedPlaceholder); }
然后在Razor页面里调用时,传入当前获取到的区域性即可:
@{ Layout = "~/Views/Shared/_LayoutNotAuthorised.cshtml"; var currentCulture = Context.RequestCulture.Culture; ViewBag.Title = ApplicationName.Resources.Authentication_Login.Resources.PageTitle .Productise("http://localhost", currentCulture); }
额外注意:确保本地化中间件已正确配置
别忘了在Startup.cs里配置好本地化中间件,这样RequestCulture才能正常读取到当前请求的区域性:
// 在ConfigureServices中配置本地化选项 public void ConfigureServices(IServiceCollection services) { services.AddLocalization(options => options.ResourcesPath = "Resources"); services.Configure<RequestLocalizationOptions>(options => { var supportedCultures = new[] { new CultureInfo("en-US"), new CultureInfo("zh-CN"), // 添加你项目支持的其他区域性 }; options.DefaultRequestCulture = new RequestCulture("en-US"); options.SupportedCultures = supportedCultures; options.SupportedUICultures = supportedCultures; }); // 其他服务配置... } // 在Configure中启用请求本地化中间件(要放在UseMvc等核心中间件之前) public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseRequestLocalization(); // 其他中间件配置... app.UseMvc(); }
内容的提问来源于stack exchange,提问作者user2761804
相关产品推荐
相关产品推荐

