ASP.NET Core请求本地化选项 [英] ASP.NET Core Request Localization Options

查看:123
本文介绍了ASP.NET Core请求本地化选项的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的自定义请求区域性提供程序,如果url中未指定区域性(例如, http ://sypalo.com/ru http://sypalo.com/en ). 我的想法是使用该语言在用户浏览器中默认显示网站,所以我正在寻找一种方法来确定并返回它,而不是:return Task.FromResult(new ProviderCultureResult("en","en"));

Here is my custom request culture provider which returns "en" as a default culture if no culture specified in url (for example http://sypalo.com/ru or http://sypalo.com/en). My idea to show website on that language which is default in user's browser, so I'm looking a way how to determine it and return it instead of: 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标头,并设置默认语言.您的代码应如下所示:

You can get Accept-Language header from the current Request and set default language. Your code should be something like this:

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));
   }));
});

这篇关于ASP.NET Core请求本地化选项的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆