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")); })); });
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)); })); });
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With