Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ASP.NET Core Request Localization Options

Tags:

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"));    })); }); 
like image 400
Sergey Sypalo Avatar asked Aug 17 '16 21:08

Sergey Sypalo


1 Answers

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));    })); }); 
like image 141
adem caglin Avatar answered Sep 20 '22 15:09

adem caglin