本篇内容主要讲解“ASP.NET Core WebAPI如何实现本地化”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ASP.NET Core WebAPI如何实现本地化”吧!

在StartupConfigureServices 注册本地化所需要的服务AddLocalization和Configure
public void ConfigureServices(IServiceCollection services)
{
services.AddLocalization();
services.Configure(options =>
{
var supportedCultures = new List
{
new CultureInfo("en-us"),
new CultureInfo("zh-cn")
};
options.DefaultRequestCulture = new RequestCulture(culture: "en-us", uiCulture: "en-us");
options.SupportedCultures = supportedCultures;
options.SupportedUICultures = supportedCultures;
options.RequestCultureProviders = new IRequestCultureProvider[] { new RouteDataRequestCultureProvider { IndexOfCulture = 1, IndexofUiCulture = 1 } };
});
services.Configure(options =>
{
options.ConstraintMap.Add("culture", typeof(LanguageRouteConstraint));
});
services.AddControllers();
} 在Startup.cs类的Configure 方法中添加请求本地化中间件。
var localizeOptions = app.ApplicationServices.GetService>(); app.UseRequestLocalization(localizeOptions.Value);
RequestCultureProvider 它使用简单的委托来确定当前的本地化区域性,当然我们还可以通过RequestCultureProvider自定义源的请求区域信息比如说配置文件或者数据库都是可以的.或者说我们可以选用默认的一些方式让我们去获取到当前区域.
ASP.NET Core 本地化默认向我们提供了四个方式,可用于确定正在执行的请求的当前区域性:
QueryStringRequestCultureProvider
CookieRequestCultureProvider
AcceptLanguageHeaderRequestCultureProvider
CustomRequestCultureProvider
如下所示我将通过路由的方式,去确定当前区域
public class RouteDataRequestCultureProvider : RequestCultureProvider
{
public int IndexOfCulture;
public int IndexofUiCulture;
public override Task DetermineProviderCultureResult(HttpContext httpContext)
{
if (httpContext == null)
throw new ArgumentNullException(nameof(httpContext));
string uiCulture;
string culture = uiCulture = httpContext.Request.Path.Value.Split('/')[IndexOfCulture];
var providerResultCulture = new ProviderCultureResult(culture, uiCulture);
return Task.FromResult(providerResultCulture);
}
} 通过如下代码片段实现IRouteConstraint对路由做相应的约束
public class LanguageRouteConstraint : IRouteConstraint
{
public bool Match(HttpContext httpContext, IRouter route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection)
{
if (!values.ContainsKey("culture"))
return false;
var culture = values["culture"].ToString();
return culture == "en-us" || culture == "zh-cn";
}
}添加区域资源文件

注入IStringLocalizer,StringLocalizer将通过传递的共享资源(T)的值映射到资源文件,然后将本地化根据字符串的名称从资源文件返回响应的值
[Route("{culture:culture}/[controller]")]
[ApiController]
public class HomeController : ControllerBase
{
private readonly IStringLocalizer localizer;
public HomeController(IStringLocalizer localizer)
{
this.localizer = localizer;
}
public string Get()
{
return localizer["Home"];
}
} 如下图所示


到此,相信大家对“ASP.NET Core WebAPI如何实现本地化”有了更深的了解,不妨来实际操作一番吧!这里是创新互联建站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
当前文章:ASP.NETCoreWebAPI如何实现本地化-创新互联
链接URL:http://www.jxjierui.cn/article/edpip.html


咨询
建站咨询
