这是我的自定义请求文化提供者,如果在 url 中没有指定文化(例如 http://example.com/ru
或 http://example.com/en
).
我的想法是用用户浏览器默认的语言显示网站,所以我正在寻找一种方法来确定它并返回它而不是: return Task.FromResult(new ProviderCultureResult("en", "en"));
services.Configure<RequestLocalizationOptions>(options =>
{
var supportedCultures = new List<CultureInfo>
{
new CultureInfo("en"),
new CultureInfo("ru")
};
options.DefaultRequestCulture = new RequestCulture(culture: "en", uiCulture: "en");
options.SupportedCultures = supportedCultures;
options.SupportedUICultures = supportedCultures;
options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(context =>
{
var pathSegments = context.Request.Path.Value.Split('/');
if (pathSegments.Count() > 0)
if (supportedCultures.Select(x => x.TwoLetterISOLanguageName).Contains((pathSegments[1])))
return Task.FromResult(new ProviderCultureResult(pathSegments[1], pathSegments[1]));
return Task.FromResult(new ProviderCultureResult("en", "en"));
}));
});
最佳答案
您可以从当前的Request
获取Accept-Language
header 并设置默认语言。你的代码应该是这样的:
services.Configure<RequestLocalizationOptions>(options =>
{
//...
options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(context =>
{
//...
var userLangs = context.Request.Headers["Accept-Language"].ToString();
var firstLang = userLangs.Split(',').FirstOrDefault();
var defaultLang = string.IsNullOrEmpty(firstLang) ? "en" : firstLang;
return Task.FromResult(new ProviderCultureResult(defaultLang, defaultLang));
}));
});
关于c# - ASP.NET Core 请求本地化选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39006690/