c# - ASP.NET Core 请求本地化选项

标签 c# asp.net asp.net-mvc asp.net-core

这是我的自定义请求文化提供者,如果在 url 中没有指定文化(例如 http://example.com/ruhttp://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/

相关文章:

jquery - MVC 与 JQuery : handling Session Expire

c# - 使用 ashx 处理程序显示图像

c# - 使用 asp.net 的 SQL Server View

c# - 选择数组中具有特定字段的不同项目

javascript - asp.net 中的按钮有时不起作用

asp.net-mvc - Controller 相当于 ASP.NET MVC 中的 HttpContext.Current

.net - 覆盖 ASP.NET MVC 中的授权属性

c# - Android 单声道 : ListView Delete Items NotifyDataSet Changed

c# - 重载和覆盖问题

c# - 在 Windows 中保存临时文件的正确位置?