Существует три параметра по умолчанию RequestCultureProvider, среди которых: AcceptLanguageHeaderRequestCultureProvider, которые используют заголовки браузера для информации о культуре. Вам нужно переписать список вместо того, чтобы вставлять в него QueryStringRequestCultureProvider, удаляя таким образом AcceptLanguageHeaderRequestCultureProvider.
options =>
{
var supportedCultures = new List<CultureInfo>
{
new CultureInfo("en"),
new CultureInfo("de"),
new CultureInfo("nl"),
new CultureInfo("fr")
};
options.DefaultRequestCulture = new RequestCulture(culture: "nl", uiCulture: "nl");
options.SupportedCultures = supportedCultures;
options.SupportedUICultures = supportedCultures;
options.RequestCultureProviders = new List<IRequestCultureProvider>
{
new QueryStringRequestCultureProvider(),
new CookieRequestCultureProvider()
};
}
Для выбора культуры будет использоваться только установленный файл cookie или строка запроса? Culture = fr ...
Однако если вам нужны пользовательские правила, вам необходимо реализоватьсобственный RequestCultureProvider. Это пример:
public class UrlRequestCultureProvider : RequestCultureProvider
{
public override Task<ProviderCultureResult> DetermineProviderCultureResult(HttpContext httpContext)
{
var validCultures = new []{"en", "de", "fr", "nl"};
if (httpContext == null)
{
throw new ArgumentNullException(nameof(httpContext));
}
var culture = httpContext.Request.Path.Value
.Split("/")
.FirstOrDefault( (p) => validCultures.IndexOf(p.ToLower()) >= 0);
if (culture == null)
{
return Task.FromResult((ProviderCultureResult)null);
}
return Task.FromResult(new ProviderCultureResult(culture));
}
}