using EnvelopeGenerator.Web.Extensions; using EnvelopeGenerator.Web.Models; using Microsoft.AspNetCore.Localization; using Microsoft.Extensions.Options; using System.Globalization; namespace EnvelopeGenerator.Web.Middleware; public class CultureMiddleware { private readonly RequestDelegate _next; private readonly MultiCulture _cultures; public CultureMiddleware(RequestDelegate next, IOptions culturesOpt) { _next = next; _cultures = culturesOpt.Value; } public async Task InvokeAsync(HttpContext context) { var cookieName = CookieRequestCultureProvider.DefaultCookieName; var cookieValue = context.Request.Cookies[cookieName]; if (!_cultures.Languages.Contains(cookieValue)) { var requestCulture = context.GetCultureByAcceptLanguage()?.Name; var culture = _cultures.GetOrDefault(requestCulture); var cultureInfo = culture.Info ?? new CultureInfo(culture.Language); context.Response.Cookies.SetCulture(culture.Language); CultureInfo.CurrentCulture = cultureInfo; CultureInfo.CurrentUICulture = cultureInfo; } await _next(context); } }